進程調(diào)度模擬實現(xiàn)_第1頁
進程調(diào)度模擬實現(xiàn)_第2頁
進程調(diào)度模擬實現(xiàn)_第3頁
進程調(diào)度模擬實現(xiàn)_第4頁
進程調(diào)度模擬實現(xiàn)_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、操作系統(tǒng)課程設(shè)計報告題目: 進程調(diào)度算法的模擬實現(xiàn) 專業(yè)計算機科學(xué)與技術(shù)學(xué)生姓名劉遠強班級計算機131學(xué)號1310704109指導(dǎo)教師韓 立 毛完成日期2015.7.10信 息 工 程 學(xué) 院23操作系統(tǒng)課程設(shè)計(2015)目 錄1 概述21.1 設(shè)計目的21.2 設(shè)計要求22 設(shè)計原理22.1 先來先服務(wù)算法22.2 短進程優(yōu)先算法22.3高優(yōu)先權(quán)優(yōu)先算法22.4高響應(yīng)比優(yōu)先算法33 概要設(shè)計33.1 功能結(jié)構(gòu)34 詳細設(shè)計44.1 用戶界面模塊設(shè)計44.2 算法模塊設(shè)計45 測試與分析125.1 測試方案125.2 測試結(jié)果125.3 結(jié)果分析146 設(shè)計小結(jié)157 參考文獻15附錄 源程

2、序代碼16題目:進程調(diào)度算法的模擬實現(xiàn)1 概述1.1 設(shè)計目的在多道程序和多任務(wù)系統(tǒng)中,系統(tǒng)內(nèi)同時處于就緒狀態(tài)的進程可能有若干個,也就是說能運行的進程數(shù)大于處理機個數(shù)。為了使系統(tǒng)中的進程能有條不紊地工作,必須選用某種調(diào)度策略,選擇一進程占用處理機。要求學(xué)生設(shè)計一個模擬處理機調(diào)度算法,以鞏固和加深處理機調(diào)度的概念。1.2 設(shè)計要求a)至少有四種作業(yè)調(diào)度算法;b)能根據(jù)不同的調(diào)度算法算出每個作業(yè)的周轉(zhuǎn)時間和帶權(quán)周轉(zhuǎn)時間,并通過一組作業(yè)算出系統(tǒng)的平均周轉(zhuǎn)時間和平均帶權(quán)周轉(zhuǎn)時間,比較各種算法的優(yōu)缺點;c)設(shè)計一個實用的用戶界面,以便選擇不同的作業(yè)調(diào)度算法。2 設(shè)計原理2.1 先來先服務(wù)算法 每次調(diào)度都

3、是從后備作業(yè)隊列中選擇一個或多個最先進入該隊列的作業(yè),將它們調(diào)入內(nèi)存,為它們分配資源創(chuàng)建進程,然后放入就緒隊列。2.2 短進程優(yōu)先算法 短進程優(yōu)先調(diào)度算法是從就緒隊列中選出一個估計運行時間最短的進程,將處理機分配給它,使它立即執(zhí)行并一直執(zhí)行到完成,或發(fā)生某事件而被阻塞放棄處理機時再重新調(diào)度。2.3高優(yōu)先權(quán)優(yōu)先算法a)當(dāng)該算法用于作業(yè)調(diào)度時,系統(tǒng)從后備作業(yè)隊列中選擇若干個優(yōu)先級最高的,且系統(tǒng)能滿足資源要求的作業(yè)裝入內(nèi)存運行。b)當(dāng)該算法用于進程調(diào)度時,將把處理機分配給就緒進程隊列中優(yōu)先級最高的進程。2.4高響應(yīng)比優(yōu)先算法 高響應(yīng)比優(yōu)先調(diào)度算法既考慮作業(yè)的執(zhí)行時間也考慮作業(yè)的等待時間,綜合了先來先

4、服務(wù)和最短作業(yè)優(yōu)先兩種算法的特點。3 概要設(shè)計3.1 功能結(jié)構(gòu)函數(shù)調(diào)用流程圖如圖31圖314 詳細設(shè)計4.1 用戶界面模塊設(shè)計用戶界面包含4種算法的選擇項及退出項,并能根據(jù)對應(yīng)選項做出相應(yīng)反應(yīng)。選擇算法則進入所選算法進行進一步計算,選擇退出則關(guān)閉界面,輸入其他錯誤字符會顯示錯誤提示。void main()int choice;cout<<" *進程調(diào)度算法模擬實現(xiàn)*"<<endl;cout<<"*1.先來先服務(wù)算法*2.短作業(yè)優(yōu)先算法*"<<endl;cout<<"*3.高優(yōu)先權(quán)優(yōu)先算

