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<