參考程序:處理機(jī)低調(diào)度模擬系統(tǒng)_第1頁
參考程序:處理機(jī)低調(diào)度模擬系統(tǒng)_第2頁
參考程序:處理機(jī)低調(diào)度模擬系統(tǒng)_第3頁
免費(fèi)預(yù)覽已結(jié)束,剩余34頁可下載查看

下載本文檔

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

文檔簡介

1、題目:處理機(jī)調(diào)度算法的模擬專業(yè):網(wǎng)絡(luò)項(xiàng)目班級:學(xué)號:姓名:指導(dǎo)教師:完成日期:一、課程設(shè)計(jì)目的1、掌握C語言數(shù)組、函數(shù)、指針、結(jié)構(gòu)體的綜合應(yīng)用。2、掌握使用C語言,進(jìn)行應(yīng)用性的開發(fā)。3、掌握系統(tǒng)數(shù)據(jù)結(jié)構(gòu)與算法的設(shè)計(jì)。二、課程設(shè)計(jì)內(nèi)容課程設(shè)計(jì)題目:處理機(jī)低級調(diào)度模擬系統(tǒng)課程設(shè)計(jì)內(nèi)容:根據(jù)操作系統(tǒng)處理機(jī)不同的調(diào)度算法,使用C語言模擬實(shí)現(xiàn)處理機(jī)調(diào)度過程。1、系統(tǒng)數(shù)據(jù)結(jié)構(gòu)<1)進(jìn)程控制塊vpcb):進(jìn)程名稱、至U達(dá)時(shí)間、進(jìn)程要求運(yùn)行時(shí)間、進(jìn)程已運(yùn)行時(shí)間、指針、進(jìn)程狀態(tài)等等 <要根據(jù)不同算法的需要 定義全面的數(shù)據(jù)結(jié)構(gòu))<2)進(jìn)程隊(duì)列vPQueue :鏈表2、調(diào)度算法<1)先來先服

2、務(wù)調(diào)度vFCFS):按照進(jìn)程提交給系統(tǒng)的先后順序 來挑選進(jìn)程, 先提交的先被挑選。<2)短進(jìn)程優(yōu)先調(diào)度 <SJF): 是以進(jìn)入系統(tǒng)的進(jìn)程所提出的 “執(zhí) 行時(shí)間 ”為標(biāo)準(zhǔn),總是優(yōu)先選取執(zhí)行時(shí)間最短的進(jìn)程。<3)高響應(yīng)比優(yōu)先調(diào)度 <HRN ):是在每次調(diào)度前都要計(jì)算所有 被選進(jìn)程 <在后備隊(duì)列中)的響應(yīng)比,然后選擇響應(yīng)比最高的進(jìn)程執(zhí) 行。<4)多級反饋隊(duì)列調(diào)度(FB,第i級隊(duì)列的時(shí)間片=2i-1>: <a)應(yīng) 設(shè)置多個就緒隊(duì)列,并為各個隊(duì)列賦予不同的優(yōu)先級。<b)當(dāng)一個新進(jìn)程進(jìn)入內(nèi)存后,首先將它放入第一隊(duì)列的末尾,按 FCFS 的原 則排隊(duì)等待

3、調(diào)度。當(dāng)輪到該進(jìn)程執(zhí)行時(shí),如他能在該時(shí)間片內(nèi)完 成,便可準(zhǔn)備撤離系統(tǒng);如果它在一個時(shí)間片結(jié)束時(shí)尚未完成,調(diào) 度程序便將該進(jìn)程轉(zhuǎn)入第二隊(duì)列的末尾,再同樣地按 FCFS 原則等 待調(diào)度執(zhí)行;如果它在第二隊(duì)列中運(yùn)行一個時(shí)間片后仍未完成,再 依次將它放入第三隊(duì)列 ,如此下去,當(dāng)一個長作業(yè)進(jìn)程從第一 隊(duì)列依次降到第 N 隊(duì)列后,在第 N 隊(duì)列中便采取時(shí)間片輪轉(zhuǎn)的方式 運(yùn)行。VC )僅當(dāng)?shù)谝魂?duì)列空閑時(shí),調(diào)度程序才調(diào)度第二隊(duì)列中的進(jìn) 程運(yùn)行。三、課程設(shè)計(jì)的要求1、按照給出的題目內(nèi)容 <1)完成系統(tǒng)數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)與實(shí)現(xiàn)、系統(tǒng)算法設(shè)計(jì)與實(shí)現(xiàn)、系統(tǒng)模 塊設(shè)計(jì)與實(shí)現(xiàn)、系統(tǒng)總體的設(shè)計(jì)與實(shí)現(xiàn)。<2)系統(tǒng)需要一

