• 大小: 18KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-06
  • 语言: 其他
  • 标签: 周转时间  

资源简介

1. 多级反馈队列调度算法 编写一个控制台程序模拟多级反馈对列调度算法。设需要调度的进程情况存放在文本文件“process.text”中,如下图所示(进程情况可以自己设置) 1 0 7 2 1 8 3 2 10 4 3 4 5 4 3 6 5 2 7 6 6 8 7 5 每一行描述一个进程,包含若干个字段字段间用Tab建或空格隔开。第一个字段代表进程的编号,第二个字段代表进程到达的时间,第三个字段代表 。 队列个数和每个队列的时间片长度可以由自己设置他们的值。要求程序必须能够正确给出各个进程到达,调度,运行和完成的时序,并将相应的信息打印出来。举列如下: T=0时刻,进程1到达。。。 T=0时刻,进程1开始被调度执行。。。。 。。。。 T=1时刻,进程2到达。。。 最后,计算并打印出各个进程的周转时间和带权周转时间。

资源截图

代码片段和文件信息

package com.queue.bussess;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.linkedList;

import com.queue.vo.MyProcess;
import com.queue.vo.MyQueue;

public class MultiLevelQueue 
{
//用于存放process.text文件中列出的所有进程信息
private linkedList allProcess = new linkedList();
private ArrayList restultProcess = new ArrayList();

//用于存放所有队列信息
private ArrayList allQueue = new ArrayList();

private MyQueue queue1 = new MyQueue(32); //优先级为3,该队列的执行时间片为2
private MyQueue queue2 = new MyQueue(24); //优先级为2,该队列的执行时间片为4
private MyQueue queue3 = new MyQueue(18); //优先级为1,该队列的执行时间片为8

//当前正在被调用的进程
private MyProcess currentProcess = null;

//当前被调用进程所在的队列
private MyQueue currentQueue = null;

/**
 * 读取文件process.txt,将进程信息插入对象allProcess中
 */
private void init()
{
File processDescFile = new File(“D:\\junge\\javasoruce\\queue\\bin\\process.text“);
FileReader reader = null;
BufferedReader bufferedReader = null;
try 
{
reader = new FileReader(processDescFile);
bufferedReader = new BufferedReader(reader);

String str = null;
String[] arrayStr = null;
MyProcess process = null;
while((str = bufferedReader.readLine()) != null)
{
arrayStr = str.split(“\t“);
process = new MyProcess();
process.setId(new Integer(arrayStr[0]));
process.setArriveTime(new Integer(arrayStr[1]));
process.setServiceTime(new Integer(arrayStr[2]));
System.out.println(process);
allProcess.addLast(process);
}

catch (FileNotFoundException e) 
{
e.printStackTrace();
} catch (IOException e) 
{
e.printStackTrace();
}

this.allQueue.add(this.queue1);
this.allQueue.add(this.queue2);
this.allQueue.add(this.queue3);
}

/**
 * 一个时间片时长为1秒
 */
public void run()
{
int time = 0;
int usedTimeSlice = 0;

while (true)
{
//判断time时刻是否有进程任务到达
MyProcess addProcess = this.getArriveTimeProcess(time);
if ( null != addProcess )
{
System.out.println(“T=“ + time + “ 时刻,进程“ + addProcess.getId() + “到达...“);

//新到达的进程任务都加到第一个队列中(优先级最高的队列)
allQueue.get(0).addLast(addProcess); 
}

//当前要处理的进程从队列中获取,获取的规则是从优先级高的队列中获取,如果优先级高的队列没有进程就从次优先级的队列中获取。
if ( null == currentProcess)
{
for( int i=0;i {
currentProcess = allQueue.get(i).getFirst();
if ( null != currentProcess )
{
currentQueue = allQueue.get(i);
if ( !currentProcess.isStartBeCalled())
{
System.out.println(“T=“ + time + “ 时刻,进程“ + currentProcess.getId() + “开始被调度执行...“);
}
//做标记:该进程已经开始被调用了
currentProcess.markStart();
break;
}
}
}

//如果currentProcess为null,代表所有的进程任务都处理完了
if 

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2011-01-01 23:30  queue\
     文件         232  2011-01-01 23:30  queue\.classpath
     文件         381  2011-01-01 23:30  queue\.project
     目录           0  2011-01-02 17:51  queue\bin\
     目录           0  2011-01-02 00:51  queue\bin\com\
     目录           0  2011-01-02 01:00  queue\bin\com\queue\
     目录           0  2011-01-02 01:15  queue\bin\com\queue\bussess\
     文件        5294  2011-01-02 18:13  queue\bin\com\queue\bussess\MultiLevelQueue.class
     目录           0  2011-01-02 10:30  queue\bin\com\queue\vo\
     文件        2325  2011-01-02 18:06  queue\bin\com\queue\vo\MyProcess.class
     文件        1513  2011-01-02 17:28  queue\bin\com\queue\vo\MyQueue.class
     文件          55  2011-01-02 17:51  queue\bin\process.text
     目录           0  2011-01-02 01:15  queue\src\
     目录           0  2011-01-02 00:51  queue\src\com\
     目录           0  2011-01-02 01:00  queue\src\com\queue\
     目录           0  2011-01-02 01:15  queue\src\com\queue\bussess\
     文件        5468  2011-01-02 18:13  queue\src\com\queue\bussess\MultiLevelQueue.java
     目录           0  2011-01-02 10:30  queue\src\com\queue\vo\
     文件        2149  2011-01-02 18:06  queue\src\com\queue\vo\MyProcess.java
     文件        1433  2011-01-02 17:28  queue\src\com\queue\vo\MyQueue.java
     文件          55  2011-01-02 17:51  queue\src\process.text
     文件       41984  2011-01-02 17:57  队列.doc

评论

共有 条评论