📄 program.txt
字号:
void FinFout() //先来先服务算法
{
QueueReady ready;
QueueBlock block;
int n;
cout<<"输入演示的进程个数:";
cin>>n;
srand((unsigned)time(NULL)); //先产生一系列随机数,然后为每一个进程的数据成员赋值
for(int i=1;i<=n;i++)
{
PCB *p=new PCB(i);
p->cpunumber=0;
p->io=int (rand()%10*0.2);
p->iofinish=0; //io=0 1
p->iotime=int(rand()%10*0.4)+2; //iotime=2 3 4 5
p->n=0;
p->priority=0;
p->weight=0;
p->slicenumber=1;
int k=int(rand()%10*0.3)+3; //k=3 4 5
p->totalnumber=k*(p->slicenumber); //totalnumber=3~5倍slicenumber
p->when=int(float(rand()%10*0.1)*k)+1; //when=1 2 3...k
ready.Enqueue(p);
}
ready.output(1);
PCB *process; //当前运行进程
while(ready.Isempty()==0||block.Isempty()==0)
{
if(ready.Isempty()==0) //检查就绪队列是否为空
{
process=ready.Getfront(1);
cout<<"进程"<<process->name<<"开始运行"<<endl<<endl;
for(int i=process->n+1;i<=process->totalnumber&&process->cpunumber<=process->totalnumber;i++)
{
Time(1); //运行一个时间片
process->n=i;
process->cpunumber++;
if(block.Isempty()==0) //考察阻塞队列中是否有IO完成的进程
{
block.addiofinish();
while(block.Isempty()==0&&block.Isfinish()==1)
{
PCB *p=block.Getfinish();
if(p->cpunumber<p->totalnumber)
{
ready.Enqueue(p);
cout<<"进程"<<p->name<<"完成IO请求,入就绪队列"<<endl<<endl;
}
else
cout<<"进程"<<p->name<<"已完成IO,并且整个进程均已完成."<<endl<<endl;
}
}
if(process->io==1&&i==process->when) //处理当前进程
{
block.Enqueue(process); //判断当前进程是否有IO请求
cout<<"进程"<<process->name<<"有IO请求,入阻塞队列"<<endl<<endl;
break;
}
if(process->cpunumber==process->totalnumber)
cout<<"进程"<<process->name<<"已完成."<<endl<<endl;
}
block.addiofinish();
while(block.Isempty()==0&&block.Isfinish()==1) //如果有完成IO的进程
{
PCB *p=block.Getfinish();
if(p->cpunumber<p->totalnumber)
{ ready.Enqueue(p);
cout<<"进程"<<p->name<<"完成IO请求,入就绪队列"<<endl<<endl;
}
else cout<<"进程"<<p->name<<"已完成IO,并且整个进程已完成."<<endl<<endl;
}
}
else //如就绪队列已空,只处理阻塞队列
{
Time(1); //运行一个时间片
block.addiofinish();
while(block.Isempty()==0&&block.Isfinish()==1) //如果有完成IO的进程
{
PCB *p=block.Getfinish();
if(p->cpunumber<p->totalnumber)
{ ready.Enqueue(p);
cout<<"进程"<<p->name<<"完成IO请求,入就绪队列"<<endl<<endl;
}
else cout<<"进程"<<p->name<<"已完成IO,并且整个进程均已完成."<<endl<<endl;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -