处理机调度-高响应比优先调度(HRRN)

在批处理系统中,FCFS算法所考虑的只是作业的等待时间,而忽视了作业的运行时间。而SJF算法正好与之相反,只考虑作业的运行时间,而忽视了作业的等待时间。

高响应比优先调度算法则是即考虑了作业的等待时间,又考虑作业运行时间。我们为每一个作业引入一个动态优先级,优先级随着时间的长而增加,使得长作业的优先级在等待期间不断的增加,等到足够时间后,必然有机会获得处理机。
优先级 = (等待时间 + 要求服务时间) / 要求服务时间。

输入:作业的数目、到达时间与服务时间.

输出:作业的调用序列、周转时间与结束时间。

处理机调度-高响应比优先调度(HRRN)_第1张图片

需要的数据结构:

//进程
struct Process
{
    int id;                         //进程标记
    int start_time;                 //进入时间
    int surves_time;                //服务时间
    int turnover_time;              //周转时间
    int end_time;                        //结束时间
    double priority;                //权值
};

辅助函数:

//按照权值进行排序,如果权值相等,则按照进入时间进行排序
bool cmp3(const Process &p1, const Process &p2)
{
    return (p1.priority > p2.priority) || (p1.priority==p2.priority && p1.start_time

实现方法:

void HRRN(queue &q, Process *p, int n)
{
    int i, j, k, finish;

    finish = 0;
    j = 0;
    sort(p, p+n, cmp1);
    for(i = 0; i < n; i++)
    {
        while(j finish)
            p[i].end_time = p[i].start_time + p[i].surves_time;
        else
            p[i].end_time = finish + p[i].surves_time;
        p[i].turnover_time = p[i].end_time - p[i].start_time;
        finish = p[i].end_time;
        q.push(p[i].id);
    }
}

 

你可能感兴趣的:(操作系统)