版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
實(shí)驗(yàn)進(jìn)程調(diào)度實(shí)驗(yàn)學(xué)號(hào):XXXXX姓名:XXX實(shí)驗(yàn)日期:20XX年XX月XX日、實(shí)驗(yàn)?zāi)康耐ㄟ^對(duì)進(jìn)程調(diào)度算法的模擬加深對(duì)進(jìn)程概念和進(jìn)程調(diào)度算法的理解。二、 實(shí)驗(yàn)要求編寫程序?qū)崿F(xiàn)對(duì)5個(gè)進(jìn)程的調(diào)度模擬,要求至少采用兩種不同的調(diào)度算法分別進(jìn)行模擬調(diào)度。三、 實(shí)驗(yàn)方法內(nèi)容算法設(shè)計(jì)思路將每個(gè)進(jìn)程抽象成一個(gè)控制塊PCB,PCB用一個(gè)結(jié)構(gòu)體描述。構(gòu)建一個(gè)進(jìn)程調(diào)度類。將進(jìn)程調(diào)度的各種算法分裝在一個(gè)類中。類中存在三個(gè)容器,一個(gè)保存正在或未進(jìn)入就緒隊(duì)列的進(jìn)程,一個(gè)保存就緒的進(jìn)程,另一個(gè)保存已完成的進(jìn)程。還有一個(gè)PCB實(shí)例。主要保存正在運(yùn)行的進(jìn)程。類中其他方法都是圍繞這三個(gè)容器可以這個(gè)運(yùn)行中的 PCB展開。主要用到的技術(shù)是STL中的vector以維護(hù)和保存進(jìn)程容器、就緒容器、完成容器。當(dāng)程序啟動(dòng)時(shí),用戶可以選擇不同的調(diào)度算法。然后用戶從控制臺(tái)輸入各個(gè)進(jìn)程的信息,這些信息保存到進(jìn)程容器中。進(jìn)程信息輸入完畢后,就開始了進(jìn)程調(diào)度,每調(diào)度一次判斷就緒隊(duì)列是否為空,若為空則系統(tǒng)時(shí)間加一個(gè)時(shí)間片。判斷進(jìn)程容器中是否有新的進(jìn)程可以加入就緒隊(duì)列。算法流程圖主程序的框架:進(jìn)程調(diào)度過程:為空if(為空if(m_WaitQueueempty())是否為空非空讓系統(tǒng)等待一個(gè)時(shí)
間片ITimePastO根據(jù)設(shè)定的調(diào)度算法從就緒隊(duì)列中調(diào)入一個(gè)進(jìn)程并執(zhí)行(此時(shí)進(jìn)程從就緒隊(duì)列中刪除,賦值到表示運(yùn)行中的成員變量中)voidFCFS);//讓系統(tǒng)等待一個(gè)時(shí)
間片ITimePastO根據(jù)設(shè)定的調(diào)度算法從就緒隊(duì)列中調(diào)入一個(gè)進(jìn)程并執(zhí)行(此時(shí)進(jìn)程從就緒隊(duì)列中刪除,賦值到表示運(yùn)行中的成員變量中)voidFCFS);//先來先服務(wù)voidSJF();〃最短進(jìn)程優(yōu)先調(diào)度voidRR);〃簡(jiǎn)單時(shí)間片輪轉(zhuǎn)voidPD);〃最高優(yōu)先數(shù)優(yōu)先如進(jìn)程已完成,或者分得的時(shí)間片個(gè)數(shù)已到如進(jìn)程已完成,或者分得的時(shí)間片個(gè)數(shù)已到/否達(dá)到該進(jìn)程進(jìn)程運(yùn)行一個(gè)時(shí)間片心..停止運(yùn)行的條件IProcessRunQ] y▼一..選入的進(jìn)程狀態(tài)<??是否為“完成”/ >vector<PCOm_WaitQueue〃進(jìn)程就緒隊(duì)歹『vector<PCOm_WaitQueue〃進(jìn)程就緒隊(duì)歹『vector<PCOm_FinishQueue;〃完成隊(duì)列 —進(jìn)程未完成,將進(jìn)程優(yōu)先數(shù)減一,并放回到就緒隊(duì)列中設(shè)置進(jìn)程完成時(shí)
間,將該進(jìn)程放入
完成隊(duì)列結(jié)束算法中用到的數(shù)據(jù)結(jié)構(gòu)structfcfs( 〃先來先服務(wù)算法從這里開始charname[10];floatarrivetime;floatservicetime;floatstarttime;floatfinishtime;floatzztime;floatdqzztime;}; 〃定義一個(gè)結(jié)構(gòu)體,里面包含的有一個(gè)進(jìn)程相關(guān)的信息主要的常量變量vector_<PCf>mProcessQueue//進(jìn)程輸入隊(duì)列vector<PCBm_WaitQueue//進(jìn)程就緒隊(duì)列vector<PCBm_FinishQueue;//完成隊(duì)列vector<PCB>::iteratormiter;〃迭代器PCBm_runProcess;//運(yùn)行中的進(jìn)程intm_ProcessCount;//進(jìn)程數(shù)floatm_RunTime//運(yùn)行時(shí)間intmtaglsRun;//是否在運(yùn)行標(biāo)志。表示正在運(yùn)行,表示沒有floatm_TimeSlice;//時(shí)間片大小intmTimeSliceCountj〃指時(shí)間片輪轉(zhuǎn)中一次分到的時(shí)間片個(gè)數(shù)charm_SchedulerAlgorithm;//調(diào)度算法主要模塊voidPCBInput();//輸入進(jìn)程信息voidPCBSort();〃對(duì)進(jìn)程控制塊按照優(yōu)先級(jí)排序(采用冒泡排序)voidProcessSelect();//若當(dāng)前就緒隊(duì)列不為空則根據(jù)選擇的調(diào)度算法開始調(diào)度。否則,系統(tǒng)時(shí)間加.以等待新的進(jìn)程到來voidPCBDisplay();〃打印當(dāng)前狀況下。就緒隊(duì)列、完成隊(duì)列、運(yùn)行中的進(jìn)程信息voidProcessRun();//進(jìn)程運(yùn)行一次。運(yùn)行時(shí)間加個(gè)時(shí)間片。并判斷進(jìn)程是否達(dá)到完成條件。若是則ProcessStatus='f'.否則為'w';voidProcessQueueProcess();//查看當(dāng)前時(shí)間下,有無進(jìn)程加入。若有則把該進(jìn)程調(diào)入就緒隊(duì)列voidProcessDispatch();〃進(jìn)程分派,進(jìn)程執(zhí)行完成后決定進(jìn)程該進(jìn)入哪個(gè)隊(duì)列 (就緒、完成)voidTimePast(){m_RunTime+=m_TimeSlice;ProcessQueueProcess();}//當(dāng)前系統(tǒng)時(shí)間加個(gè)時(shí)間片,并檢查是否有新的進(jìn)程加入voidSchedulerStatistics_();//調(diào)度統(tǒng)計(jì),計(jì)算周轉(zhuǎn)時(shí)間等voidFCFS);〃先來先服務(wù)voidSJF();〃最短進(jìn)程優(yōu)先調(diào)度voidRR);〃簡(jiǎn)單時(shí)間片輪轉(zhuǎn)voidPR);〃最高優(yōu)先數(shù)優(yōu)先四、實(shí)驗(yàn)代碼#include<cstdlib>#include<iostream>#include<iomanip>usingnamespacestd;structfcfs( 〃先來先服務(wù)算法從這里開始charname[10];floatarrivetime;floatservicetime;floatstarttime;floatfinishtime;floatzztime;floatdqzztime;}; 〃定義一個(gè)結(jié)構(gòu)體,里面包含的有一個(gè)進(jìn)程相關(guān)的信息fcfsa[100];voidinput(fcfs*p,intN)(inti;cout<<endl;printf(- 請(qǐng)您輸入進(jìn)程的 名字到達(dá)時(shí)間服務(wù)時(shí)間:(例如:a0100)\n\n");for(i=0;i<=N-1;i++)(printf(- 請(qǐng)您輸入進(jìn)程%d的信息:\t",i+1);scanf("\t\t\t%s%f%f",&p[i].name,&p[i].arrivetime,&p[i].servicetime);)}voidPrint(fcfs*p,floatarrivetime,floatservicetime,floatstarttime,floatfinishtime,floatzztime,floatdqzztime,intN)(intk;printf(-\n\n調(diào)用先來先服務(wù)算法以后進(jìn)程運(yùn)行的順序是:");printf("%s",p[0].name);for(k=1;k<N;k++)(printf("-->%s",p[k].name);}cout<<endl;printf("\n具體進(jìn)程調(diào)度信息:\n");printf(-\t進(jìn)程名 到達(dá)時(shí)間 服務(wù)時(shí)間 開始時(shí)間 結(jié)束時(shí)間 周轉(zhuǎn)時(shí)間帶權(quán)周轉(zhuǎn)時(shí)間\n");for(k=0;k<=N-1;k++)(printf("\t%s\t%-.2f\t%-.2f\t %-.2f\t %-.2f\t%-.2f\t%-.2f\n",p[k].name,p[k].arrivetime,p[k].servicetime,p[k].starttime,p[k].finishtime,p[k].zztime,p[k].dqzztime);}getchar(); 〃此處必須要有這個(gè)函數(shù),否則就看不到顯示器上面的輸出,可以看到的結(jié)果只是一閃而過的一個(gè)框剪}voidsort(fcfs*p,intN)〃排序for(inti=0;i<=N-1;i++)for(intj=0;j<=i;j++)if(p[i].arrivetime<p[j].arrivetime)(fcfstemp;temp=p[i];p[i]=p[j];p[j]=temp;}}voiddeal(fcfs*p,floatarrivetime,floatservicetime,floatstarttime,floatfinishtime,float&zztime,float&dqzztime,intN)〃運(yùn)行階段(intk;for(k=0;k<=N-1;k++)(if(k==0)(p[k].starttime=p[k].arrivetime;p[k].finishtime=p[k].arrivetime+p[k].servicetime;}else(p[k].starttime=p[k-1].finishtime;p[k].finishtime=p[k-1].finishtime+p[k].servicetime;}}for(k=0;k<=N-1;k++)(p[k].zztime=p[k].finishtime-p[k].arrivetime;p[k].dqzztime=p[k].zztime/p[k].servicetime;}}voidFCFS(fcfs*p,intN)(floatarrivetime=0,servicetime=0,starttime=0,finishtime=0,zztime=0,dqzztime=0;sort(p,N);deal(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N);Print(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N);getchar();} 〃先來先服務(wù)算法到此結(jié)束structsjf(//最短進(jìn)程優(yōu)先調(diào)度算法從這里開始charname[10];floatarrivetime;〃至U達(dá)時(shí)間floatservicetime;〃運(yùn)行時(shí)間floatstarttime;〃開始時(shí)間floatfinishtime;〃完成時(shí)間};sjfa1[100];voidinput(sjf*p,intN1)//進(jìn)程信息輸入{inti;cout<<endl;printf(- 請(qǐng)您輸入進(jìn)程的 名字到達(dá)時(shí)間服務(wù)時(shí)間:(例如:a0100)\n");for(i=0;i<=N1-1;i++){printf(" 請(qǐng)您輸入進(jìn)程%d的信息:\t",i+1);scanf("\t\t\t%s%f%f",&p[i].name,&p[i].arrivetime,&p[i].servicetime);}}voidPrint(sjf*p,floatarrivetime,floatservicetime,floatstarttime,floatfinishtime,intN1)//最終結(jié)果輸出{intk;printf("\n\t調(diào)用最短進(jìn)程優(yōu)先調(diào)度算法以后進(jìn)程的調(diào)度順序?yàn)?:,printf("%s",p[0].name);for(k=1;k<N1;k++){printf("-->%s",p[k].name);}cout<<endl;printf("\n給個(gè)進(jìn)程具體調(diào)度信息如下:\n");printf(-\n\t進(jìn)程名\t到達(dá)時(shí)間\t運(yùn)行時(shí)間\t開始時(shí)間\t完成時(shí)間\n");for(k=0;k<=N1-1;k++){printf("\t%s\t%-.2f\t\t%-.2f\t\t%-.2f\t\t%-.2f\t\n",p[k].name,p[k].arrivetime,p[k].servicetime,p[k].starttime,p[k].finishtime);}getchar();}voidsort(sjf*p,intN1)//排序(for(inti=0;i<=N1-1;i++)for(intj=0;j<=i;j++)if(p[i].arrivetime<p[j].arrivetime)(sjftemp;temp=p[i];p[i]=p[j];p[j]=temp;}voiddeal(sjf*p,floatarrivetime,floatservicetime,floatstarttime,floatfinishtime,intN1)//運(yùn)行階段(intk;for(k=0;k<=N1-1;k++)(if(k==0)(p[k].starttime=p[k].arrivetime;p[k].finishtime=p[k].arrivetime+float(p[k].servicetime)/60;}else(p[k].starttime=p[k-1].finishtime;p[k].finishtime=p[k-1].finishtime+float(p[k].servicetime)/60;}}}voidsjff(sjf*p,intN1)(floatarrivetime=0,servicetime=0,starttime=0,finishtime=0;sort(p,N1);for(intm=0;m<N1-1;m++)(if(m==0)p[m].finishtime=p[m].arrivetime+float(p[m].servicetime)/60;elsep[m].finishtime=p[m-1].finishtime+float(p[m].servicetime)/60;inti=0;for(intn=m+1;n<=N1-1;n++)(if(p[n].arrivetime<=p[m].finishtime)i++;}floatmin=p[m+1].servicetime;intnext=m+1;for(intk=m+1;k<m+i;k++)(if(p[k+1].servicetime<min)(min=p[k+1].servicetime;next=k+1;}}sjftemp;temp=p[m+1];
p[m+1]=p[next];p[next]=temp;}deal(p,arrivetime,servicetime,starttime,finishtime,N1);Print(p,arrivetime,servicetime,starttime,finishtime,N1);getchar();}〃最短進(jìn)程優(yōu)先調(diào)度算法到這里結(jié)束charmenu()/用來輸出相關(guān)信息的函數(shù)(charcse1;while(1)(system("cls");fflush(stdin);cout<<endl;cout<<endl;cout<<"\t"<<”|| <<<<<<<<<<<< 歡<<<<<<<<<<<>>>>>>>>>>>>迎>>>>>>>>>>>||"<<endl;||"<<endl;cout<<"\t"<<"||||"<<endl;cout<<"\t"<<"||"<<"\t實(shí)驗(yàn)一進(jìn)程調(diào)度算法實(shí)驗(yàn)"<<"\t\t"<<"||"<<endl;cout<<"\t"<<"||||"<<endl;法實(shí)驗(yàn)"<<"\t\t"<<"||"<<endl;cout<<"\t"<<"||||"<<endl;cout<<"\t"<<"||"<<"\t\t”vv”\t\t”vv”||”vvendlcout?"\t"?"||H"?endl;cout妒\t"?"H"?"\t\t”vv”\t\t”vv”||”vvendlcout?"\t"?"||H"?endl;cout?"\t"?"||您>>>>>>>>>>>>>>>>>>>>>>>>>||"?endl;1.先來先服務(wù)調(diào)度算法2.最短進(jìn)程優(yōu)先調(diào)度算法<<<<<<<<<<<<<<<<<<<<<<<<<cout?endl;cout?endl;cout?"\t\t 請(qǐng)輸入您的選擇(1/2):cse1=getchar();if(cse1vT||cse1>2)cout?"你的輸入有錯(cuò)!"《endl;elsebreak;}intmain(intargc,char*argv[]){w
溫馨提示
- 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. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 電力設(shè)備供應(yīng)招標(biāo)合同三篇
- 珠江花園房屋買賣合同三篇
- 人力資源招聘計(jì)劃
- 《黃金與美元的對(duì)決》課件
- 《魚苗繁育技術(shù)》課件
- 《酒店銷售技巧培訓(xùn)》課件
- 醫(yī)院消毒滅菌課件
- 《使用框架設(shè)計(jì)網(wǎng)》課件
- 組織胚胎學(xué)課件結(jié)締組織
- 新能源建模報(bào)告范文
- 娛樂行業(yè)虛擬現(xiàn)實(shí)主題公園建設(shè)方案
- 事故隱患內(nèi)部舉報(bào)獎(jiǎng)勵(lì)制度
- 2024年新人教版道德與法治七年級(jí)上冊(cè)全冊(cè)教案(新版教材)
- (2024年)知識(shí)產(chǎn)權(quán)全套課件(完整)
- 小學(xué)六年級(jí)數(shù)學(xué)100道題解分?jǐn)?shù)方程
- 2023年考研考博-考博英語-西北農(nóng)林科技大學(xué)考試歷年真題摘選含答案解析
- 入團(tuán)志愿書(2016版本)(可編輯打印標(biāo)準(zhǔn)A4) (1)
- GB∕T 39757-2021 建筑施工機(jī)械與設(shè)備 混凝土泵和泵車安全使用規(guī)程
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告:Linux二級(jí)文件系統(tǒng)設(shè)計(jì)
- 闌尾炎病歷模板
- 初中好詞好句好段摘抄
評(píng)論
0/150
提交評(píng)論