BOOM,困到不行,这个写完就睡觉了,今天好像有点感冒 ,翘了晚上的课一直睡到10点起来,睡不着在写代码,现在又困了

高响应比算法,是一种动态调整优先级的算法,在上面介绍的PSA算法中,给每个作业安排一个优先级后,始终这个优先级不再改变,这有些不合理。

因为可能造成一个低优先级作业始终得不到执行。

为了解决这个问题,HRRN算法每次都计算作业的优先级,随着作业等待时间的变长,优先级不断的提高,所以能够得到更快的执行。

这个优先级可以描述为: 优先级 = (作业已等待时间 + 作业的服务时间) / 作业的服务时间

从上式可以看到,作业的服务时间是固定的, 优先级随着已等待时间的提高而变大

//main.cpp
#include "HRRN.h"int main()
{std::vector<PCB> PCBList;//输入作业信息InputPCB(PCBList);//HRRN算法HRRN(PCBList);//显示结果show(PCBList);return 0;
}//HRRN.h
#ifndef HRRN_H_
#define HRRN_H_#include <iostream>
#include <algorithm>
#include <iomanip>
#include <vector>//作业结构体
typedef struct PCB
{int ID;                            //标识符double Level;                  //优先级int ComeTime;                  //到达时间int ServerTime;                   //服务时间int FinishTime;                   //完成时间int TurnoverTime;             //周转时间double WeightedTurnoverTime;  //带权周转时间
}PCB;/*
函数功能:输入作业信息
参数说明:
PCBList     std::vector<PCB>&     PCB链
*/
void InputPCB(std::vector<PCB> &PCBList);/*
函数功能:HRRN算法
参数说明:
PCBList     std::vector<PCB>&     PCB链
*/
void HRRN(std::vector<PCB> &PCBList);/*
函数功能:计算优先级
参数说明:
b       std::vector<PCB>::iterator        起始位置
e       std::vector<PCB>::iterator        结束位置
CurTime int                             当前时间
*/
void CalPriority(std::vector<PCB>::iterator b, std::vector<PCB>::iterator e, int CurTime);/*
函数功能:显示结果
参数说明:
PCBList     std::vector<PCB>&     PCB链
*/
void show(std::vector<PCB> &PCBList);/*
函数功能:比较函数,用于sort(),按ComeTime升序排列
参数说明:
p1          const PCB&              PCB
p2          const PCB&              PCB
*/
bool CmpByComeTime(const PCB &p1, const PCB &p2);/*
函数功能:比较函数,用于sort(),按Level降序排列
参数说明:
p1          const PCB&              PCB
p2          const PCB&              PCB
*/
bool CmpByLevel(const PCB &p1, const PCB &p2);#endif//HRRN.cpp
#include "HRRN.h"//输入作业信息
void InputPCB(std::vector<PCB> &PCBList)
{do {PCB temp;std::cout << "输入标识符: ";std::cin >> temp.ID;std::cout << "输入到达时间: ";std::cin >> temp.ComeTime;std::cout << "输入服务时间: ";std::cin >> temp.ServerTime;PCBList.push_back(temp);std::cout << "继续输入?Y/N: ";char ans;std::cin >> ans;if ('Y' == ans || 'y' == ans)continue;elsebreak;} while (true);
}//HRRN算法
void HRRN(std::vector<PCB> &PCBList)
{std::sort(PCBList.begin(), PCBList.end(), CmpByComeTime);      //按到达时间排序//同时到达的按优先级降序排序,决定首先运行的作业int i = 1;std::vector<PCB>::iterator it = PCBList.begin() + 1;while ((*it).ComeTime == (*(it - 1)).ComeTime){++i;++it;}CalPriority(PCBList.begin(), PCBList.begin() + i, 0);       //计算优先级std::sort(PCBList.begin(), PCBList.begin() + i, CmpByLevel);int FinishTime = -1;for (it = PCBList.begin(); it < PCBList.end(); ++it){if ((*it).ComeTime >= FinishTime)       //没有作业正在运行,取队首作业运行(*it).FinishTime = (*it).ComeTime + (*it).ServerTime;else                                    //有作业正在运行,等待作业完毕,此作业再运行(*it).FinishTime = FinishTime + (*it).ServerTime;(*it).TurnoverTime = (*it).FinishTime - (*it).ComeTime;(*it).WeightedTurnoverTime = (double)(*it).TurnoverTime / (*it).ServerTime;FinishTime = (*it).FinishTime;//在一个作业运行期间,如果有其他作业到达,将他们按照优先级降序排列i = 1;while ((it + i) < PCBList.end() && (*(it + i)).ComeTime <= FinishTime)++i;CalPriority(it + 1, it + i, FinishTime);std::sort(it + 1, it + i, CmpByLevel);}std::sort(PCBList.begin(), PCBList.end(), CmpByComeTime);     //重新排列,用于显示结果
}//计算优先级
void CalPriority(std::vector<PCB>::iterator b, std::vector<PCB>::iterator e, int CurTime)
{while (b < e){(*b).Level = (double)((*b).ServerTime + (CurTime - (*b).ComeTime)) / (*b).ServerTime;++b;}
}//显示结果
void show(std::vector<PCB> &PCBList)
{int SumTurnoverTime = 0;double SumWeightedTurnoverTime = 0;std::cout.setf(std::ios::left);std::cout << std::setw(20) << "标识符";for (std::vector<PCB>::iterator it = PCBList.begin(); it < PCBList.end(); ++it)std::cout << std::setw(5) << (*it).ID;std::cout << std::endl;std::cout << std::setw(20) << "到达时间";for (std::vector<PCB>::iterator it = PCBList.begin(); it < PCBList.end(); ++it)std::cout << std::setw(5) << (*it).ComeTime;std::cout << std::endl;std::cout << std::setw(20) << "服务时间";for (std::vector<PCB>::iterator it = PCBList.begin(); it < PCBList.end(); ++it)std::cout << std::setw(5) << (*it).ServerTime;std::cout << std::endl;std::cout << std::setw(20) << "完成时间";for (std::vector<PCB>::iterator it = PCBList.begin(); it < PCBList.end(); ++it)std::cout << std::setw(5) << (*it).FinishTime;std::cout << std::endl;std::cout << std::setw(20) << "周转时间";for (std::vector<PCB>::iterator it = PCBList.begin(); it < PCBList.end(); ++it){std::cout << std::setw(5) << (*it).TurnoverTime;SumTurnoverTime += (*it).TurnoverTime;;}std::cout << std::endl;std::cout << std::setw(20) << "带权周转时间";for (std::vector<PCB>::iterator it = PCBList.begin(); it < PCBList.end(); ++it){std::cout << std::setw(5) << (*it).WeightedTurnoverTime;SumWeightedTurnoverTime += (*it).WeightedTurnoverTime;;}std::cout << std::endl;std::cout << "平均周转时间: " << (double)SumTurnoverTime / PCBList.size() << std::endl;std::cout << "平均带权周转时间: " << SumWeightedTurnoverTime / PCBList.size() << std::endl;
}//比较函数,按ComeTime升序排列
bool CmpByComeTime(const PCB &p1, const PCB &p2)
{return p1.ComeTime < p2.ComeTime;
}//比较函数,按Level降序排列
bool CmpByLevel(const PCB &p1, const PCB &p2)
{return p1.Level > p2.Level;
}

