先来先服务FCFS进程调度模拟
先来先服务FCFS进程调度模拟
下面程序默认认为上一个进程结束前,下一个进程就已经到达,如果要增加一种情况,即上一个进程结束前,下一个进程还没有到达,程序计算周转时间仍然正确,如何修改程序?
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#defineN5
structPCB
{
char name;
intarrive_time;
intrun_time;
int finish_time;
intzhouzhuan_time;
};
inttotal=0;
structPCBpcb,temp;
float sum1,sum2,average=0;
voidoutput()
{
printf("----------------------------------------------------------------------------------------------\n");
printf("进程名到达时间运行时间完成时间周转时间带权周转时间\n");
printf("----------------------------------------------------------------------------------------------\n");
for(inti=0;i<N;i++)
{
average=(float)pcb.zhouzhuan_time/pcb.run_time;
sum1=sum1+pcb.zhouzhuan_time;
sum2=sum2+average;
printf(" %s %d %d %d %d %.2f\n",pcb.name,pcb.arrive_time,pcb.run_time,pcb.finish_time,pcb.zhouzhuan_time,average);
}
printf(" 平均 ");
printf("%.2f %.2f\n",sum1/N,sum2/N);
printf("----------------------------------------------------------------------------------------------\n");
}
voidmain()
{
int i,j;
for ( i=0;i<N;i++)
{
printf("请输入进程名\n" );
scanf("%s",pcb.name);
printf("请输入到达时间:");
scanf("%d",&pcb.arrive_time);
printf("请输入要运行时间");
scanf("%d",&pcb.run_time);
}
for( i=0;i<N;i++)
{ printf("%s ",pcb.name);
printf("%d ",pcb.arrive_time);
printf("%d \n",pcb.run_time);
}
pcb.finish_time=pcb.arrive_time+pcb.run_time;
pcb.zhouzhuan_time=pcb.finish_time-pcb.arrive_time;
for(i=1;i<N;i++)
{
pcb.finish_time=pcb.finish_time+pcb.run_time;
pcb.zhouzhuan_time=pcb.finish_time-pcb.arrive_time;
}
output();
}
页:
[1]