1423.處理機(jī)調(diào)度模擬程序-操作系統(tǒng)課程設(shè)計(jì)_第1頁
1423.處理機(jī)調(diào)度模擬程序-操作系統(tǒng)課程設(shè)計(jì)_第2頁
1423.處理機(jī)調(diào)度模擬程序-操作系統(tǒng)課程設(shè)計(jì)_第3頁
1423.處理機(jī)調(diào)度模擬程序-操作系統(tǒng)課程設(shè)計(jì)_第4頁
1423.處理機(jī)調(diào)度模擬程序-操作系統(tǒng)課程設(shè)計(jì)_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

.設(shè)計(jì)題目處理機(jī)調(diào)度模擬程序選擇一個(gè)調(diào)度算法,實(shí)現(xiàn)處理機(jī)調(diào)度、設(shè)計(jì)要求度算法采用最高優(yōu)先數(shù)優(yōu)先的調(diào)度算法(即把處理機(jī)分配給優(yōu)先數(shù)最高的進(jìn)程)和先來先服務(wù)算法。每個(gè)進(jìn)程有一個(gè)進(jìn)程控制塊(PCB)表示。進(jìn)程控制塊可以包含如下信息:進(jìn)程名、優(yōu)先數(shù)、到達(dá)時(shí)間、需要運(yùn)行時(shí)間、已用CPL間、進(jìn)程狀態(tài)等等。數(shù)產(chǎn)生)。進(jìn)程的到達(dá)時(shí)間為輸入進(jìn)程的時(shí)間。進(jìn)程的運(yùn)行時(shí)間以時(shí)間片為單位進(jìn)行計(jì)算。每個(gè)進(jìn)程的狀態(tài)可以是就緒W(Wait)、運(yùn)行R(Rur)、或完成F(Finish)三種狀態(tài)之一。就緒進(jìn)程獲得CP后都只能運(yùn)行一個(gè)時(shí)間片,用已占用CP時(shí)間加來表示。如果運(yùn)行一個(gè)時(shí)間片后,進(jìn)程的已占用 CP時(shí)間已達(dá)到所需要的運(yùn)行時(shí)間,則撤消該進(jìn)程,如果運(yùn)行一個(gè)時(shí)間片后進(jìn)程的已占用CP時(shí)間還未達(dá)所需要的運(yùn)行時(shí)間,也就是進(jìn)程還需要繼續(xù)運(yùn)行,此時(shí)應(yīng)將進(jìn)程的優(yōu)先數(shù)減1(即降低一級),然后把它插入就緒隊(duì)列等待CP每進(jìn)行一次調(diào)度程序都打印一次運(yùn)行進(jìn)程、就緒隊(duì)列、以及各個(gè)進(jìn)程的PCB,以便進(jìn)行檢查。重復(fù)以上過程,直到所要進(jìn)程都完成為止1?進(jìn)程調(diào)度算法包括:時(shí)間片輪轉(zhuǎn)法,短作業(yè)優(yōu)先算法,動級算法。

可選擇進(jìn)程數(shù)量本程序包括三種算法,執(zhí)行時(shí)在主界面選擇算法(可用函現(xiàn)),進(jìn)入子頁面后輸入進(jìn)程數(shù),(運(yùn)行時(shí)間,優(yōu)先數(shù)由隨機(jī)函數(shù)產(chǎn)生),執(zhí)行,顯示結(jié)果。三.設(shè)計(jì)目的在多道程序和多任務(wù)系統(tǒng)中,系統(tǒng)內(nèi)同時(shí)處于若干個(gè)。也就是說能運(yùn)行的進(jìn)程數(shù)大于處理機(jī)個(gè)數(shù)。為

