時間片輪轉(zhuǎn)調(diào)度算法_第1頁
時間片輪轉(zhuǎn)調(diào)度算法_第2頁
時間片輪轉(zhuǎn)調(diào)度算法_第3頁
時間片輪轉(zhuǎn)調(diào)度算法_第4頁
時間片輪轉(zhuǎn)調(diào)度算法_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

時間片輪轉(zhuǎn)調(diào)度算法部門:xxx時間:xxx整理范文,僅供參考,可下載自行編輯//時間片輪轉(zhuǎn)調(diào)度算法#include<iostream>#include<cstdio>#include<cmath>#include<cstring>usingnamespacestd。enumSTATUS{RUN,READY,WAIT,FINISH}。structPCBNode{int processID。 //進程IDb5E2RGbCAPSTATUSstatus。 //進程狀態(tài)p1EanqFDPwint priorityNum。 //優(yōu)先數(shù)intreqTime。 //總的需要運行時間DXDiTa9E3dint remainTime。 //乘。下需要運行時間int arriveTime。 //進入就緒隊列時間intstartTime。 //開始運時間inttotalTime。//周轉(zhuǎn)時間floatweightTotalTime。//帶權(quán)周轉(zhuǎn)intfinishTime。//intfinishTime。//結(jié)束運行時間}。structQueueNode{int ID。 //進程IDstructQueueNode*next。 //隊列中下一個進程指針}。structLinkQueue{QueueNode *head。//隊首}。void Fcfs(LinkQueue& Q,int&totalTimeSum,int&weightTotalTimeSum,PCBNode* ProcessTable>。RTCrpUDGiTbool RR_Run(LinkQueue&Q,QueueNode*q,QueueNode*p,constintRound,int¤tTime,PCBNode*ProcessTable>。5PCzVD7HxA

//分配時間片給q所指進程,p為剛退出的進程intRound,voidRoundRobin(LinkQueue&Q,constint&totalTimeSum,int&weightTotalTimeSum,PCBNode*ProcessTable>。jLBHrnAILgintRound,//時間片輪轉(zhuǎn)調(diào)度,調(diào)用RR_Run(>,時間片大小設(shè)為RoundvoidInitialQueue(LinkQueue&Q,PCBNodevoidInitialQueue(LinkQueue&Q,PCBNodeProcessTable,constintprocessnum>。xHAQX74J0X〃初始化就緒隊列intvoidInput(PCBNode*ProcessTable,constprocessnum>。LDAYtRyKfEint//從input.txt文件輸入數(shù)據(jù)intmain(>LinkQueueQ。intmain(>LinkQueueQ?!ň途w隊列Q.headNULLoQ.headNULLoconstintprocessnum16。//進程數(shù)constintRound=//時間片constintprocessnum16。//進程數(shù)constintRound=//時間片大小inttotalTimeSum=0O//周轉(zhuǎn)時間intWeightTotalTimeSum0inttotalTimeSum=0O//周轉(zhuǎn)時間intWeightTotalTimeSum0O//帶權(quán)周轉(zhuǎn)時間PCBNodeProcessTable=newPCBNodePCBNode[processnum]。 //進程表Zzz6ZB2LtkInput(ProcessTable, processnum>。InitialQueue(Q, ProcessTable,processnum>。RoundRobin(Q, Round,totalTimeSum,WeightTotalTimeSum,ProcessTable> 。dvzfvkwMI1cout<<〃時間片輪調(diào)度的平均周轉(zhuǎn)時間為:〃<<totalTimeSum/processnum<<endl。rqyn14ZNXIcout<<〃時間片輪調(diào)度的平均帶權(quán)周轉(zhuǎn)時間為:〃<<WeightTotalTimeSum/processnum<<endl。EmxvxOtOcoInput(ProcessTable, processnum〉。InitialQueue(Q,ProcessTable, processnum〉。Fcfs(Q,totalTimeSum,WeightTotalTimeSum,ProcessTable〉。SixE2yXPq5cout<<〃先來先服務(wù)的平均周轉(zhuǎn)時間為:〃<<totalTimeSum/processnum<<endl。6ewMyirQFLcout<<〃先來先服務(wù)的平均帶權(quán)周轉(zhuǎn)時間為:〃<<WeightTotalTimeSum/processnum<<endl。kavU42VRUsdelete[] ProcessTable。return 0。int&totalTimeSum,int&weightTotalTimeSum,PCBNodeint&totalTimeSum,int&weightTotalTimeSum,PCBNodeQ,constintRound,voidRoundRobin(LinkQueue&Q,constintRound,*ProcessTable>y6v3ALoS89totalTimeSum=0。//總的周轉(zhuǎn)時間weightTotalTimeSum0。//平均周轉(zhuǎn)時間intcurrentTime0?!ó?dāng)前時間QueueNode*p。QueueNode*q。QueueNode*r。boolfinish=totalTimeSum=0。//總的周轉(zhuǎn)時間weightTotalTimeSum0。//平均周轉(zhuǎn)時間intcurrentTime0?!ó?dāng)前時間QueueNode*p。QueueNode*q。QueueNode*r。boolfinish=false。//調(diào)用RR_Run(>后,該進程是否已經(jīng)做完退出M2ub6vSTnPp = Q.headoq = p->nextowhile(q!= NULL>//從隊首開始依次分配時間片{do{cout<<**********************<<endlo

