此程序是模拟作业调度中的先来先服务算法(fcfs),最短作业优先算法(sjf),最高响应比优先算法(hrn)。
print()函数的功能是输出模拟后的各作业运行情况。
avg() 函数的功能是计算平均周转时间和平均带权周转时间并输出。
源代码:
#include<stdio.h>
#define MAX 100
typedef struct JCB
{
char job_id[10]; //作业ID
float Arr_time; //到达时刻
float Fun_time; //估计运行时间
float Wait_time; //等待时间
float Start_time; //开始时刻
float Fin_time; //完成时刻
float Tur_time; //周转时间
float WTur_time; //带权周转时间
int Order; //优先标记
}list;
void fcfs(list *p,int count);
void sjf(list *p,int count);
void hrn(list *p,int count);
void print(list *p,int count);
void avg(list *p,int count);
void fcfs(list *p,int count) //先来先服务算法
{
list temp; //临时结构体变量
int i;
int j;
for(i = 1;i < count;i++) //按到达时刻直接插入排序
{
temp = p[i];
j = i-1;
while(temp.Arr_time < p[j].Arr_time && j >= 0)
{
p[j+1] = p[j];
--j;
}
p[j+1] = temp;
}
for(i = 0;i < count;i++) //循环计算各个作业的时间值
{
if(i == 0)
{
p[i].Start_time = p[i].Arr_time;
}
else
{
p[i].Start_time = p[i-1].Fin_time; //开始时刻==前一个作业的完成时刻
}