參考程序:處理機(jī)低調(diào)度模擬系統(tǒng)_第1頁
參考程序:處理機(jī)低調(diào)度模擬系統(tǒng)_第2頁
參考程序:處理機(jī)低調(diào)度模擬系統(tǒng)_第3頁
參考程序:處理機(jī)低調(diào)度模擬系統(tǒng)_第4頁
參考程序:處理機(jī)低調(diào)度模擬系統(tǒng)_第5頁
已閱讀5頁,還剩38頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

題目:處理機(jī)調(diào)度算法的模擬專業(yè):網(wǎng)絡(luò)項(xiàng)目班級(jí):學(xué)號(hào):姓名:指導(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ī)低級(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)程控制塊<pcb):進(jìn)程名稱、到達(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ì)列<PQueue):鏈表……2、調(diào)度算法<1)先來先服務(wù)調(diào)度<FCFS):按照進(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)多級(jí)反饋隊(duì)列調(diào)度(FB,第i級(jí)隊(duì)列的時(shí)間片=2-1>:<a)應(yīng)設(shè)置多個(gè)就緒隊(duì)列,并為各個(gè)隊(duì)列賦予不同的優(yōu)先級(jí)。<b)當(dāng)一個(gè)新進(jìn)程進(jìn)入內(nèi)存后,首先將它放入第一隊(duì)列的末尾,按FCFS的原則排隊(duì)等待調(diào)度。當(dāng)輪到該進(jìn)程執(zhí)行時(shí),如他能在該時(shí)間片內(nèi)完成,便可準(zhǔn)備撤離系統(tǒng);如果它在一個(gè)時(shí)間片結(jié)束時(shí)尚未完成,調(diào)度程序便將該進(jìn)程轉(zhuǎn)入第二隊(duì)列的末尾,再同樣地按FCFS原則等待調(diào)度執(zhí)行;如果它在第二隊(duì)列中運(yùn)行一個(gè)時(shí)間片后仍未完成,再依次將它放入第三隊(duì)列……,如此下去,當(dāng)一個(gè)長作業(yè)進(jìn)程從第一隊(duì)列依次降到第N隊(duì)列后,在第N隊(duì)列中便采取時(shí)間片輪轉(zhuǎn)的方式運(yùn)行。<c)僅當(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)需要一個(gè)簡單操作界面,例如:charName[10]charName[10]。 //進(jìn)程名稱.先來先服務(wù)調(diào)度.短進(jìn)程優(yōu)先調(diào)度.高響應(yīng)比優(yōu)先調(diào)度.多級(jí)反饋隊(duì)列調(diào)度.退出<按數(shù)字1、2、3、4、5,選擇操作)<3)對(duì)每種調(diào)度算法都要求輸出每個(gè)進(jìn)程進(jìn)程數(shù)不少于)開始運(yùn)行時(shí)刻、完成時(shí)刻、周轉(zhuǎn)時(shí)間,以及這組進(jìn)程的平均周轉(zhuǎn)時(shí)間。)畫出每種調(diào)度算法流程圖。2、寫出課程設(shè)計(jì)報(bào)告,設(shè)計(jì)報(bào)告提交形式:電子文檔提交3、個(gè)人獨(dú)立完成。4、完成時(shí)間<1周)四、課程設(shè)計(jì)過程1、系統(tǒng)中所使用的數(shù)據(jù)結(jié)構(gòu)及說明// 數(shù)據(jù)結(jié)構(gòu)的定義 〃定義進(jìn)程控制塊PCBtypedefstructPCB(charPID[5]。 〃進(jìn)程標(biāo)示符intPRIintPRI。 //進(jìn)程的優(yōu)先級(jí)(越小越高>floatNeedTime。 //進(jìn)程要求運(yùn)行時(shí)間(服務(wù)時(shí)間>floatStartTime。 //進(jìn)程進(jìn)入就緒隊(duì)列的時(shí)間(到達(dá)時(shí)間>floatRunBeginTime。//開始運(yùn)行時(shí)間floatUpTime。//進(jìn)程已運(yùn)行時(shí)間floatOverTime。//進(jìn)程運(yùn)行完成的時(shí)間floatTurnaroundTime。//周轉(zhuǎn)時(shí)間floatRightTTime。//帶權(quán)周轉(zhuǎn)時(shí)間structPCB*next。}PCB,*QueuePtr。//定義進(jìn)程隊(duì)列typedefstruct{QueuePtrfront,rear。 //隊(duì)頭、隊(duì)尾指針}PQueue。2、系統(tǒng)功能結(jié)構(gòu)本系統(tǒng)是處理機(jī)低級(jí)調(diào)度模擬系統(tǒng),主要通過模擬來實(shí)現(xiàn)處理機(jī)調(diào)度,調(diào)度方式有先來先服務(wù)調(diào)度<FCFS)、短進(jìn)程優(yōu)先調(diào)度<SJF)、高響應(yīng)比優(yōu)先調(diào)度<HRN)、多級(jí)反饋隊(duì)列調(diào)度(FB>四種調(diào)度方式。系統(tǒng)運(yùn)行過程如下:輸入進(jìn)程個(gè)數(shù),輸入進(jìn)程詳細(xì)信息,通過簡單操作界面來選擇調(diào)度方式,調(diào)度的過程和結(jié)果,重新選擇調(diào)度方式或者選擇結(jié)束。3、調(diào)度算法流程圖<如下圖所示)開始輸入進(jìn)程個(gè)數(shù)和進(jìn)程詳細(xì)信息開始進(jìn)程按到達(dá)時(shí)