5、法*4.高響應(yīng)比優(yōu)先算法*"<<endl;cout<<"*5.退出*"<<endl;l1:cout<<"請輸入您的選擇:"<<endl; l2:cin>>choice;JCB *head=NULL;switch(choice)case 1:head=create(head);FCFS(head);goto l1;case 2:head=create(head);SJF(head,jnum);goto l1;case 3:head=create(head);SUPER(hea

6、d,jnum);goto l1;case 4:head=create(head);HRN(head,jnum);goto l1;case 5:break;default:cout<<"輸入錯誤!n請重新輸入:"<<endl;goto l2;4.2 算法模塊設(shè)計先來先服務(wù)算法:直接復(fù)制首個作業(yè)的鏈表HEAD作為先來先服務(wù)的鏈表(因為首個原始輸入作業(yè)的鏈表就是按輸入順序進行鏈接形成的)。 void FCFS(JCB *head)/先來先服務(wù)算法dealFCFS(head);JCB *p,*q,*s;p=head->next;cout<<

7、"作業(yè)執(zhí)行順序為:"while(p!=NULL)cout<<"-"<<p->name;p=p->next;cout<<endl;cout<<"作業(yè)名 提交時間 開始時間 結(jié)束時間 周轉(zhuǎn)時間 帶權(quán)周轉(zhuǎn)時間n" s=head->next;while(s!=NULL)cout<<setw(4)<<s->name<<setw(7)<<s->htime<<setw(10)<<s->start

8、time<<setw(11)<<s->ftime<<setw(10)<<s->zhouzhuan<<setw(10)<<s->daiquan<<endl;s=s->next;cout<<endl; cout<<" 平均周轉(zhuǎn)時間:"<<total/(double)jnum<<endl;cout<<"平均帶權(quán)周轉(zhuǎn)時間:"<<weight/(double)jnum<<en

9、dl;cout<<"*"<<endl;total=0;weight=0;b)短作業(yè)優(yōu)先算法:每次查找所有HEAD的結(jié)點,并將結(jié)點中最小作業(yè)所需運行時間的結(jié)點復(fù)制并連接到短作業(yè)優(yōu)先鏈表的最后節(jié)點中。每復(fù)制一個結(jié)點,結(jié)點的是否被復(fù)制位置。共復(fù)制HEAD鏈表長度的LENGTH次,就復(fù)制完畢。這樣形成的最短作業(yè)優(yōu)先鏈表就剛剛好是按作業(yè)所需運行時間按從小到大的順序排列的了。void SJF(JCB *head,int n)JCB *p,*p1;JCB *flag=NULL;JCB *q=NULL; double time=0,j=0,runTime=0, dr

10、unTime=0;int xuhao=0;string pnameMAX_NUM;for(int ss=0;ss<MAX_NUM;ss+)pnamess=""sortFCFS(head);cout<<endl;cout<<" 順序 作業(yè)名 提交時間 開始時間 結(jié)束時間 周轉(zhuǎn)時間 帶權(quán)周轉(zhuǎn)時間n"head=head->next;p=head;while(head)q=head;if(time < p->htime) /如果該作業(yè)提交時間早于其它作業(yè),則先執(zhí)行該作業(yè)time=p->htime;flag=h

11、ead; /用于暫存將要執(zhí)行的作業(yè)while(q && q->htime <= time)if(q->ntime<flag->ntime)flag=q;q=q->next;/輸出當(dāng)前執(zhí)行作業(yè)的信息 cout<<setw(4)<<xuhao+1;cout<<setw(8)<<flag->name;cout<<setw(8)<<flag->ntime;cout<<setw(8)<<time;cout<<setw(10)<&

12、lt;(time + flag->ntime);cout<<setw(10)<<(time - flag->htime + flag->ntime);cout<<" "<<setw(11)<<(double)(time-flag->htime + flag->ntime)/flag->ntime)<<endl; j=(time-flag->htime+flag->ntime); /當(dāng)前執(zhí)行作業(yè)的周轉(zhuǎn)時間runTime +=j; /記錄周轉(zhuǎn)時間time+=f