4、個簡單操作界面,例如:1. 先來先服務(wù)調(diào)度2. 短進(jìn)程優(yōu)先調(diào)度3. 高響應(yīng)比優(yōu)先調(diào)度4. 多級反饋隊(duì)列調(diào)度5. 退出<按數(shù)字 1、2、 3、 4、5,選擇操作) <3)對每種調(diào)度算法都要求輸出每個進(jìn)程 <進(jìn)程數(shù)不少于 5)開始運(yùn) 行時(shí)刻、完成時(shí)刻、周轉(zhuǎn)時(shí)間,以及這組進(jìn)程的平均周轉(zhuǎn)時(shí)間。 <4)畫出每種調(diào)度算法流程圖。2、寫出課程設(shè)計(jì)報(bào)告,設(shè)計(jì)報(bào)告提交形式:電子文檔提交3、個人獨(dú)立完成。4、完成時(shí)間 <1 周)四、課程設(shè)計(jì)過程1、系統(tǒng)中所使用的數(shù)據(jù)結(jié)構(gòu)及說明/ 數(shù)據(jù)結(jié)構(gòu)的定義 /定義進(jìn)程控制塊 PCBtypedef struct PCBchar PID5。/進(jìn)程標(biāo)示

5、符int PRI/進(jìn)程的優(yōu)先級 (越小越高 >float NeedTime。float StartTime。間float RunBeginTime。float UpTime。float OverTime 。float TurnaroundTime。 float RightTTime 。 struct PCB *next。 PCB,*QueuePtr。 /定義進(jìn)程隊(duì)列 typedef struct QueuePtr front,rear。PQueue。2、系統(tǒng)功能結(jié)構(gòu)/ 進(jìn)程要求運(yùn)行時(shí)間 (服務(wù)時(shí)間 > /進(jìn)程進(jìn)入就緒隊(duì)列的時(shí)間 ( 到達(dá)時(shí)/ 開始運(yùn)行時(shí)間/ 進(jìn)程已運(yùn)行時(shí)間/ 進(jìn)程運(yùn)

6、行完成的時(shí)間/周轉(zhuǎn)時(shí)間/ 帶權(quán)周轉(zhuǎn)時(shí)間/隊(duì)頭、隊(duì)尾指針本系統(tǒng)是處理機(jī)低級調(diào)度模擬系統(tǒng),主要通過模擬來實(shí)現(xiàn)處理機(jī)調(diào)度,調(diào)度方式有先來先服務(wù)調(diào)度VFCFS)、短進(jìn)程優(yōu)先調(diào)度<SJF)、高響應(yīng)比優(yōu)先調(diào)度<HRN)、多級反饋隊(duì)列調(diào)度 (FB>四種 調(diào)度方式。系統(tǒng)運(yùn)行過程如下:輸入進(jìn)程個數(shù),輸入進(jìn)程詳細(xì)信息,通過簡單操作界面來選擇調(diào)度方式,調(diào)度的過程和結(jié)果,重新選擇調(diào)度方式或者選擇結(jié)束開始3、調(diào)度算法流程圖 如下圖所示)開始輸入進(jìn)程個 數(shù)和進(jìn)程詳 細(xì)信息找到第一個到達(dá)的進(jìn)程并排在隊(duì)首以后到達(dá)的進(jìn)程按到達(dá)時(shí)間和服務(wù)時(shí)間進(jìn)行綜合排序令p為隊(duì)首的進(jìn)程計(jì)算p的開始運(yùn)行時(shí)間,結(jié)束運(yùn)行時(shí)間,周轉(zhuǎn)時(shí)