高响应比优先调度算法(HRRN)相关推荐

  1. 作业调度算法【平均周转时间、平均带权周转时间、先来先服务FCFS、短作业优先SJF、高优先权(级)算法FPF、高响应比优先算法HRRN】

    文章目录 先来先服务算法(FCFS) 短作业优先算法(SJF).短进程优先算法(SPF) 周转时间和带权周转时间 高优先权(级)调度算法FPF 高响应比优先调度算法HRRN 先来先服务算法(FCFS) ...

  2. 高响应比优先调度算法

    任务描述 本关任务:编写一个高响应比优先调度算法解决一个实际的进程调度问题,并打印出每个进程的完成时间.周转时间和带权周转时间 相关知识 为了完成本关任务,你需要掌握:1.先来先服务调度算法,2.进程 ...

  3. 高响应比优先调度算法 (HRRN)例题

    高响应比优先调度算法(Highest Response Ratio Next)是一种对CPU中央控制器响应比的分配的一种算法.HRRN是介于FCFS(先来先服务算法)与SJF(短作业优先算法)之间的折 ...

  4. 假设有四个作业,它们的提交、运行时间如下表所示。若采用高响应比优先调度算法,试问平均周转时间和平均带权周转时间为多少?

    处理机调度算法 题目: 假设有四个作业,它们的提交.运行时间如下表所示.若采用高响应比优先调度算法,试问平均周转时间和平均带权周转时间为多少? 高响应比优先(HRRN)调度算法 是对FCFS调度算法和 ...

  5. 操作系统调度算法--高响应比优先调度算法解析

    高响应比优先调度算法(Highest Response Radio Next,HRRN)是一种对CPU中央控制器响应比的分配的算法.HRRN是介于FCFS(先来先服务算法)与SJF(短作业优先算法)之 ...

  6. 非抢占的高响应比优先调度算法

    模拟操作系统进程调度 算法流程图 测试数据 进程名: A B C D E 需要运行时间: 3 6 4 5 2 5 ProcA 8 3 ProcB 10 6 ProcC 7 4 ProcD 12 5 P ...

  7. 先来先服务和高响应比优先调度算法C语言实现

    先来先服务和高响应比优先调度算法C语言实现 目录: 1.进程调度与作业调度的区别: 2.单道批处理系统与多道批处理系统的区别: 3.程序设计用到的公式: 4.高响应比优先算法特点: 5.源代码示例: ...

  8. 操作系统高响应比优先调度算法代码_进程调度

    进程调度的定义 进程的调度就是操作系统进程管理的一个重要组成部分. 其任务是选择下一个要运行的进程. 那么如何进行选择呢? 要探明这一点,首先需要确定操作系统进程调度的目标是什么. 有了目标,我们就知 ...

  9. 十一、FCFS(先来先服务)、SJF(短作业优先)、HRRN(高响应比优先)

    一.知识总览 二.先来先服务(FCFS) **注意:**针对于先来先服务算法某些作业(或进程)平均周转时间长的缺点,提出了短作业优先的算法(SJF) 三.短作业优先(SJF) 1.非抢占式的短作业优先 ...

  10. 调度算法先来先服务(FCFS)、最短作业优先(SJF)和最高响应比优先(HRRN)算法

    一.调度算法 (一)先来先服务(FCFS,First Come First Serve) 例题:各进程到达就绪队列的时间.需要的运行时间如下表所示.使用先来先服务调度算法,计算各进程的等待时间.平均等 ...