13、lag->ntime;drunTime+=j/flag->ntime; /帶權(quán)周轉(zhuǎn)時間pnamexuhao=flag->name;xuhao+;/將執(zhí)行過的作業(yè)從鏈表中刪除if(flag=head) /在鏈表頭head=head->next; else /在鏈表中p1=head;while(p1->next!=flag)p1=p1->next;p1->next=flag->next;delete flag; /刪除這個作業(yè)所占的節(jié)點cout<<"作業(yè)執(zhí)行順序為:"for(ss=0;ss<n;ss+)cout&

14、lt;<pnamess;if(pnamess+1 !="")cout<<" -> "cout<<endl;cout<<" 平均周轉(zhuǎn)時間為:"<<runTime/n<<endl; cout<<"平均帶權(quán)周轉(zhuǎn)時間為:"<<drunTime/n<<endl;cout<<"*"<<endl;c)高優(yōu)先權(quán)優(yōu)先算法:其中的操作和短作業(yè)優(yōu)先差不多。因為作業(yè)在輸入時已經(jīng)有了作業(yè)時間

15、和優(yōu)先權(quán),高優(yōu)先權(quán)算法是查找HEAD中最高優(yōu)先權(quán)的結(jié)點進行復(fù)制。void SUPER(JCB *head,int n)JCB *p,*p1;JCB *flag=NULL;JCB *q=NULL; double time=0,j=0,runTime=0, drunTime=0;int xuhao=0;string pnameMAX_NUM;for(int ss=0;ss<MAX_NUM;ss+)pnamess=""sortFCFS(head);cout<<endl;cout<<" 順序 作業(yè)名 提交時間 開始時間 結(jié)束時間 周轉(zhuǎn)時間 帶

16、權(quán)周轉(zhuǎn)時間n"head=head->next;p=head;while(head)q=head;if(time < p->htime) /如果該作業(yè)提交時間早于其它作業(yè),則先執(zhí)行該作業(yè)time=p->htime;flag=head; /用于暫存將要執(zhí)行的作業(yè)while(q && q->htime <= time)if(q->super>flag->super)flag=q;q=q->next;/輸出當(dāng)前執(zhí)行作業(yè)的信息 cout<<setw(4)<<xuhao+1;cout<<

17、;setw(8)<<flag->name;cout<<setw(8)<<flag->ntime;cout<<setw(8)<<time;cout<<setw(10)<<(time + flag->ntime);cout<<setw(10)<<(time - flag->htime + flag->ntime);cout<<" "<<setw(11)<<(double)(time-flag->hti

18、me + flag->ntime)/flag->ntime)<<endl; j=(time-flag->htime+flag->ntime); /當(dāng)前執(zhí)行作業(yè)的周轉(zhuǎn)時間runTime +=j; /記錄周轉(zhuǎn)時間time+=flag->ntime;drunTime+=j/flag->ntime; /帶權(quán)周轉(zhuǎn)時間pnamexuhao=flag->name;xuhao+;/將執(zhí)行過的作業(yè)從鏈表中刪除if(flag=head) /在鏈表頭head=head->next; else /在鏈表中p1=head;while(p1->next!=

19、flag)p1=p1->next;p1->next=flag->next;delete flag; /刪除這個作業(yè)所占的節(jié)點cout<<"作業(yè)執(zhí)行順序為:"for(ss=0;ss<n;ss+)cout<<pnamess;if(pnamess+1 !="")cout<<" -> "cout<<endl;cout<<" 平均周轉(zhuǎn)時間為:"<<runTime/n<<endl; cout<<&quo

20、t;平均帶權(quán)周轉(zhuǎn)時間為:"<<drunTime/n<<endl;cout<<"*"<<endl;d)高響應(yīng)比優(yōu)先算法:首先是將HEAD整個鏈表復(fù)制過來形成高響應(yīng)比鏈表,然后每執(zhí)行一次就算出正在執(zhí)行作業(yè)以后所有結(jié)點的響應(yīng)比,查找出響應(yīng)比最高的那個結(jié)點,將響應(yīng)比最高的結(jié)點插入到正在執(zhí)行作業(yè)后面。這樣執(zhí)行下一個結(jié)點時,必定是未執(zhí)行所有結(jié)點中響應(yīng)比最高的結(jié)點。 void HRN(JCB *head,int n)JCB *p,*p1;JCB *flag=NULL;JCB *q=NULL; double time=0,