7、間和帶權(quán)周轉(zhuǎn)時(shí)間p=p_>next輸出進(jìn)程 相關(guān)信息NOYES p!=NULL?>輸出平均周轉(zhuǎn) 時(shí)間和平均帶 權(quán)周轉(zhuǎn)時(shí)間計(jì)算平均周轉(zhuǎn)時(shí)間和平均帶權(quán)周轉(zhuǎn)時(shí)間結(jié)束輸入進(jìn)程個數(shù)和進(jìn)程詳細(xì)信息找到第一個到達(dá)的進(jìn)程并排在隊(duì)首以后到達(dá)的進(jìn)程按響應(yīng)比大小進(jìn)行排序令P為隊(duì)首的進(jìn)程計(jì)算P的開始運(yùn)行時(shí)間,結(jié)束運(yùn)行時(shí)間,周轉(zhuǎn)時(shí)間和帶權(quán)周轉(zhuǎn)時(shí)間輸出進(jìn)程 相關(guān)信息p=p_>nextYESp!=NULL? ii計(jì)算平均周轉(zhuǎn) 時(shí)間和平均帶權(quán)周轉(zhuǎn)時(shí)間輸出平均周轉(zhuǎn) 時(shí)間和平均帶 權(quán)周轉(zhuǎn)時(shí)間結(jié)束開始輸入進(jìn)程個 數(shù)和進(jìn)程詳細(xì)信息對進(jìn)程按FCFS序 并保存在隊(duì)列Q中設(shè)置第一隊(duì)列Q、第二隊(duì)列M、第三隊(duì)列N的時(shí)間片T1

8、、T2、T3的大?。?i-1)NOYES第一隊(duì)列Q為空? 令p為隊(duì)列Q的頭結(jié)點(diǎn)YES一 第二隊(duì)列M為空?、二;NOYES叩->n ext這個進(jìn)程的<=T1?服務(wù)時(shí)間*計(jì)算p->next的已運(yùn) 行時(shí)間,結(jié)束運(yùn)行 時(shí)間,周轉(zhuǎn)時(shí)間和 帶權(quán)周轉(zhuǎn)時(shí)間輸出進(jìn)程詳 細(xì)運(yùn)行信息NO令P-> next的已運(yùn)行時(shí)間為T1輸出進(jìn)程詳 細(xì)運(yùn)行信息將進(jìn)程插入隊(duì)列M中> p=p->next "<YE乞:p->next!=NULL? 一:;-結(jié)束令p為隊(duì)列 M的頭結(jié)點(diǎn)YESNO_.”P>next這個進(jìn)程的""耳 服務(wù)時(shí)間<=T2?&g

9、t;計(jì)算p-> next的已運(yùn)行時(shí)間,結(jié)束運(yùn)行 時(shí)間,周轉(zhuǎn)時(shí)間和帶權(quán)周轉(zhuǎn)時(shí)間YES "、*-第三隊(duì)列N為空?令P-> next的已運(yùn)行時(shí)間為T1+T2輸出進(jìn)程詳 細(xì)運(yùn)行信息輸出進(jìn)程詳 細(xì)運(yùn)行信息將進(jìn)程插入隊(duì)列N中Hp=p->nextp->next!=NULL?NO令p為隊(duì)列N的頭結(jié)點(diǎn)計(jì)算p-> next的已運(yùn)行時(shí)間,結(jié)束運(yùn)行時(shí)間,周轉(zhuǎn)時(shí)間和帶權(quán)周轉(zhuǎn)時(shí)間輸出進(jìn)程詳 細(xì)運(yùn)行信息YESp=p->nextNOYES,p-> next!=NULL?4、程序清單及其描述#include<stdio.h>#include<stdlib.h

