www.pudn.com > os.rar > FCFS.cpp
#include#include #include"FCFS.h" using namespace std; void FCFS::Fcfs(LinkQueue& Q, int& totalTimeSum, int& weightTotalTimeSum,PCBNode * ProcessTable) { void showQ(LinkQueue& Q,PCBNode * ProcessTable,QueueNode *node,int t); totalTimeSum = 0; weightTotalTimeSum = 0;//平均周转时间 QueueNode* p; QueueNode* q; p = Q.head->GetnextQNode(); if (p !=NULL ) { ProcessTable[p->GetID()].SetstartTime(ProcessTable[p->GetID()].GetarriveTime()); ProcessTable[p->GetID()].SetfinishTime( ProcessTable[p->GetID()].GetarriveTime() + ProcessTable[p->GetID()].GetreqTime()); } for(q=p->GetnextQNode(); q!=NULL; q=q->GetnextQNode()) { if (ProcessTable[q->GetID()].GetarriveTime() < ProcessTable[p->GetID()].GetfinishTime()) { ProcessTable[q->GetID()].SetstartTime( ProcessTable[p->GetID()].GetfinishTime()); ProcessTable[q->GetID()].SetfinishTime( ProcessTable[p->GetID()].GetfinishTime() + ProcessTable[q->GetID()].GetreqTime()); } else//下个进程到达时间较晚 { ProcessTable[q->GetID()].SetstartTime( ProcessTable[q->GetID()].GetarriveTime()); ProcessTable[q->GetID()].SetfinishTime(ProcessTable[q->GetID()].GetarriveTime() + ProcessTable[q->GetID()].GetreqTime()) ; } p = q; } for(q=Q.head->GetnextQNode(); q!=NULL; q=q->GetnextQNode()) { ProcessTable[q->GetID()].SettotalTime(ProcessTable[q->GetID()].GetfinishTime() - ProcessTable[q->GetID()].GetarriveTime()) ; ProcessTable[q->GetID()].SetweightTotalTime(ProcessTable[q->GetID()].GettotalTime()/ProcessTable[q->GetID()].GetreqTime()); totalTimeSum += ProcessTable[q->GetID()].GettotalTime(); weightTotalTimeSum += ProcessTable[q->GetID()].GetweightTotalTime(); } int t = 0; for(q=Q.head->GetnextQNode(); q!=NULL; q=q->GetnextQNode()) { cout<<"*********************"< GetID()].GetstartTime())//下一个进程还没有到来,空隙时间 { cout<<"时刻"< GetID()].GetfinishTime() ) { cout<<"时刻"< GetID()<<"活动"< GetnextQNode() != NULL) { cout<<"时刻"< GetID()<<"结束活动,开始下一个进程."< GetID()<<"的周转时间为: "< GetID()].GettotalTime()< GetID()<<"的带权周转时间为: "< GetID()].GetweightTotalTime()< GetID()<<"结束活动."< GetID()<<"的周转时间为: "< GetID()].GettotalTime()< GetID()<<"的带权周转时间为: "< GetID()].GetweightTotalTime()< GetnextQNode(); q!=NULL; q=q->GetnextQNode()) { delete p; p = q; } } void showQ(LinkQueue& Q,PCBNode * ProcessTable,QueueNode *node,int t) { QueueNode *p=node; int flag=0; while(p->GetnextQNode()!=NULL) { p=p->GetnextQNode(); if(ProcessTable[p->GetID()].GetarriveTime()<=t) { if(flag==0) { cout<<"当前就绪队列中进程号: "; flag=1; } cout<<" "< GetID()<<" "; } } cout<