




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、使用動態(tài)優(yōu)先權(quán)的進程調(diào)度算法的模擬試驗1.試驗目的通過動態(tài)優(yōu)先權(quán)算法的模擬加深對進程概念和進程調(diào)度過程的懂得;2.試驗內(nèi)容(1)用 c語言實現(xiàn)對n 個進程采納動態(tài)優(yōu)先權(quán)優(yōu)先算法的進程調(diào)度;(2)每個用來標識進程的進程掌握塊pcb用結(jié)構(gòu)來描述,包括以下字段: 進程標識數(shù);進程優(yōu)先數(shù)priority ,并規(guī)定優(yōu)先數(shù)越大的進程,其優(yōu)先權(quán)越高;進程已占用的cpu時間 cputime ;進程仍需占用的cpu 時間 alltime ,當進程運行完畢時,alltime 變?yōu)?0 ;進程的堵塞時間startblock ,表示當進程再運行startblock 個時間片后, 進程將進入堵塞狀態(tài);進程被堵塞的時間b
2、licktime ,表示已堵塞的進程再等待blocktime 個時間片后,將轉(zhuǎn)換為就緒態(tài);進程狀態(tài) state ;隊列指針 next ,用來將 pcb排成隊列;(3)優(yōu)先數(shù)轉(zhuǎn)變的原就:進程在就緒隊列中呆一個時間片,優(yōu)先數(shù)增加1.進程每運行一個時間片,優(yōu)先數(shù)減3;(4)假設(shè)在調(diào)度前,系統(tǒng)中有5 個進程,它們得初始狀態(tài)如下:id01234priority93830290cputime00000alltime33634startblock2-1-1-1-1blocktime30000statereadyreadyreadyreadyready(5)為了清晰地觀看諸進程的調(diào)度過程,程序應將每個時間片內(nèi)
3、的進程的情形顯示出來, 參照的詳細格式如下:running prog: iready_queu:e ->id1->id2block_queue: ->id3->id4=id01234prioritycputimep0c0p1c1p2c3p3c4p4c5alltimea0a1a2a3a4startblockt0t1t2t3t4blocktimeb0b1b2b3b4states0s1s2s3s4開頭創(chuàng)建就緒隊列3.過程(流程圖)否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;/ 進程標識數(shù)int priority;/ 進程優(yōu)先數(shù),優(yōu)先數(shù)越大優(yōu)先級越高int cputime;/ 進程已占用的cpu 時間int alltime;/ 進程仍需占用的cpu時間int startblock
5、;/ 進程的堵塞時間int blocktime;/ 進程被堵塞的時間char state10;/ 進程狀態(tài)struct node *next;/ 隊列指針pcb;pcb *creatqueueint num/ 創(chuàng)建一個就緒隊列int i;/i 為循環(huán)計數(shù)器pcb *head, *temp1, *temp2, *temp3;/head為就緒隊列的頭指針,temp1 為創(chuàng)建進程結(jié)點的指針,temp2 、temp3 分別為比較結(jié)點的前驅(qū)結(jié)點和比較結(jié)點fori=0;i<num;i+/ 依據(jù)進程的個數(shù)創(chuàng)建結(jié)點并按從大到小的次序進行排序temp1=pcb *mallocsizeofpcb; prin
6、tf" 輸入第 %d 個進程的 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)建的是第一個結(jié)點head=temp1;head->next=null; continue;ifhead->prior
7、ity< temp1->priority/ 假如創(chuàng)建結(jié)點中所儲存的數(shù)比頭結(jié)點所儲存的數(shù)要大,就直接把該結(jié)點插入到頭結(jié)點之前temp1->next=head; head=temp1; continue;temp2=head;/temp2為比較結(jié)點的直接前驅(qū)結(jié)點temp3=temp2->next;/temp3為比較的結(jié)點whiletemp3.=null && temp3->priority>=temp1->priority/ 實現(xiàn)查找的功能temp2=temp3; temp3=temp2->next;temp2->next=te
8、mp1; temp1->next=temp3;return head;pcb *insertqueuepcb *head,pcb *run/ 在就緒隊列中插入一個結(jié)點pcb *temp1,*temp2;/temp1和 temp2 分別為比較結(jié)點的前驅(qū)和比較結(jié)點ifhead=null/ 假如就緒隊列為空head=run;head->next=null;else ifhead->priority < run->priority/ 假如插入結(jié)點中所儲存的數(shù)比頭結(jié)點所儲存的數(shù)要大,就直接把該結(jié)點插入到頭結(jié)點之前elserun->next=head; head=run
9、;temp1=head;/temp1為比較結(jié)點的直接前驅(qū)結(jié)點temp2=temp1->next;/temp2為比較的結(jié)點whiletemp2.=null && temp2->priority>=run->priority/ 實現(xiàn)查找的功能temp1=temp2; temp2=temp1->next;temp1->next=run; run->next=temp2;return head;mainint num;/num為進程的個數(shù)int alltime=0;/ 用來儲存全部進程需要占用的cpu時間pcb *head;/head 為就緒隊
10、列的頭指針pcb *run=null;/run為執(zhí)行進程結(jié)點的指針 pcb *block=null;/block 為堵塞進程的結(jié)點 pcb *temp;printf" 請輸入進程的個數(shù):" scanf"%d",# head=creatqueuenum; getchar;temp=head; whiletemp.=nullalltime+=temp->alltime; temp=temp->next;whilealltime > 0ifhead.=nullrun=head;/ 把就緒隊列中的第一個進程取出來執(zhí)行 head=
11、head->next;/ 就緒隊列的頭指針指向下一個結(jié)點 strcpyrun->state,"run"/ 狀態(tài)改為執(zhí)行run->next=null;/* 顯示狀態(tài) */printf"running prog:%dn",run->id;/ 顯示執(zhí)行進程printf"ready_queue:"/ 顯示就緒進程temp=head; whiletemp.=nullprintf"->%d",temp->id; temp=temp->next;printf"n"pr
12、intf"block_queue:"/ 顯示堵塞進程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í)行進程的優(yōu)先數(shù)減3 temp=head;whiletemp.=null/ 就緒進程的優(yōu)先數(shù)加1temp->priority+=1; temp=temp->next;/* 轉(zhuǎn)變優(yōu)先數(shù) */* 轉(zhuǎn)變執(zhí)行進程的有關(guān)
15、參數(shù)*/run->cputime+=1;/ 執(zhí)行進程的已占用cpu 時間加 1 run->alltime-=1;/ 仍需要的cpu時間減 1ifrun->alltime.=0ifrun->startblock > 0/ 假如該進程會被堵塞run->startblock-=1;/ 執(zhí)行完一個時間片后, 開頭堵塞的時間減1ifrun->startblock=0/ 假如堵塞的時間到了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í)行進程的有關(guān)參數(shù)*/ alltime-;/* 顯示狀態(tài) */printf"running prog:n"/ 顯示執(zhí)行進程 printf"ready_queue:n"/ 顯示就緒進程 printf"block_queue:"/ 顯示堵塞進程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)變堵塞進程的有關(guān)參數(shù)*/ifblock.=null/ 假如有堵塞進程block->blocktime-=1;/ 被堵塞的時間減1 ifblock->blocktime=0 /假如被堵塞的時間到了strcpyblock->state,"r"/ 狀態(tài)轉(zhuǎn)就緒head=insertqueuehead,block;/ 堵塞轉(zhuǎn)就緒 block=null;/* 轉(zhuǎn)變堵塞進程的有關(guān)參數(shù)*/getchar;5.運行結(jié)果輸入 5 個進程,分別是0 4 進程,運行結(jié)果可以看到第一次運行進程1,優(yōu)先數(shù)為38; 其次次運行的進
19、程是進程1,優(yōu)先數(shù)為35,cpu 時間占用為1,進程所需時間為2, 同時下一個進程(進程1)的優(yōu)先數(shù) +1;第三次運行進程2,優(yōu)先數(shù)32, cpu 占用時間將 +1,所需時間將-1;同時下一個進程(進程1)優(yōu)先數(shù) +1,;第四次運行進程1,優(yōu)先數(shù)33, cpu 占用時間2+1,所需時間將-1;同時下一個進程(進程3)優(yōu)先數(shù) +1,第四次運行進程1 完畢,所需時間為0;進程 1 運行完畢;第五次運行進程3,優(yōu)先數(shù)33, cpu 占用時間0 將+1,所需時間3 將-1;同時下一個進程(進程2)優(yōu)先數(shù) +1;第六次運行進程2,優(yōu)先數(shù)31 將-3, cpu 占用時間1 將 +1,所需時間5 將-1;同
20、時下一個進程(進程3)優(yōu)先數(shù) +1;第七次運行進程3,優(yōu)先數(shù)31 將-3, cpu 占用時間1 將 +1,所需時間2 將-1;同時下一個進程(進程2)優(yōu)先數(shù) +1;第八次運行進程2,優(yōu)先數(shù)29 將-3, cpu 占用時間同時下一個進程(進程3)優(yōu)先數(shù) +1;2 將 +1,所需時間4 將-1;第九次運行進程3,優(yōu)先數(shù)29 將-3, cpu 占用時間2 將 +1,所需時間1 將-1;同時下一個進程(進程2)優(yōu)先數(shù) +1;第九次運行完畢,進程3 的所需時間為0,進程 3 運行完畢;第十次運行進程2,優(yōu)先數(shù)27 將 -3, cpu 占用時間3 將+1,所需時間3 將-1;同時下一個進程(進程0)優(yōu)先數(shù)
21、 +1;第十一次運行進程2,優(yōu)先數(shù) 24 將-3, cpu 占用時間4 將+1,所需時間2 將-1;同時下一個進程(進程0)優(yōu)先數(shù) +1;第十二次運行進程2,優(yōu)先數(shù) 21 將-3, cpu 占用時間5 將+1,所需時間1 將-1;同時下一個進程(進程0)優(yōu)先數(shù) +1;第十二次運行完畢,進程2 所需時間為0,進程 2 運行完畢;第十三次運行進程0,優(yōu)先數(shù) 21 將-3, cpu 占用時間0 將+1,所需時間3 將-1;同時下一個進程(進程4)優(yōu)先數(shù) +1;第十四次運行進程0,優(yōu)先數(shù) 18 將-3, cpu 占用時間1 將+1,所需時間2 將-1;同時下一個進程(進程4)優(yōu)先數(shù) +1;第十五次運行進程4,優(yōu)先數(shù) 14 將-3, cpu 占用時間0 將+1,所需時間4 將-1;同時下一個進程(進程0)優(yōu)先數(shù) +1;第十六次運行進程4,優(yōu)先數(shù) 11 將-3, cpu 占用時間1 將+1,所需時間3 將-1;同時下一個進程(進程0)優(yōu)先數(shù) +1;第十七次運行進程4,優(yōu)先數(shù) 8 將-3, cpu 占用時間2 將+1,所需時間2 將-1;同時下一個進程(進程0)優(yōu)先數(shù) +1;第十八次運行進程0,優(yōu)先數(shù) 15 將-3, cpu 占用時間2 將+1,所需時間1 將-1;同時下一個進程(進程4)優(yōu)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 管理服務合同協(xié)議書范本
- 供貨商月結(jié)協(xié)議合同書
- 勞動合同五險合一協(xié)議
- 維修廠合伙人協(xié)議合同書
- 離職合同協(xié)議格式
- 烏蘭察布合同協(xié)議翻譯
- 拆遷合同空白協(xié)議
- 直放站合同協(xié)議
- 合同專賣協(xié)議
- 藥房托管合同協(xié)議
- 2025年初級會計師考試學員疑惑解答試題及答案
- DB51T3251-2025煤礦井下應急廣播系統(tǒng)使用管理規(guī)范
- 體檢中心工作制度和崗位職責
- 【小學】【帶班育人方略】三階四步:培育“三品”少年
- 2025陜煤集團榆林化學有限責任公司招聘(137人)筆試參考題庫附帶答案詳解
- 《人工智能通識基礎(chǔ)》全套教學課件
- 2024年青海省西寧市中考一模物理、化學試卷-初中化學(原卷版)
- 專題01-平衡力與相互作用力(學生版)-2021年中考物理力學提優(yōu)特訓專題
- 數(shù)字孿生智能化車間數(shù)字化生產(chǎn)管控平臺規(guī)劃建設(shè)方案
- 乙酰氯安全技術(shù)說明書MSDS
- 2024年可行性研究報告投資估算及財務分析全套計算表格(含附表-帶只更改標紅部分-操作簡單)
評論
0/150
提交評論