先來先服務調度和最短作業(yè)優(yōu)先調度算法實驗報告_第1頁
先來先服務調度和最短作業(yè)優(yōu)先調度算法實驗報告_第2頁
先來先服務調度和最短作業(yè)優(yōu)先調度算法實驗報告_第3頁
先來先服務調度和最短作業(yè)優(yōu)先調度算法實驗報告_第4頁
先來先服務調度和最短作業(yè)優(yōu)先調度算法實驗報告_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、實驗概述:【實驗目的及要求】理解并掌握處理機調度算法【實驗原理】基于先來先服務調度和最短作業(yè)優(yōu)先調度算法思想用C語言編程實現(xiàn)【實驗環(huán)境】(使用的軟件)Visual C+6.0實驗內容:本實驗模擬在單處理機情況下處理機調度,用C語言編程實現(xiàn)先來先服務和最短作業(yè)優(yōu)先調度算法?!緦嶒灧桨冈O計】FCFS流程圖:SJF流程圖:試驗總設計流程圖:輸入選擇數(shù)以選擇調度算法報錯繼續(xù)輸數(shù)先按提交時間排序按照提交時間排序1FCFS算法2SJF算法其他數(shù)進程等待時間進程開始運行時間進程提交時間(即進程處于就緒態(tài)時間) 輸入作業(yè)個數(shù)、作業(yè)號、提交時間、運行時間進程周轉時間進程結束時間進程提交時間 再按最短運行時間排序

2、計算各作業(yè)參數(shù):開始時間,結束時間等待時間,周轉時間 并輸出 并輸出計算各作業(yè)參數(shù):開始時間,結束時間等待時間,周轉時間 并輸出【實驗過程】(實驗步驟、記錄、數(shù)據(jù)、分析)測試用例1:屏幕顯示:Please input the total number of jobs輸入:4 <回車>屏幕顯示:Please input job number, submit time and run time 輸入:1 9.0 0.2<回車>2 8.5 0.5<回車>3 8.0 1.0<回車>4 9.1 0.1<回車>屏幕顯示:What kind of

3、algorithm do you want? Please input 1 to select FCFS, or 2 to select SJF.輸入:3 <回車>屏幕顯示:You have input a wrong number, please input again.輸入:1<回車>屏幕輸出結果: submit run starting final wait turnaround3 8.0 1.0 8.0 9.0 0.0 1.02 8.5 0.5 9.0 9.5 0.5 1.01 9.0 0.2 9.5 9.7 0.5 0.74 9.1 0.1 9.7 9.8 0

4、.6 0.7屏幕顯示:The average turnaround time is 0.85What kind of algorithm do you want? Please input 1 to select FCFS, or 2 to select SJF, or 0 to exit.測試數(shù)據(jù)二: submit run 1 6 0.52 5 0.93 6.3 0.1FCFS和SJF算法結果一樣:submit run starting final wait turnaround2 5 0.9 5 5.9 0 0.91 6 0.5 6 6.5 0 0.53 6.3 0.1 6.5 6.6 0

5、.2 0.3The average turnaround time is 0.567測試數(shù)據(jù)三: submit run1 5 0.22 4.2 0.33 5.1 0.34 5.2 0.1FCFS:submit run starting final wait turnaround2 4.2 0.3 4.2 4.5 0 0.31 5 0.2 5 5.2 0 0.23 5.1 0.3 5.2 5.5 0.1 0.44 5.2 0.1 5.5 5.6 0.3 0.4The average turnaround time is 0.325SJF:submit run starting final wai

6、t turnaround2 4.2 0.3 4.2 4.5 0 0.31 5 0.2 5 5.2 0 0.24 5.2 0.1 5.2 5.3 0 0.13 5.1 0.3 5.3 5.6 0.2 0.5The average turnaround time is 0.275源程序:#include "stdio.h"#include"stdlib.h"#include"string.h"#define M 50struct sjfint jobnumber;float submittime;float runtime;float s