21進(jìn)程占用處理機(jī)。要求學(xué)生設(shè)計(jì)一個(gè)模擬處理機(jī)調(diào)度算法,以鞏固和加深處理機(jī)調(diào)度的概念。四.設(shè)計(jì)分析1、實(shí)現(xiàn)原理首先,編寫一個(gè)進(jìn)程調(diào)度類Main_PCB,一個(gè)進(jìn)程信PCB_bloc以創(chuàng)建進(jìn)程控制塊(PCB優(yōu)先數(shù)、到達(dá)時(shí)間、需要運(yùn)行時(shí)間、已用CP時(shí)間、進(jìn)程狀態(tài)等等。 對應(yīng)成員變量是 pcb_Name;pcb_ID;intpcb_Pro;PCB_Begintime();pcb_Needtime;pcb_Spendtime;pcb_Finishtime;String pcb_Statue;成員方法是pcb_Work();可以實(shí)例化多個(gè)包含相同信息的進(jìn)程,一個(gè)線程類Work允許多個(gè)進(jìn)程共行的進(jìn)程調(diào)度創(chuàng)建各自的模擬任務(wù),由

process_Create(intProcess_ProcessNum)方法實(shí)現(xiàn)創(chuàng)建Process_ProcessNum個(gè)進(jìn)程。接著,編寫進(jìn)程調(diào)度算法(1)最高優(yōu)先數(shù)優(yōu)先的調(diào)度算法HIGH_method()理機(jī)分配給優(yōu)先數(shù)最高的進(jìn)程);(2)先來先服務(wù)算法FIFS_method()。以上,兩個(gè)方法都是Main_PC的成員方法,由Main_PC勺主調(diào)函數(shù)

main()調(diào)用call()方法進(jìn)行調(diào)用。進(jìn)程的優(yōu)先數(shù)及需要的運(yùn)行時(shí)間這里由由隨機(jī)數(shù)產(chǎn)生。進(jìn)程的到達(dá)時(shí)間為創(chuàng)建進(jìn)程的時(shí)間。進(jìn)程的運(yùn)行時(shí)間以時(shí)間片為單位進(jìn)行計(jì)算。每個(gè)進(jìn)程的狀態(tài)可以是就緒W(Wait)、運(yùn)行R(Run)、或完成F

(Finish)三種狀態(tài)之一。這里采用線程的睡眠sleep()方法實(shí)現(xiàn),最后通過進(jìn)程的開始時(shí)間、執(zhí)行時(shí)間和結(jié)束時(shí)間,觀察進(jìn)程的執(zhí)行過程。2、程序執(zhí)行過程(1)開始執(zhí)行Main_PC主調(diào)方法main();22(2)調(diào)用方法process_Create(ProcessNum)創(chuàng)建ProcessNum個(gè)進(jìn)程 一

調(diào)用call(method)方法;(a)如果method=執(zhí)行FIFS_method()創(chuàng)建進(jìn)程的個(gè)子作業(yè)線程;(b)如果method=執(zhí)行HIGH_method()法,接著執(zhí)行創(chuàng)建進(jìn)程的個(gè)子作業(yè)線程(3)輸出程序執(zhí)行的開始,和結(jié)束時(shí)間。

4Main_PCBpcb_Begintimepcb_Finishtimepcb_IDVariableprocessIDProcessNumTimePcb_QueexcuteQueueprocessNamePCB_block+main()+call()+HIGH_method()+FIFS_method()+process_Create()+printSign()5、實(shí)現(xiàn)用到的數(shù)據(jù)結(jié)構(gòu)pcb_Namepcb_Needtimepcb_Needtimepcb_Needtimepcb_Needtime+pcb_Work()根據(jù)類圖可以分析出所采用的數(shù)據(jù)結(jié)構(gòu)有:(1)隊(duì)列主要完成FIFS_method()算法,進(jìn)程的先來先服務(wù);Process。 Processl ProcessN(2)堆棧主要完成方法的調(diào)用時(shí),先調(diào)用的后執(zhí);24

