時間片輪轉調度算法_第1頁
時間片輪轉調度算法_第2頁
時間片輪轉調度算法_第3頁
時間片輪轉調度算法_第4頁
時間片輪轉調度算法_第5頁
已閱讀5頁,還剩19頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

時間片輪轉調度算法部門:xxx時間:xxx整理范文,僅供參考,可下載自行編輯////////優先數//總的//剩下需要//進入就緒//開始運//時間片輪轉調度算法#include<iostream>#include<cstdio>#include<cmath>#include<cstring>usingnamespacestd。enumSTATUS{RUN,READY,WAIT,FINISH}。structPCBNode{intprocessID。進程IDb5E2RGbCAPSTATUSstatus。進程狀態p1EanqFDPwint priorityN reqTime。需要運行時間DXDiTa9E3dint remainTime。運行時間int arriveTime。隊列時間int startTime。行時間intfinishTime。//結束運行時間inttotalTime。 //周轉時間floatweightTotalTime。 //帶權周轉時間}。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為剛退出的進程voidRoundRobin(LinkQueue&Q,constintRound,int&totalTimeSum,int&weightTotalTimeSum,PCBNode*ProcessTable>。jLBHrnAILg//時間片輪轉調度,調用RR_Run(>,時間片大小設為RoundvoidInitialQueue(LinkQueue& Q,PCBNode *ProcessTable,constintprocessnum>。xHAQX74J0X//初始化就緒隊列voidInput(PCBNode*ProcessTable,constintprocessnum>。LDAYtRyKfE//從input.txt文件輸入數據intmain(>LinkQueue Q。//就緒隊列Q.head= NULL。const int processnum = 16。//進程數const int Round= 1。 //時間片大小inttotalTimeSum= 0。 //周轉時間intWeightTotalTimeSum=0intWeightTotalTimeSum=0。//帶權周轉時間PCBNodeProcessTable=newPCBNodePCBNode[processnum]。 //進程表Zzz6ZB2LtkInput(ProcessTable, processnum>。InitialQueue(Q, ProcessTable,processnum>。RoundRobin(Q, Round,totalTimeSum,WeightTotalTimeSum,ProcessTable> 。dvzfvkwMI1cout<<〃時間片輪調度的平均周轉時間為:〃<<totalTimeSum/processnum<<endl。rqyn14ZNXIcout<<〃時間片輪調度的平均帶權周轉時間為:〃<<WeightTotalTimeSum/processnum<<endl。EmxvxOtOcoInput(ProcessTable, processnum〉。InitialQueue(Q,ProcessTable, processnum〉。Fcfs(Q,totalTimeSum,WeightTotalTimeSum,ProcessTable〉。SixE2yXPq5cout<<〃先來先服務的平均周轉時間為:〃<<totalTimeSum/processnum<<endl。6ewMyirQFLcout<<〃先來先服務的平均帶權周轉時間為:〃<<WeightTotalTimeSum/processnum<<endl。kavU42VRUsdelete[] ProcessTable。return 0。}int&totalTimeSum,int&weightTotalTimeSum,PCBNodeint&totalTimeSum,int&weightTotalTimeSum,PCBNodeQ,constintRound,voidRoundRobin(LinkQueue&Q,constintRound,*ProcessTable>y6v3ALoS89{totalTimeSum= 0。 //總的周轉時間weightTotalTimeSum= 0。//平均周轉時間intcurrentTime= 0。 //當前時間TOC\o"1-5"\h\zQueueNode* p。QueueNode* q。QueueNode* r。boolfinish= false。//調用RR_Run(>后,該進程是否已經做完退出M2ub6vSTnPp = Q.headoq = p->nextowhile(q!= NULL>//從隊首開始依次分配時間片{do{cout<<**********************<<endlocout<<"在時間片〃<<(currentTime+1>/Round<<〃內,活動進程為: 〃<<q->ID<<endloOYujCfmUCwcout<<〃進程〃<<q->ID<<"現在需要的時間片為: 〃<<ProcessTable[q->ID].remainTime<<endl。eUts8ZQVRdfinish=RR_Run(Q,q,p,Round,currentTime,ProcessTable〉。//分配時間片給q進程sQsAEJkW5Tcout<<endloif (!finish>//若是進程在本時間片內做完,則跳出do…while循環{if(q->next==NULL>{r=Q.head->nexto}else{q->nexto}else //否則計算周轉時間和帶權周轉時間{totalTimeSum +=ProcessTable[q->ID].totalTime。GMsIasNXkAweightTotalTimeSum+=ProcessTable[q->ID].weightTotalTime。TIrRGchYzgdeleteq。 //從隊列中刪除q進程q= p。}}while(!finish&&(ProcessTable[r->ID1.arriveTime>currentTime+Round>>。7EqZcWLZNX//下一個進程很晚才來,則繼續給當前進程分配時間片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>//在此時間片內能夠做完,之后退出進程調度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。 fjnFLDa5Zo

currentTimeProcessTable[q->currentTimeProcessTable[q->ID].finishTime。p->next= q->next。cout<<endl。cout<<-進程〃<<q->ID<<〃完成!〃<<endl。return true。}else//此時間片內做不完{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{totalTimeSum0。

totalTimeSum0。weightTotalTimeSum0。weightTotalTimeSum0。//平均周轉時間QueueNode* p。QueueNode* q。p=Q.head->next。if(p!=NULL>{ProcessTable[p->ID].startTimeProcessTable[p->ID].arriveTime。V7l4jRB8HsProcessTable[p->ID].finishTime+ProcessTable[p->ProcessTable[p->ID].arriveTime+ProcessTable[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[p->ID].finishTime+ProcessTable[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= qo}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<(〃結束活動,開始下一個進程.〃<<endl。BkeGulnkxIcout<<〃進程〃<<q->ID<(〃的周轉時間為: 〃<<ProcessTable[q->ID].totalTime<<endl。PgdO0sRlMocout<<-進程〃<<q->ID<(〃的帶權周轉時間為:〃<<ProcessTable[q->ID].weightTotalTime<<endl<<endlo3cdXwckm15}else{cout<<〃時刻〃<<t<<": 進程〃<<q->ID<<〃結束活動.〃<<endl<<endl。h8c52WOngMcout<<〃進程〃<<q->ID<(〃的周轉時間為: 〃<<ProcessTable[q->ID].totalTime<<endl。v4bdyGiouscout<<〃進程〃<<q->ID<(〃的帶權周轉時間為:〃<<ProcessTable[q->ID].weightTotalTime<<endl<<endlo J0bm4qMpJ9}}cout<〈〃所有進程結束活動.〃<<endl<<endlop= Q.headofor(q=p->nextoq!二NULL。 q=q->next>{delete po

qo}voidInitialQueue(LinkQueue&Q,PCBNodeProcessTable,constintprocessnum>XVauA9grYP{//初始化for(int i=0oi<processnum。i++>{ProcessTable[i].processID=ioProcessTable[i].reqTime=ProcessTable[i].remainTimebR9C6TJscwProcessTable[i].finishTime=0oProcessTable[i].startTime=0oProcessTable[i].status=WAIT。ProcessTable[i].totalTime=0oProcessTable[i].weightTotalTime=0o}Q.head=newQueueNode。Q.head->next= NULL。QueueNodep。QueueNodep。Queue

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論