21、j=0,runTime=0, drunTime=0;int xuhao=0;string pnameMAX_NUM;for(int ss=0;ss<MAX_NUM;ss+)pnamess=""sortFCFS(head);cout<<endl;cout<<" 順序 作業(yè)名 提交時間 開始時間 結(jié)束時間 周轉(zhuǎn)時間 帶權(quán)周轉(zhuǎn)時間n"head=head->next;p=head;while(head)q=head;if(time < p->htime) /如果該作業(yè)提交時間早于其它作業(yè),則先執(zhí)行該作業(yè)time=p

22、->htime;flag=head; /用于暫存將要執(zhí)行的作業(yè)/計算當(dāng)前鏈表中作業(yè)的響應(yīng)比while(q && q->htime <= time)if(time - q->htime)/(q->ntime) > (time - flag->htime)/(flag->ntime)flag=q;q=q->next;if(time<flag->htime)/如果上一次結(jié)束時間比當(dāng)前選中要執(zhí)行作業(yè)的結(jié)束時間小time=flag->htime; /則當(dāng)前作業(yè)開始時間為提交時間/輸出當(dāng)前執(zhí)行作業(yè)的信息 cout<

23、;<setw(4)<<xuhao+1;cout<<setw(8)<<flag->name;cout<<setw(8)<<flag->ntime;cout<<setw(8)<<time;cout<<setw(10)<<(time + flag->ntime);cout<<setw(10)<<(time - flag->htime + flag->ntime);cout<<" "<<set

24、w(11)<<(double)(time-flag->htime + flag->ntime)/flag->ntime)<<endl; j=(time-flag->htime+flag->ntime); /當(dāng)前執(zhí)行作業(yè)的周轉(zhuǎn)時間runTime +=j; /記錄周轉(zhuǎn)時間time+=flag->ntime;drunTime+=j/flag->ntime; /帶權(quán)周轉(zhuǎn)時間pnamexuhao=flag->name;xuhao+;/將執(zhí)行過的作業(yè)從鏈表中刪除if(flag=head) /在鏈表頭head=head->next

25、; else /在鏈表中p1=head;while(p1->next!=flag)p1=p1->next;p1->next=flag->next;delete flag; /刪除這個作業(yè)所占的節(jié)點cout<<"作業(yè)執(zhí)行順序為:"for(ss=0;ss<n;ss+)cout<<pnamess;if(pnamess+1 !="")cout<<" -> "cout<<endl;cout<<" 平均周轉(zhuǎn)時間為:"<<

26、runTime/n<<endl; cout<<"平均帶權(quán)周轉(zhuǎn)時間為:"<<drunTime/n<<endl;cout<<"*"<<endl;5 測試與分析5.1 測試方案先選擇算法,輸入進程數(shù)、作業(yè)名、優(yōu)先級、到達時間、估計運行時間,得出相應(yīng)的作業(yè)名、提交時間 、開始時間 、結(jié)束時間 、周轉(zhuǎn)時間、帶權(quán)周轉(zhuǎn)時間。通過四種算法之間的比較了解他們的優(yōu)缺點。5.2 測試結(jié)果 a)用戶界面如圖5.2.1圖5.2.1b)先來先服務(wù)算法如圖5.2.2 圖5.2.2c)短作業(yè)優(yōu)先算法如圖5.2.3

27、圖5.2.3d)高優(yōu)先權(quán)算法如圖5.2.4 圖5.2.4f)高響應(yīng)比優(yōu)先算法如圖5.2.5 圖5.2.5e)錯誤界面如圖5.2.6 圖5.2.65.3 結(jié)果分析由測試結(jié)果可知每種算法的優(yōu)缺點:a)先來先服務(wù)算法:有利于長作業(yè)(進程)而不利于短作業(yè)(進程)有利于CPU繁忙型作業(yè)(進程)而不利于I/O繁忙型作業(yè)(進程)。b)短作業(yè)優(yōu)先算法:比FCFS改善平均周轉(zhuǎn)時間和平均帶權(quán)周轉(zhuǎn)時間短作業(yè)的等待時間;提高系統(tǒng)的吞吐量;對長作業(yè)非常不利,可能長時間得不到執(zhí)行;未能依據(jù)作業(yè)的緊迫程度來劃分執(zhí)行的優(yōu)先級;c)難以準(zhǔn)確估計作業(yè)(進程)的執(zhí)行時間,從而影響調(diào)度性能。c)高優(yōu)先權(quán)算法:動態(tài)優(yōu)先級優(yōu)點是使相應(yīng)的

