一、 实验设计题目
调度算法,要求用先来先服务(FCFS)和段作业优先(SJF)算法实现。
二、 设计思路
1、 先来先服务调度算法(FCFS)
先来先服务调度算法是一种简单的调度算法,该算法可以用于作业调度也 可以用于进程调度。作 0
// 2 1
// 3 2
// 4 3
〃以数组形式保存如下
Job_type job[]={l,0,66,2,l,100,3,2,88,4,3,100};
void load() { int i;
printf("输入作业名称:\n");
for(i=0;ivSIZE;i++) scanf("%d,%d,%d",&job[i].no,&job[i].tb,&job[i].tr);
printf(" 作业名到达时间运行时间\n"); 〃载入作业 for(i=0;ivSIZE;i++)
printf("\t%d\t%d\t%d\n",job[i].no,job[i].tb,job[i].tr);
}
void fcfs() //调用 FCFS 算法
{ int i,j,t=O,tw=O,tt=O; 〃t为完成时间,tw为等待时间,tt为周转时间 for(i=0;ivSIZE-l;i++) //判断作业开始时间的大小,按照从小到大的排列
for(j=i+l;jvSIZE;j++)
if(job[i].tb>job[j].tb) // i作业的tb大于j作业的tb,则i和j调换位置
{x=job[i];
job[i]=job[j];
job[j]=x;
}
printf("FCFS 调度结果:\n");
printf("开始时间作业号到达时间运行时间完成时间等待时间周转时间
\n");
for(i=0;i<SIZE;i++) //计算每个作业的各个时间
{
printf(“ %d",t); //t是前一个作业的完成时间
t=t+job[i].tr; //i作业完成时间=前一个作业完成时间+i作业的运行时间 tw=t-job[i].tb-job[i].tr; //i作业等待时间=i完成时间-i运行时间 tt=t-job[i].tb; //i周转时间=i完成时间-i开始时间 printf("\t%d\t%d\t%d\t%d\t%d \t%d\n",job[i].no,job[i].tb,job[i].tr,t,tw,tt);//对应输出
}
void sjf() //短作业调度函数
{ int i,j,t=O,tw=O; 〃t为总时间,tw为等待时间
for(i=0;ivSIZE-l;i++) //判断每个作业的运行时间长短,按小到大排列
for(j=i+l;jvSIZE;j++)
if(job[i].tr>job[j].tr) //i作业的tr大于j作业的tr,则调换位置
{x=job[i];
job[i]=job[j];
job[j]=x;
}
printf(”短作业优先调度结果:\n");
printf("开始时间作业号 到达时间运行时间总时间等待时间\n");
for(i=0;i<SIZE;i++) //计算每个作业的各个时间
{
printf(“ %d",t); //t为上一个作业的总时间
t=t+job[i].tr; /
队列调度算法 来自淘豆网www.taodocs.com转载请标明出处.