資源簡介
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
評論
共有 條評論