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

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

歡迎共閱歡迎共閱歡迎共閱實驗概述:【實驗?zāi)康募耙蟆坷斫獠⒄莆仗幚頇C(jī)調(diào)度算法【實驗原理】基于先來先服務(wù)調(diào)度和最短作業(yè)優(yōu)先調(diào)度算法思想用C語言編程實現(xiàn)【實驗環(huán)境】(使用的軟件)VisualC++6.0實驗內(nèi)容:本實驗?zāi)M在單處理機(jī)情況下處理機(jī)調(diào)度,用C語言編程實現(xiàn)先來先服務(wù)和最短作業(yè)優(yōu)先調(diào)度算法?!緦嶒灧桨冈O(shè)計】FCFS流程圖:SJF流程圖:試驗總設(shè)計流程圖:輸入選擇數(shù)以選擇調(diào)度算法報錯繼續(xù)輸數(shù)先按提交時間排序按照提交時間排序1FCFS算法2SJF算法其他數(shù)進(jìn)程等待時間=進(jìn)程開始運行時間-進(jìn)程提交時間(即進(jìn)程處于就緒態(tài)時間)輸入選擇數(shù)以選擇調(diào)度算法報錯繼續(xù)輸數(shù)先按提交時間排序按照提交時間排序1FCFS算法2SJF算法其他數(shù)輸入作業(yè)個數(shù)、輸入作業(yè)個數(shù)、作業(yè)號、提交時間、運行時間再按最短運行時間排序計算各作業(yè)參數(shù):開始時間,結(jié)束時間再按最短運行時間排序計算各作業(yè)參數(shù):開始時間,結(jié)束時間等待時間,周轉(zhuǎn)時間并輸出并輸出計算各作業(yè)參數(shù):計算各作業(yè)參數(shù):開始時間,結(jié)束時間等待時間,周轉(zhuǎn)時間并輸出【實驗過程】(實驗步驟、記錄、數(shù)據(jù)、分析)測試用例1:屏幕顯示:Pleaseinputthetotalnumberofjobs輸入:4<回車>屏幕顯示:Pleaseinputjobnumber,submittimeandruntime輸入:19.00.2<回車>28.50.5<回車>38.01.0<回車>49.10.1<回車>屏幕顯示:Whatkindofalgorithmdoyouwant?Pleaseinput1toselectFCFS,or2toselectSJF.輸入:3<回車>屏幕顯示:Youhaveinputawrongnumber,pleaseinputagain.輸入:1<回車>屏幕輸出結(jié)果:submitrunstartingfinalwaitturnaround38.01.08.09.00.01.028.50.59.09.50.51.019.00.29.59.70.50.749.10.19.79.80.60.7屏幕顯示:Theaverageturnaroundtimeis0.85Whatkindofalgorithmdoyouwant?Pleaseinput1toselectFCFS,or2toselectSJF,or0toexit.測試數(shù)據(jù)二:submitrun160.5250.936.30.1FCFS和SJF算法結(jié)果一樣:submitrunstartingfinalwaitturnaround250.955.900.9160.566.500.536.30.16.56.60.20.3Theaverageturnaroundtimeis0.567測試數(shù)據(jù)三:submitrun150.224.20.335.10.345.20.1FCFS:submitrunstartingfinalwaitturnaround24.20.34.24.500.3150.255.200.235.10.35.25.50.10.445.20.15.55.60.30.4Theaverageturnaroundtimeis0.325SJF:submitrunstartingfinalwaitturnaround24.20.34.24.500.3150.255.200.245.20.15.25.300.135.10.35.35.60.20.5Theaverageturnaroundtimeis0.275源程序:#include"stdio.h"#include"stdlib.h"#include"string.h"#defineM50structsjf{ intjobnumber; floatsubmittime; floatruntime; floatstarttime; floatfinishtime; floatwaittime; floatturnaroundtime;}temp;staticstructsjfst[M];voidinput(structsjf*p,intN){ inti; printf("Pleaseinputthejobnumber,submittimeandruntime:\nForexmple:18.52.0\n"); for(i=0;i<N;i++) { scanf("%d%f%f",&p[i].jobnumber,&p[i].submittime,&p[i].runtime);}}voidprint(structsjf*p,intN){ intk; floath,g; printf("runorder:"); printf("%d",p[0].jobnumber);for(k=1;k<N;k++)printf("-->%d",p[k].jobnumber);printf("\nTheprocess'sinformation:\n");printf("\njobnum\tsubmit\trun\tstart\tfinal\twait\tturnaround\n");for(k=0;k<N;k++){ h+=p[k].turnaroundtime;printf("%d\t%-.1f\t%-.1f\t%-.1f\t%-.1f\t%-.1f\t%-.1f\t\n",p[k].jobnumber,p[k].submittime,p[k].runtime,p[k].starttime,p[k].finishtime,p[k].waittime,p[k].turnaroundtime);}g=h/N;printf("\nTheaverageturnaroundtimeis%-.2f\n",g);}/*按提交時間從小到大排序*/voidsort1(structsjf*p,intN){inti,j;for(i=0;i<N;i++)for(j=0;j<=i;j++)if(p[i].submittime<p[j].submittime){temp=p[i];p[i]=p[j];p[j]=temp;}}/*運行*/voiddeal(structsjf*p,intN){ intk; for(k=0;k<N;k++) { if(k==0) { p[k].starttime=p[k].submittime; p[k].finishtime=p[k].submittime+p[k].runtime; } else { if(p[k].submittime>p[k-1].finishtime) { p[k].starttime=p[k].submittime; p[k].finishtime=p[k].submittime+p[k].runtime; } else { p[k].starttime=p[k-1].finishtime; p[k].finishtime=p[k-1].finishtime+p[k].runtime; } } } for(k=0;k<N;k++) { p[k].turnaroundtime=p[k].finishtime-p[k].submittime; p[k].waittime=p[k].starttime-p[k].submittime;}}voidsort2(structsjf*p,intN){ intnext,m,n,k,i; floatmin; sort1(p,N); for(m=0;m<N;m++) { i=0; if(m==0) p[m].finishtime=p[m].submittime+p[m].runtime; else { if(p[m].submittime>p[m-1].finishtime) { p[m].finishtime=p[m].submittime+p[m].runtime; } else p[m].finishtime=p[m-1].finishtime+p[m].runtime; } for(n=m+1;n<N;n++) { if(p[n].submittime<=p[m].finishtime)/*判斷內(nèi)存中每次完成之后又多少到達(dá)的進(jìn)程*/ i++; } min=p[m+1].runtime; next=m+1; for(k=m+1;k<m+i;k++)/*找出到達(dá)后的進(jìn)程中運行時間最小的進(jìn)程*/ { if(p[k+1].runtime<min) { min=p[k+1].runtime; next=k+1; } } temp=p[m+1]; p[m+1]=p[next]; p[next]=temp; }deal(p,N);print(p,N); }voidmain(){ intN,i; printf("Pleaseinputthetotalnumberofjobs:"); scanf("%d",&N); input(st,N);loop2: printf("Whatkindofalgorithmdoyouwant?Pleaseinput1toselectFCFS,or2toselectSJFor0toexit:");loop: scanf("%d",&i); if(i==0) exit(1); elseif(i==1) { sort1(st,N); deal(st,N); print(st,N); gotoloop2; } elseif(i==2){ sort2(st,N); gotoloop2;}else{ printf("Youhaveinputawrongnumber,pleaseinputagain:"); gotoloop;}}【結(jié)論】(結(jié)果)測試1:測試二:測試三:【小結(jié)】實驗中產(chǎn)生的錯誤及原因分析:測試用例1的結(jié)果:錯誤1:錯誤解決方式:主要是子函數(shù)sort2()中出的錯:i的作用域,程序修改:將原來:intnext,m,n,k,i=0; floatmin; sort1(p,N); for(m=0;m<N;m++) {改為:intnext,m,n,k,i; floatmin; sort1(p,N); for(m=0;m<N;m++) { i=0;測試用例2的結(jié)果:錯誤1:錯誤原因:未考慮到“提交時間(submittime)大于上個進(jìn)程的結(jié)束時間”的情況:解決方法:將原來的:else { p[m].finishtime=p[m-1].finishtime+p[m].runtime; }修改為:else { if(p[m].submittime>p[m-1].finishtime) { p[m].finishtime=p[m].submittime+p[m].runtime; } else p[m].finishtime=p[m-1].finishtime+p[m].runtime; }測試用例3的結(jié)果:錯誤1:錯誤分析:同2一樣,未在子函數(shù)sort()中未考慮到“提交時間(submittime)大于上個進(jìn)程的結(jié)束時間”的情況:解決方法:將原來的: else p[m].finishtime=p[m-1].finishtime+p[m].runtime;修改為:else { if(p[m].submittime>p[m-1].finishtime) { p[m].finishtime=p[m].submittime+p[m].runtime; } else p[m].finishtime=p[m-1].finishtime+p[m].runtime; }實驗的體會及收獲:通過這次試驗,我對處理機(jī)的調(diào)度算法特別是FCFS和SJF有了更深的理解,而且鍛煉了我的思維能力,使我能更全面地思考問題,以后還需要多做些這方面的練習(xí)。試驗不足之處:試驗未考慮同一時間提交多個進(jìn)程的情況,如:測試數(shù)據(jù):submitrun170.227.20.5370.1結(jié)果應(yīng)該是:FCFS:submitrunstartfinalwaitturnaround170.27.07.50.00.5370.17.57.60.50.627.20.57.67.80.40.6Theaverageturnaroundtimeis0.57.SJF:Jobnumsubmitrunstartingfinalwaitturnaround370.17.07.10.00.1170.57.17.60.10.62

溫馨提示

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

評論

0/150

提交評論