




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
歡迎共閱歡迎共閱歡迎共閱實(shí)驗(yàn)概述:【實(shí)驗(yàn)?zāi)康募耙蟆坷斫獠⒄莆仗幚頇C(jī)調(diào)度算法【實(shí)驗(yàn)原理】基于先來(lái)先服務(wù)調(diào)度和最短作業(yè)優(yōu)先調(diào)度算法思想用C語(yǔ)言編程實(shí)現(xiàn)【實(shí)驗(yàn)環(huán)境】(使用的軟件)VisualC++6.0實(shí)驗(yàn)內(nèi)容:本實(shí)驗(yàn)?zāi)M在單處理機(jī)情況下處理機(jī)調(diào)度,用C語(yǔ)言編程實(shí)現(xiàn)先來(lái)先服務(wù)和最短作業(yè)優(yōu)先調(diào)度算法?!緦?shí)驗(yàn)方案設(shè)計(jì)】FCFS流程圖:SJF流程圖:試驗(yàn)總設(shè)計(jì)流程圖:輸入選擇數(shù)以選擇調(diào)度算法報(bào)錯(cuò)繼續(xù)輸數(shù)先按提交時(shí)間排序按照提交時(shí)間排序1FCFS算法2SJF算法其他數(shù)進(jìn)程等待時(shí)間=進(jìn)程開始運(yùn)行時(shí)間-進(jìn)程提交時(shí)間(即進(jìn)程處于就緒態(tài)時(shí)間)輸入選擇數(shù)以選擇調(diào)度算法報(bào)錯(cuò)繼續(xù)輸數(shù)先按提交時(shí)間排序按照提交時(shí)間排序1FCFS算法2SJF算法其他數(shù)輸入作業(yè)個(gè)數(shù)、輸入作業(yè)個(gè)數(shù)、作業(yè)號(hào)、提交時(shí)間、運(yùn)行時(shí)間再按最短運(yùn)行時(shí)間排序計(jì)算各作業(yè)參數(shù):開始時(shí)間,結(jié)束時(shí)間再按最短運(yùn)行時(shí)間排序計(jì)算各作業(yè)參數(shù):開始時(shí)間,結(jié)束時(shí)間等待時(shí)間,周轉(zhuǎn)時(shí)間并輸出并輸出計(jì)算各作業(yè)參數(shù):計(jì)算各作業(yè)參數(shù):開始時(shí)間,結(jié)束時(shí)間等待時(shí)間,周轉(zhuǎn)時(shí)間并輸出【實(shí)驗(yàn)過(guò)程】(實(shí)驗(yàn)步驟、記錄、數(shù)據(jù)、分析)測(cè)試用例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.測(cè)試數(shù)據(jù)二:submitrun160.5250.936.30.1FCFS和SJF算法結(jié)果一樣:submitrunstartingfinalwaitturnaround250.955.900.9160.566.500.536.30.16.56.60.20.3Theaverageturnaroundtimeis0.567測(cè)試數(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);}/*按提交時(shí)間從小到大排序*/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;}}/*運(yùn)行*/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)程中運(yùn)行時(shí)間最小的進(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é)果)測(cè)試1:測(cè)試二:測(cè)試三:【小結(jié)】實(shí)驗(yàn)中產(chǎn)生的錯(cuò)誤及原因分析:測(cè)試用例1的結(jié)果:錯(cuò)誤1:錯(cuò)誤解決方式:主要是子函數(shù)sort2()中出的錯(cuò):i的作用域,程序修改:將原來(lá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;測(cè)試用例2的結(jié)果:錯(cuò)誤1:錯(cuò)誤原因:未考慮到“提交時(shí)間(submittime)大于上個(gè)進(jìn)程的結(jié)束時(shí)間”的情況:解決方法:將原來(lái)的: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; }測(cè)試用例3的結(jié)果:錯(cuò)誤1:錯(cuò)誤分析:同2一樣,未在子函數(shù)sort()中未考慮到“提交時(shí)間(submittime)大于上個(gè)進(jìn)程的結(jié)束時(shí)間”的情況:解決方法:將原來(lái)的: 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; }實(shí)驗(yàn)的體會(huì)及收獲:通過(guò)這次試驗(yàn),我對(duì)處理機(jī)的調(diào)度算法特別是FCFS和SJF有了更深的理解,而且鍛煉了我的思維能力,使我能更全面地思考問(wèn)題,以后還需要多做些這方面的練習(xí)。試驗(yàn)不足之處:試驗(yàn)未考慮同一時(shí)間提交多個(gè)進(jìn)程的情況,如:測(cè)試數(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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國(guó)家飾布藝品數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025至2030年中國(guó)低溫雙門食具消毒柜數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 內(nèi)科三基培訓(xùn)試題及答案
- 江蘇省南京師范大學(xué)附屬中學(xué)2024-2025學(xué)年高一上學(xué)期期末考試化學(xué)試卷(含答案)
- 河北省部分學(xué)校2024-2025學(xué)年高三下學(xué)期3月聯(lián)考思想政治試題(含答案)
- 施工類承包商部門級(jí)環(huán)境培訓(xùn)試題
- 2025年消防設(shè)施操作員之消防設(shè)備高級(jí)技能能力提升試卷A卷附答案
- 2024廣東省中考英語(yǔ)真題【原卷版】
- 采購(gòu)與項(xiàng)目執(zhí)行分包合同(2篇)
- 鋼管腳手架分包合同
- 中醫(yī)藥膳學(xué)(上篇總論)課件
- 勞動(dòng)創(chuàng)造美好生活教案完整版精
- 6提高電纜線路施工質(zhì)量一次合格率QC成果
- 2021年福建省南平市第一醫(yī)院醫(yī)護(hù)人員招聘筆試試題及答案解析
- GB∕T 17587.1-2017 滾珠絲杠副 第1部分:術(shù)語(yǔ)和符號(hào)
- 土石壩設(shè)計(jì)畢業(yè)設(shè)計(jì)
- 【分享貼】2018AFP案例結(jié)業(yè)題目10:青年家庭限購(gòu)政策下的公寓商鋪答案解析
- 三年級(jí)學(xué)生學(xué)情分析
- 高中化學(xué)競(jìng)賽-中級(jí)無(wú)機(jī)化學(xué)--金屬原子簇word版本
- 沖壓工藝與模具設(shè)計(jì)拉深
- 水泥穩(wěn)定碎石配合比設(shè)計(jì)報(bào)告7頁(yè)
評(píng)論
0/150
提交評(píng)論