在操作系统课程中,作业调度算法是一个核心知识点。其中,最高响应比算法(Highest Response Ratio Next, 简称 HRRN)是一种兼顾短作业优先和避免长作业“饥饿”的优秀调度策略。本文将手把手教你用 C++语言 实现这一经典算法,即使你是编程新手,也能轻松理解并运行代码。
HRRN 是一种非抢占式的作业调度算法。它通过计算每个等待作业的“响应比”来决定下一个执行的作业。响应比的计算公式如下:
响应比 = (等待时间 + 服务时间) / 服务时间
- 等待时间:作业从提交到当前时刻所等待的时间。
- 服务时间:作业本身需要的 CPU 执行时间。
这个公式意味着:短作业天然具有较高的响应比,但随着等待时间增长,长作业的响应比也会逐渐升高,从而避免被无限期推迟——这正是 HRRN 的巧妙之处。

我们将用 C++ 编写一个完整的 HRRN 调度模拟程序。程序将接收一组作业(包含到达时间和执行时间),然后按照 HRRN 规则输出调度顺序、完成时间、周转时间等信息。
首先,我们需要一个结构体来存储每个作业的信息:
struct Job { int id; // 作业ID int arrivalTime; // 到达时间 int burstTime; // 执行时间(服务时间) int startTime; // 开始执行时间 int finishTime; // 完成时间 int waitingTime; // 等待时间 int turnaroundTime; // 周转时间 bool executed; // 是否已执行};核心思想是:在每个调度时刻,遍历所有已到达但未执行的作业,计算它们的响应比,选择响应比最高的作业执行。
#include <iostream>#include <vector>#include <iomanip>using namespace std;void hrrnScheduling(vector<Job>& jobs) { int n = jobs.size(); int currentTime = 0; int completed = 0; // 初始化 for (auto& job : jobs) { job.executed = false; } cout << setw(5) << "ID" << setw(10) << "Arrival" << setw(10) << "Burst" << setw(10) << "Start" << setw(10) << "Finish" << setw(12) << "Turnaround" << setw(10) << "Waiting" << endl; while (completed < n) { int candidate = -1; double maxRatio = -1; // 寻找已到达且未执行的作业中响应比最高的 for (int i = 0; i < n; i++) { if (!jobs[i].executed && jobs[i].arrivalTime <= currentTime) { double waitingTime = currentTime - jobs[i].arrivalTime; double responseRatio = (waitingTime + jobs[i].burstTime) / (double)jobs[i].burstTime; if (responseRatio > maxRatio) { maxRatio = responseRatio; candidate = i; } } } // 如果没有找到可执行作业,推进时间 if (candidate == -1) { currentTime++; continue; } // 执行选中的作业 Job& job = jobs[candidate]; job.startTime = currentTime; job.finishTime = currentTime + job.burstTime; job.turnaroundTime = job.finishTime - job.arrivalTime; job.waitingTime = job.turnaroundTime - job.burstTime; job.executed = true; cout << setw(5) << job.id << setw(10) << job.arrivalTime << setw(10) << job.burstTime << setw(10) << job.startTime << setw(10) << job.finishTime << setw(12) << job.turnaroundTime << setw(10) << job.waitingTime << endl; currentTime = job.finishTime; completed++; }}int main() { vector<Job> jobs = { {1, 0, 6}, {2, 2, 3}, {3, 4, 2}, {4, 6, 5} }; cout << "=== C++最高响应比算法 (HRRN) 调度结果 ===" << endl; hrrnScheduling(jobs); return 0;}以上代码运行后,会输出每个作业的调度详情。例如,作业2虽然比作业1晚到,但由于其较短的执行时间,在适当时候获得了较高的响应比而被优先调度。这种机制有效平衡了效率与公平性。
通过本教程,你已经掌握了如何用 C++语言实现最高响应比算法(HRRN)。该算法是操作系统调度算法中的重要一环,特别适用于批处理系统。希望你能将此代码用于学习、实验或课程设计。
记住,理解算法背后的逻辑比死记代码更重要。动手修改作业参数,观察调度顺序的变化,你会对 作业调度算法C++ 有更深刻的认识!
SEO关键词回顾:C++最高响应比算法、作业调度算法C++、HRRN调度C++实现、操作系统调度算法。
本文由主机测评网于2025-12-04发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025122845.html