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