FIFS_method()call()main()(3)數(shù)組采用鏈主要用來記錄進(jìn)程創(chuàng)建時(shí)的信息,為以后觀察其創(chuàng)建的初值過程和執(zhí)行結(jié)果采用鏈表數(shù)組的好處是可以實(shí)現(xiàn)數(shù)組的長度動態(tài)變化五.程序代Main_PCB如:packagePCB_con;importjava.Iang.*;importjava.Iang.Object;importjava.io.*;importjava.util.*;publicclassMain_PCB{publicstaticintvariable;25publicstaticintprocessID;publicstaticintProcessNum=5;publicstaticDateTime=newDate();publicstaticPCB_block[]Pcb_Que=newPCB_block[ProcessNum];publicstaticintexcuteQueue[]=newint[Pcb_Que.length];//publicstaticint[]sort=newint[ProcessNum];publicstaticString[]processName=newString[ProcessNum];

publicstaticint[]processld=newint[ProcessNum];publicstaticint[]processPro=newint[ProcessNum];publicstaticint[][]processBt=newint[2][ProcessNum];publicstaticint[]processSpt=newint[ProcessNum];publicstaticint[]processNt=newint[ProcessNum];publicstaticint[]processFt=newint[ProcessNum];publicstaticString[]processSta=newString[ProcessNum];publicstaticWork[]processWk=newWork[ProcessNum];//主調(diào)方法publicstaticvoidmain(String[]args){//intProcessNum=Integer.parselnt(args[0]);〃命令行輸入創(chuàng)建進(jìn)程的個(gè)數(shù);//intcallMethod=Integer.parseInt(args[0]);〃命令行輸入調(diào)用的算FIF值為或優(yōu)先級值為2;printSign();System.out.println(”創(chuàng)建的進(jìn)程數(shù)量是System.out.println();

process_Create(ProcessNum);

call(1);call(2);}//call方法staticvoidcall(intcallmeth){if(callmeth==1)FIFS_method();elseif(callmeth==2)HIGH_method();elseSystem.out.println(”沒有進(jìn)程的調(diào)度算法被執(zhí)行 }〃最高優(yōu)先數(shù)優(yōu)先調(diào)publicstaticvoidHIGH_method(){26System.out.println();System.out.println();System.out.println(”------------------------------------------------------------------------

--------System.out.println(”--------最高優(yōu)先數(shù)算法被調(diào)

--------System.out.println(”System.out.println(”------------------------------------System.out.println(”公共變量的初值是int[]sort=newint[ProcessNum];

for(inti=0;i<sort」ength;i++){sort[i]=processPro[i];

}for(inti=0;i<sort」ength;i++){inttemp;for(intj=0;j<sort.length-1;j++){if(sort[j]<sort[j+1]){temp=sort[j];sort[j]=sort[j+1];sort[j+1]=temp;}}}}System.out.println(”for(inti=0;i<sort.length;i++){System.out.println(sort[i]);}System.out.println();

System.out.println(”進(jìn)程被執(zhí)行的順序?yàn)?”);for(inti=0;i<sort.length;i++){intj=0;

while(sort[i]!=processPro[j]){if(jvprocessPro.length-1)j++;}intsleeptime=(int)(Math.random()*10000);processWk[j].workMethod(j,sleeptime);

〃processWk[i].run();System.out.println(”公共變量的當(dāng)前值是}}//先來先服務(wù)調(diào)度方27

publicstaticvoidFIFS_method(){System.out.println();

-------------------------------------);System.out.println(”

-------------------------------------);System.out.println(”---------先來先服務(wù)算法被調(diào)--------------System.out.println(”--------------------------------------System.out.println(”--------------------------------------);processID=i;-------------------------------------);System.out.println(”進(jìn)程被執(zhí)行的順序?yàn)椤?;for(inti=0;i<excuteQueue.length;i++){intj=0;while(excuteQueue[i]!=processld[j]){if(j<processId.length-1)j++;}執(zhí)行processWk[j].workMethod(j);}}〃輸出標(biāo)志staticvoidprintSign(){11********************************************”System.out.println();}

//進(jìn)程創(chuàng)建方System.out.println();Process11**************************************);System.out.println();staticvoidprocess_Create(intProcess_ProcessNum){PCB_block[]Pcb_Que=newPCB_block[Process_ProcessNum];intproID[]=newint[Pcb_Que.length];System.out.println(”----------進(jìn)程剛被創(chuàng)建是的信息如下:System.out.println();for(inti=0;i<Pcb_Que.length;i++){PCB_blockProcess=newPCB_block();

processID=i;Process.pcb_ID=10*i;Process.pcb_Pro=(int)(Math.random()*100);Process.pcb_Needtime=(int)(Math.random()*1000);28Process.pcb_Spendtime=0;Process.pcb_Begintime.minute=Time.getMinutes();Process.pcb_Begintime.secend=Time.getSeconds();Process.pcb_Statue

processName[i]=Process.pcb_Name;processPro[i]=Process.pcb_Pro;processId[i]=Process.pcb_ID;processSpt[i]=Process.pcb_Spendtime;processNt[i]=Process.pcb_Needtime;processSta[i]=Process.pcb_Statue;processWk[i]=Process.pcb_Work;processBt[0][i]=Process.pcb_Begintime.minute;processBt[1][i]=Process.pcb_Begintime.secend;

Pcb_Que[i]=Process;System.out.println(” 剛創(chuàng)建時(shí)的信息System.out.println();

System.out.println(”System.out.println(”System.out.println(”System.out.println(”System.out.println(”System.out.println(”System.out.println(”System.out.println();proID[i]=Pcb_Que[i].pcb_ID;}excuteQueue=proID;

}//被創(chuàng)建進(jìn)程的存貯數(shù)publicstaticvoidstore_ProcessInfoArray(){}}〃進(jìn)程信息類classPCB_block{30Stringpcb_Name;

intpcb_ID;intpcb_Pro;PCB_Begintimepcb_Begintime=newPCB_Begintime();intpcb_Needtime;intpcb_Spendtime;intpcb_Finishtime;Stringpcb_Statue;Workpcb_Work=newWork();}

〃進(jìn)程工作的線程classWorkextendsThread{publicvoidrun(){}publicstaticvoidmain(String[]args){intvar=0;Workp=newWork();

System.out.println();〃p.workMethod();p.workMethod(var);}voidworkMethod(){}voidworkMethod(intsletim){

try{sleep(sletim);}catch(Exceptione){System.out.println(e.toString());}}voidworkMethod(intid,intsletim){}}classPCB_Begintime{intminute;intsecend;}31

先來先服務(wù)調(diào)度方法publicstaticvoidFIFS_method(){System.out.println();System.out.println(”--------------------------------------

-------------------------------------);System.out.println(”---------先來先服務(wù)算法被調(diào)System.out.println(”---------------------------------------------------------------------------);System.out.println(”進(jìn)程被執(zhí)行的順序?yàn)椤?;for(inti=0;i<excuteQueue」ength;i++){intj=0;while(excuteQueue[i]!=processld[j]){if(j<processId」ength-1)j++;}執(zhí)行processWk[j].workMethod(j);}}//輸出標(biāo)staticvoidprintSign(){System.out.println();Process);););System.out.println(System.out.println(System.out.println();System.out.println();}Process.pcb_Work=newProMeth();

//記錄進(jìn)程的信息到數(shù)processName[i]=Process.pcb_Name;processPro[i]=Process.pcb_Pro;processId[i]=Process.pcb_ID;processSpt[i]=Process.pcb_Spendtime;processNt[i]=Process.pcb_Needtime;processSta[i]=Process.pcb_Statue;processWk[i]=Process.pcb_Work;processBt[0][i]=Process.pcb_Begintime.minute;32

processBt[1][i]=Process.pcb_Begintime.secend;Pcb_Que[i]=Process;System.out.println(” 岡U倉U建時(shí)的信System.out.println();System.out.println(”

p.workMethod(var);}voidworkMethod(){}voidworkMethod(intsletim){

try{sleep(sletim);}catch(Exceptione){System.out.println(e.toString());}}voidworkMethod(intid,intsletim){}}//時(shí)間的分和時(shí)classPCB_Begintime{

intminute;intsecend;}部分程序代碼:packagePCB_con;importjava.lang.*;

importjava.lang.Object;importjava.io.*;

importjava.util.*;publicclassMain_PCB{publicstaticintvariable;34publicstaticintprocessID;publicstaticintProcessNum=5;publicstaticDateTime=newDate();publicstaticPCB_block[]Pcb_Que=newPCB_block[ProcessNum];publicstaticintexcuteQueue[]=newint[Pcb_Que」ength];//publicstaticint[]sort=newint[ProcessNum];

//被創(chuàng)建進(jìn)程的存貯數(shù)publicstaticString[]processName=newString[ProcessNum];publicstaticint[]processld=newint[ProcessNum];publicstaticint[]processPro=newint[ProcessNum];publicstaticint[][]processBt=newint[2][ProcessNum];publicstaticint[]processSpt=newint[ProcessNum];publicstaticint[]processNt=newint[ProcessNum];

publicstaticint[]processFt=newint[ProcessNum];publicstaticString[]processSta=newString[ProcessNum];

publicstaticWork[]processWk=newWork[ProcessNum];//主調(diào)方publicstaticvoidmain(String[]args){//intProcessNum=Integer.parselnt(args[0]);〃命令行輸入創(chuàng)建進(jìn)程的個(gè)數(shù);//intcallMethod=Integer.parselnt(args[0]);〃命令行輸入調(diào)用的算法FIFS值為或優(yōu)先級值為2;printSign();System.out.println(”創(chuàng)建的進(jìn)程數(shù)量是System.out.println();

process_Create(ProcessNum);

call(1);call(2);}//call方法staticvoidcall(intcallmeth){if(callmeth==1)FIFS_method();elseif(callmeth==2)HIGH_method();elseSystem.out.println(”沒有進(jìn)程的調(diào)度算法被執(zhí)行 ??;}//最高優(yōu)先數(shù)優(yōu)先調(diào)publicstaticvoidHIGH_method(){35System.out.println();System.out.println(”-

-------System.out.println(”--------最高優(yōu)先數(shù)算法被調(diào)

-------System.out.println(”-公共變量的初值是:System.out.println(”公共變量的初值是:公共變量的初值是:int[]sort=newint[ProcessNum];for(inti=0;i<sort」ength;i++){sort[i]=processPro[i];}for(inti=0;i<sort.length;i++){inttemp;for(intj=0;j<sort.length-1;j++){if(sort[j]<sort[j+1]){temp=sort[j];sort[j]=sort[j+1];sort[j+1]=temp;

}}}System.out.println(”System.out.println(”for(inti=0;i<sort.length;i++){System.out.println(sort[i]);}System.out.println();

System.out.println(”進(jìn)程被執(zhí)行的順序?yàn)?”);for(inti=0;i<sort.length;i++){intj=0;while(sort[i]!=processPro[j]){if(jvprocessPro.length-1)j++;}processID=i;processID=i;intsleeptime=(int)(Math.random()*10000);processWk[j].workMethod(j,sleeptime);

〃processWk[i].run();System.out.println(”公共變量的當(dāng)前值是}}36進(jìn)程創(chuàng)建方法staticvoidprocess_Create(intProcess_ProcessNum){PCB_block[]Pcb_Que=newPCB_block[Process_ProcessNum];intproID[]=newint[Pcb_Que.length];System.out.println(”------------進(jìn)程剛被創(chuàng)建是的信息如下-------System.out.println();for(inti=0;i<Pcb_Que.length;i++){PCB_blockProcess=newPCB_block();processID=i;Process.pcb_ID=10*i;Process.pcb_Pro=(int)(Math.random()*100);Process.pcb_Needtime=(int)(Math.random()*1000);Process.pcb_Spendtime=0;Process.pcb_Begintime.minute=Time.getMinutes();Process.pcb_Begi

六、執(zhí)行結(jié)果和結(jié)果分析**************************************************Process**************************************************創(chuàng)建的進(jìn)程數(shù)量是:5------進(jìn)程剛被創(chuàng)建是的信息如下:-------###Process0剛創(chuàng)建時(shí)的信息PCB###Name::process0createTime::ThuDec1515:41:14CST2005ID::0 Needtime::164Pro::9Spendtime::0

currentstatus::Wait###Process1剛創(chuàng)建時(shí)的信息PCB###Name::process1createTime::ThuDec1515:41:14CST2005ID::1038Needtime::636 Pro::11 Spendtime::0 currentstatus::Wait###Process2剛創(chuàng)建時(shí)的信息PCB###Name::process2createTime::ThuDec1515:41:14CST2005ID::20 Needtime::319Pro::53Spendtime::0currentstatus::Wait

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論