間進(jìn)行排序令p為隊(duì)

首的進(jìn)程輸入進(jìn)程個(gè)

數(shù)和進(jìn)程詳

細(xì)信息找到第一個(gè)到達(dá)的

進(jìn)程并排在隊(duì)首以后到達(dá)的進(jìn)程按到達(dá)時(shí)間和服

務(wù)時(shí)間進(jìn)行綜合排序令p為隊(duì)

首的進(jìn)程找到第一個(gè)到達(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ì)算p的開始運(yùn)行

時(shí)間,結(jié)束運(yùn)行時(shí)

間,周轉(zhuǎn)時(shí)間和帶

權(quán)周轉(zhuǎn)時(shí)間計(jì)算p的開始運(yùn)行

時(shí)間,結(jié)束運(yùn)行時(shí)

間,周轉(zhuǎn)時(shí)間和帶

權(quán)周轉(zhuǎn)時(shí)間輸出進(jìn)程相關(guān)信息/輸出進(jìn)程相關(guān)信息/輸出進(jìn)程相關(guān)信息輸出進(jìn)程

相關(guān)信息p=p>nextp=p>nextp=p>nextYESp!=NULL?xYES p!=NULL?二NO輸出平均周轉(zhuǎn)時(shí)間和平均帶權(quán)周轉(zhuǎn)時(shí)間計(jì)算平均周轉(zhuǎn)時(shí)間和平均帶權(quán)周轉(zhuǎn)時(shí)間結(jié)束j輸出平均周轉(zhuǎn)時(shí)間和平均帶權(quán)周轉(zhuǎn)時(shí)間NO計(jì)算平均周轉(zhuǎn)時(shí)間和平均帶權(quán)周轉(zhuǎn)時(shí)間結(jié)束■__■YES p!=NULL?kNO計(jì)算平均周轉(zhuǎn)

時(shí)間和平均帶

權(quán)周轉(zhuǎn)時(shí)間結(jié)束輸出平均周轉(zhuǎn)時(shí)間和平均帶權(quán)周轉(zhuǎn)時(shí)間先來先服務(wù)調(diào)度短進(jìn)程優(yōu)先調(diào)度高響應(yīng)比優(yōu)先調(diào)度開始

輸入進(jìn)程個(gè)

數(shù)和進(jìn)程詳

細(xì)信息

對(duì)進(jìn)程按FCFS排序

并保存在隊(duì)列Q中設(shè)置第一隊(duì)列Q、第二隊(duì)列M、第三隊(duì)

列N的時(shí)間片T1、T2、T3的大小(2i1YESNO YES第一隊(duì)列q為空?A—令p為隊(duì)列Q

的頭結(jié)點(diǎn)竺二,?二第二隊(duì)列M為空?I;〉NONOp>ne這個(gè)進(jìn)程的服務(wù)時(shí)間<=11?/令p為隊(duì)列

M的頭結(jié)點(diǎn)計(jì)算p>ne的已運(yùn)

行時(shí)間,結(jié)束運(yùn)行

時(shí)間,周轉(zhuǎn)時(shí)間和

帶權(quán)周轉(zhuǎn)時(shí)間令P>ne)的已運(yùn)行時(shí)間為T1YESNO輸出進(jìn)程詳細(xì)運(yùn)行信息輸出進(jìn)程詳細(xì)運(yùn)行信息p>ne這個(gè)進(jìn)程的"J.