10、>#include<math.h>#include<malloc.h>#include<process.h>#include<stdlib.h>#define NULL 0int ProcessNum。/進(jìn)程個數(shù)float AverageTurnoverTime。 /平均周轉(zhuǎn)時(shí)間float AverageRightTTime。 /平均帶權(quán)周轉(zhuǎn)時(shí)間/ 函數(shù)結(jié)果狀態(tài)代碼 #define TRUE 1#define FALSE 0#define OK 1#define ERROR 0/ 數(shù)據(jù)結(jié)構(gòu)的定義 /定義進(jìn)程控制塊 PCBtypedef st

11、ruct PCBchar PID5。/進(jìn)程標(biāo)示符char Name10。/進(jìn)程名稱int PRI/進(jìn)程的優(yōu)先級 (越小越高 >/進(jìn)程要求運(yùn)行時(shí)間 (服務(wù)時(shí)間 > /進(jìn)程進(jìn)入就緒隊(duì)列的時(shí)間 (到達(dá)時(shí)間 >/開始運(yùn)行時(shí)間/進(jìn)程已運(yùn)行時(shí)間/進(jìn)程運(yùn)行完成的時(shí)間/周轉(zhuǎn)時(shí)間/帶權(quán)周轉(zhuǎn)時(shí)間/隊(duì)頭、隊(duì)尾指針float NeedTime。 float StartTime。float RunBeginTime。float UpTime。 float OverTime 。float TurnaroundTime。 float RightTTime 。 struct PCB *next。PCB,*Q

12、ueuePtr。 /定義進(jìn)程隊(duì)列 typedef structQueuePtr front,rear。PQueue。/ 函數(shù)的申明int InitQueue(PQueue &Q。 int EnQueue(PQueue &Q。int QueueEmpty(PQueue Q。 回 1,否則返回 0 void PoolQueue(PQueue *Q。 int print(PQueue Q。/構(gòu)造一個空隊(duì)列/插入一個新的進(jìn)程到隊(duì)尾隊(duì)列判空,若Q為空隊(duì)列,則返/建立后備隊(duì)列/進(jìn)程隊(duì)列輸出void FCFSsort(PQueue &Q>。 進(jìn)行排序void SPFsort(P

13、Queue &Q>。進(jìn)行排序void HRNsort(PQueue &Q>。 間進(jìn)行排序void Dispatcher(PQueue &Q>。void FB(PQueue &Q>。/先來先服務(wù)調(diào)度的對到達(dá)時(shí)間/短進(jìn)程優(yōu)先調(diào)度的對服務(wù)時(shí)間/高響應(yīng)比優(yōu)先調(diào)度的對服務(wù)時(shí)/先來先服務(wù)調(diào)度/多級反饋隊(duì)列調(diào)度void ManagesChooses(PQueue &Q。 / 調(diào)度方式選擇/ 函數(shù)的定義 / 構(gòu)造一個空隊(duì)列 int InitQueue(PQueue &Q>Q.front=Q.rear=(QueuePtr>mal

14、loc(sizeof(PCB>>。 if(!Q.front>exit(0> 。Q.front->next=NULL 。return 1。/ 插入一個新的進(jìn)程到隊(duì)尾 int EnQueue(PQueue &Q>QueuePtr p。if(!(p=(QueuePtr>malloc(sizeof(PCB>>>>/存儲分配失敗exit(0> 。 scanf("%s",p->PID>。/輸入進(jìn)程標(biāo)示符 scanf("%s",p->Name>。/輸入進(jìn)程名scan

15、f("%d %f %f",&p->PRI,&p->NeedTime,&p->StartTime>。 /輸入進(jìn)程優(yōu)先級、要求運(yùn)行時(shí)間、到達(dá)時(shí)間 p->next=NULL 。Q.rear->next=p。Q.rear=p。return 1。/ 隊(duì)列判空, 若 Q 為空隊(duì)列 ,則返回 1,否則返回 0int QueueEmpty(PQueue Q>/若Q為空隊(duì)列,則返回1,否則返回0if(Q.front=Q.rear>return 1。elsereturn 0。/ 建立后備隊(duì)列 void PoolQueue(

16、PQueue *Qint i 。printf(" 請輸入進(jìn)程的個數(shù): "。 scanf("%d",&ProcessNum。printf("請輸入d個進(jìn)程的信息T代表時(shí)間)n標(biāo)示符 程名 優(yōu)先級 服務(wù) T 到達(dá) Tn",ProcessNum。for(i=1。i二ProcessNum。i+ EnQueue(*Q。/ 進(jìn)程隊(duì)列輸出 int print(PQueue QQueuePtr p。if(Q.front=Q.rearreturn 0。p=Q.front-next。printf("<T 代表時(shí)間) n 標(biāo)示符 進(jìn)

17、程名 優(yōu)先級 服 務(wù) T 到達(dá) Tn"> 。while (p!=NULL>/當(dāng)隊(duì)列不空printf("%st%st%dt%4.3ft%4.3fn",p->PID,p->Name,p- >PRI,p->NeedTime,p->StartTime>。p=p->next。/ 先來先服務(wù)調(diào)度的對到達(dá)時(shí)間進(jìn)行排序 void FCFSsort(PQueue &Q>QueuePtr tail,p=Q.front。QueuePtr q=p->next。tail=NULL 。for(。p->next-&

18、gt;next!二tail。p=Q.front,q=p->next>/選擇排序if(p->next->StartTime > q->next->StartTime> p->next=q->next。q->next=q->next->next。p->next->next=q。p=p->next。q=p->next。tail=q 。/ 短進(jìn)程優(yōu)先調(diào)度的對服務(wù)時(shí)間進(jìn)行排序 void SPFsort(PQueue &Q>/deltaT 是時(shí)間float deltaT,Time=0。差Qu

19、euePtr temp1,temp2,tail,p=Q.fro n。QueuePtr q=p->next。tail=NULL 。一個到達(dá)而且服務(wù)時(shí)間最少的進(jìn)程if(p->next->StartTime > q->next->StartTime>temp1=p->next。temp2=q->next。p->next=temp2。q->next=temp2->next。p->next->next=temp1。elseq=q->next。if(p->next->StartTime > Time

20、>Time=p->StartTime。Time=Time+p->next->NeedTime。for(p=p->next,q=p->next 。 p->next->next!=tail 。 p=p->next,q=p->next>/對隊(duì)列按到達(dá)時(shí)間與服務(wù)時(shí)間長短進(jìn)行選擇排序<從第二個元素開始)while(q->next!=tail>if(p->next->StartTime <= Time>>if(q->next->StartTime <= Time>&am

21、p;&(p->next- >NeedTime > q->next->NeedTime>>temp1=p->next。temp2=q->next。p->next=temp2。q->next=temp2->next。p->next->next=temp1。elseq=q->next。else if(p->next->StartTime > Time>&&(q->next- >StartTime <= Time>>temp2=q-&g

22、t;next。p->next=temp2。q->next=temp2->next。p->next->next=temp1。elseq=q->next。if(p->next->StartTime > Time>deltaT=p->StartTime-Time。Time=Time+deltaT。Time=Time+p->next->NeedTime。/ 高響應(yīng)比優(yōu)先調(diào)度的對服務(wù)時(shí)間進(jìn)行排序 - void HRNsort(PQueue &Q>float deltaT,PResp on seRatio,QRes

23、p on seRatio,Time=0/deltaT是時(shí)間差,PResponseRatio QResponseRatic是響應(yīng)比QueuePtr temp1,temp2,tail,p=Q.fro n。QueuePtr q=p->next。tail=NULL 。for(。 q->next!=tail 。 >/找出第一個到達(dá)而且服務(wù)時(shí)間最少的進(jìn)程if(p->next->StartTime > q->next->StartTime>temp1=p->next。temp2=q->next。p->next=temp2。q->n

24、ext=temp2->next。p->next->next=temp1。elseq=q->next。if(p->next->StartTime > Time>Time=p->StartTime。Time=Time+p->next->NeedTime。for(p=p->next,q=p->next 。 p->next->next!=tail 。 p=p->next,q=p- >next>/對隊(duì)列按響應(yīng)比大小排序 <從第二個元素開始)while(q->next!=tail>

25、if(p->next->StartTime <= Time>&&(q->next->StartTime <= Time>>PResponseRatio=(Time-p->next- >StartTime>+p->next->NeedTime>/(p->next->NeedTime>>。QResponseRatio=(Time-q->next->StartTime>+q->next->NeedTime>/(q->next-&g

26、t;NeedTime>>。 if(PResponseRatio<QResponseRatio> temp1=p->next。temp2=q->next。p->next=temp2。 q->next=temp2->next。 p->next->next=temp1。elseq=q->next。else if(p->next->StartTime > Time>&&(q->next- >StartTime <= Time>>temp1=p->next。

27、temp2=q->next。p->next=temp2。q->next=temp2->next。 p->next->next=temp1。elseq=q->next。if(p->next->StartTime > Time>Time=Time+deltaT。Time=Time+p->next->NeedTime。/ 調(diào)度 void Dispatcher(PQueue &Q>float SumTurnaroundTime=0。 /定義周轉(zhuǎn)時(shí)間總和并賦值 0float SumRightTTime=0。/定義

28、帶權(quán)周轉(zhuǎn)時(shí)間總和并賦值 0float deltaT,Time=0。/deltaT 是時(shí)間差QueuePtr p=Q.front->next。printf("<T 代表時(shí)間) n 標(biāo)示符進(jìn)程名 到達(dá) T務(wù) T 開始 T 完成 T 周轉(zhuǎn) T 帶權(quán)周轉(zhuǎn) Tn"> 。for(。p!二NULL。p=p->next>if(p->StartTime>Time>Time=deltaT。p->RunBeginTime=Time。p->OverTime=Time+p->NeedTime。p->TurnaroundTime=

29、p->OverTime-p->StartTime。 p->RightTTime=p->TurnaroundTime/p->NeedTime。printf("%st%st%4.3ft%4.3ft%4.3ft%4.3ft%4.3ft%4.3fn",p->PID,p->Name,p->StartTime,p->NeedTime,p->RunBeginTime,p->OverTime,p->TurnaroundTime,p->RightTTime>。Time=p->OverTime。for(p

30、二Q.front->next。p!二NULL。p=p->next>/計(jì)算平均周轉(zhuǎn)時(shí)間和平均帶權(quán)周轉(zhuǎn)時(shí)間SumTurnaroundTime=SumTurnaroundTime+p->TurnaroundTime。SumRightTTime=SumRightTTime+p->RightTTime 。 AverageTurnoverTime=SumTurnaroundTime/ProcessNum。AverageRightTTime=SumRightTTime/ProcessNum。printf("此調(diào)度方式的平均周轉(zhuǎn)時(shí)間為 4.3f,平均帶權(quán)周轉(zhuǎn)時(shí)間為 4.

31、3fn",AverageTurnoverTime,AverageRightTTime。/多級反饋隊(duì)列調(diào)度 void FB(PQueue &QPQueue M,N。InitQueue(M。/初始化第二隊(duì)列InitQueue(N。/初始化第三隊(duì)列FCFSsort(Q。printf(" 調(diào)度前進(jìn)程排列如下 :n"。print(Q。QueuePtr p,q,r。q=M.front。r=N.front。float i,deltaT,Time=0。/deltaT是時(shí)間差float T1,T2,T3。T1=2*1-1 。第一隊(duì)列Q的時(shí)間片T2=2*2-1 。/第二隊(duì)列

32、M 的時(shí)間片T3=2*3-1 。/第三隊(duì)列 M 的時(shí)間片 printf("n 調(diào)度過程如下 :n"> 。for(p二Q.front。p->next!二NULL。p=p->next>/第一隊(duì)列的調(diào)度if(p->next->StartTime>Time>for(i=Time+1 。 i<=p->next->StartTime。 i+> printf("第4.3f時(shí)刻,等待隊(duì)列到來! n",i>。deltaT=p->next->StartTime-Time。Time=Ti

33、me+deltaT。p->next->RunBeginTime=Time。 if(p->next->NeedTime<=T1>p->next->OverTime=Time+p->next->NeedTime。 p->next->UpTime=p->next->NeedTime。>next->StartTime。p->next->RightTTime=p->next->TurnaroundTime/p->next->NeedTime。for(i二Time+1。i&l

34、t;p->next->OverTime。i+>printf("第4.3f時(shí)刻,進(jìn)程標(biāo)示符 st進(jìn)程 名 %s 運(yùn)行中,已運(yùn)行了 %4.3f 時(shí)刻! n",i,p->next->PID,p->next- >Name,i-Time>。printf("第%4.3f時(shí)刻,進(jìn)程標(biāo)示符 %st進(jìn)程名%s 運(yùn)行完成! n",i,p->next->PID,p->next->Name>。Time=p->next->OverTime。elsep->next->UpTime=

35、T1 。for(i=1 。 i<=T1 。 i+>printf("第%4.3f時(shí)刻,進(jìn)程標(biāo)示符 %st進(jìn)程 名 %s 運(yùn)行中,已運(yùn)行了 %4.3f 時(shí)刻! n",p->next->RunBeginTime+i,p- >next->PID,p->next->Name,i>。q->next=p->next。q=q->next。Time=Time+T1 。q->next=NULL 。for(p=M.front。p->next!二NULL。p=p->next>/第二隊(duì)列的調(diào)度if(p-&

36、gt;next->NeedTime-p->next->UpTime><=T2>p->next->OverTime=Time+p->next->NeedTime-p- >next->UpTime。p->next->TurnaroundTime=p->next->OverTime-p- >next->StartTime。p->next->RightTTime=p->next->TurnaroundTime/p- >next->NeedTime。for(i=

37、Time+1 。 i<p->next->OverTime。 i+>printf("第4.3f時(shí)刻,進(jìn)程標(biāo)示符 st進(jìn)程 名 %s 運(yùn)行中,已運(yùn)行了 %4.3f 時(shí)刻! n",i,p->next->PID,p->next- >Name,p->next->UpTime+i-Time> 。printf("第%4.3f時(shí)刻,進(jìn)程標(biāo)示符 %st進(jìn)程名%s 運(yùn)行完成! n",i,p->next->PID,p->next->Name>。p->next->UpTi

38、me=p->next->NeedTime。elsefor(i=1。i<=T2。i+>printf("第4.3f時(shí)刻,進(jìn)程標(biāo)示符 st進(jìn)程 名 %s 運(yùn)行中,已運(yùn)行了 %4.3f 時(shí)刻! n",Time+i,p->next->PID,p- >next->Name,i+p->next->UpTime>。r->next=p->next。r=r->next。 p->next->UpTime=p->next->UpTime+T2 。 Time=Time+T2。r->nex

39、t=NULL 。for(p=N.front。 p->next!=NULL 。 p=p->next>/第三隊(duì)列的調(diào)度 p->next->OverTime=Time+p->next->NeedTime-p->next- >UpTime。p->next->TurnaroundTime=p->next->OverTime-p->next- >StartTime。>NeedTime。for(i二Time+1。i<p->next->OverTime。i+>printf("第4.

40、3f時(shí)刻,進(jìn)程標(biāo)示符 st進(jìn)程名%s 運(yùn)行中,已運(yùn)行了 %4.3f 時(shí)刻! n",i,p->next->PID,p->next->Name,p- >next->UpTime+i-Time> 。printf("第%4.3f時(shí)刻,進(jìn)程標(biāo)示符%st進(jìn)程名%s運(yùn)行完 成! n",i,p->next->PID,p->next->Name> 。p->next->UpTime=p->next->NeedTime。 Time=p->next->OverTime。/ 調(diào)度方式

41、選擇 void ManagesChooses(PQueue &Q>int i 。printf("nnnt 請選擇調(diào)度方式: n">。 printf("=n"> 。printf("1.先來先服務(wù)調(diào)度 n">。printf("2.短進(jìn)程優(yōu)先調(diào)度 n">。printf("3.高響應(yīng)比優(yōu)先調(diào)度 n">。printf("4.多級反饋隊(duì)列調(diào)度 n">。prin tf(" 5.退出 n">。printf("

42、;< 按數(shù)字 1、2、3、4、5,選擇操作)n">。n">printf(" scanf("%d",&i 。switch(icase 1:FCFSsort(Q。printf(" 先來先服務(wù)調(diào)度的對到達(dá)時(shí)間進(jìn)行排序的排序 結(jié)果如下 :n" 。print(Q 。printf("n 調(diào)度后的結(jié)果如下 :n" 。Dispatcher(Q。Man agesChooses(Qbreak。case 2:SPFsort(Q。printf(" 短進(jìn)程優(yōu)先調(diào)度的對服務(wù)時(shí)間進(jìn)行排序的排序 結(jié)果

43、如下 :n"。print(Q。printf("n 調(diào)度后的結(jié)果如下 :n" 。Dispatcher(Q。ManagesChooses(Q 。break。case 3:HRNsort(Q。printf(" 高響應(yīng)比優(yōu)先調(diào)度的對服務(wù)時(shí)間進(jìn)行排序的排序結(jié)果如下 :n">print(Q 。printf("n 調(diào)度后的結(jié)果如下 :n" 。 Dispatcher(Q。Man agesChooses(Qbreak。case 4:FB(Q。ManagesChooses(Q 。break。case 5:break。/ 主函數(shù) void

44、main(int n。PQueue Q。InitQueue(Q。/初始化后備隊(duì)列PoolQueue(&Q。/ 進(jìn)程插入后備隊(duì)列中并返回進(jìn)程個數(shù)printf("n 輸入的進(jìn)程情況如下 :n"。print(Q。Man agesChooses(Q>3、系統(tǒng)運(yùn)行結(jié)果"E:M SDev98MyProjectsll 冃 2 了曰 iDe bugl 1月對曰己.exe"g無口王 哥一 5 方入符 圍幕1;4 5呈名E標(biāo)示符123標(biāo)手符123A間T夷服4代優(yōu)魏1234請選擇調(diào)度方式:度度、衛(wèi) 度度調(diào)調(diào)亦 調(diào)調(diào)先列 桑優(yōu)隊(duì)4饋冬 先程應(yīng)反 、 盍高多退12

45、3 4服務(wù)T4. HUB3.0005 B0Q2.BB04.000到達(dá)T0.0001.3002*0004*盹0優(yōu)救12服務(wù)T4- dt)03-AO05- 0002.00040附到達(dá)T0.0001-Q902.B&&3.0004,000訓(xùn)痘后的結(jié)果如下:撕軀名1Ab B司)到達(dá)T0.000l.oee2.see3.000 4.000服務(wù)T4.0003.0005.0002.004.B00開始T0.0004.0007,000 12.000 丄4B00完成T4.00012.00014.B0018.000周轉(zhuǎn)T4.QQQJ 00010.00011 14,000帶權(quán)周轉(zhuǎn)T1.0002.&

46、Q&2.8005.5003.590此調(diào)度方式的平均周轉(zhuǎn)時(shí)間為以込平均帶權(quán)周轉(zhuǎn)時(shí)間為“翻先程應(yīng)反 盡響番 奩高多退4度度 度度調(diào)調(diào) 調(diào)調(diào)先列 務(wù)先優(yōu)隊(duì)度的對展務(wù)時(shí)間迸行排序的排序結(jié)果如下)呈名優(yōu)先級服務(wù)T到達(dá)T14.0000.00042.0003 00023.0001 00054.0004.00035.0002 000到達(dá)T0 000服務(wù)T4 000開始T0 000完成T4 000周轉(zhuǎn)T4.000帶權(quán)周轉(zhuǎn)T1.0004D3.0002.0004.0006.0003.00012B1.0003.0006.0009.0008.00025E4.0004.0009.00013.0009.00023C2.0005.0001

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論