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

下載本文檔

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

文檔簡(jiǎn)介

時(shí)間片輪轉(zhuǎn)調(diào)度算法部門:xxx時(shí)間:xxx整理范文,僅供參考,可下載自行編輯////////優(yōu)先數(shù)//總的//剩下需要//進(jìn)入就緒//開(kāi)始運(yùn)//時(shí)間片輪轉(zhuǎn)調(diào)度算法#include<iostream>#include<cstdio>#include<cmath>#include<cstring>usingnamespacestd。enumSTATUS{RUN,READY,WAIT,FINISH}。structPCBNode{intprocessID。進(jìn)程IDb5E2RGbCAPSTATUSstatus。進(jìn)程狀態(tài)p1EanqFDPwint priorityN reqTime。需要運(yùn)行時(shí)間DXDiTa9E3dint remainTime。運(yùn)行時(shí)間int arriveTime。隊(duì)列時(shí)間int startTime。行時(shí)間intfinishTime。//結(jié)束運(yùn)行時(shí)間inttotalTime。 //周轉(zhuǎn)時(shí)間floatweightTotalTime。 //帶權(quán)周轉(zhuǎn)時(shí)間}。structQueueNode{int ID。 //進(jìn)程IDstructQueueNode*next。 //隊(duì)列中下一個(gè)進(jìn)程指針}。structLinkQueue{QueueNode *head。//隊(duì)首}。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

//分配時(shí)間片給q所指進(jìn)程,p為剛退出的進(jìn)程voidRoundRobin(LinkQueue&Q,constintRound,int&totalTimeSum,int&weightTotalTimeSum,PCBNode*ProcessTable>。jLBHrnAILg//時(shí)間片輪轉(zhuǎn)調(diào)度,調(diào)用RR_Run(>,時(shí)間片大小設(shè)為RoundvoidInitialQueue(LinkQueue& Q,PCBNode *ProcessTable,constintprocessnum>。xHAQX74J0X//初始化就緒隊(duì)列voidInput(PCBNode*ProcessTable,constintprocessnum>。LDAYtRyKfE//從input.txt文件輸入數(shù)據(jù)intmain(>LinkQueue Q。//就緒隊(duì)列Q.head= NULL。const int processnum = 16。//進(jìn)程數(shù)const int Round= 1。 //時(shí)間片大小inttotalTimeSum= 0。 //周轉(zhuǎn)時(shí)間intWeightTotalTimeSum=0intWeightTotalTimeSum=0。//帶權(quán)周轉(zhuǎn)時(shí)間PCBNodeProcessTable=newPCBNodePCBNode[processnum]。 //進(jìn)程表Zzz6ZB2LtkInput(ProcessTable, processnum>。InitialQueue(Q, ProcessTable,processnum>。RoundRobin(Q, Round,totalTimeSum,WeightTotalTimeSum,ProcessTable> 。dvzfvkwMI1cout<<〃時(shí)間片輪調(diào)度的平均周轉(zhuǎn)時(shí)間為:〃<<totalTimeSum/processnum<<endl。rqyn14ZNXIcout<<〃時(shí)間片輪調(diào)度的平均帶權(quán)周轉(zhuǎn)時(shí)間為:〃<<WeightTotalTimeSum/processnum<<endl。EmxvxOtOcoInput(ProcessTable, processnum〉。InitialQueue(Q,ProcessTable, processnum〉。Fcfs(Q,totalTimeSum,WeightTotalTimeSum,ProcessTable〉。SixE2yXPq5cout<<〃先來(lái)先服務(wù)的平均周轉(zhuǎn)時(shí)間為:〃<<totalTimeSum/processnum<<endl。6ewMyirQFLcout<<〃先來(lái)先服務(wù)的平均帶權(quán)周轉(zhuǎn)時(shí)間為:〃<<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。 //總的周轉(zhuǎn)時(shí)間weightTotalTimeSum= 0。//平均周轉(zhuǎn)時(shí)間intcurrentTime= 0。 //當(dāng)前時(shí)間TOC\o"1-5"\h\zQueueNode* p。QueueNode* q。QueueNode* r。boolfinish= false。//調(diào)用RR_Run(>后,該進(jìn)程是否已經(jīng)做完退出M2ub6vSTnPp = Q.headoq = p->nextowhile(q!= NULL>//從隊(duì)首開(kāi)始依次分配時(shí)間片{do{cout<<**********************<<endlocout<<"在時(shí)間片〃<<(currentTime+1>/Round<<〃內(nèi),活動(dòng)進(jìn)程為: 〃<<q->ID<<endloOYujCfmUCwcout<<〃進(jìn)程〃<<q->ID<<"現(xiàn)在需要的時(shí)間片為: 〃<<ProcessTable[q->ID].remainTime<<endl。eUts8ZQVRdfinish=RR_Run(Q,q,p,Round,currentTime,ProcessTable〉。//分配時(shí)間片給q進(jìn)程sQsAEJkW5Tcout<<endloif (!finish>//若是進(jìn)程在本時(shí)間片內(nèi)做完,則跳出do…while循環(huán){if(q->next==NULL>{r=Q.head->nexto}else{q->nexto}else //否則計(jì)算周轉(zhuǎn)時(shí)間和帶權(quán)周轉(zhuǎn)時(shí)間{totalTimeSum +=ProcessTable[q->ID].totalTime。GMsIasNXkAweightTotalTimeSum+=ProcessTable[q->ID].weightTotalTime。TIrRGchYzgdeleteq。 //從隊(duì)列中刪除q進(jìn)程q= p。}}while(!finish&&(ProcessTable[r->ID1.arriveTime>currentTime+Round>>。7EqZcWLZNX//下一個(gè)進(jìn)程很晚才來(lái),則繼續(xù)給當(dāng)前進(jìn)程分配時(shí)間片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>//在此時(shí)間片內(nèi)能夠做完,之后退出進(jìn)程調(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。 fjnFLDa5Zo

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

totalTimeSum0。weightTotalTimeSum0。weightTotalTimeSum0。//平均周轉(zhuǎn)時(shí)間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//下個(gè)進(jìn)程到達(dá)時(shí)間較晚{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<<〃時(shí)刻〃<<t<<〃:進(jìn)程〃<<q->ID<<〃活動(dòng)〃<<endl。ooeyYZTjjlt++。}if(q->next!=NULL>{cout<<〃時(shí)刻〃<<t<<〃:進(jìn)程〃<<q->ID<(〃結(jié)束活動(dòng),開(kāi)始下一個(gè)進(jìn)程.〃<<endl。BkeGulnkxIcout<<〃進(jìn)程〃<<q->ID<(〃的周轉(zhuǎn)時(shí)間為: 〃<<ProcessTable[q->ID].totalTime<<endl。PgdO0sRlMocout<<-進(jìn)程〃<<q->ID<(〃的帶權(quán)周轉(zhuǎn)時(shí)間為:〃<<ProcessTable[q->ID].weightTotalTime<<endl<<endlo3cdXwckm15}else{cout<<〃時(shí)刻〃<<t<<": 進(jìn)程〃<<q->ID<<〃結(jié)束活動(dòng).〃<<endl<<endl。h8c52WOngMcout<<〃進(jìn)程〃<<q->ID<(〃的周轉(zhuǎn)時(shí)間為: 〃<<ProcessTable[q->ID].totalTime<<endl。v4bdyGiouscout<<〃進(jìn)程〃<<q->ID<(〃的帶權(quán)周轉(zhuǎn)時(shí)間為:〃<<ProcessTable[q->ID].weightTotalTime<<endl<<endlo J0bm4qMpJ9}}cout<〈〃所有進(jìn)程結(jié)束活動(dòng).〃<<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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論