用C语言写的作业调度
case 'o': insertqueue(& Queue[3],i);jobpcb[i].status='o'; break;
case 'w': insertqueue(& Queue[4],i);jobpcb[i].status='w'; break;
case 'h': jobpcb[i].status='h'; num=jobpcb[i].id;jobtab[num].pcbnum=-1;jobpcb[i].id=-1; }
if(cmd== 'h') {jobpcb[i].wtime=0; total--;}
jobpcb[i].wtime=jobtab [ jobpcb[i].id ].idx[Index].time;
(*total)++;
}
}
}
void save ()
{
FILE *fp;
int i;
fp=fopen("pcbtable.txt","a");
fprintf(fp," 文件名 作业编号 执行到指令数 所处状态 等待时间 \n" );
for(i=0;i<3;i++)
fprintf(fp," \t %s \t %d \t %d \t %c \t %d \n" ,
jobpcb[i].filename,jobpcb[i].id,jobpcb[i].exetoIndex,
jobpcb[i].status,jobpcb[i].wtime );
fclose(fp);
}
//作业入队列
void JobEnQueue( int pcbnum,int Index ,int *total)
{
int num;
char cmd;
if(jobpcb[pcbnum].id>=0)
{
cmd=jobtab[ jobpcb[pcbnum].id ].idx[ Index ].name;
switch(cmd)
{
case 'c': insertqueue(&Queue[1],pcbnum); jobpcb[pcbnum].status='r'; break; case 'i': insertqueue(& Queue[2],pcbnum);jobpcb[pcbnum].status='i'; break;
case 'o': insertqueue(& Queue[3],pcbnum);jobpcb[pcbnum].status='o'; break;
case 'w': insertqueue(& Queue[4],pcbnum);jobpcb[pcbnum].status='w'; break;
case 'h': jobpcb[pcbnum].status='h'; num=jobpcb[pcbnum].id;jobtab[num].pcbnum=-1;jobpcb[pcbnum].id=-1;
}
if(cmd== 'h')
{
jobpcb[pcbnum].wtime=0;
printf(" \n\t\t作业 %d 完成\n", pcbnum+1, jobpcb[ pcbnum].status);