版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、使用動(dòng)態(tài)優(yōu)先權(quán)的進(jìn)程調(diào)度算法的模擬試驗(yàn)1.試驗(yàn)?zāi)康耐ㄟ^(guò)動(dòng)態(tài)優(yōu)先權(quán)算法的模擬加深對(duì)進(jìn)程概念和進(jìn)程調(diào)度過(guò)程的懂得;2.試驗(yàn)內(nèi)容(1)用 c語(yǔ)言實(shí)現(xiàn)對(duì)n 個(gè)進(jìn)程采納動(dòng)態(tài)優(yōu)先權(quán)優(yōu)先算法的進(jìn)程調(diào)度;(2)每個(gè)用來(lái)標(biāo)識(shí)進(jìn)程的進(jìn)程掌握塊pcb用結(jié)構(gòu)來(lái)描述,包括以下字段: 進(jìn)程標(biāo)識(shí)數(shù);進(jìn)程優(yōu)先數(shù)priority ,并規(guī)定優(yōu)先數(shù)越大的進(jìn)程,其優(yōu)先權(quán)越高;進(jìn)程已占用的cpu時(shí)間 cputime ;進(jìn)程仍需占用的cpu 時(shí)間 alltime ,當(dāng)進(jìn)程運(yùn)行完畢時(shí),alltime 變?yōu)?0 ;進(jìn)程的堵塞時(shí)間startblock ,表示當(dāng)進(jìn)程再運(yùn)行startblock 個(gè)時(shí)間片后, 進(jìn)程將進(jìn)入堵塞狀態(tài);進(jìn)程被堵塞的時(shí)間b
2、licktime ,表示已堵塞的進(jìn)程再等待blocktime 個(gè)時(shí)間片后,將轉(zhuǎn)換為就緒態(tài);進(jìn)程狀態(tài) state ;隊(duì)列指針 next ,用來(lái)將 pcb排成隊(duì)列;(3)優(yōu)先數(shù)轉(zhuǎn)變的原就:進(jìn)程在就緒隊(duì)列中呆一個(gè)時(shí)間片,優(yōu)先數(shù)增加1.進(jìn)程每運(yùn)行一個(gè)時(shí)間片,優(yōu)先數(shù)減3;(4)假設(shè)在調(diào)度前,系統(tǒng)中有5 個(gè)進(jìn)程,它們得初始狀態(tài)如下:id01234priority93830290cputime00000alltime33634startblock2-1-1-1-1blocktime30000statereadyreadyreadyreadyready(5)為了清晰地觀看諸進(jìn)程的調(diào)度過(guò)程,程序應(yīng)將每個(gè)時(shí)間片內(nèi)
3、的進(jìn)程的情形顯示出來(lái), 參照的詳細(xì)格式如下:running prog: iready_queu:e ->id1->id2block_queue: ->id3->id4=id01234prioritycputimep0c0p1c1p2c3p3c4p4c5alltimea0a1a2a3a4startblockt0t1t2t3t4blocktimeb0b1b2b3b4states0s1s2s3s4開(kāi)頭創(chuàng)建就緒隊(duì)列3.過(guò)程(流程圖)否alltime>0是就緒執(zhí)行顯示狀態(tài)轉(zhuǎn)變優(yōu)先數(shù)p.alltime-1 p.cuptime+1是p.alltime=0否p.startbloc
4、k>0p.startblock-1否否p.startblock=0是是執(zhí)行堵塞執(zhí)行就緒是blk=null否p.blocktime-1否p.blocktime =0是堵塞就緒終止4.代碼#include <stdio.h>#include <stdlib.h>#include <string.h> typedef struct nodeint id;/ 進(jìn)程標(biāo)識(shí)數(shù)int priority;/ 進(jìn)程優(yōu)先數(shù),優(yōu)先數(shù)越大優(yōu)先級(jí)越高int cputime;/ 進(jìn)程已占用的cpu 時(shí)間int alltime;/ 進(jìn)程仍需占用的cpu時(shí)間int startblock
5、;/ 進(jìn)程的堵塞時(shí)間int blocktime;/ 進(jìn)程被堵塞的時(shí)間char state10;/ 進(jìn)程狀態(tài)struct node *next;/ 隊(duì)列指針pcb;pcb *creatqueueint num/ 創(chuàng)建一個(gè)就緒隊(duì)列int i;/i 為循環(huán)計(jì)數(shù)器pcb *head, *temp1, *temp2, *temp3;/head為就緒隊(duì)列的頭指針,temp1 為創(chuàng)建進(jìn)程結(jié)點(diǎn)的指針,temp2 、temp3 分別為比較結(jié)點(diǎn)的前驅(qū)結(jié)點(diǎn)和比較結(jié)點(diǎn)fori=0;i<num;i+/ 依據(jù)進(jìn)程的個(gè)數(shù)創(chuàng)建結(jié)點(diǎn)并按從大到小的次序進(jìn)行排序temp1=pcb *mallocsizeofpcb; prin
6、tf" 輸入第 %d 個(gè)進(jìn)程的 idstaten",i;scanf"%d%d%d%d%d%d%s",&temp1->id,&temp1->priority,&temp1->cputime,&temp1->all time,&temp1->startblock,&temp1->blocktime,temp1->state;ifi=0/ 假如創(chuàng)建的是第一個(gè)結(jié)點(diǎn)head=temp1;head->next=null; continue;ifhead->prior
7、ity< temp1->priority/ 假如創(chuàng)建結(jié)點(diǎn)中所儲(chǔ)存的數(shù)比頭結(jié)點(diǎn)所儲(chǔ)存的數(shù)要大,就直接把該結(jié)點(diǎn)插入到頭結(jié)點(diǎn)之前temp1->next=head; head=temp1; continue;temp2=head;/temp2為比較結(jié)點(diǎn)的直接前驅(qū)結(jié)點(diǎn)temp3=temp2->next;/temp3為比較的結(jié)點(diǎn)whiletemp3.=null && temp3->priority>=temp1->priority/ 實(shí)現(xiàn)查找的功能temp2=temp3; temp3=temp2->next;temp2->next=te
8、mp1; temp1->next=temp3;return head;pcb *insertqueuepcb *head,pcb *run/ 在就緒隊(duì)列中插入一個(gè)結(jié)點(diǎn)pcb *temp1,*temp2;/temp1和 temp2 分別為比較結(jié)點(diǎn)的前驅(qū)和比較結(jié)點(diǎn)ifhead=null/ 假如就緒隊(duì)列為空head=run;head->next=null;else ifhead->priority < run->priority/ 假如插入結(jié)點(diǎn)中所儲(chǔ)存的數(shù)比頭結(jié)點(diǎn)所儲(chǔ)存的數(shù)要大,就直接把該結(jié)點(diǎn)插入到頭結(jié)點(diǎn)之前elserun->next=head; head=run
9、;temp1=head;/temp1為比較結(jié)點(diǎn)的直接前驅(qū)結(jié)點(diǎn)temp2=temp1->next;/temp2為比較的結(jié)點(diǎn)whiletemp2.=null && temp2->priority>=run->priority/ 實(shí)現(xiàn)查找的功能temp1=temp2; temp2=temp1->next;temp1->next=run; run->next=temp2;return head;mainint num;/num為進(jìn)程的個(gè)數(shù)int alltime=0;/ 用來(lái)儲(chǔ)存全部進(jìn)程需要占用的cpu時(shí)間pcb *head;/head 為就緒隊(duì)
10、列的頭指針pcb *run=null;/run為執(zhí)行進(jìn)程結(jié)點(diǎn)的指針 pcb *block=null;/block 為堵塞進(jìn)程的結(jié)點(diǎn) pcb *temp;printf" 請(qǐng)輸入進(jìn)程的個(gè)數(shù):" scanf"%d",# head=creatqueuenum; getchar;temp=head; whiletemp.=nullalltime+=temp->alltime; temp=temp->next;whilealltime > 0ifhead.=nullrun=head;/ 把就緒隊(duì)列中的第一個(gè)進(jìn)程取出來(lái)執(zhí)行 head=
11、head->next;/ 就緒隊(duì)列的頭指針指向下一個(gè)結(jié)點(diǎn) strcpyrun->state,"run"/ 狀態(tài)改為執(zhí)行run->next=null;/* 顯示狀態(tài) */printf"running prog:%dn",run->id;/ 顯示執(zhí)行進(jìn)程printf"ready_queue:"/ 顯示就緒進(jìn)程temp=head; whiletemp.=nullprintf"->%d",temp->id; temp=temp->next;printf"n"pr
12、intf"block_queue:"/ 顯示堵塞進(jìn)程ifblock.=nullprintf"%d",block->id;printf"n"printf"=n"printf"id priority cputime alltimestartblockblocktimestaten"printf"%d%d%d%d%d%d%sn",run->id,run->priority,run->cputime,run->alltime,run->startb
13、lock,run->blocktime,run->state;temp=head; whiletemp.=nullprintf"%d%d%d%d%d%d%sn",temp->id,temp->priority,temp->cputime,temp->alltime,temp->startblock,temp->block time,temp->state;temp=temp->next;ifblock.=nullprintf"%d%d%d%d%d%d%s",block->id,block-
14、>priority,block->cputime,block->alltime,block->startblock,block->blockti me,block->state;printf"n" printf"=n"/* 顯示狀態(tài) */* 轉(zhuǎn)變優(yōu)先數(shù) */run->priority-=3;/ 執(zhí)行進(jìn)程的優(yōu)先數(shù)減3 temp=head;whiletemp.=null/ 就緒進(jìn)程的優(yōu)先數(shù)加1temp->priority+=1; temp=temp->next;/* 轉(zhuǎn)變優(yōu)先數(shù) */* 轉(zhuǎn)變執(zhí)行進(jìn)程的有關(guān)
15、參數(shù)*/run->cputime+=1;/ 執(zhí)行進(jìn)程的已占用cpu 時(shí)間加 1 run->alltime-=1;/ 仍需要的cpu時(shí)間減 1ifrun->alltime.=0ifrun->startblock > 0/ 假如該進(jìn)程會(huì)被堵塞run->startblock-=1;/ 執(zhí)行完一個(gè)時(shí)間片后, 開(kāi)頭堵塞的時(shí)間減1ifrun->startblock=0/ 假如堵塞的時(shí)間到了block=run;/ 執(zhí)行轉(zhuǎn)堵塞strcpyblock->state,"b"/ 狀態(tài)轉(zhuǎn)堵塞alltime-; printf"n"c
16、ontinue;strcpyrun->state,"r"/ 狀態(tài)轉(zhuǎn)就緒head=insertqueuehead,run;/ 執(zhí)行轉(zhuǎn)就緒run=null;else/* 轉(zhuǎn)變執(zhí)行進(jìn)程的有關(guān)參數(shù)*/ alltime-;/* 顯示狀態(tài) */printf"running prog:n"/ 顯示執(zhí)行進(jìn)程 printf"ready_queue:n"/ 顯示就緒進(jìn)程 printf"block_queue:"/ 顯示堵塞進(jìn)程ifblock.=nullprintf"%d",block->id;print
17、f"n"printf"=n"printf"id priority cputime alltimestartblockblocktimestaten"ifblock.=nullprintf"%d%d%d%d%d%d%s",block->id,block->priority,block->cputime,block->alltime,block->startblock,block->blockti me,block->state;printf"n"print
18、f"=n"/* 顯示狀態(tài) */* 轉(zhuǎn)變堵塞進(jìn)程的有關(guān)參數(shù)*/ifblock.=null/ 假如有堵塞進(jìn)程block->blocktime-=1;/ 被堵塞的時(shí)間減1 ifblock->blocktime=0 /假如被堵塞的時(shí)間到了strcpyblock->state,"r"/ 狀態(tài)轉(zhuǎn)就緒head=insertqueuehead,block;/ 堵塞轉(zhuǎn)就緒 block=null;/* 轉(zhuǎn)變堵塞進(jìn)程的有關(guān)參數(shù)*/getchar;5.運(yùn)行結(jié)果輸入 5 個(gè)進(jìn)程,分別是0 4 進(jìn)程,運(yùn)行結(jié)果可以看到第一次運(yùn)行進(jìn)程1,優(yōu)先數(shù)為38; 其次次運(yùn)行的進(jìn)
19、程是進(jìn)程1,優(yōu)先數(shù)為35,cpu 時(shí)間占用為1,進(jìn)程所需時(shí)間為2, 同時(shí)下一個(gè)進(jìn)程(進(jìn)程1)的優(yōu)先數(shù) +1;第三次運(yùn)行進(jìn)程2,優(yōu)先數(shù)32, cpu 占用時(shí)間將 +1,所需時(shí)間將-1;同時(shí)下一個(gè)進(jìn)程(進(jìn)程1)優(yōu)先數(shù) +1,;第四次運(yùn)行進(jìn)程1,優(yōu)先數(shù)33, cpu 占用時(shí)間2+1,所需時(shí)間將-1;同時(shí)下一個(gè)進(jìn)程(進(jìn)程3)優(yōu)先數(shù) +1,第四次運(yùn)行進(jìn)程1 完畢,所需時(shí)間為0;進(jìn)程 1 運(yùn)行完畢;第五次運(yùn)行進(jìn)程3,優(yōu)先數(shù)33, cpu 占用時(shí)間0 將+1,所需時(shí)間3 將-1;同時(shí)下一個(gè)進(jìn)程(進(jìn)程2)優(yōu)先數(shù) +1;第六次運(yùn)行進(jìn)程2,優(yōu)先數(shù)31 將-3, cpu 占用時(shí)間1 將 +1,所需時(shí)間5 將-1;同
20、時(shí)下一個(gè)進(jìn)程(進(jìn)程3)優(yōu)先數(shù) +1;第七次運(yùn)行進(jìn)程3,優(yōu)先數(shù)31 將-3, cpu 占用時(shí)間1 將 +1,所需時(shí)間2 將-1;同時(shí)下一個(gè)進(jìn)程(進(jìn)程2)優(yōu)先數(shù) +1;第八次運(yùn)行進(jìn)程2,優(yōu)先數(shù)29 將-3, cpu 占用時(shí)間同時(shí)下一個(gè)進(jìn)程(進(jìn)程3)優(yōu)先數(shù) +1;2 將 +1,所需時(shí)間4 將-1;第九次運(yùn)行進(jìn)程3,優(yōu)先數(shù)29 將-3, cpu 占用時(shí)間2 將 +1,所需時(shí)間1 將-1;同時(shí)下一個(gè)進(jìn)程(進(jìn)程2)優(yōu)先數(shù) +1;第九次運(yùn)行完畢,進(jìn)程3 的所需時(shí)間為0,進(jìn)程 3 運(yùn)行完畢;第十次運(yùn)行進(jìn)程2,優(yōu)先數(shù)27 將 -3, cpu 占用時(shí)間3 將+1,所需時(shí)間3 將-1;同時(shí)下一個(gè)進(jìn)程(進(jìn)程0)優(yōu)先數(shù)
21、 +1;第十一次運(yùn)行進(jìn)程2,優(yōu)先數(shù) 24 將-3, cpu 占用時(shí)間4 將+1,所需時(shí)間2 將-1;同時(shí)下一個(gè)進(jìn)程(進(jìn)程0)優(yōu)先數(shù) +1;第十二次運(yùn)行進(jìn)程2,優(yōu)先數(shù) 21 將-3, cpu 占用時(shí)間5 將+1,所需時(shí)間1 將-1;同時(shí)下一個(gè)進(jìn)程(進(jìn)程0)優(yōu)先數(shù) +1;第十二次運(yùn)行完畢,進(jìn)程2 所需時(shí)間為0,進(jìn)程 2 運(yùn)行完畢;第十三次運(yùn)行進(jìn)程0,優(yōu)先數(shù) 21 將-3, cpu 占用時(shí)間0 將+1,所需時(shí)間3 將-1;同時(shí)下一個(gè)進(jìn)程(進(jìn)程4)優(yōu)先數(shù) +1;第十四次運(yùn)行進(jìn)程0,優(yōu)先數(shù) 18 將-3, cpu 占用時(shí)間1 將+1,所需時(shí)間2 將-1;同時(shí)下一個(gè)進(jìn)程(進(jìn)程4)優(yōu)先數(shù) +1;第十五次運(yùn)行進(jìn)程4,優(yōu)先數(shù) 14 將-3, cpu 占用時(shí)間0 將+1,所需時(shí)間4 將-1;同時(shí)下一個(gè)進(jìn)程(進(jìn)程0)優(yōu)先數(shù) +1;第十六次運(yùn)行進(jìn)程4,優(yōu)先數(shù) 11 將-3, cpu 占用時(shí)間1 將+1,所需時(shí)間3 將-1;同時(shí)下一個(gè)進(jìn)程(進(jìn)程0)優(yōu)先數(shù) +1;第十七次運(yùn)行進(jìn)程4,優(yōu)先數(shù) 8 將-3, cpu 占用時(shí)間2 將+1,所需時(shí)間2 將-1;同時(shí)下一個(gè)進(jìn)程(進(jìn)程0)優(yōu)先數(shù) +1;第十八次運(yùn)行進(jìn)程0,優(yōu)先數(shù) 15 將-3, cpu 占用時(shí)間2 將+1,所需時(shí)間1 將-1;同時(shí)下一個(gè)進(jìn)程(進(jìn)程4)優(yōu)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版車輛貸款保證合同規(guī)范樣本2篇
- 2024科技創(chuàng)新項(xiàng)目前期咨詢服務(wù)協(xié)議版
- 2024版權(quán)授權(quán)協(xié)議書(shū)范本
- 武漢警官職業(yè)學(xué)院《光學(xué)實(shí)驗(yàn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 文山學(xué)院《設(shè)施園藝學(xué)實(shí)踐》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024版房屋出售委托協(xié)議3篇
- 二零二五年電子制造企業(yè)技術(shù)工人勞動(dòng)合同范本2篇
- 二零二五年度人工智能教育股份分紅與人才培養(yǎng)協(xié)議3篇
- 圖木舒克職業(yè)技術(shù)學(xué)院《別墅空間設(shè)計(jì)》2023-2024學(xué)年第一學(xué)期期末試卷
- 天津石油職業(yè)技術(shù)學(xué)院《工程力學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 高二物理競(jìng)賽霍爾效應(yīng) 課件
- 金融數(shù)學(xué)-(南京大學(xué))
- 基于核心素養(yǎng)下的英語(yǔ)寫(xiě)作能力的培養(yǎng)策略
- 現(xiàn)場(chǎng)安全文明施工考核評(píng)分表
- 亞什蘭版膠衣操作指南
- 四年級(jí)上冊(cè)數(shù)學(xué)教案 6.1口算除法 人教版
- DB32-T 3129-2016適合機(jī)械化作業(yè)的單體鋼架塑料大棚 技術(shù)規(guī)范-(高清現(xiàn)行)
- 6.農(nóng)業(yè)產(chǎn)值與增加值核算統(tǒng)計(jì)報(bào)表制度(2020年)
- 人工挖孔樁施工監(jiān)測(cè)監(jiān)控措施
- 供應(yīng)商物料質(zhì)量問(wèn)題賠償協(xié)議(終端)
- 物理人教版(2019)必修第二冊(cè)5.2運(yùn)動(dòng)的合成與分解(共19張ppt)
評(píng)論
0/150
提交評(píng)論