-
大小: 2KB文件類型: .rar金幣: 2下載: 0 次發(fā)布日期: 2021-06-15
- 語言: 其他
- 標(biāo)簽: 進(jìn)程調(diào)度??
資源簡介
實(shí)驗(yàn)內(nèi)容:
編寫一個單處理機(jī)下的進(jìn)程調(diào)度程序,模擬操作系統(tǒng)對進(jìn)程的調(diào)度。
要求:
能夠創(chuàng)建指定數(shù)量的進(jìn)程,每個進(jìn)程由一個進(jìn)程控制塊表示。
實(shí)現(xiàn)先來先服務(wù)調(diào)度算法:進(jìn)程到達(dá)時間可由進(jìn)程創(chuàng)建時間表示。
實(shí)現(xiàn)短作業(yè)優(yōu)先調(diào)度算法:可指定進(jìn)程要求的運(yùn)行時間。(說明:對不可剝奪的短作業(yè)優(yōu)先算法,當(dāng)作業(yè)運(yùn)行時間相等時,優(yōu)先調(diào)度進(jìn)程號小的進(jìn)程執(zhí)行;對可剝奪式的短作業(yè)優(yōu)先算法,即選最短剩余時間的進(jìn)程進(jìn)行運(yùn)行,在剩余時間相同的情況下,選擇到達(dá)時間早的進(jìn)程進(jìn)行運(yùn)行)
實(shí)現(xiàn)時間片輪轉(zhuǎn)調(diào)度算法:可指定生成時間片大小。(說明:新進(jìn)程到來時插入到就緒隊(duì)列的隊(duì)尾,當(dāng)進(jìn)程P運(yùn)行完一個時間片時,若同時有進(jìn)程Q到達(dá),則先在就緒隊(duì)列隊(duì)尾插入新到達(dá)的進(jìn)程Q,之后再插入進(jìn)程P)
實(shí)現(xiàn)動態(tài)優(yōu)先級調(diào)度算法:可指定進(jìn)程的初始優(yōu)先級(優(yōu)先級與優(yōu)先數(shù)成反比,優(yōu)先級最高為0),優(yōu)先級改變遵循下列原則:進(jìn)程在就緒隊(duì)列中每停留一個時間片,優(yōu)先級加1,進(jìn)程每運(yùn)行一個時間片,優(yōu)先級減3。(說明:本算法在優(yōu)先級相同的情況下,選擇到達(dá)時間早的進(jìn)程進(jìn)行運(yùn)行)
測試用例格式如下:
輸入:調(diào)度算法
進(jìn)程號/到達(dá)時間/運(yùn)行時間/優(yōu)先級/時間片
輸出:調(diào)度順序/進(jìn)程號/開始運(yùn)行時間/結(jié)束運(yùn)行時間/優(yōu)先級
其中調(diào)度算法選項(xiàng)為:1----先來先服務(wù),2----短作業(yè)優(yōu)先,3----最短剩余時間優(yōu)先,4----時間片輪轉(zhuǎn),5----動態(tài)優(yōu)先級

