时间片轮转调度算法_第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

提交评论