pcb backup(* current);
length=Rcs_left;
current->p_occupy+=current->p_apply;
length-=current->p_apply;
if(current->p_require-current->p_occupy>length && !isSafeState(pgrp,length))
{
current->p_occupy=backup.p_occupy;
current->p_stat=TASK_WAITING;
cout<
p_pid<<"\tis waitting."<p_pid<<"\tis waitting."<p_apply;
cout<p_pid<<"get"<p_apply<<"resource(s)!"<p_pid<<"get"<p_apply<<"resource(s)!"<p_apply=0;
if(current->p_occupyp_require)
{
pcb proc=*current;
pgrp.erase(current);
pgrp.insert(pgrp.end(),proc);
continue;
}
else if(current->p_occupy==current->p_require)
{
current->p_stat=TASK_SUCCEED;
current->p_occupy=0;
cout<p_pid<<"has finished!!!"<p_pid<<"has finished!!!"<p_require;
pgrp.erase(current);
wakeup(pgrp,Rcs_left);
}
if(isFinished(pgrp))
{
cout<vector
::iterator getFirstRunningProcess(vector&pgrp)
{
vector::iterator p;
for(p=pgrp.begin();p!=pgrp.end();p++)
{
if(p->p_stat==TASK_RUNNING)
{
return p;
}
}
return NULL;
}
void readApply(vector::iterator proc)
{
cout<p_pid<<'\t';
ff<<"ENTER THE request FOR THE PROCESS\n"<p_pid<<" ";
cin>>proc->p_apply;
ff<p_apply<p_apply>proc->p_require-proc->p_occupy)
{
cout<p_pid<<'\t';
ff<p_pid<<" ";
cin>>proc->p_apply;
ff<p_apply<&pgrp)
{
vector::iterator p;
for(p=pgrp.begin();p!=pgrp.end();p++)
if(p->p_stat!=TASK_SUCCEED)
return false;
return true;
}
void wakeup(vector&pgrp,int available)
{
vector::iterator p;
for(p=pgrp.begin();p!=pgrp.end();p++)
if(p->p_stat==TASK_WAITING)
{