28、優(yōu)先級調(diào)度算法比較靈活、科學(xué),可防止有些進程一直得不到調(diào)度,也可防止有些進程長期壟斷處理機。動態(tài)優(yōu)先級缺點是需要花費相當(dāng)多的執(zhí)行程序時間,因而花費的系統(tǒng)開銷比較大。d)高響應(yīng)比優(yōu)先算法:短作業(yè)與先后次序的兼顧,且不會使長作業(yè)長期得不到服務(wù)響應(yīng)比計算系統(tǒng)開銷,增加系統(tǒng)開銷。6 設(shè)計小結(jié) 通過改程序?qū)Σ僮飨到y(tǒng)的基礎(chǔ)知識了解得更透徹了,同時對磁盤調(diào)度的四種算法先來先服務(wù)算法,短進程優(yōu)先調(diào)度算法,優(yōu)先權(quán)算法,高響應(yīng)比調(diào)度算法有了更深刻的理解和掌握,使我能夠為進程調(diào)度選擇適當(dāng)?shù)乃惴?,提高CPU工作效率。進行進程調(diào)度程序設(shè)計的過程中,得到老師的大力指導(dǎo)和同學(xué)的支持,在此向他們表示感謝。經(jīng)過自己的動手操作和

29、同學(xué)老師的指導(dǎo)我成功的做出了課程設(shè)自己感到很高興。在整個過程中自己也感受到了集體團結(jié)的力量,今后無論是在工作還是學(xué)習(xí)中我都會發(fā)樣這種精神。7 參考文獻1 韓立毛,李先鋒. 計算機操作系統(tǒng)實踐教程M,南京:南京大學(xué)出版社,2011.10.2 嚴(yán)蔚敏,吳偉民. 數(shù)據(jù)結(jié)構(gòu)M,北京:清華大學(xué)出版社,1997.43 張堯?qū)W,史美林. 計算機操作系統(tǒng)教程M,北京:清華大學(xué)出版社,2000.8.4 孫靜宇. 計算機操作系統(tǒng)課程設(shè)計指導(dǎo)書M,山西:太原理工出版社,2006.4.附錄 源程序代碼#include<iostream>#include<string>#include<i

30、omanip>using namespace std;#define MAX_NUM 15typedef struct JCBchar name10;/作業(yè)名float htime;/作業(yè)到達時間float ntime;/作業(yè)估計運行的時間float starttime;/作業(yè)開始運行時間float ftime;/作業(yè)完成的時間float zhouzhuan;/周轉(zhuǎn)時間float daiquan;/帶權(quán)周轉(zhuǎn)時間float xiangyingbi;/相應(yīng)比int super;/優(yōu)先級JCB *next;/定義指向下一個作業(yè)的指針JCB;int jnum;/定義作業(yè)數(shù)為jnumfloat t

31、otal;/記錄所有作業(yè)的總時間double weight;/記錄所有作業(yè)的帶權(quán)周轉(zhuǎn)時間JCB *create(JCB *head);/創(chuàng)建作業(yè)隊列void dealFCFS(JCB *head);/FCFS記錄處理void sortFCFS(JCB *head);/將作業(yè)按到達的先后順序排列void FCFS(JCB *head);/先來先服務(wù)算法void SJF(JCB *head,int n);/短作業(yè)優(yōu)先算法void SUPER(JCB *head,int n);/高優(yōu)先權(quán)優(yōu)先算法void HRN(JCB *head,int n);/高響應(yīng)比優(yōu)先算法void main()int cho

