

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 題目: 進程調度 </p><p><b> 課程設計目的</b></p><p> 多道程序設計中,經常是若干個進程同時處于就緒狀態(tài),必須依照某種策略來決定那個進程優(yōu)先占有處理機。因而引起進程調度。本實驗模擬在單處理機情況下的處理機調度問題,加深對進程調度的理解。</p><p><b> 設計要求
2、</b></p><p> 設計進程調度算法,進程數不定</p><p> 包含幾種調度算法,并加以實現</p><p> 輸出進程的調度過程——進程的狀態(tài)、鏈表等。</p><p><b> 設計類型</b></p><p> 題目——優(yōu)先權法、輪轉法</p>
3、<p><b> 簡化假設</b></p><p> 進程為計算型的(無I/O)</p><p> 進程狀態(tài):ready、running、finish</p><p> 進程需要的CPU時間以時間片為單位確定</p><p><b> 算法描述</b></p>&
4、lt;p> 優(yōu)先權法——動態(tài)優(yōu)先權</p><p> 當前運行進程用完時間片后,其優(yōu)先權減去一個常數。</p><p><b> 輪轉法</b></p><p><b> 設計流程圖</b></p><p><b> 注意:</b></p><
5、;p> 產生的各種隨機數的取值范圍加以限制,如所需的CPU時間限制在1~20之間。</p><p> 進程數n不要太大通常取4~8個</p><p><b> 使用動態(tài)數據結構</b></p><p><b> 獨立編程</b></p><p><b> 至少三種調度算法&
6、lt;/b></p><p> 若有可能請在圖形方式下,將PCB的調度用圖形成動畫顯示。</p><p><b> 五.設計過程:</b></p><p> ?。?)輸入:進程流文件(1.txt),其中存儲的是一系列要執(zhí)行的進程, 每個作業(yè)包括四個數據項:</p><p> 進程名 進程狀態(tài)(1就緒 2等待
7、3運行) 所需時間 優(yōu)先數(0級最高)</p><p> 進程0 1 50 2</p><p> 進程1 2 10 4</p><p> 進程2 1 15 0<
8、;/p><p> 進程3 3 28 5 </p><p> 進程4 2 19 1</p><p> 進程5 3 8 7</p><p> 輸
9、出: 進程執(zhí)行流等待時間,平均等待時間</p><p> 本程序包括:FIFO算法,優(yōu)先數調度算法,時間片輪轉調度算法</p><p><b> ?。?)程序代碼</b></p><p> #include<stdio.h> </p><p> #include<string.h> <
10、/p><p> #include<iostream.h></p><p> const int block_time=10; //定義時間片的長度為10秒 </p><p> const int MAXPCB=100; //定義最大進程數</p><p> //定義進程結構體 PCB</p><p>
11、 typedef struct node</p><p><b> {</b></p><p> char name[20]; /*進程標識符*/</p><p> int status;/*進程的狀態(tài)*/</p><p> int time; /*所需時間*/</p><p> int
12、 privilege;/*優(yōu)先權*/</p><p> int finished; </p><p> int wait_time; }pcb;</p><p> pcb pcbs[MAXPCB]; </p><p> int quantity;/*計數器*/</p><p><b> //初始化函
13、數 </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> //讀數據函數 &
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<<"請輸入進程流文件名:"; </p><p> cin>>fname; </p><p> if((fp=fopen("f:\\1\\1.txt","r"))==NULL)</p><p><b> { </b><
18、;/p><p> cout<<"錯誤,文件打不開,請檢查文件名"<<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> } //輸出所讀入的數據 </p><p> cout<<"輸出所讀入的數據"<<endl; </p><p> cout<<"進程名 進
21、程狀態(tài) 所需時間 優(yōu)先數"<<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> //重置數據,以供另一個算法使用 </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> //先進先出算法 </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<<"進程名 等待時間"<<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<<"總等待時間:"<
30、;<total<<" 平均等待時間:"<<total/quantity<<endl;</p><p><b> }</b></p><p> //優(yōu)先數調度算法 </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)先數調度執(zhí)行流 </p><p> cout<<endl<<"********************************************
36、***************"<<endl; </p><p> cout<<"優(yōu)先數調度執(zhí)行流:"<<endl; </p><p> cout<<"進程名 等待時間"<<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<<"總等待時間:"&l
39、t;<total<<" 平均等待時間:"<<total/quantity<<endl;</p><p><b> }</b></p><p> //時間片輪轉調度算法 </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]; /*隊列*
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<<"時間片輪轉調度執(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<<" /********************* 進程調度 ********************/ "; </p><p> cout<<endl<<endl; }</p><p&
51、gt;<b> //主函數 </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> ?。?)運行結果:</b><
54、/p><p> 輸入進程流文件名1.txt即可得出以下輸出結果:</p><p><b> 六 參考書:</b></p><p> 計算機操作系統(tǒng)(第三版)------西安電子科技大學出版社</p><p> C語言程序設計----------------------北京郵電大學出版社</p>&l
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 操作系統(tǒng)進程調度課程設計
- 進程調度算法 操作系統(tǒng)課程設計
- 操作系統(tǒng)進程調度課程設計報告
- 操作系統(tǒng)課程設計--進程調度算法
- 操作系統(tǒng)課程設計-進程調度模擬
- 操作系統(tǒng)課程設計---進程調度算法
- 進程調度算法操作系統(tǒng)課程設計
- 操作系統(tǒng)課程設計--進程調度算法
- 進程調度算法操作系統(tǒng)課程設計 (2)
- 操作系統(tǒng)課程設計——進程調度模擬算法
- 操作系統(tǒng)_進程調度算法課程設計報告
- 操作系統(tǒng)課程設計——進程調度模擬算法
- 操作系統(tǒng)課程設計---進程調度模擬設計
- 操作系統(tǒng)課程設計--進程調度程序設計
- 操作系統(tǒng)課程設計---進程調度子系統(tǒng)模擬實現
- 操作系統(tǒng)課程設計---多級反饋隊列進程調度算法
- 操作系統(tǒng)課程設計報告---進程調度的模擬實現
- 操作系統(tǒng)課程設計進程_銀行家_頁面調度
- 操作系統(tǒng)課程設計--cpu進程調度和內存分配
- 操作系統(tǒng)模擬進程課程設計
評論
0/150
提交評論