7、tarttime;float finishtime;float waittime;float turnaroundtime;temp;static struct sjf stM;void input(struct sjf *p,int N)int i;printf("Please input the job number,submit time and run time:nFor exmple:1 8.5 2.0n");for(i=0;i<N;i+) scanf("%d%f%f",&pi.jobnumber,&pi.submitti

8、me,&pi.runtime); void print(struct sjf *p,int N)int k;float h,g;printf("run order:");printf("%d",p0.jobnumber); for(k=1;k<N;k+) printf("->%d",pk.jobnumber); printf("nThe process's information:n"); printf("njobnumtsubmittruntstarttfinaltwaitt

9、turnaroundn"); for(k=0;k<N;k+) h+=pk.turnaroundtime; printf("%dt%-.1ft%-.1ft%-.1ft%-.1ft%-.1ft%-.1ftn",pk.jobnumber,pk.submittime,pk.runtime,pk.starttime,pk.finishtime,pk.waittime,pk.turnaroundtime); g=h/N; printf("nThe average turnaround time is %-.2fn",g); /*按提交時間從小到大排序

10、*/void sort1(struct sjf *p,int N) int i,j; for(i=0;i<N;i+) for(j=0;j<=i;j+) if(pi.submittime<pj.submittime) temp=pi; pi=pj; pj=temp; /*運行*/void deal(struct sjf *p,int N)int k;for(k=0;k<N;k+)if(k=0) pk.starttime=pk.submittime; pk.finishtime=pk.submittime+pk.runtime; else if(pk.submittime&

11、gt;pk-1.finishtime) pk.starttime=pk.submittime; pk.finishtime=pk.submittime+pk.runtime;else pk.starttime=pk-1.finishtime; pk.finishtime=pk-1.finishtime+pk.runtime; for(k=0;k<N;k+)pk.turnaroundtime=pk.finishtime-pk.submittime; pk.waittime=pk.starttime-pk.submittime; void sort2(struct sjf *p,int N)

12、int next,m,n,k,i;float min;sort1(p,N);for(m=0;m<N;m+) i=0;if(m=0)pm.finishtime=pm.submittime+pm.runtime; else if(pm.submittime>pm-1.finishtime) pm.finishtime=pm.submittime+pm.runtime;else pm.finishtime=pm-1.finishtime+pm.runtime; for(n=m+1;n<N;n+) if(pn.submittime<=pm.finishtime)/*判斷內存中每

13、次完成之后又多少到達的進程*/ i+; min=pm+1.runtime; next=m+1; for(k=m+1;k<m+i;k+)/*找出到達后的進程中運行時間最小的進程*/ if(pk+1.runtime<min) min=pk+1.runtime; next=k+1; temp=pm+1; pm+1=pnext; pnext=temp; deal(p,N); print(p,N); void main()int N,i;printf("Please input the total number of jobs:");scanf("%d"

14、;,&N);input(st,N);loop2:printf("What kind of algorithm do you want? Please input 1 to select FCFS, or 2 to select SJF or 0 to exit:");loop:scanf("%d",&i);if(i=0)exit(1);else if(i=1)sort1(st,N);deal(st,N);print(st,N);goto loop2;else if(i=2) sort2(st,N);goto loop2; else pri

15、ntf("You have input a wrong number, please input again:"); goto loop; 【結論】(結果)測試1:測試二:測試三:【小結】實驗中產(chǎn)生的錯誤及原因分析:測試用例1的結果:錯誤1:錯誤解決方式:主要是子函數(shù)sort2()中出的錯:i的作用域,程序修改:將原來:int next,m,n,k,i=0;float min;sort1(p,N);for(m=0;m<N;m+) 改為:int next,m,n,k,i;float min;sort1(p,N);for(m=0;m<N;m+) i=0;測試用例2的

16、結果:錯誤1:錯誤原因:未考慮到“提交時間(submittime)大于上個進程的結束時間”的情況:解決方法:將原來的:else pm.finishtime=pm-1.finishtime+pm.runtime; 修改為:else if(pm.submittime>pm-1.finishtime) pm.finishtime=pm.submittime+pm.runtime;else pm.finishtime=pm-1.finishtime+pm.runtime; 測試用例3的結果:錯誤1:錯誤分析:同2 一樣,未在子函數(shù)sort()中未考慮到“提交時間(submittime)大于上個進

17、程的結束時間”的情況:解決方法:將原來的:else pm.finishtime=pm-1.finishtime+pm.runtime; 修改為:else if(pm.submittime>pm-1.finishtime) pm.finishtime=pm.submittime+pm.runtime;else pm.finishtime=pm-1.finishtime+pm.runtime; 實驗的體會及收獲:通過這次試驗,我對處理機的調度算法特別是FCFS和SJF有了更深的理解,而且鍛煉了我的思維能力,使我能更全面地思考問題,以后還需要多做些這方面的練習。試驗不足之處:試驗未考慮同一時間

18、提交多個進程的情況,如:測試數(shù)據(jù): submit run1 7 0.22 7.2 0.53 7 0.1結果應該是:FCFS:submit run start final wait turnaround1 7 0.2 7.0 7.5 0.0 0.53 7 0.1 7.5 7.6 0.5 0.62 7.2 0.5 7.6 7.8 0.4 0.6The average turnaround time is 0.57.SJF:Jobnum submit run starting final wait turnaround3 7 0.1 7.0 7.1 0.0 0.11 7 0.5 7.1 7.6 0.1 0.62 7.2 0.2 7.6 7.8 0.6 0.6The average turnaround time is 0.43.而程

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論