进程调度
进程调度的算法有FIFO、优先数调度算法(静态优先级)、时间片轮转调度算法、分级调度算法;
其中FIFO和优先数调度算法在试题中出现的频率较高。
输入
进程流文件,其中存储的是一系列要执行的进程,每个作业包括四个数据项:
- 进程名
- 进程状态(就绪、等待、运行)
- 所需时间
- 优先级数(0级最高)。
输出
进程执行流、等待时间、平均等待时间。
部分代码
优先数调度算法
void privilege()
{
<span style="white-space:pre"> </span>int i,j,p;
<span style="white-space:pre"> </span>int passed_time=0;
<span style="white-space:pre"> </span>int total;
<span style="white-space:pre"> </span>int queue[MAXPCB];
<span style="white-space:pre"> </span>int current_privilege=1000;
<span style="white-space:pre"> </span>for(i=0;i<quantity;i++)
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>current_privilege=1000;
<span style="white-space:pre"> </span>for(j=0;j<quantity;j++)
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>if((pcbs[j].finished==0)&&(pcbs[j].privilege<current_privilege))
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>p=j;
<span style="white-space:pre"> </span>current_privilege=pcbs[j].privilege;
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>queue[i]=p;
<span style="white-space:pre"> </span>pcbs[p].finished=1;
<span style="white-space:pre"> </span>pcbs[p].wait_time+=passed_time;
<span style="white-space:pre"> </span>passed_time+=pcbs[p].time;
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>
<span style="white-space:pre"> //输出优先数调度执行流
cout<<endl<<"------------------------"<<endl;
cout<<"优先数调度执行流:"<<endl;
cout<<"进程名 等待时间"<<endl;
for(i=0;i<quantity;i++)</span>
<span style="white-space:pre"> {
out<<" "<<pcbs[queue[i]].name<<" "<<pcbs[queue[i]].wait_time<<endl;
}
<<</span>
<span style="white-space:pre"> </span>total=0;
<span style="white-space:pre"> </span>for(i=0;i<quantity;i++)
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>total+=pcbs[i].wait_time;
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>coun<<"总等待时间:"<<total<<"平均等待时间:"<<total/quantity<<end1;
}