32、ice;cout<<" *進程調(diào)度算法實現(xiàn)*"<<endl;cout<<" *1.先來先服務(wù)算法*2.短作業(yè)優(yōu)先算法*"<<endl;cout<<" *3.高優(yōu)先權(quán)優(yōu)先算法*4.高響應(yīng)比優(yōu)先算法*"<<endl;cout<<"*5. 退出*"<<endl;l1:cout<<"請輸入您的選擇:"<<endl;l2:cin>>choice;JCB *head=NULL;

33、switch(choice)case 1:head=create(head);FCFS(head);goto l1;case 2:head=create(head);SJF(head,jnum);goto l1;case 3:head=create(head);SUPER(head,jnum);goto l1;case 4:head=create(head);HRN(head,jnum);goto l1;case 5:break;default:cout<<"輸入錯誤!n請重新輸入:"<<endl;goto l2;/創(chuàng)建節(jié)點與作業(yè)輸入JCB *cre

34、ate(JCB *head)JCB *p1,*p2;p1=p2=new JCB;head=p1;cout<<"請輸入作業(yè)數(shù):"cin>>jnum;for(int i=0;i<jnum;i+)p2=p1;p1=new JCB;p1->next=NULL;cout<<"請依次輸入第"<<i+1<<"個作業(yè)的信息(作業(yè)名、優(yōu)先級、到達時間、估計運行時間):"cin>>p1->name>>p1->super>>p1->

35、htime>>p1->ntime; p2->next=p1;return head;/FCFS算法void sortFCFS(JCB *head)/將作業(yè)按到達的先后順序排列JCB *p,*q,*r,*s;if(head->next!=NULL)p=head->next->next;head->next->next=NULL;while(p)q=p;p=p->next;r=head;s=head->next;while(s&&s->htime<=q->htime)r=s;s=s->next

36、;r->next=q;q->next=s;void dealFCFS(JCB *head)/FCFS記錄處理sortFCFS(head);JCB *p,*q;q=head->next;q->starttime=q->htime;q->ftime=q->starttime+q->ntime;q->zhouzhuan=q->ftime-q->htime; q->daiquan=q->zhouzhuan/(double)q->ntime;total+=q->zhouzhuan; weight+=q->da

37、iquan;p=q->next; while(p!=NULL)p->starttime=q->ftime;p->ftime=p->starttime+p->ntime;p->zhouzhuan=p->ftime-p->htime; p->daiquan=p->zhouzhuan/(double)p->ntime;total+=p->zhouzhuan; weight+=p->daiquan;q=p;p=p->next;void FCFS(JCB *head)/先來先服務(wù)算法dealFCFS(head);J

38、CB *p,*q,*s;p=head->next;cout<<"作業(yè)執(zhí)行順序為:"while(p!=NULL)cout<<"-"<<p->name;p=p->next;cout<<endl;cout<<"作業(yè)名 提交時間 開始時間 結(jié)束時間 周轉(zhuǎn)時間 帶權(quán)周轉(zhuǎn)時間n" s=head->next;while(s!=NULL)cout<<setw(4)<<s->name<<setw(7)<<s->

39、htime<<setw(10)<<s->starttime<<setw(11)<<s->ftime<<setw(10)<<s->zhouzhuan<<setw(10)<<s->daiquan<<endl;s=s->next;cout<<endl; cout<<" 平均周轉(zhuǎn)時間:"<<total/(double)jnum<<endl;cout<<"平均帶權(quán)周轉(zhuǎn)時間:&qu

40、ot;<<weight/(double)jnum<<endl;cout<<"*"<<endl;total=0;weight=0;/SJF短作業(yè)優(yōu)先算法void SJF(JCB *head,int n)JCB *p,*p1;JCB *flag=NULL;JCB *q=NULL; double time=0,j=0,runTime=0, drunTime=0;int xuhao=0;string pnameMAX_NUM;for(int ss=0;ss<MAX_NUM;ss+)pnamess=""sort

41、FCFS(head);cout<<endl;cout<<" 順序 作業(yè)名 提交時間 開始時間 結(jié)束時間 周轉(zhuǎn)時間 帶權(quán)周轉(zhuǎn)時間n"head=head->next;p=head;while(head)q=head;if(time < p->htime) /如果該作業(yè)提交時間早于其它作業(yè),則先執(zhí)行該作業(yè)time=p->htime;flag=head; /用于暫存將要執(zhí)行的作業(yè)while(q && q->htime <= time)if(q->ntime<flag->ntime)flag

42、=q;q=q->next;/輸出當(dāng)前執(zhí)行作業(yè)的信息 cout<<setw(4)<<xuhao+1;cout<<setw(8)<<flag->name;cout<<setw(8)<<flag->ntime;cout<<setw(8)<<time;cout<<setw(10)<<(time + flag->ntime);cout<<setw(10)<<(time - flag->htime + flag->ntime);

43、cout<<" "<<setw(11)<<(double)(time-flag->htime + flag->ntime)/flag->ntime)<<endl;j=(time-flag->htime+flag->ntime); /當(dāng)前執(zhí)行作業(yè)的周轉(zhuǎn)時間runTime +=j; /記錄周轉(zhuǎn)時間time+=flag->ntime;drunTime+=j/flag->ntime; /帶權(quán)周轉(zhuǎn)時間pnamexuhao=flag->name;xuhao+;/將執(zhí)行過的作業(yè)從鏈表中刪除if

44、(flag=head) /在鏈表頭head=head->next; else /在鏈表中p1=head;while(p1->next!=flag)p1=p1->next;p1->next=flag->next;delete flag; /刪除這個作業(yè)所占的節(jié)點cout<<"作業(yè)執(zhí)行順序為:"for(ss=0;ss<n;ss+)cout<<pnamess;if(pnamess+1 !="")cout<<" -> "cout<<endl;cout&l

45、t;<" 平均周轉(zhuǎn)時間為:"<<runTime/n<<endl; cout<<"平均帶權(quán)周轉(zhuǎn)時間為:"<<drunTime/n<<endl;cout<<"*"<<endl;/高優(yōu)先權(quán)優(yōu)先算法void SUPER(JCB *head,int n)JCB *p,*p1;JCB *flag=NULL;JCB *q=NULL; double time=0,j=0,runTime=0, drunTime=0;int xuhao=0;string pname

46、MAX_NUM;for(int ss=0;ss<MAX_NUM;ss+)pnamess=""sortFCFS(head);cout<<endl;cout<<" 順序 作業(yè)名 提交時間 開始時間 結(jié)束時間 周轉(zhuǎn)時間 帶權(quán)周轉(zhuǎn)時間n"head=head->next;p=head;while(head)q=head;if(time < p->htime) /如果該作業(yè)提交時間早于其它作業(yè),則先執(zhí)行該作業(yè)time=p->htime;flag=head; /用于暫存將要執(zhí)行的作業(yè)while(q &&am

47、p; q->htime <= time)if(q->super>flag->super)flag=q;q=q->next;/輸出當(dāng)前執(zhí)行作業(yè)的信息 cout<<setw(4)<<xuhao+1;cout<<setw(8)<<flag->name;cout<<setw(8)<<flag->ntime;cout<<setw(8)<<time;cout<<setw(10)<<(time + flag->ntime);cout&l

48、t;<setw(10)<<(time - flag->htime + flag->ntime);cout<<" "<<setw(11)<<(double)(time-flag->htime + flag->ntime)/flag->ntime)<<endl; j=(time-flag->htime+flag->ntime); /當(dāng)前執(zhí)行作業(yè)的周轉(zhuǎn)時間runTime +=j; /記錄周轉(zhuǎn)時間time+=flag->ntime;drunTime+=j/flag-&g

49、t;ntime; /帶權(quán)周轉(zhuǎn)時間pnamexuhao=flag->name;xuhao+;/將執(zhí)行過的作業(yè)從鏈表中刪除if(flag=head) /在鏈表頭head=head->next; else /在鏈表中p1=head;while(p1->next!=flag)p1=p1->next;p1->next=flag->next;delete flag; /刪除這個作業(yè)所占的節(jié)點cout<<"作業(yè)執(zhí)行順序為:"for(ss=0;ss<n;ss+)cout<<pnamess;if(pnamess+1 !="")cout<<" -> "cout<<endl;cout<<" 平均周轉(zhuǎn)時間為:"<<runTime/n<<endl; cout<<"平均帶權(quán)周轉(zhuǎn)時間為:"<<drunTime/n<<endl;cout<<"*"<<endl;/高相應(yīng)比優(yōu)先算法void HRN(JCB *head,int n)JCB *p,*p1;JCB *

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論