![](https://static.zsdocx.com/FlexPaper/FileRoot/2019-6/5/22/6be47eba-9259-44ae-83a6-caf554047d67/6be47eba-9259-44ae-83a6-caf554047d67pic.jpg)
![操作系統(tǒng)進(jìn)程調(diào)度課程設(shè)計(jì)_第1頁](https://static.zsdocx.com/FlexPaper/FileRoot/2019-6/5/22/6be47eba-9259-44ae-83a6-caf554047d67/6be47eba-9259-44ae-83a6-caf554047d671.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 題目: 進(jìn)程調(diào)度 </p><p><b> 課程設(shè)計(jì)目的</b></p><p> 多道程序設(shè)計(jì)中,經(jīng)常是若干個(gè)進(jìn)程同時(shí)處于就緒狀態(tài),必須依照某種策略來決定那個(gè)進(jìn)程優(yōu)先占有處理機(jī)。因而引起進(jìn)程調(diào)度。本實(shí)驗(yàn)?zāi)M在單處理機(jī)情況下的處理機(jī)調(diào)度問題,加深對(duì)進(jìn)程調(diào)度的理解。</p><p><b> 設(shè)計(jì)要求
2、</b></p><p> 設(shè)計(jì)進(jìn)程調(diào)度算法,進(jìn)程數(shù)不定</p><p> 包含幾種調(diào)度算法,并加以實(shí)現(xiàn)</p><p> 輸出進(jìn)程的調(diào)度過程——進(jìn)程的狀態(tài)、鏈表等。</p><p><b> 設(shè)計(jì)類型</b></p><p> 題目——優(yōu)先權(quán)法、輪轉(zhuǎn)法</p>
3、<p><b> 簡(jiǎn)化假設(shè)</b></p><p> 進(jìn)程為計(jì)算型的(無I/O)</p><p> 進(jìn)程狀態(tài):ready、running、finish</p><p> 進(jìn)程需要的CPU時(shí)間以時(shí)間片為單位確定</p><p><b> 算法描述</b></p>&
4、lt;p> 優(yōu)先權(quán)法——?jiǎng)討B(tài)優(yōu)先權(quán)</p><p> 當(dāng)前運(yùn)行進(jìn)程用完時(shí)間片后,其優(yōu)先權(quán)減去一個(gè)常數(shù)。</p><p><b> 輪轉(zhuǎn)法</b></p><p><b> 設(shè)計(jì)流程圖</b></p><p><b> 注意:</b></p><
5、;p> 產(chǎn)生的各種隨機(jī)數(shù)的取值范圍加以限制,如所需的CPU時(shí)間限制在1~20之間。</p><p> 進(jìn)程數(shù)n不要太大通常取4~8個(gè)</p><p><b> 使用動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)</b></p><p><b> 獨(dú)立編程</b></p><p><b> 至少三種調(diào)度算法&
6、lt;/b></p><p> 若有可能請(qǐng)?jiān)趫D形方式下,將PCB的調(diào)度用圖形成動(dòng)畫顯示。</p><p><b> 五.設(shè)計(jì)過程:</b></p><p> ?。?)輸入:進(jìn)程流文件(1.txt),其中存儲(chǔ)的是一系列要執(zhí)行的進(jìn)程, 每個(gè)作業(yè)包括四個(gè)數(shù)據(jù)項(xiàng):</p><p> 進(jìn)程名 進(jìn)程狀態(tài)(1就緒 2等待
7、3運(yùn)行) 所需時(shí)間 優(yōu)先數(shù)(0級(jí)最高)</p><p> 進(jìn)程0 1 50 2</p><p> 進(jìn)程1 2 10 4</p><p> 進(jìn)程2 1 15 0<
8、;/p><p> 進(jìn)程3 3 28 5 </p><p> 進(jìn)程4 2 19 1</p><p> 進(jìn)程5 3 8 7</p><p> 輸
9、出: 進(jìn)程執(zhí)行流等待時(shí)間,平均等待時(shí)間</p><p> 本程序包括:FIFO算法,優(yōu)先數(shù)調(diào)度算法,時(shí)間片輪轉(zhuǎn)調(diào)度算法</p><p><b> (2)程序代碼</b></p><p> #include<stdio.h> </p><p> #include<string.h> <
10、/p><p> #include<iostream.h></p><p> const int block_time=10; //定義時(shí)間片的長度為10秒 </p><p> const int MAXPCB=100; //定義最大進(jìn)程數(shù)</p><p> //定義進(jìn)程結(jié)構(gòu)體 PCB</p><p>
11、 typedef struct node</p><p><b> {</b></p><p> char name[20]; /*進(jìn)程標(biāo)識(shí)符*/</p><p> int status;/*進(jìn)程的狀態(tài)*/</p><p> int time; /*所需時(shí)間*/</p><p> int
12、 privilege;/*優(yōu)先權(quán)*/</p><p> int finished; </p><p> int wait_time; }pcb;</p><p> pcb pcbs[MAXPCB]; </p><p> int quantity;/*計(jì)數(shù)器*/</p><p><b> //初始化函
13、數(shù) </b></p><p> void initial()</p><p><b> { </b></p><p><b> int i;</b></p><p> for(i=0;i<MAXPCB;i++)</p><p><b>
14、{ </b></p><p> strcpy(pcbs[i].name,""); </p><p> pcbs[i].status=0; </p><p> pcbs[i].time=0;</p><p> pcbs[i].privilege=0;</p><p> pcbs[
15、i].finished=0; </p><p> pcbs[i].wait_time=0; </p><p><b> }</b></p><p> quantity=0;</p><p><b> }</b></p><p><b> //讀數(shù)據(jù)函數(shù) &
16、lt;/b></p><p> int readData()</p><p><b> { </b></p><p> FILE *fp; </p><p> char fname[20]; </p><p><b> int i;</b></p>
17、<p> cout<<"請(qǐng)輸入進(jìn)程流文件名:"; </p><p> cin>>fname; </p><p> if((fp=fopen("f:\\1\\1.txt","r"))==NULL)</p><p><b> { </b><
18、;/p><p> cout<<"錯(cuò)誤,文件打不開,請(qǐng)檢查文件名"<<endl; </p><p><b> } </b></p><p><b> else</b></p><p><b> { </b></p>&
19、lt;p> while(!feof(fp))</p><p><b> { </b></p><p> fscanf(fp,"%s %d %d %d",pcbs[quantity].name,&pcbs[quantity].status,</p><p> &pcbs[quantity].tim
20、e,&pcbs[quantity].privilege); </p><p> quantity++; </p><p> } //輸出所讀入的數(shù)據(jù) </p><p> cout<<"輸出所讀入的數(shù)據(jù)"<<endl; </p><p> cout<<"進(jìn)程名 進(jìn)
21、程狀態(tài) 所需時(shí)間 優(yōu)先數(shù)"<<endl; </p><p> for(i=0;i<quantity;i++)</p><p><b> { </b></p><p> cout<<" "<<pcbs[i].name<<" "<&l
22、t;pcbs[i].status<<" "<<pcbs[i].time<<" "<<pcbs[i].privilege<<endl; </p><p><b> } </b></p><p> return(1); </p><p><
23、b> } </b></p><p> return(0);</p><p><b> }</b></p><p> //重置數(shù)據(jù),以供另一個(gè)算法使用 </p><p> void init() </p><p><b> { </b></p
24、><p><b> int i;</b></p><p> for(i=0;i<MAXPCB;i++)</p><p><b> {</b></p><p> pcbs[i].finished=0; pcbs[i].wait_time=0; </p><p><
25、;b> } </b></p><p><b> }</b></p><p><b> //先進(jìn)先出算法 </b></p><p> void FIFO() </p><p><b> { </b></p><p> int
26、i,j; int total;</p><p> //輸出FIFO算法執(zhí)行流 </p><p> cout<<endl<<"*****************************************************"<<endl; </p><p> cout<<"F
27、IFO算法執(zhí)行流:"<<endl; cout<<"進(jìn)程名 等待時(shí)間"<<endl; </p><p> for(i=0;i<quantity;i++)</p><p><b> { </b></p><p> cout<<" "<
28、<pcbs[i].name<<" "<<pcbs[i].wait_time<<endl; </p><p> for(j=i+1;j<quantity;j++)</p><p> { pcbs[j].wait_time+=pcbs[i].time; } </p><p><b> }
29、 </b></p><p><b> total=0; </b></p><p> for(i=0;i<quantity;i++)</p><p> { total+=pcbs[i].wait_time; } </p><p> cout<<"總等待時(shí)間:"<
30、;<total<<" 平均等待時(shí)間:"<<total/quantity<<endl;</p><p><b> }</b></p><p> //優(yōu)先數(shù)調(diào)度算法 </p><p> void privilege() </p><p><b>
31、 { </b></p><p> int i,j,p; </p><p> int passed_time=0; </p><p> int total;</p><p> int queue[MAXPCB]; </p><p> int current_privilege=1000;</p
32、><p> for(i=0;i<quantity;i++)</p><p><b> { </b></p><p> current_privilege=1000; </p><p> for(j=0;j<quantity;j++)</p><p><b> { <
33、;/b></p><p> if((pcbs[j].finished==0)&&(pcbs[j].privilege<current_privilege))</p><p><b> { p=j; </b></p><p> current_privilege=pcbs[j].privilege; </p
34、><p><b> } </b></p><p><b> } </b></p><p> queue[i]=p;</p><p> pcbs[p].finished=1; </p><p> pcbs[p].wait_time+=passed_time; </p
35、><p> passed_time+=pcbs[p].time; </p><p><b> }</b></p><p> //輸出優(yōu)先數(shù)調(diào)度執(zhí)行流 </p><p> cout<<endl<<"********************************************
36、***************"<<endl; </p><p> cout<<"優(yōu)先數(shù)調(diào)度執(zhí)行流:"<<endl; </p><p> cout<<"進(jìn)程名 等待時(shí)間"<<endl; </p><p> for(i=0;i<quantity;i
37、++)</p><p><b> { </b></p><p> cout<<" "<<pcbs[queue[i]].name<<" "<<pcbs[queue[i]].wait_time<<endl; </p><p><b>
38、 }</b></p><p><b> total=0; </b></p><p> for(i=0;i<quantity;i++)</p><p> { total+=pcbs[i].wait_time; } </p><p> cout<<"總等待時(shí)間:"&l
39、t;<total<<" 平均等待時(shí)間:"<<total/quantity<<endl;</p><p><b> }</b></p><p> //時(shí)間片輪轉(zhuǎn)調(diào)度算法 </p><p> void timer() </p><p><b>
40、{ </b></p><p> int i,j,number,flag=1; </p><p> int passed_time=0; </p><p> int max_time=0; </p><p> int round=0; </p><p> int queue[1000]; /*隊(duì)列*
41、/</p><p> int total=0;</p><p> while(flag==1)</p><p><b> { </b></p><p><b> flag=0; </b></p><p><b> number=0;</b>&l
42、t;/p><p> for(i=0;i<quantity;i++)</p><p><b> { </b></p><p> if(pcbs[i].finished==0)</p><p> { number++; j=i; } </p><p><b> }</b&g
43、t;</p><p> if(number==1)</p><p> { queue[total]=j; total++; pcbs[j].finished=1; }</p><p> if(number>1)</p><p><b> {</b></p><p> for(i=0
44、;i<quantity;i++)</p><p><b> { </b></p><p> if(pcbs[i].finished==0)</p><p> { flag=1; </p><p> queue[total]=i; </p><p><b> total++
45、; </b></p><p> if(pcbs[i].time<=block_time*(round+1))</p><p><b> { </b></p><p> pcbs[i].finished=1; </p><p><b> } </b></p>&
46、lt;p><b> } </b></p><p><b> } </b></p><p><b> } </b></p><p><b> round++; </b></p><p><b> } </b></p
47、><p> if(queue[total-1]==queue[total-2])</p><p> { total--; }</p><p> cout<<endl<<"*******************************************************"<<endl; </p
48、><p> cout<<"時(shí)間片輪轉(zhuǎn)調(diào)度執(zhí)行流:"<<endl; </p><p> for(i=0;i<total;i++)</p><p><b> { </b></p><p> cout<<pcbs[queue[i]].name<<&q
49、uot; ";</p><p> cout<<endl;</p><p><b> }</b></p><p><b> }</b></p><p><b> //顯示</b></p><p> void version(
50、) </p><p><b> { </b></p><p> cout<<" /********************* 進(jìn)程調(diào)度 ********************/ "; </p><p> cout<<endl<<endl; }</p><p&
51、gt;<b> //主函數(shù) </b></p><p> void main() </p><p><b> { </b></p><p><b> int flag;</b></p><p> version();</p><p> init
52、ial();</p><p> flag=readData();</p><p> if(flag==1)</p><p> { FIFO(); </p><p><b> init();</b></p><p> privilege(); </p><p>
53、<b> init();</b></p><p><b> timer(); </b></p><p><b> } </b></p><p><b> }</b></p><p><b> ?。?)運(yùn)行結(jié)果:</b><
54、/p><p> 輸入進(jìn)程流文件名1.txt即可得出以下輸出結(jié)果:</p><p><b> 六 參考書:</b></p><p> 計(jì)算機(jī)操作系統(tǒng)(第三版)------西安電子科技大學(xué)出版社</p><p> C語言程序設(shè)計(jì)----------------------北京郵電大學(xué)出版社</p>&l
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 操作系統(tǒng)進(jìn)程調(diào)度課程設(shè)計(jì)
- 進(jìn)程調(diào)度算法 操作系統(tǒng)課程設(shè)計(jì)
- 操作系統(tǒng)進(jìn)程調(diào)度課程設(shè)計(jì)報(bào)告
- 操作系統(tǒng)課程設(shè)計(jì)--進(jìn)程調(diào)度算法
- 操作系統(tǒng)課程設(shè)計(jì)-進(jìn)程調(diào)度模擬
- 操作系統(tǒng)課程設(shè)計(jì)---進(jìn)程調(diào)度算法
- 進(jìn)程調(diào)度算法操作系統(tǒng)課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)--進(jìn)程調(diào)度算法
- 進(jìn)程調(diào)度算法操作系統(tǒng)課程設(shè)計(jì) (2)
- 操作系統(tǒng)課程設(shè)計(jì)——進(jìn)程調(diào)度模擬算法
- 操作系統(tǒng)_進(jìn)程調(diào)度算法課程設(shè)計(jì)報(bào)告
- 操作系統(tǒng)課程設(shè)計(jì)——進(jìn)程調(diào)度模擬算法
- 操作系統(tǒng)課程設(shè)計(jì)---進(jìn)程調(diào)度模擬設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)--進(jìn)程調(diào)度程序設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)---進(jìn)程調(diào)度子系統(tǒng)模擬實(shí)現(xiàn)
- 操作系統(tǒng)課程設(shè)計(jì)---多級(jí)反饋隊(duì)列進(jìn)程調(diào)度算法
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告---進(jìn)程調(diào)度的模擬實(shí)現(xiàn)
- 操作系統(tǒng)課程設(shè)計(jì)進(jìn)程_銀行家_頁面調(diào)度
- 操作系統(tǒng)課程設(shè)計(jì)--cpu進(jìn)程調(diào)度和內(nèi)存分配
- 操作系統(tǒng)模擬進(jìn)程課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論