操作系統實驗-動態優先級進程調度實驗報告_第1頁
操作系統實驗-動態優先級進程調度實驗報告_第2頁
操作系統實驗-動態優先級進程調度實驗報告_第3頁
操作系統實驗-動態優先級進程調度實驗報告_第4頁
操作系統實驗-動態優先級進程調度實驗報告_第5頁
已閱讀5頁,還剩9頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、1.實驗名稱:動態優先權調度過程中就緒隊列的模擬2.實驗要求:采用動態優先權的進程調度算法,用C語言編程模擬調度過程中每個時間片內的就緒隊列。3.實驗內容:(1)每個進程控制塊PCB用結構描述,包括以下字段:*進程標識符id*進程優先數priority,并規定優先數越大的進程,其優先權越高。*進程已占用的CPU時間cputime*進程還需占用的CPU時間alltime,當進程運行完畢時,aiitime變為0*進程的阻塞時間startblock,當進程再運行startblock個時間片后,進程將進入阻塞狀態*進程被阻塞的時間blocktime,已阻塞的進程再等待blocktime個時間片后,將轉

2、換成就緒狀態*進程狀態state*隊列指針next,將PCB排成隊列。2)調度前,系統中有五個進程,它們的初始狀態如下:ID01234PRIORITY93830290CPUTIME00000ALLTIME33634STARTBLOCK2-1-1-1-1BLOCKTIME30000STATEREADYREADYREADYREADYREADY3)進程在就緒隊列呆一個時間片,優先數增加1。4)進程每運行一個時間片,優先數減3。5)按下面格式顯示每個時間片內就緒隊列的情況:READY_QUEUE:-id1-id24.任務分析進程控制塊用結構體來表示,包含它的各項屬性。建立兩個隊列:一個就緒隊列,一個阻

3、塞隊列。創建一個進程控制塊表示當前正在運行的進程。程序開始運行時,所有進程都在就緒隊列中。當startblock減少到0時,進程進入阻塞隊列。在阻塞隊列中的進程,當blocktime減少到0時,轉入就緒隊列。在就緒隊列中的進程,如果優先級比當前正在執行的進程高,就可以取代當前進程獲取時間片。當前進程如果運行完畢,就緒隊列中優先級最高的進程就可以成為新當前進程。5.程序流程圖程序清單#includeiostream#includestringusingnamespacestd;#defineLEN5typedefenumSTATEREADYBLOCKENDSTATE;/定義進程控制塊typede

4、fstructPCBintid;intpriority;intcputime;intalltime;intstartblock;intblocktime;STATEstate;PCB;/定義隊列typedefstructqueueintsize;PCB*dataLEN;Queue;PCBpsLEN;PCB*cp;/進程最大數量/進程狀態/就緒/阻塞/完成/進程標識符/進程優先級/已占用的CPU時間/還需占用的CPU時間/阻塞時間/被阻塞時間/進程狀態/隊列中進程的數量/進程的指針/進程數組/當前正在運行的進程QueuerQueue,bQueue;/就緒隊列和阻塞隊列/就緒隊列按優先級降序排序(

5、使用了冒泡排序法)voidrQueueSort()PCB*temp;for(inti=0;irQueue.size-1;i+)for(intj=0;jrQueue.size-1-i;j+)if(rQueue.dataj-priorityrQueue.dataj+1-priority)temp=rQueue.dataj;rQueue.dataj=rQueue.dataj+1;rQueue.dataj+1=temp;/初始化voidinit()/給進程賦值for(inti=0;iLEN;i+)psi.id=i;psi.state=READY;psi.cputime=0;psi.alltime=3;

6、psi.blocktime=0;psi.startblock=T;ps0.priority=9;ps1.priority=38;ps2.priority=30;ps3.priority=29;ps4.priority=0;ps2.alltime=6;ps4.alltime=4;ps0.startblock=2;ps0.blocktime=3;cp=NULL;/當前進程賦空bQueue.size=0;/阻塞隊列沒有進程for(inti=0;iLEN;i+)bQueue.datai=NULL;rQueue.datai=rQueue.size=5;/所有進程全部進入就緒隊列rQueueSort();

7、/對就緒隊列排序/打印voidprint()coutid;coutnREADY_QUEUE:;for(inti=0;irQueue.size;i+)cout-rQueue.datai-id;coutnBLOCK_QUEUE:;for(inti=0;ibQueue.size;i+)cout-bQueue.datai-id;coutnendl;coutIDtt;for(inti=0;iLEN;i+)coutpsi.idt;coutnPRI0RITYt;for(inti=0;iLEN;i+)coutpsi.priorityt;coutnCPUTIMEtt;for(inti=0;iLEN;i+)cou

8、tpsi.cputimet;coutnALLTIMEtt;for(inti=0;iLEN;i+)coutpsi.alltimet;coutnSTARTBLOCKt;for(inti=0;iLEN;i+)coutpsi.startblockt;coutnBLOCKTIMEt;for(inti=0;iLEN;i+)coutpsi.blocktimet;coutnSTATEtt;for(inti=0;iLEN;i+)if(psi.state=READY)coutREADYt;elseif(psi.state=BLOCK)coutBLOCKt;elseif(psi.state=END)coutEND0

9、)temp=q-data0;/取出隊首進程for(inti=0;isize一;returntemp;/返回隊首進程returnNULL;/入隊voidpush(Queue*q,PCB*p)if(q-sizedataq-size=p;/將入隊的進程放在隊尾q_size+;return;/運行進程voidrun()if(rQueue.size0|bQueue.size0)if(cp=NULL)/程序一開始運行時,從就緒隊列取出首進程cp=pop(&rQueue);/當前進程沒有結束,但優先級比就緒隊列首進程低if(cp_alltime0&cp_prioritystate=END;cp=pop(&r

10、Queue);/如果當前進程運行結束/改變進程狀態/從就緒隊列取出新的當前進程cppriority-=3;/修改當前進程的優先級/將當前進程放入就緒隊列/就緒隊列隊首進程成為當前進程/startblock為0,標志著當前進程要進入阻塞狀態if(cpstartblock=0&cpblocktime0)cpstate=BLOCK;push(&bQueue,cp);cp=pop(&rQueue);elseif(cpstartblock0)cpstartblock一;/修改當前進程的狀態/將當前進程加入阻塞隊列/從就緒隊列取出新的當前進程/當前進程的startblock為正數時/運行一次減一個時間片c

11、pcputime+;/當前進程占用CPU時間片+1if(cpalltime0)/當前進程還需運行的時間片-1cpalltime;if(cpalltime=0)/減到0時,修改進程狀態cpstate=END;/每運行一個時間片/就緒隊列中的進程優先級+1/每運行一個時間片/阻塞隊列中的進程blocktime-1for(inti=0;irQueue.size;i+)rQueue.datai-priority+;for(inti=0;i0)bQueue.datai-blocktime-;/當阻塞隊列隊首進程blocktime為0時if(bQueue.size0&bQueue.data0-blockt

12、ime=0)bQueue.data0-state=READY;/修改進程狀態push(&rQueue,pop(&bQueue);/將阻塞隊列首進程取出,放入就緒隊列/每運行一個時間片,就緒隊列排一次序rQueueSort();/主函數intmain()init();/初始化print();/打印進程信息while(1)_sleep(1000);if(rQueue.size=0&bQueue.size=0)/當兩個隊列都為空時,結束程序cp-state=END;break;run();/運行進程print();/打印進程信息return0;實驗過程記錄IGPROG:1QLiEUE:-2-3-0-

13、4亂EUE:m匸:WINDaWSsystem32cmd.exeNGPROG:r_QUEUE:-l-.2-3-0-4x33003TQlx630o程序開始執行,當前進程是優先級最高的1號進程,1號進程的優先級減3、cputime+、0go323READY13803-L0READYDYEAoR2903-10READY-10READY0100323READY13512-10READY4L04-10READYalltime-。在就緒隊列中的進程優先級全部加1。CWINDOWSy5tem32crrdjExeXRUNNINGPROG:1READYQLELE:-2-3-0-4BLOCKQLELE:D0L234

14、PRIORITYL22933323CPUTIME03000rLLTIME30634STARTBLOCK2-1-1-1-1BLOCKTIME30000STATEREADYENDREADYREADYREADYRUNNING-PROG:2READY_QVELE:-3-0-4BLOd_QUEUE:D0L3PRIORITY13293033fcPUTIME030ALLTIME303STARTBLQCK2-1-1-1-1BLOCKTIME30000pATEREADYENDREADYREADYREADY執行幾次之后,1號進程執行完畢而且優先級也不是最高的了,所以優先級為33的2號進程成為當前進程,開始執行。Q

15、ICAWINDOWS5ystem32cmdjeKe-XRUNNINGPROG:2READYQUEUE:-3-0-4BLOCKQLELE:D0L3PRIORITY13293033pPUTIME030kLLTIME303STARTBLOCK2-1-1-1-1BLOCKTIME30000STATEREADYENDREADYREADYREADYRUNNINGPROG:3READYQUElE:-2-0-4BLOCK_QUEUE:ID0123PRIORITY14293130fcPUTIME0311ALLTIME3052STARTBLQCK2-1-1-1-1BLOCKTIME30000RATEREADYEN

16、DREADYREADYREADY2號進程執行一次后,優先級由33降低到30,于是3號進程成為當前進程,2號進程進入就緒隊列等待。BlCAWINDOWS5y5tem32cmd.exeXRUNNINGPROG:3READYQUEUE:-2-0-4BLOCKQUEUE:AD0L23PRIORITY14293130CPUTIME0311Rlltime3052STARTBLOCK2-1-1-1-1BLjOCKTIME30000STATEREADYRUNNINGPROG:2READYQl:El:E:-3-0-4BLOCKQUEUE:ENDREADYREADYREADYID0L234PRIORITY1529

17、28316fPUTME03210LLTIME30424STARTBLOCK2-1-1-1-1BLOCKTIME30000CTATEREADYENDREADYREADYREADY同理,執行一次后,3號進程的優先級由33降低到30,2號進程再次成為當前進程,3號進程進入就緒隊列等待。這個過程會重復幾次,就不重復了。mCAWINDOWS55tem32cmd.e3ce-XRUNNINGPROG:3READYQUEUE:-2-0-4BLOCKQLELE:ID0123PRIORITYL8292726fPUTME0333ALLTIME3030STARTBLOCK2-1-1-1-1ELOCKTIME30000

18、RATEREADYENDREADYENDREADYKUNNING-PROG:2READY_QLELE:-0-4BLOCK_QUEUE:D0L234PRIORITY1929242610fPUTME03430LLTIME30204STARTBLOCK2-1-1-1-1BLOCKTIME30000CTATEREADYENDREADYENDREADY3號進程執行完畢后退出,2號進程成為當前進程。EHAWINDOWS5y5tem32cmd.eMe-XRUNNINGPROG:2READY_QLELE:-0-4BbOCK.QUEUE:D0L234PRIORITY2129182612CPUTIME03630R

19、lltime30004STARTBLOCK2-1-1-1-1BLjOCKTIME30000STATEREADYENDENDENDREADYRUNNINGPROG:0READYQUEUE:-4BLOCK_QUEUE:ID0L234PRIORITY1829182613pUTIMEL3e30LLTIME20004STARTBLOCK1-1-1-1-1BLQCKTIME30000CTATEREADYENDENDENDREADY2號進程執行完畢后,0號進程成為當前進程。mCAWINDOWSsystem32cmd.exe一XRUNNINGPROG:0READYQUEUE:-4BLOCKQVELE:ID01

20、234IPRIORITY1529182614pUTIME23630Rlltime10004STARTBLOCK0-1-1-1-1BbOCKTIME30000CTATEREADYENDENDENDREADYRUNNINGPROG:4READYQUEUE:N.OCK,QLELE:-XOD0L34PRIORITY1229182614CPUTIME2331Rlltime1003STARTBLOCK0-1-1-1-1BbOCKTIME20000RATEBLOCKENDENDENDREADY0號進程執行2次后,startblock為0了,進入阻塞隊列,停止運行,4號進程開始執行。1i5CAWINDOWSy

21、5tem32cmdjeiOID0L3PRIORITY1229182611CPUTIME233RlltimeL00fSTARTBLOCK0-1-1-I-1BLjOCKTIMEL0000STATEBLOCKENDENDENDREADYRUNNINGPROG:4READYQUEUE:-QBLOCK.QVEIE:ID0L234PRIORITYL22918268fPUTME23633ALLTIMEL0001STARTBLOCK0-1-1-1-1BLOCKTIME00000CTATEREADYENDENDENDREADY4號進程運行幾次后,0號進程的blocktime為0了,0號進程從阻塞隊列轉入就緒隊列mj&tSCzVWINDOWSVsystemJZXcmd.ese-XRUNNINGPROG:4READYQUEUE

溫馨提示

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

評論

0/150

提交評論