版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、進程調(diào)度算法模擬專業(yè):XXXXX學號:XXXXX姓名:XXX 實驗日期:20XX年XX月XX日一、實驗目的通過對進程調(diào)度算法的模擬加深對進程概念和進程調(diào)度算法的理解。二、實驗要求編寫程序?qū)崿F(xiàn)對5個進程的調(diào)度模擬,要求至少采用兩種不同的調(diào)度算 法分別進行模擬調(diào)度。三、實驗方法內(nèi)容1. 算法設計思路將每個進程抽象成一個控制塊PCB, PCB用一個結(jié)構(gòu)體描述。構(gòu)建一個進程調(diào)度類。將進程調(diào)度的各種算法分裝在一個類中。類中存在三個容器,一個保存正在或未進入就緒隊列的進程, 一個保存就緒的進程,另 一個保存已完成的進程。還有一個 PCB實例。主要保存正在運行的進程。類中 其他方法都是圍繞這三個容器可以這個
2、運行中的PCB展開。主要用到的技術(shù)是STL中的vector以維護和保存進程容器、就緒容器、 完成容器。當程序啟動時,用戶可以選擇不同的調(diào)度算法。然后用戶從控制臺輸入 各個進程的信息,這些信息保存到進程容器中。進程信息輸入完畢后,就開始了 進程調(diào)度,每調(diào)度一次判斷就緒隊列是否為空,若為空則系統(tǒng)時間加一個時間片。 判斷進程容器中是否有新的進程可以加入就緒隊列。2. 算法流程圖主程序的框架:進程調(diào)度過程:開始為空if ( m_WaitQueueempty。)讓系統(tǒng)等待一個時間片I TimePast。根據(jù)設定的調(diào)度算法從就 緒隊列中調(diào)入一個進程并 執(zhí)行(此時進程從就緒隊 列中刪除,賦值到表示運 行中的
3、成員變量中)void FCFS); /先來先服務void SJF(); /最短進程優(yōu)先調(diào)度void RR); /簡單時間片輪轉(zhuǎn)void PD); /最高優(yōu)先數(shù)優(yōu)先如進程已完成,或者分得的時 間片個數(shù)已到vector <PCBm_WaitQueue/進程就緒隊歹*進程未完成,將進程優(yōu)先數(shù)減一,并放回到就緒隊列中設置進程完成時間,將該進程放入完成隊列vector <PCBm./完成隊列FinishQueue;結(jié)束3. 算法中用到的數(shù)據(jù)結(jié)構(gòu)struct fcfs先來先服務算法從這里開始char name10;float arrivetime;float servicetime;float
4、 starttime;float finishtime;float zztime;float dqzztime;定義一個結(jié)構(gòu)體,里面包含的有一個進程相關(guān)的信息4. 主要的常量變量vector <PCf>m ProcessQueue / 進程輸入隊列vector <PCBm_WaitQueue / 進程就緒隊列vector <PCBm_FinishQueue; / 完成隊列vector <PCB>: iteratorm iter ; / 迭代器PCB m_runProcess; /運行中的進程int m_ProcessCount; / 進程數(shù)float m_R
5、unTime/ 運行時間int m tagIsRun ;/是否在運行標志。表示正在運行,表示沒有float m_TimeSlice ; / 時間片大小int m TimeSliceCount ; /指時間片輪轉(zhuǎn)中一次分到的時間片個數(shù) char m_SchedulerAlgorithm ; / 調(diào)度算法5. 主要模塊void PCBInput(); /輸入進程信息void PCBSort(); /對進程控制塊按照優(yōu)先級排序 (采用冒泡排序)void ProcessSelect (); /若當前就緒隊列不為空則根據(jù)選擇的調(diào)度算法開始調(diào)度。否則,系統(tǒng)時間 加.以等待新的進程到來void PCBDis
6、play (); /打印當前狀況下。就緒隊列、完成隊列、運行中的進程信息void ProcessRun (); /進程運行一次。運行時間加個時間片。并判斷進程是否達到完成條件。若是則 ProcessStatus='f'. 否則為'w'void ProcessQueueProcess (); /查看當前時間下,有無進程加入。若有則把該進程調(diào)入就緒隊列void ProcessDispatch (); /進程分派,進程執(zhí)行完成后決定進程該進入哪個隊列(就緒、完成)void TimePast () m_RunTime+= m_TimeSlice ; ProcessQue
7、ueProcess (); / 當前系統(tǒng)時間加個時間 片,并檢查是否有新的進程加入void SchedulerStatistics (); /調(diào)度統(tǒng)計,計算周轉(zhuǎn)時間等void FCFS); /先來先服務void SJF(); /最短進程優(yōu)先調(diào)度void RR); /簡單時間片輪轉(zhuǎn)void PR); /最高優(yōu)先數(shù)優(yōu)先四、實驗代碼#include <cstdlib>#include <iostream>#include<iomanip>using namespace std;struct fcfs(先來先服務算法從這里開始char name10;float ar
8、rivetime;float servicetime;float starttime;float finishtime;float zztime;float dqzztime;定義一個結(jié)構(gòu)體,里面包含的有一個進程相關(guān)的信息fcfs a100;void input(fcfs *p,int N)(int i;cout<<endl;printf(-請您輸入進程的名字到達時間服務時間:(例如:a 0 100)nn");for(i=0;i<=N-1;i+)(printf(-請您輸入進程%d的信息:t",i+1);scanf("ttt%s%f%f"
9、,&,&pi.arrivetime,&pi.servicetime);void Print(fcfs *p,float arrivetime,float servicetime,float starttime,float finishtime,float zztime,float dqzztime,int N)(int k;printf(-nn調(diào)用先來先服務算法以后進程運行的順序是:");printf("%s",);for(k=1;k<N;k+)(printf("->%s",pk.
10、name);cout<<endl;printf("n具體進程調(diào)度信息:n");printf(-t進程名到達時間服務時間開始時間結(jié)束時間周轉(zhuǎn)時間帶權(quán)周轉(zhuǎn)時間n");for(k=0;k<=N-1;k+)(printf("t%st%-.2ft %-.2ft%-.2ft%-.2ft %-.2ft %-.2fn",,pk.arrivetime,pk.servicetime,pk.starttime,pk.finishtime,pk.zztime,pk.dqzztime);getchar();此處必須要有這個函數(shù),否則就看不
11、到顯示器上面的輸出,可以看到的結(jié)果只是一閃而過的一個框剪void sort(fcfs *p,int N) 排序for(int i=0;i<=N-1;i+)for(int j=0;j<=i;j+)if(pi.arrivetime<pj.arrivetime)(fcfs temp;temp=pi;pi=pj;pj=temp;void deal(fcfs *p, float arrivetime,float servicetime,float starttime,float finishtime,float &zztime,float &dqzztime,int N
12、) 運行階段(int k;for(k=0;k<=N-1;k+)(if(k=0)(pk.starttime=pk.arrivetime;pk.finishtime=pk.arrivetime+pk.servicetime;else(pk.starttime=pk-1.finishtime;pk.finishtime=pk-1.finishtime+pk.servicetime;for(k=0;k<=N-1;k+)(pk.zztime=pk.finishtime-pk.arrivetime;pk.dqzztime=pk.zztime/pk.servicetime;void FCFS(f
13、cfs *p,int N)(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();先來先服務算法到此結(jié)束struct sjf/最短進程優(yōu)先調(diào)度算法從這里開始char name
14、10;float arrivetime; 至 U 達時間float servicetime; 運行時間float starttime; 開始時間float finishtime; 完成時間;sjf a1100;void input(sjf *p,int N1)/ 進程信息輸入int i;cout<<endl;printf("請您輸入進程的名字到達時間服務時間:(例如:a 0 100)n");for(i=0;i<=N1-1;i+)printf("請您輸入進程%d的信息:t",i+1);scanf("ttt%s%f%f"
15、,&,&pi.arrivetime,&pi.servicetime);void Print(sjf *p,float arrivetime,float servicetime,float starttime,float finishtime,int N1)/ 最終結(jié)果輸出int k;printf("nt調(diào)用最短進程優(yōu)先調(diào)度算法以后進程的調(diào)度順序為:,printf("%s",);for(k=1;k<N1;k+)printf("->%s",);cout<<en
16、dl;printf("n給個進程具體調(diào)度信息如下:n");printf("nt進程名t到達時間t運行時間t開始時間t完成時間n");for(k=0;k<=N1-1;k+)printf("t%st %-.2ftt %-.2ftt %-.2ftt %-.2ftn",,pk.arrivetime,pk.servicetime,pk.starttime,pk.finishtime);getchar();void sort(sjf *p,int N1)/ 排序(for(int i=0;i<=N1-1;i+)for(in
17、t j=0;j<=i;j+)if(pi.arrivetime<pj.arrivetime)(sjf temp;temp=pi;pi=pj;pj=temp;void deal(sjf *p, float arrivetime,float servicetime,float starttime,float finishtime,int N1)/ 運行階段( int k;for(k=0;k<=N1-1;k+)(if(k=0)(pk.starttime=pk.arrivetime;pk.finishtime=pk.arrivetime+float(pk.servicetime)/60
18、;else(pk.starttime=pk-1.finishtime;pk.finishtime=pk-1.finishtime+float(pk.servicetime)/60;void sjff(sjf *p,int N1)(float arrivetime=0,servicetime=0,starttime=0,finishtime=0;sort(p,N1);for(int m=0;m<N1-1;m+)if(m=0)pm.finishtime=pm.arrivetime+float(pm.servicetime)/60;elsepm.finishtime=pm-1.finishti
19、me+float(pm.servicetime)/60;int i=0;for(int n=m+1;n<=N1-1;n+)(if(pn.arrivetime<=pm.finishtime)i+;float min=pm+1.servicetime;int next=m+1;for(int k=m+1;k<m+i;k+)(if(pk+1.servicetime<min)(min=pk+1.servicetime;next=k+1;sjf temp;temp=pm+1;pm+1=pnext;pnext=temp;deal(p,arrivetime,servicetime,s
20、tarttime,finishtime,N1);Print(p,arrivetime,servicetime,starttime,finishtime,N1);getchar();最短進程優(yōu)先調(diào)度算法到這里結(jié)束char menu()/用來輸出相關(guān)信息的函數(shù)(char cse1;while(1)(system("cls");fflush(stdin);cout<<endl;cout<<endl;cout<<"t"<<”|<<<<<<<<<<<&
21、lt;歡<<<<<<<<<<< >>>>>>>>>>>> 迎 >>>>>>>>>>> |"<<endl ;cout<<"t"<<"|"<<endl ;cout<<"t"<<"|"<<"t 進程調(diào)度算法模擬&quo
22、t;<<"tt"<<"|"<<endl;cout<<"t"<<"|"<<endl ;cout<<"t"<<"|"<<"tt1.先來先服務調(diào)度算法”vv”tt”vv”|”vvendl;cout«"t"«"|"«endl;cout«"t"«"H&
23、quot;«"tt2.最短進程優(yōu)先調(diào)度算法”vv”tt”vv”|”vvendl;cout«"t"«"|"«endl;cout«"t"«"|<<<<<<<<<<<<<<<<<<<<<<<<<您>>>>>>>>>>>>>>>
24、>>>>>>>>>> |"«endl ;cout«endl;cout«endl;cout«"tt請輸入您的選擇(1/2):cse1=getchar();if(cse1vq|cse1>2)cout«"你的輸入有錯! "«endl;elsebreak;return cse1;int main(int argc, char *argv)while(1)switch(menu()(case '1':intN;cout«endl;cout«endl;printf("tt«!先來先服務調(diào)度算法 !»n");cout«endl;printf("輸入進程數(shù)目scanf("%d",&N);input(a,N);FCFS(a,N);case '2':intN1;cout«endl;cout«en
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《威海節(jié)日習俗》課件
- 《室內(nèi)設計課件》課件
- 單位管理制度集合大合集人力資源管理篇
- 單位管理制度合并選集【員工管理篇】十篇
- 單位管理制度分享匯編員工管理篇
- 單位管理制度分享大全人員管理篇十篇
- 《審計與管理》課件
- 《客房優(yōu)化方案》課件
- 《診斷思路》課件
- (高頻選擇題50題)第2單元 社會主義制度的建立與社會主義建設的探索(解析版)
- 公安管理學試題(含答案)
- 先天性甲狀腺功能減低癥專家講座
- 淮安市洪澤區(qū)2022-2023學年七年級上學期期末生物試題【帶答案】
- 2024年民航安全知識培訓考試題庫及答案(核心題)
- MOOC 漢字文化解密-華中師范大學 中國大學慕課答案
- 黑龍江省哈爾濱市香坊區(qū)2023-2024學年八年級上學期期末語文試卷
- 青島版(五四制)四年級數(shù)學下冊全冊課件
- 農(nóng)村污水處理設施運維方案特別維護應急處理預案
- 【施工組織方案】框架結(jié)構(gòu)施工組織設計
- 工業(yè)控制系統(tǒng)安全與實踐 課件 第7-9章 工業(yè)控制系統(tǒng)異常行為檢測、工控系統(tǒng)信息安全風險評估、入侵響應
- 人工智能背景下高校智慧思政建設
評論
0/150
提交評論