最新文章

  1. IJCAI 2019:中国团队录取论文超三成,北大、南大榜上有名
  2. SAP MM MD04中PR单据的显示
  3. AWS之EC2搭建WordPress博客
  4. 三家逐鹿,私有化部署能帮神策数据杀出重围么?| 公司调研
  5. Linux 进程(二) 进程地址空间
  6. InputStream 类型
  7. SQLAlchemy 教程 —— 进阶篇
  8. 不常见正则表达式总结
  9. win10计算机停止工作,Win10系统总提示Rundll32已停止工作的解决方法
  10. 用计算机作一首歌,我想用电脑创作一首歌。需要什么软件啊?
  11. 设备点检php源码,设备巡检管理系统Delphi源码下载
  12. BIOS报警声_文伟_新浪博客
  13. 万豪国际集团贵州首家万枫酒店在贵阳会展中心开业
  14. pta——点赞,打印杨辉三角,吃火锅(c语言)
  15. Samba服务器搭建与配置
  16. Linux运维养成记-服务器安全运维
  17. 每周读书#3 - 《活着本来单纯》
  18. [Android]listview图文混排
  19. 四旋翼动力学和仿真翻译(Quadcopter Dynamics and Simulation)
  20. Master in Vocab -- Day Four

热门文章

  1. ReactNative配合node.js实现的公司通讯录管理app
  2. Vmware Workstation虚拟机繁忙导致虚拟机系统死机
  3. kinetis时钟模块MCG详解
  4. MySQL配置文件my.ini
  5. 计算机软件水平考试中级题目,计算机软考中级考试试题及答案
  6. 生动形象!一个故事讲完CPU的工作原理
  7. 虚拟机VMware安装学习过程中遇到的几个问题
  8. 【UG NX MCD 机电一体化概念设计】UG NX MCD+PLCSIM Advanced联合仿真实例(一)基本配置
  9. HLS ug871学习
  10. 以组播流方式替换运营商IPTV直播频道