代碼片段和文件信息
import?java.util.Random;
import?java.util.Scanner;
public?class?MultiProcess{
//主函數(shù)
public?static?void?main(String[]?arg){
Process[]?Pro;
int?ProcessNum;
Random?rand=new?Random();
Scanner?in?=?new?Scanner(System.in);
//初始化全部進(jìn)程實(shí)體
System.out.println(“請輸入要生成的進(jìn)程數(shù)目,0為隨機(jī)產(chǎn)生“);
int?choose?=?in.nextInt();
if(choose?==?0)
ProcessNum?=?rand.nextInt(7)+3;
else
ProcessNum?=?choose;
Pro?=?new?Process[ProcessNum];
Process[]?Pro1?=?new?Process[ProcessNum];
System.out.println(“創(chuàng)建了“+ProcessNum+“個進(jìn)程“);
System.out.println(“為每一個進(jìn)程賦值:1為手動0為隨機(jī)“);
choose?=?in.nextInt();
if(choose?==?0){
for(int?i?=?0;i int?a?=?rand.nextInt(20);
int?b?=?rand.nextInt(9)+1;
int?c?=?rand.nextInt(4)+1;
Pro[i]=new?Process(i?a?b?c);
Pro1[i]=new?Process(i?a?b?c);
System.out.println(“已創(chuàng)建進(jìn)程ID“+Pro[i].GetID()+“:到達(dá)時間為:“+Pro[i].GetArriveTime()+“:運(yùn)行時間為:“+Pro[i].GetRunTime()+“:優(yōu)先級為:“+Pro[i].GetPriority());
}
}
else{
for(int?i?=?0;i int?m?=i+1;
System.out.println(“請輸入進(jìn)程“+m+“的到達(dá)時間[020]、運(yùn)行時間[110]、優(yōu)先級[15]“);
int?a?=?in.nextInt();
int?b?=?in.nextInt();
int?c?=?in.nextInt();
if(a<0||a>20||b<1||b>10||c<1||c>5){
System.out.println(“輸入錯誤請重新輸入“);
i--;
continue;
}
else{
Pro[i]=new?Process(i?a?b?c);
Pro1[i]=new?Process(i?a?b?c);
}
}
for(int?i?=?0;i System.out.println(“已創(chuàng)建進(jìn)程ID“+Pro[i].GetID()+“:到達(dá)時間為:“+Pro[i].GetArriveTime()+“:運(yùn)行時間為:“+Pro[i].GetRunTime()+“:優(yōu)先級為:“+Pro[i].GetPriority());
}
//先來先服務(wù)調(diào)度
FCFS(Pro1ProcessNum);
//短作業(yè)優(yōu)先調(diào)度
copy(ProPro1ProcessNum);
SJF(Pro1ProcessNum);
//時間片輪轉(zhuǎn)調(diào)度
copy(ProPro1ProcessNum);
RR(Pro1ProcessNum);
//動態(tài)優(yōu)先級調(diào)度
copy(ProPro1ProcessNum);
DP(Pro1ProcessNum);
}
//先來先服務(wù)調(diào)度對進(jìn)程鏈按加入時間進(jìn)行排序后依次運(yùn)行
public?static?void?FCFS(Process[]?Proint?ProcessNum){
System.out.println();
System.out.println(“先來先服務(wù)調(diào)度“);
System.out.println(“-------------------------------------------------------“);
for(int?i?=?ProcessNum-1;i>0;i--){
for(int?j=0;j if(Pro[j].GetArriveTime()>Pro[j+1].GetArriveTime())
change(Projj+1);
}
if(Pro[0].GetArriveTime()>0)
System.out.println(“系統(tǒng)等待等待時間為0--“+Pro[0].GetArriveTime());
System.out.println(“當(dāng)前運(yùn)行進(jìn)程為ID“+Pro[0].GetID()+“運(yùn)行時間為“+Pro[0].GetArriveTime()+“--“+Pro[0].GetFinishTime());
for(int?i?=?1;i? if(Pro[i].GetArriveTime()<=Pro[i-1].GetFinishTime())
Pro[i].SetArriveTime(Pro[i-1].GetFinishTime());
else
System.out.println(“系統(tǒng)等待等待時間為“+Pro[i-1].GetFinishTime()+“--“+Pro[i].GetArriveTime());
Pro[i].SetFinishTime(Pro[i].GetArriveTime()+Pro[i].GetRunTime());
System.out.println(“當(dāng)前運(yùn)行進(jìn)程為ID“+Pro[i].GetID()+“運(yùn)行時間為“+Pro[i].GetArriveTime()+“--“+Pro[i].GetFinishTime());
}
}
//短作業(yè)優(yōu)先調(diào)度對進(jìn)程鏈按作業(yè)時間長短進(jìn)行排序后依次運(yùn)行
public?static?void?SJF(Process[]?Proint?ProcessNum){
System.out.println();
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????11041??2011-10-28?11:50??MultiProcess\MultiProcess.java
?????目錄??????????0??2015-12-07?12:50??MultiProcess
-----------?---------??----------?-----??----
????????????????11041????????????????????2
- 上一篇:PWM的FPGA實(shí)現(xiàn)
- 下一篇:元胞自動機(jī)模型
評論
共有 條評論