服務(wù)時(shí)間<=T2?/令P>ne)的已運(yùn)

行時(shí)間為T1+T2將進(jìn)程插入隊(duì)

列M中計(jì)算p>ne)的已運(yùn)

行時(shí)間,結(jié)束運(yùn)行

時(shí)間,周轉(zhuǎn)時(shí)間和

帶權(quán)周轉(zhuǎn)時(shí)間輸出進(jìn)程詳細(xì)運(yùn)行信息p=p>nexM輸出進(jìn)程詳細(xì)運(yùn)行信息將進(jìn)程插入隊(duì)

列N中p=p>nextp=p>next*YES--- ,-NO■,■-p—>next!=NULL?"NO YES■---p.->next!=NULL?1,YES...-YES...-'第三隊(duì)列N為空?令p為隊(duì)列N

的頭結(jié)點(diǎn)計(jì)算p>ne的已運(yùn)

行時(shí)間,結(jié)束運(yùn)行

時(shí)間,周轉(zhuǎn)時(shí)間和

帶權(quán)周轉(zhuǎn)時(shí)間結(jié)束輸出進(jìn)程詳細(xì)運(yùn)行信息結(jié)束p=p>nex:NO YES■---p->next!=NULL?,,多級(jí)反饋隊(duì)列調(diào)度charName[10]charName[10]。 //進(jìn)程名稱4、程序清單及其描述#include<stdio.h>#include<stdlib.h>#include<math.h>#include<malloc.h>#include<process.h>#include<stdlib.h>#defineNULL0intProcessNum。 //進(jìn)程個(gè)數(shù)floatAverageTurnoverTime。 //平均周轉(zhuǎn)時(shí)間floatAverageRightTTime。 //平均帶權(quán)周轉(zhuǎn)時(shí)間// 函數(shù)結(jié)果狀態(tài)代碼 #defineTRUE1#defineFALSE0#defineOK1#defineERROR0// 數(shù)據(jù)結(jié)構(gòu)的定義 〃定義進(jìn)程控制塊PCBtypedefstructPCB{charPID[5]。 //進(jìn)程標(biāo)示符intPRIintPRI。 //進(jìn)程的優(yōu)先級(jí)(越小越高>//進(jìn)程要求運(yùn)行時(shí)間//進(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ì)尾指針floatNeedTime。floatStartTime。floatRunBeginTime。floatUpTime。floatOverTime。floatTurnaroundTime。floatRightTTime。structPCB*next。}PCB,*QueuePtr。//定義進(jìn)程隊(duì)列typedefstruct{QueuePtrfront,rear。}PQueue。// 函數(shù)的申明intInitQueue(PQueue&Q>。intEnQueue(PQueue&Q>。intQueueEmpty(PQueueQ>?;?,否則返回0voidPoolQueue(PQueue*Q>。intprint(PQueueQ>。//構(gòu)造一個(gè)空隊(duì)列//插入一個(gè)新的進(jìn)程到隊(duì)尾〃隊(duì)列判空,若Q為空隊(duì)列,則返//建立后備隊(duì)列//進(jìn)程隊(duì)列輸出voidFCFSsort(PQueue&Q>。進(jìn)行排序//先來先服務(wù)調(diào)度的對(duì)到達(dá)時(shí)間voidSPFsort(PQueue&Q>。進(jìn)行排序voidHRNsort(PQueue&Q>。間進(jìn)行排序voidDispatcher(PQueue&Q>。voidFB(PQueue&Q>。//短進(jìn)程優(yōu)先調(diào)度的對(duì)服務(wù)時(shí)間//高響應(yīng)比優(yōu)先調(diào)度的對(duì)服務(wù)時(shí)//先來先服務(wù)調(diào)度//多級(jí)反饋隊(duì)列調(diào)度voidManagesChooses(PQueue&Q>。//調(diào)度方式選擇// 函數(shù)的定義 // 構(gòu)造一個(gè)空隊(duì)列 intInitQueue(PQueue&Q>{Q.front=Q.rear=(QueuePtr>malloc(sizeof(PCB>>。if(!Q.front>exit(0>。Q.front->next=NULL。return1。}// 插入一個(gè)新的進(jìn)程到隊(duì)尾 intEnQueue(PQueue&Q>QueuePtrp。if(!(p=(QueuePtr>malloc(sizeof(PCB>>>>//存儲(chǔ)分配失敗exit(0>。scanf("%s",p->PID>。//輸入進(jìn)程標(biāo)示符scanf("%s",p->Name>。//輸入進(jìn)程名scanf("%d%f%f",&p->PRI,&p->NeedTime,&p->StartTime>。 //輸入進(jìn)程優(yōu)先級(jí)、要求運(yùn)行時(shí)間、到達(dá)時(shí)間p->next=NULL。Q.rear->next=p。Q.rear=p。return1。}// 隊(duì)列判空,若Q為空隊(duì)列,則返回1,否則返回0 intQueueEmpty(PQueueQ>{//若Q為空隊(duì)列,則返回1,否則返回0if(Q.front==Q.rear>return1。elsereturn0。}// 建立后備隊(duì)列 voidPoolQueue(PQueue*Q>{inti。printf("請(qǐng)輸入進(jìn)程的個(gè)數(shù):">。scanf("%d",&ProcessNum>。printf("請(qǐng)輸入%4個(gè)進(jìn)程的信息<T代表時(shí)間)\n標(biāo)示符程名優(yōu)先級(jí)服務(wù)T 到達(dá)T\n",ProcessNum>。for(i=1。i<=ProcessNum。i++>EnQueue(*Q>。}// 進(jìn)程隊(duì)列輸出 intprint(PQueueQ>{QueuePtrp。if(Q.front==Q.rear>return0。p=Q.front->next。printf("<T代表時(shí)間)\n標(biāo)示符進(jìn)程名優(yōu)先級(jí)服務(wù)T到達(dá)T\n">。while(p!=NULL>//當(dāng)隊(duì)列不空{(diào)printf("%s\t%s\t%d\t%4.3f\t%4.3f\n",p->PID,p->Name,p->PRI,p->NeedTime,p->StartTime>。p=p->next。}}// 先來先服務(wù)調(diào)度的對(duì)到達(dá)時(shí)間進(jìn)行排序 voidFCFSsort(PQueue&Q>{QueuePtrtail,p=Q.front。QueuePtrq=p->next。tail=NULL。for(。p->next->next!=tail。p=Q.front,q=p->next>//選擇排序{while(q->next!=tail>{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)度的對(duì)服務(wù)時(shí)間進(jìn)行排序 voidSPFsort(PQueue&Q>{floatdeltaT,Time=0。 〃deltaT是時(shí)間差QueuePtrtemp1,temp2,tail,p=Q.front。QueuePtrq=p->next。tail=NULL。//找出第for(。q->next!=tail。//找出第一個(gè)到達(dá)而且服務(wù)時(shí)間最少的進(jìn)程(if(p->next->StartTime>q->next->StartTime>(temp1=p->nextotemp2=q->nextop->next=temp2oq->next=temp2->next。p->next->next=temp1。)else(q=q->nexto))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ì)隊(duì)列按到達(dá)時(shí)間與服務(wù)時(shí)間長短進(jìn)行選擇排序〈從第二個(gè)元素開始)(temp1=p->nexttemp1=p->nextowhile(q->next!=tail>(if((p->next->StartTime<=Time>>(if((q->next->StartTime<=Time>&&(p->next->NeedTime>q->next->NeedTime>>(temp1=p->nextotemp2=q->next。p->next=temp2。q->next=temp2->next。p->next->next=temp1。}else(q=q->nexto}}elseif((p->next->StartTime>Time>&&(q->next->StartTime<=Time>>temp2=q->next。p->next=temp2。q->next=temp2->next。p->next->next=temp1。}else{q=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)度的對(duì)服務(wù)時(shí)間進(jìn)行排序-voidHRNsort(PQueue&Q>{floatdeltaT,PResponseRatio,QResponseRatio,Time=0。//deltaT是時(shí)間差,PResponseRatio、QResponseRatio是響應(yīng)比QueuePtrtemp1,temp2,tail,p=Q.front。QueuePtrq=p->next。tail=NULL。for(。q->next!=tail。>//找出第一個(gè)到達(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。}else{q=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ì)隊(duì)列按響應(yīng)比大小排序〈從第二個(gè)元素開始)(while(q->next!=tail>(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->NeedTime>>。if(PResponseRatio<QResponseRatio>(temp1=p->nextotemp2=q->next。p->next=temp2。q->next=temp2->next。p->next->next=temp1。}deltaT=p->StartTime-TimedeltaT=p->StartTime-Time。else(q=q->nexto))Time>&&(q->next-elseif((p->next->StartTime>Time>&&(q->next->StartTime<=Time>>(temp1=p->nextotemp2=q->nextop->next=temp2oq->next=temp2->next。p->next->next=temp1。)else(q=q->nexto))if(p->next->StartTime>Time>Time=Time+deltaT。Time=Time+p->next->NeedTime。}}// 調(diào)度 voidDispatcher(PQueue&Q>{floatSumTurnaroundTime=0。//定義周轉(zhuǎn)時(shí)間總和并賦值0floatSumRightTTime=0。//定義帶權(quán)周轉(zhuǎn)時(shí)間總和并賦值0floatdeltaT,Time=0。//deltaT是時(shí)間差QueuePtrp=Q.front->next。printf("<T代表時(shí)間)\n標(biāo)示符進(jìn)程名到達(dá)T服務(wù)T開始T完成T周轉(zhuǎn)T 帶權(quán)周轉(zhuǎn)T\n">。for(。p!=NULL。p=p->next>{if(p->StartTime>Time>Time=deltaT。}p->RunBeginTime=Time。p->OverTime=Time+p->NeedTime。p->TurnaroundTime=p->OverTime-p->StartTime。p->RightTTime=p->TurnaroundTime/p->NeedTime。printf("%s\t%s\t%4.3f\t%4.3f\t%4.3f\t%4.3f\t%4.3f\t%4.3f\n",p->PID,p->Name,p->StartTime,p->NeedTime,p->RunBeginTime,p->OverTime,p->TurnaroundTime,p->RightTTime>。Time=p->OverTime。}for(p=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.3f\n",AverageTurnoverTime,AverageRightTTime>o}// 多級(jí)反饋隊(duì)列調(diào)度 -voidFB(PQueue&Q>{PQueueM,NoInitQueue(M>o//初始化第二隊(duì)列InitQueue(N>o //初始化第三隊(duì)列FCFSsort(Q>oprintf("調(diào)度前進(jìn)程排列如下:\n”>。print(Q>oQueuePtrp,q,roq=M.frontor=N.frontofloati,deltaT,Time=0o//deltaT是時(shí)間差floatT1,T2,T3oT1=2*1-1o〃第一隊(duì)列Q的時(shí)間片T2=2*2-1?!ǖ诙?duì)列M的時(shí)間片T3=2*3-1?!ǖ谌?duì)列M的時(shí)間片printf("\n調(diào)度過程如下:\n">。for(p=Q.frontop->next!=NULL。p=p->next> //第一隊(duì)列的調(diào)度{if(p->next->StartTime>Time>{for(i=Time+1oi<=p->next->StartTime。i++>printf("第%4.3f時(shí)刻,等待隊(duì)列到來!\n",i>。deltaT=p->next->StartTime-Time。Time=Time+deltaT。}p->next->RunBeginTime=Time。if(p->next->NeedTime<=T1>{p->next->OverTime=Time+p->next->NeedTime。p->next->UpTime=p->next->NeedTime。p->next->TurnaroundTime=p->next->OverTime-p->next->StartTime。p->next->RightTTime=p->next->TurnaroundTime/p->next->NeedTime。for(i=Time+1。i<p->next->OverTime。i++>printf("第%4.3f時(shí)刻,進(jìn)程標(biāo)示符%s\t進(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)示符%s\t進(jìn)程名%s運(yùn)行完成!\n”,i,p->next->PID,p->next->Name>。Time=p->next->OverTime。}else{p->next->UpTime=T1。for(i=1。i<=T1。i++>printf("第%4.3f時(shí)刻,進(jìn)程標(biāo)示符%s\t進(jìn)程名%$運(yùn)行中,已運(yùn)行了%4.3f時(shí)亥lj!\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.frontop->next!=NULL。p=p->next> //第二隊(duì)列的調(diào)度(if((p->next->NeedTime-p->next->UpTime><=T2>(p->next->OverTime=Time+p->next->NeedTime-p->next->UpTime。p->next->TurnaroundTime=p->next->OverTime-p->next->StartTimeop->next->RightTTime=p->next->TurnaroundTime/p->next->NeedTimeofor(i=Time+1oi<p->next->OverTime。i++>printf("第%4.3f時(shí)刻,進(jìn)程標(biāo)示符%s\t進(jìn)程名%s運(yùn)行中,已運(yùn)行了%4.3f時(shí)刻!\n",i,p->next->PID,p->next->Name,p->next->UpTime+i-Time>oprintf("第%4.3f時(shí)刻,進(jìn)程標(biāo)示符%s\t進(jìn)程名%s運(yùn)行完成!\n",i,p->next->PID,p->next->Name>。p->next->UpTime=p->next->NeedTime。Time=p->next->OverTime。else(for(i=1。i<=T2。i++>printf("第%4.3f時(shí)刻,進(jìn)程標(biāo)示符%s\t進(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->nextop->next->UpTime=p->next->UpTime+T2oTime=Time+T2。}}r->next=NULL。for(p=N.frontop->next!=NULL。p=p->next> //第三隊(duì)列的調(diào)度(p->next->OverTime=Time+p->next->NeedTime-p->next->UpTimeop->next->TurnaroundTime=p->next->OverTime-p->next->StartTime。p->next->RightTTime=p->next->TurnaroundTime/p->next->NeedTimeofor(i=Time+1。i<p->next->OverTime。i++>printf("第%4.3f時(shí)刻,進(jìn)程標(biāo)示符%s\t進(jìn)程名%s運(yùn)行中,已運(yùn)行了%4.3f時(shí)亥lj!\n”,i,p->next->PID,p->next->Name,p->next->UpTime+i-Time>。printf("第%4.3f時(shí)刻,進(jìn)程標(biāo)示符%s\t進(jìn)程名%s運(yùn)行完成!\nH,i,p->next->PID,p->next->Name>op->next->UpTime=p->next->NeedTime。Time=p->next->OverTime。}}// 調(diào)度方式選擇 voidManagesChooses(PQueue&Q>{intioprintf("\n\n\n\t請(qǐng)選擇調(diào)度方式:\n">。printf("================\n”>oprintf("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.多級(jí)反饋隊(duì)列調(diào)度\n”>。printf("5.退出\n">。printf("<按數(shù)字1、2、3、4、5,選擇操作)\n">。printf("================\n”>。scanf("%d",&i>。switch(i>(case1:FCFSsort(Q>oprintf("先來先服務(wù)調(diào)度的對(duì)到達(dá)時(shí)間進(jìn)行排序的排序結(jié)果如下:\n">。print(Q>oprintf("\n調(diào)度后的結(jié)果如下:\n">。Dispatcher(Q>oManagesChooses(Q>obreakocase2:SPFsort(Q>。printf("短進(jìn)程優(yōu)先調(diào)度的對(duì)服務(wù)時(shí)間進(jìn)行排序的排序結(jié)果如下:\n">。print(Q>oprintf("\n調(diào)度后的結(jié)果如下:\n">。Dispatcher(Q>oManagesChooses(Q>obreakocase3:HRNsort(Q>。printf("高響應(yīng)比優(yōu)先調(diào)度的對(duì)服務(wù)時(shí)間進(jìn)行排序的排序結(jié)果如下:\n”>。print(Q>。printf("\n調(diào)度后的結(jié)果如下:\n”>。Dispatcher(Q>。ManagesChooses(Q>。break。case4:FB(Q>。ManagesChooses(Q>。break。case5:break。}}// 主函數(shù) voidmain(>{intn。PQueueQ。InitQueue(Q>。 //初始化后備隊(duì)列PoolQueue(&Q>。 //進(jìn)程插入后備隊(duì)列中并返回進(jìn)程個(gè)數(shù)printf("\n輸入的進(jìn)程情況如下:\n”>。print(Q>。

