实验二(作业调度)FCFS
#include<stdio.h>
#define N 24
typedef struct node
{
char name[10]; /*作业名*/
int proc; //进程优先数*/
int ArriTime;//到达时间
int StartTime;//开始时间
int NeedTime; /*进程所需时间*/
int RunTime; /*运行时间*/
int EndTime;//结束时间
int ZzTime;//周转时间
float Zznum;
char state; //进程的状态*/
/*struct node *next; 链指针*/
/*int round; 进程时间轮转时间片*/
/*int count; 计数器*/
}JCB;
int main(void){
JCB job[N];
int n;
void input();
input(job,&n);
void FCFS();
FCFS(n);
}
void input(JCB job[],int n){
int tot; //作业个数
int i;
printf("请输入作业个数:[2-24]\n");
scanf("%d",&tot);
for(i=0;i<tot;i++){
job[i].proc=i;
printf("输入第[i+1]个作业的作业名,到达时间,所需时间\n");
scanf("%s",&job[i].name);
scanf("%d",&job[i].ArriTime);
scanf("%d",&job[i].NeedTime);
//scanf("%d",&job[i].EndTime);
//scanf("%d",&job[i].ZzTime);
//scanf("%4f",&job[i].Zznum);
}
printf("作业名 到达时间 所需时间\n");
for(i=0;i<tot;i++)
{
printf("%s ",job[i].name);
printf("%5d ",job[i].ArriTime);
printf("%5d ",job[i].NeedTime);
//printf("%5d ",job[i].EndTime);
// printf("%5d ",job[i].ZzTime);
//printf("%2.1f ",job[i].Zznum);
}
}
void FCFS(int num) //先来先服务算法计算
{
int i,j;
for(i=0;i<num;i++)//顺序执行进入队列的作业
{ if(i==0) //第一个进程
{
job[i].RunTime=job[i].NeedTime;
job[i].EndTime=job[i].StartTime+job[i].RunTime;
}
else
{
if(job[i].StartTime>job[i-1].EndTime)//如果当前有作业在执行
{
job[i].RunTime=job[i].NeedTime;
job[i].EndTimejob[i].StartTime+job[i].RunTime;
}
else
{
job[i].RunTime=job[i].NeedTime+job[i-1].EndTime-job[i].StartTime;
job[i].EndTime=job[i].StartTime+jobc[i].RunTime;
}
}