




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、.實(shí)驗名稱:動態(tài)優(yōu)先權(quán)調(diào)度過程中就緒隊列的模擬.實(shí)驗要求:采用動態(tài)優(yōu)先權(quán)的進(jìn)程調(diào)度算法,用C語言編程模擬調(diào)度過程中每個時間片內(nèi)的 就緒隊列。.實(shí)驗內(nèi)容:(1)每個進(jìn)程控制塊PCB用結(jié)構(gòu)描述,包括以下字段:進(jìn)程標(biāo)識符id進(jìn)程優(yōu)先數(shù)priority,并規(guī)定優(yōu)先數(shù)越大的進(jìn)程,具優(yōu)先權(quán)越高。進(jìn)程已占用的CPU寸間cputime進(jìn)程還需占用的CPU時間alltime ,當(dāng)進(jìn)程運(yùn)行完畢時,aiitime 變?yōu)?進(jìn)程的阻塞時間startblock,當(dāng)進(jìn)程再運(yùn)行startblock 個時間片后,進(jìn)程將進(jìn) 入阻塞狀態(tài)進(jìn)程被阻塞的時間blocktime,已阻塞的進(jìn)程再等待blocktime 個時間片后,將 轉(zhuǎn)換成
2、就緒狀態(tài)進(jìn)程狀態(tài)state隊列指針next,將PCBH卜成隊列。(2)調(diào)度前,系統(tǒng)中有五個進(jìn)程,它們的初始狀態(tài)如下:ID01234PRIORITY93830290CPUTIME00000ALLTIME33634STARTBLOCK-1-1-1-1BLOCKTIME30000STATEREADYREADYREADYREADYREADY(3)進(jìn)程在就緒隊列呆一個時間片,優(yōu)先數(shù)增加1(4)進(jìn)程每運(yùn)行一個時間片,優(yōu)先數(shù)減 3。(5)按下面格式顯示每個時間片內(nèi)就緒隊列的情況:READY_QUEUE :-id1-id24.任務(wù)分析進(jìn)程控制塊用結(jié)構(gòu)體來表示,包含它的各項屬性。建立兩個隊列:一個就緒 隊列,一
3、個阻塞隊列。創(chuàng)建一個進(jìn)程控制塊表示當(dāng)前正在運(yùn)行的進(jìn)程。程序開始 運(yùn)行時,所有進(jìn)程都在就緒隊列中。當(dāng) startblock 減少到0時,進(jìn)程進(jìn)入阻塞 隊列。在阻塞隊列中的進(jìn)程,當(dāng)blocktime減少到0時,轉(zhuǎn)入就緒隊列。在就緒 隊列中的進(jìn)程,如果優(yōu)先級比當(dāng)前正在執(zhí)行的進(jìn)程高, 就可以取代當(dāng)前進(jìn)程獲取 時間片。當(dāng)前進(jìn)程如果運(yùn)行完畢,就緒隊列中優(yōu)先級最高的進(jìn)程就可以成為新當(dāng) 前進(jìn)程。5.程序流程圖6.程序清單#include #include using namespacestd;#define LEN5/進(jìn)程最大數(shù)量typedef enum STATE/進(jìn)程狀態(tài)READY/就緒BLOCK/阻塞E
4、ND/完成STATE/定義進(jìn)程控制塊typedef struct PCBint id;/進(jìn)程標(biāo)識符int priority;/進(jìn)程優(yōu)先級int cputime;/已占用的CPU寸間int alltime;/還需占用的CPU寸間int startblock;/ 阻塞時間int blocktime;/被阻塞時間STATEstate;/ 進(jìn)程狀態(tài)PCB/定義隊列typedef struct queue int size;/隊列中進(jìn)程的數(shù)量PCbdata LEN;/進(jìn)程的指針 QueuePCBps LEN;/進(jìn)程數(shù)組PCB*cp;/當(dāng)前正在運(yùn)行的進(jìn)程QueuerQueue, bQueue; /就緒隊列
5、和阻塞隊列/就緒隊列按優(yōu)先級降序排序(使用了冒泡排序法)void rQueueSort() PCbtemp;for ( int i = 0; i rQueue.size - 1; i+) for ( int j = 0; j priority priority) temp = rQueue.dataj;rQueue.dataj = rQueue.dataj + 1;rQueue.dataj + 1 = temp; ) )/初始化void init() /給進(jìn)程賦值for ( int i = 0; i LEN i+) psi.id = i;psi.state = READYpsi.cputime
6、 = 0;psi.alltime = 3;psi.blocktime = 0;psi.startblock = -1; )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/當(dāng)前進(jìn)程賦空bQueue.size = 0;/阻塞隊列沒有進(jìn)程for ( int i = 0; i LEN i+) bQueue.data
7、i = NULL rQueue.datai = )rQueue.size = 5;/所有進(jìn)程全部進(jìn)入就緒隊列rQueueSort();/對就緒隊列排序)/打印void print() cout nRUNNING PROG: if (cp != NULL cout id;)|cout nREADY_QUEUE;for ( int i = 0; i id;)cout nBLOCK_QUEUE;for ( int i = 0; i id;)cout nendl;cout IDtt;for ( int i = 0; i LEN i+) cout psi.id t;)cout nPRIORITYt;fo
8、r ( int i = 0; i LEN i+) cout psi.priority t)cout nCPUTIMEtt;for ( int i = 0; i LEN i+) cout psi.cputime t) cout nALLTIMEtt;for ( int i = 0; i LEN i+) cout psi.alltime t) cout nSTARTBLOCKt;for ( int i = 0; i LEN i+) cout psi.startblock t)cout nBLOCKTIMEt;for ( int i = 0; i LEN i+) cout psi.blocktime
9、 t)cout nSTATEtt;for ( int i = 0; i LEN i+) if (psi.state =READ流cout READY t; else if (psi.state = BLOCKcout BLOCK t; ) else if (psi.state = END cout END t; ) )cout size 0) temp = q-data0;/取出隊首進(jìn)程for ( int i = 0; i size - 1; i+) q-datai = q-datai + 1;/ 其他進(jìn)程依次向前移動)q-size-;return temp;/返回隊首進(jìn)程) return N
10、ULL ) /入隊 void push( Queue* q, PCB* p) if ( q-size data q-size = p; /將入隊的進(jìn)程放在隊尾 q-size+;) return ; )/運(yùn)行進(jìn)程void run() if (rQueue.size 0 | bQueue.size 0) if (cp = NULL /程序一開始運(yùn)行時,從就緒隊列取出首進(jìn)程cp = pop(&rQueue);)/當(dāng)前進(jìn)程沒有結(jié)束,但優(yōu)先級比就緒隊列首進(jìn)程低if (cp-alltime 0 & cp-priority priority) push(&rQueue, cp);/將當(dāng)前進(jìn)程放入就緒隊列cp
11、 = pop(&rQueue);/就緒隊列隊首進(jìn)程成為當(dāng)前進(jìn)程)if (cp-alltime = 0) /如果當(dāng)前進(jìn)程運(yùn)行結(jié)束cp-state = END /改變進(jìn)程狀態(tài)cp = pop(&rQueue);/從就緒隊列取出新的當(dāng)前進(jìn)程)cp-priority -= 3;/修改當(dāng)前進(jìn)程的優(yōu)先級/ startblock 為0,標(biāo)志著當(dāng)前進(jìn)程要進(jìn)入阻塞狀態(tài)if (cp-startblock = 0 & cp-blocktime 0) cp-state = BLOCK/修改當(dāng)前進(jìn)程的狀態(tài)push(&bQueue, cp);/將當(dāng)前進(jìn)程加入阻塞隊列cp = pop(&rQueue);/從就緒隊列取出新的
12、當(dāng)前進(jìn)程)else if (cp-startblock 0) / 當(dāng)前進(jìn)程的 startblock 為正數(shù)時cp-startblock-;/運(yùn)行一次減一個時間片)cp-cputime+;/當(dāng)前進(jìn)程占用CPU寸間片+1if (cp-alltime 0)/當(dāng)前進(jìn)程還需運(yùn)行的時間片-1cp-alltime-;if (cp-alltime = 0) / 減到0時,修改進(jìn)程狀態(tài)cp-state = END)for ( int i = 0; i priority+;/就緒隊列中的進(jìn)程優(yōu)先級+1)for ( int i = 0; i blocktime 0) / 阻塞隊列中的進(jìn)程 blocktime-1bQ
13、ueue.datai-blocktime-;) ) /當(dāng)阻塞隊列隊首進(jìn)程 blocktime為0時 if (bQueue.size 0 & bQueue.data0-blocktime = 0) |bQueue.data0-state = READY / 修改進(jìn)程狀態(tài)push(&rQueue, pop(&bQueue);/將阻塞隊列首進(jìn)程取出,放入就緒隊列/每運(yùn)行一個時間片,就緒隊列排一次序 rQueueSort();/主函數(shù)int main() init();/初始化print();/打印進(jìn)程信息while (1) _sleep(1000);/當(dāng)兩個隊列都為空時,結(jié)束程序if (rQueue
14、.size = 0 & bQueue.size = 0) cp-state = END break;run();/運(yùn)行進(jìn)程print(); /打印進(jìn)程信息)return 0;)7.實(shí)驗過程記錄31 C:WINX)WSsyitem32cmdLExe-OXRUNNING PROG: READY_QLKT: BLOCK.QLHE?ID0124PRIORITY93830290CMJTIME000ALLTIME364STARTBLOCK2-1-1- 1-1BLOCKTIME30000STATEREADYREADYREADYREADYREADYRULING PROG: 1READY_QLEl;E :-2-
15、3-0-4 BLOCK.QLEUE:ID1PRIORITY1035CPUTLWE1ALLTIME2STARTBLOCK-.1BLOCKTIME0STATEREADYREADY11 .fll 2 3 0 6 - o343010034-1-100READY READY程序開始執(zhí)行,當(dāng)前進(jìn)程是優(yōu)先級最高的1號進(jìn)程,1號進(jìn)程的優(yōu)先級減 3、cputime+、alltime-。在就緒隊列中的進(jìn)程優(yōu)先級全部加1。m CWINDOWS5y5tFm 32cmd.eeRINGING PROG: 1READY QUEUE :-2-3-O-PLOCK_3-C-4BLOCK.Ql-ECE:3 1 舊 2 3 0 6
16、- ORJ9 112 3 0 - o E3320-10 READY-10 READYID0PRIORITY13CPUTIME0ALLTIME3BTARTBLOCK2BLOCKTIME3STATEREADY23015-10READY33303-10REiDY4404-10 READY執(zhí)行幾次之后,1號進(jìn)程執(zhí)行完畢而且優(yōu)先級也不是最高的了,所以優(yōu)先級為33的2號進(jìn)程成為當(dāng)前進(jìn)程,開始執(zhí)行。QB CWlNDOWS5y5teim 32cmd.eeRISING PROG: 2READY_QlEL:-3-0-4BLOCK QUEUE:ID0PRIORITY13CPUTIME0ALLTIME3STARTBL
17、OCK2BLOCKTIME3STATEREADYRUNNING PROG: 3READY_QCElE:-20-4BLOCK.QCElE:129230I*1ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATED 1293 0 7 OEN 4HAD o 1 o 3 2 3 R23115-10READYAI E 4 5 0 4 - 0R陽 同O 1 3 3 12 - OR2號進(jìn)程進(jìn)入2號進(jìn)程執(zhí)行一次后,優(yōu)先級由33降低到30,于是3號進(jìn)程成為當(dāng)前進(jìn)程, 就緒隊列等待。MEPROG;2:EADY_QlElE:-3-0- 4 LOCK_QIEIE:
18、30NNING PROG: 3ADY_QLR:-2-0-4OCK_QIELE:S! C.: WINDOWS. H-miZVmC etc同理,執(zhí)行一次后,3號進(jìn)程的優(yōu)先級由33降低到30, 2號進(jìn)程再次成為當(dāng)前進(jìn)程,3號進(jìn) 程進(jìn)入就緒隊列等待。這個過程會重復(fù)幾次,就不重復(fù)了。29113o15o.o323DN o E12314293130311052-1- 1 1000READYENDREADYREADY-10 READV:FEME0180323 READY12930-10END22733-10READY2630-10END-1Q READYPROG i20IDPRIORITY CPUTIMEWL
19、LTIMESTARTBLOCK BLOCKTIHE STATEEAR11DN.E2426-10READYNDEBlY D A E3號進(jìn)程執(zhí)行完畢后退出,2號進(jìn)程成為當(dāng)前進(jìn)程。 TOC o 1-5 h z 23428316210424-1-1-1000READY READY READYRUNNING PROG: 3READY QUEUE:-2-(b4BLOCK QIELE:m CWINDOWSsy5teni 32cmd.eKeRUNNING PROG: 2READY_QlrELE:-0-4BLOCK QUEUE:2號進(jìn)程執(zhí)行完畢后,0號進(jìn)程成為當(dāng)前進(jìn)程。3rl4o4o1o1*6029113oo8
20、口211IL62JI END E2 I 4 10 4 - o2186OTOENDID0PRIORITY21CPUTIME0ALLTIME3STARTBLOCK2BLOCKTIME3STATEREADYRUNNING PROG; 0READY_QCECE:-4BLOCK_QCEUE:I 29 3 D -1 D END3263 0-10 ENDID PRIORITY CPUTIME 忙LTIME STARTBLOCK BLOCKTIME STATE3 C: Wl NEIOWSK, st: f 32c mC 5xeRUNNING PROG: 0READY_QlEL:-4BLOCK QUEUE:IDP
21、RIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE015218326READY0-10END-10END30-10END4140-10READYRUNNING PROG: 4READY.QlELE:BLOCK QUEUE:-X)IDPRIORITYCPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE11ILIMJIENDELn0號進(jìn)程執(zhí)行2次后,startblock為0 了,進(jìn)入阻塞隊列,停止運(yùn)行,4號進(jìn)程開始執(zhí)行。31 選探NDOWb5y5tem32c mdjexeRUNNING PROG: 4READY QCELE:Blockjjueue:-oIDPRIORITYCPUTBiEALLTIME STARTBLOCK BLOCKTIME STATE12BLOCKI 29 3 D -1 D END21860-10END32630-10 END1122-10READVUNKING PROG 4 :EADY_QIEIE:-/O LOCK_QLELE:D PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATEO.2911N)ENDE4號進(jìn)程運(yùn)行幾次后,0號進(jìn)程的blocktime為0 了,0號進(jìn)程從阻塞隊列轉(zhuǎn)入就緒隊列E 選探:dVl ND
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 個人購車擔(dān)保借款協(xié)議
- 大自然的小偵探記觀影感悟
- 民間小額貸款合同
- 年度工作總結(jié)與明年工作計劃展望
- 影視行業(yè)電影拍攝期間意外保險協(xié)議
- 企業(yè)數(shù)字化轉(zhuǎn)型升級項目合作合同
- 石材工程承包合同
- 車輛購買與售后維修協(xié)議
- 糖果生產(chǎn)加工合同
- 汽車行業(yè)生產(chǎn)管理與質(zhì)量管控試題集
- 苗族文化小鎮(zhèn)規(guī)劃方案
- 仔豬購銷合同(豬苗購銷合同)1
- 供電公司一把手講安全
- 中國常見食物營養(yǎng)成分表
- 光伏車棚方案
- 工藝部述職報告
- 廣東中考美術(shù)知識點(diǎn)
- 臨床科室科研用藥管理制度
- 多層光柵結(jié)構(gòu)的防偽技術(shù)研究
- 《國有企業(yè)采購操作規(guī)范》【2023修訂版】
- 五年級語文下冊第五單元【教材解讀】-【單元先導(dǎo)課】
評論
0/150
提交評論