|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
先来先服务FCFS进程调度模拟
下面程序默认认为上一个进程结束前,下一个进程就已经到达,如果要增加一种情况,即上一个进程结束前,下一个进程还没有到达,程序计算周转时间仍然正确,如何修改程序?
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#define N 5
struct PCB
{
char name[8];
int arrive_time;
int run_time;
int finish_time;
int zhouzhuan_time;
};
int total=0;
struct PCB pcb[N],temp;
float sum1,sum2,average=0;
void output()
{
printf("----------------------------------------------------------------------------------------------\n");
printf("进程名 到达时间 运行时间 完成时间 周转时间 带权周转时间 \n");
printf("----------------------------------------------------------------------------------------------\n");
for(int i=0;i<N;i++)
{
average=(float)pcb[i].zhouzhuan_time/pcb[i].run_time;
sum1=sum1+pcb[i].zhouzhuan_time;
sum2=sum2+average;
printf(" %s %d %d %d %d %.2f\n",pcb[i].name,pcb[i].arrive_time,pcb[i].run_time,pcb[i].finish_time,pcb[i].zhouzhuan_time,average);
}
printf(" 平均 ");
printf("%.2f %.2f\n",sum1/N,sum2/N);
printf("----------------------------------------------------------------------------------------------\n");
}
void main()
{
int i,j;
for ( i=0;i<N;i++)
{
printf("请输入进程名\n" );
scanf("%s",pcb[i].name);
printf("请输入到达时间:");
scanf("%d",&pcb[i].arrive_time);
printf("请输入要运行时间");
scanf("%d",&pcb[i].run_time);
}
for( i=0;i<N;i++)
{ printf("%s ",pcb[i].name);
printf("%d ",pcb[i].arrive_time);
printf("%d \n",pcb[i].run_time);
}
pcb[0].finish_time=pcb[0].arrive_time+pcb[0].run_time;
pcb[0].zhouzhuan_time=pcb[0].finish_time-pcb[0].arrive_time;
for(i=1;i<N;i++)
{
pcb[i].finish_time=pcb[i-1].finish_time+pcb[i].run_time;
pcb[i].zhouzhuan_time=pcb[i].finish_time-pcb[i].arrive_time;
}
output();
}
|
|