www.pudn.com > os.rar > TimeSlice.cpp
#include#include"TimeSlice.h" using namespace std; bool TimeSlice::RR_Run(LinkQueue& Q,QueueNode* q, QueueNode* p, const int Round,int& currentTime,PCBNode * ProcessTable) { ProcessTable[q->GetID()].Setstatus(RUN);//进程正在运行 cout<<"进程"< GetID()<<"获得时间片,正在运行......"< GetID()].GetremainTime() <= Round)//在此时间片内能够做完,之后退出进程调度 { ProcessTable[q->GetID()].SetfinishTime(currentTime + ProcessTable[q->GetID()].GetremainTime()) ; ProcessTable[q->GetID()].SettotalTime(ProcessTable[q->GetID()].GettotalTime()+ProcessTable[q->GetID()].GetremainTime()) ; ProcessTable[q->GetID()].SetweightTotalTime(ProcessTable[q->GetID()].GettotalTime()/ProcessTable[q->GetID()].GetreqTime()) ; currentTime = ProcessTable[q->GetID()].GetfinishTime(); p->Setnext(q->GetnextQNode()); ProcessTable[q->GetID()].Setstatus(FINISH);//进程完成标志 cout< GetID()<<"完成!"< GetID()].SetremainTime(ProcessTable[q->GetID()].GetremainTime() - Round); ProcessTable[q->GetID()].SettotalTime (Round+ProcessTable[q->GetID()].GettotalTime()); currentTime += Round; ProcessTable[q->GetID()].Setstatus(READY);//进程为执行完,变为就绪 //cout< GetID()<<"时间片到变为就绪"< GetnextQNode(); while (q != NULL)//从队首开始依次分配时间片 q:当前进程 r:下一个进程 { do { cout<<"**********************"< GetID()< GetID()<<" 现在需要的时间为: "< GetID()].GetremainTime()< GetID()<<"时间片到变为就绪"< GetnextQNode() == NULL) { r = Q.head->GetnextQNode(); } else { r = q->GetnextQNode(); } Q.ShowQueue(q,ProcessTable,currentTime);//显示就绪队列 } else //否则计算周转时间和带权周转时间 { totalTimeSum += ProcessTable[q->GetID()].GettotalTime(); weightTotalTimeSum += ProcessTable[q->GetID()].GetweightTotalTime(); flag=q->GetnextQNode(); delete q; //从队列中删除q进程 q = p; //Q.ShowQueue(flag,true,ProcessTable,currentTime);//................................................................... } }while (!finish && (ProcessTable[r->GetID()].GetarriveTime() > currentTime + Round)); //当前进程还为执行完且下一个进程很晚才来,则继续给当前进程分配时间片 //否则都轮转 p = q; q = q->GetnextQNode(); if(q!=NULL) { currentTime=ProcessTable[q->GetID()].GetarriveTime();//..................................................................... //cout<<"当前时间currentTime: "< GetnextQNode()!=NULL) { p = Q.head; q = p->GetnextQNode(); } //Q.ShowQueue();//当前就绪队列中进程/////////////////////////////////////////////////////// } //Q.ShowQueue();//当前就绪队列中进程/////////////////////////////// delete Q.head; Q.head=NULL; }