ManagesChooses(Q>。3、系統(tǒng)運(yùn)行結(jié)果請(qǐng)選擇調(diào)度方式:度度調(diào)調(diào)

調(diào)調(diào)先列

務(wù)先優(yōu)隊(duì)

累比饋3、度度調(diào)調(diào)

調(diào)調(diào)先列

務(wù)先優(yōu)隊(duì)

累比饋3、4、5,選擇操作)先程應(yīng)反

蠢響電

甯高多退

12345^度的對(duì)到達(dá)時(shí)間進(jìn)行排序的排序結(jié)果如下:名優(yōu)先級(jí)服務(wù)T 到達(dá)TTOC\o"1-5"\h\z1 4.000 0.0002 3.000 1.0003 5.000 2.0004 2.000 3.0005 4.000 4.000知名K泊才進(jìn)J0鑲符昌示司f、示,2到達(dá)T服務(wù)T開始T完成T周轉(zhuǎn)T帶權(quán)周轉(zhuǎn)TA0.0004.0000.0004.0004.0001.Q00B1.0003.0004.0007.0006.0002.000C2.0005.0007.00012.00010.0002.000D3.0002.00012.00014.00011.0005.500E4.0004.00014.00018.00014.0003.500匕調(diào)度方式的平±勻周轉(zhuǎn)時(shí)i可為"耐心平均帶權(quán)周轉(zhuǎn)時(shí)間為2.8醯請(qǐng)選擇調(diào)度方式:先程應(yīng)反、

