响应比最高者优先调度算法(HRRF)

一、实验目的

       作业调度算法是指依照某种原则或策略从后备作业队列中选取作业的方法。响应比最高者优先算法是通过计算输入井后备队列中每个作业的响应比大小,从中选择响应比最高的作业装入主存,这样既考虑了作业的等待时间,又考虑了作业的运行时间。

二、实验要求

       假设本系统仍采用单道批处理系统,忽略设备工作时间和系统进行调度所花的时间。要求从键盘输入作业个数N,及每个作业的作业名、作业入井时间、估计运行时间。请编程输出采用响应比最高者优先算法得到的每个作业调度序号、作业名、作业入井时间、开始调度时间、运行时间、结束时间、周转时间,以及所有作业的平均周转时间。

三、源代码

#include 
#define N 10

typedef struct {
    int hour;
    int min;
}time;
typedef struct hrrf{
    char hrrf_id[20];
    double hrrf_run;  //运行时间
    time hrrf_entertime; //进入时间
    int enter;
    time hrrf_needtime;  //调度时间
    int needtime;
    time hrrf_endtime;   //结束时间
    int endtime;
    int hrrf_longtime;  //周转时间
    int hrrf_waittime;   //等待时间
    double hrrf_pjlongtime; //平均周转时间
    double hrrf_rate;       //响应比

    struct hrrf* next;
}HRRF;
//输入作业信息
void hrrfinput(HRRF s[N],int k)
{
    printf("\t请输入第%d个作业名:",k+1);
    scanf("%s",&s[k].hrrf_id);
    printf("\t请输入%s作业进入时间:",s[k].hrrf_id);
    scanf("%d:%d",&s[k].hrrf_entertime.hour,&s[k].hrrf_entertime.min);
    s[k].enter=s[k].hrrf_entertime.hour*60+s[k].hrrf_entertime.min;
    printf("\t请输入%s作业运行时间:",s[k].hrrf_id);
    scanf("%lf",&s[k].hrrf_run);
}
//计算作业的响应比
void rate(HRRF s[N],int k,int m)
{
    double ratenum;
    ratenum = (s[k].hrrf_run+(double)(s[m].endtime-s[k].enter))/(s[k].hrrf_run);
    s[k].hrrf_rate=ratenum;
    printf("\n\t每次算响应比:%s---%f\n",s[k].hrrf_id,s[k].hrrf_rate);
}
//按响应比大小对作业进行排序(降序排序)
void ratesort(HRRF s[N],int k,int m)
{
    int maxratenum;
    HRRF temp;
    int i,j;
    for(i=k;is[maxratenum].hrrf_rate)
                maxratenum=j;
        if(maxratenum!=i)
        {
            temp=s[i];
            s[i]=s[maxratenum];
            s[maxratenum]=temp;
        }

    }
}
//打印表单
void print(HRRF s[N],int k)
{
    printf("\t序号\t作业名\t进入时间\t调度时间\t结束时间\t运行时间\t等待时间\t周转时间\n");
    int i,j;
    for(i=0;i1)
    {
        for(i=0;i

四、实验截图

 

1、输入

 

响应比最高者优先调度算法(HRRF)_第1张图片

 

2、执行过程

 

 

响应比最高者优先调度算法(HRRF)_第2张图片

响应比最高者优先调度算法(HRRF)_第3张图片

响应比最高者优先调度算法(HRRF)_第4张图片

 

有问题欢迎指正,先谢了~~~

你可能感兴趣的:(HRRF,响应比最高者优先调度算法)