cout<<〃在時間片〃<<(currentTime+1>/Round<<”內(nèi),活動進程為: "<<q->ID<<endl。OYujCfmUCwcout<<〃進程〃<<q->ID<<〃現(xiàn)在需要的時間片為:<現(xiàn)在需要的時間片為:<<ProcessTable[q->ID].remainTime<<endl。eUts8ZQVRdfinish=RR_Run(Q,q,P,Round,currentTime,ProcessTable〉。//finish=RR_Run(Q,q,P,Round,currentTime,ProcessTable〉。//分配時間片給q進程sQsAEJkW5Tcout<<endl。if(!finish>//cout<<endl。if(!finish>//若是進程在本時間片內(nèi)做完,則跳出do???while循環(huán)if(q->nextNULL>Q.head->next。elseq->next。if(q->nextNULL>Q.head->next。elseq->next。}else 〃否則計算周轉(zhuǎn)時間和帶權(quán)周轉(zhuǎn)時間{totalTimeSum +=ProcessTable[q->ID].totalTime。GMsIasNXkAweightTotalTimeSum+=ProcessTable[q->ID].weightTotalTime。TIrRGchYzgdeleteq?!◤年犃兄袆h除q進程q=P。}}while(!finish&&(ProcessTable[r->ID].arriveTime>currentTime+Round>>。7EqZcWLZNX//下一個進程很晚才來,則繼續(xù)給當(dāng)前進程分配時間片P = q。q = q->nextoif(q==NULL&&Q.head-〉next!=NULL>p = Q.headoq = p->nexto}}delete Q.headoQ.head= NULLo}boolRR_Run(LinkQueue&Q,QueueNode*q,QueueNode*p,constintRound,int¤tTime,PCBNode*ProcessTable>lzq7IGf02E{if(ProcessTable[q->ID].remainTime<=Round>//在此時間片內(nèi)能夠做完,之后退出進程調(diào)度zvpgeqJ1hk{ProcessTable[q->ID].finishTime =currentTime+ProcessTable[q->ID].remainTime。NrpoJac3v1ProcessTable[q->ID].totalTime +=ProcessTable[q->ID].remainTime。1nowfTG4KIProcessTable[q->ID].weightTotalTime=ProcessTable[q-> ID].totalTime/ProcessTable[q->ID].reqTime。 fjnFLDa5ZocurrentTime=ProcessTable[q->ID].finishTime。p->next= q->next。cout<<endl。cout<<〃進程〃<<q->ID<<〃完成!〃<<endl。return true。}else//此時間片內(nèi)做不完{ProcessTable[q-> ID].remainTime =ProcessTable[q->ID].remainTime- Round。tfnNhnE6e5ProcessTable[q-> ID].totalTime +=Round。currentTime+= Round。return false。}}voidFcfs(LinkQueue&Q,int&totalTimeSum,int&weightTotalTimeSum,PCBNode*ProcessTable>HbmVN777sL{totalTimeSum= 0。

weightTotalTimeSum0。weightTotalTimeSum0。//平均周轉(zhuǎn)時間QueueNode* p。QueueNode* q。=Q.head—〉next。if(p!=NULL>ProcessTable[p->ID].startTimeif(p!=NULL>ProcessTable[p->ID].startTimeProcessTable[p->ID].arriveTime。V7l4jRB8HsProcessTable[p->ID].arriveTime。V7l4jRB8HsProcessTable[p->ID].finishTimeProcessTable[p->ID].finishTimeProcessTable[p->ProcessTable[p->ID].arriveTimeProcessTable[p->ID].reqTime。83lcPA59W9for(q=p->nextoq!二NULL。 q=q->next>{if(ProcessTable[q->ID].arriveTime<ProcessTable[p->ID].finishTime>mZkklkzaaP{ProcessTable[q->ID].startTime=ProcessTable[p->ID].finishTime。AVktR43bpwProcessTable[q->ID].finishTime=ProcessTable[q->ProcessTable[p->ID].finishTimeProcessTable[q->ID].reqTime。ORjBnOwcEd}else//下個進程到達時間較晚{ProcessTable[q->ID].startTime=ProcessTable[q->ID].arriveTime。2MiJTy0dTTProcessTable[q->ID].finishTime=ProcessTable[q->ID].arriveTime+ProcessTable[q->ID].reqTime。gIiSpiue7A}p= q。}for(q=Q.head->next。 q!二NULL。 q=q->next>{ProcessTable[q->ID].totalTime =ProcessTable[q->ID].finishTime-ProcessTable[q->ID].arriveTime。uEh0U1YfmhProcessTable[q->ID].weightTotalTime=ProcessTable[q-> ID].totalTime/ProcessTable[q->ID].reqTime。 IAg9qLsgBXtotalTimeSum+=ProcessTable[q->ID].totalTime。WwghWvVhPEweightTotalTimeSum+=ProcessTable[q->ID].weightTotalTime。asfpsfpi4k}intt= 0。for(q=Q.head->next。 q!二NULL。 q=q->next>{cout<<〃*********************〃<<endl。while ( t<ProcessTable[q->ID].finishTime>{cout<〈〃時刻〃<<t<〈〃:進程〃<<q->ID<<〃活動〃<<endl。ooeyYZTjjlt++。}if(q->next!=NULL>{cout<<〃時刻〃<<t<<〃:進程〃<<q->ID<<〃結(jié)束活動,開始下一個進程.〃<<endl。BkeGuInkxIcout<<〃進程〃<<q->ID<<〃的周轉(zhuǎn)時間為: 〃<<ProcessTable[q->ID].totalTime<<endl。PgdO0sRlMocout<<"進程〃<<q->ID<<"的帶權(quán)周轉(zhuǎn)時間為: 〃<<ProcessTable[q->ID].weightTotalTime<endl<<endl。3cdXwckm15}else{cout<〈〃時刻〃<<t<<": 進程"<<q->ID<<"結(jié)束活動.〃<<endl<<endl。h8c52WOngMcout<<"進程〃<<q->ID<<"的周轉(zhuǎn)時間為: 〃<<ProcessTable[q->ID].totalTime<<endl。v4bdyGiouscout<<"進程〃<<q->ID<<"的帶權(quán)周轉(zhuǎn)時間為: 〃<<ProcessTable[q->ID].weightTotalTime<endl<<endl。 J0bm4qMpJ9}}cout<〈〃所有進程結(jié)束活動.〃<<endl<<endl。p= Q.head。for(q=p->nextoq!二NULL。 q=q->next>{delete p。

p= q。}}voidInitialQueue(LinkQueue&Q,PCBNode*ProcessTable,constintprocessnum>XVauA9grYP{//初始化for(int i=0。i<processnum。i++>{ProcessTable[i].processID二i。ProcessTable[i].reqTime二ProcessTable[i].remainTime 。bR9C6TJscwProcessTable[i].finishTime=0。ProcessTable[i].startTime=0。ProcessTab

溫馨提示

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

最新文檔

評論

0/150

提交評論