番響器2

當(dāng)高多退,

123455度度度度調(diào)調(diào)調(diào)調(diào)先列務(wù)先優(yōu)隊(duì)土潰優(yōu)先級(jí)14服務(wù)T4.0002.0003.0004.0005.000到達(dá)T0.0003.0001.0004.0002.000『冷.可:『口木工口(說時(shí)閭)示示符揀軸名到達(dá)T服務(wù)T開始T元成T周轉(zhuǎn)T帶板周轉(zhuǎn)T0.0004.0000.0004.0004.0001.0003.0002.0004.0006.0003.0001.5001.0003.0006.0009.0008.0002.6674.0004.0009.00013.0009.0002.2502.0005.00013.00018.00016.0003.200.眄電平均帶權(quán)周轉(zhuǎn)時(shí)間為2.123請(qǐng)選擇調(diào)度方式:調(diào)名先.1「口王ABDcE助I0-FXg---結(jié)及£4-1冼優(yōu)12435口口心口水KU德媚屋小不付世柱右AB

D到達(dá)T服務(wù)T開始T元成T周轉(zhuǎn)T0.0004.0000.0004.0004.0001.0003.0004.0007.0006.0003.0002.0007.0009.0006.0002.0005.0009.00014.00012.0004.0004.00014.00018.00014.000帶權(quán)周轉(zhuǎn)T1.0002.0003.0002.4003.500.4萌,平均帶權(quán)周轉(zhuǎn)時(shí)間為2.3801.請(qǐng)選擇調(diào)度方式:4.調(diào)度(按數(shù)字八2、3、4、5,選擇操作)、匆匆刻刻,契、契FT"TFT"TFT"TFT"TFT"TFT"TFT"T了了了了了了了-丁-丁-丁-丁-丁-丁-丁.1.1_1.■.1_1.■.1_1.■.1_1.■.1_1.■.1-1.■亥時(shí)0002

L1T

國、契、契刻□nnnnn777

狂恁仃

運(yùn)運(yùn)運(yùn)、匆、匆匆刻刻,契、契FT"TFT"TFT"TFT"TFT"TFT"TFT"T了了了了了了了-丁-丁-丁-丁-丁-丁-丁.1.1_1.■.1_1.■.1_1.■.1_1.■.1_1.■.1-1.■亥時(shí)0002

L1T

國、契、契刻□nnnnn777

狂恁仃

運(yùn)運(yùn)運(yùn)、匆了了-T-T,-11-11運(yùn)運(yùn)已已已已已已已!已!已已已!已已 ,成‘:成:成成口口口口口口S元史元口口口-1元-&-&{元.{元-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T,-11-|1-|1-|1-11--11--.1-11-|1-|1-|1-|1-|1-|1-|1-|1-

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論