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

在批处理系统中,FCFS算法所考虑的只是作业的等待时间,而忽视了作业的运行时间。而SJF算法正好与之相反,只考虑作业的运行时间,而忽视了作业的等待时间。
高响应比优先调度算法则是即考虑了作业的等待时间,又考虑作业运行时间。我们为每一个作业引入一个动态优先级,优先级随着时间的长而增加,使得长作业的优先级在等待期间不断的增加,等到足够时间后,必然有机会获得处理机。
优先级 = (等待时间 + 要求服务时间) / 要求服务时间。
输入:作业的数目、到达时间与服务时间.
【处理机调度-高响应比优先调度(HRRN)】输出:作业的调用序列、周转时间与结束时间。
处理机调度-高响应比优先调度(HRRN)
文章图片

需要的数据结构:

//进程 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); } }


    推荐阅读