操作系统面试必问:FCFS、SJF、HRRN调度算法到底怎么算?一个例子讲透

张开发
2026/4/11 17:27:11 15 分钟阅读

分享文章

操作系统面试必问:FCFS、SJF、HRRN调度算法到底怎么算?一个例子讲透
操作系统面试必问FCFS、SJF、HRRN调度算法实战解析在计算机操作系统的面试中进程调度算法几乎是必考的核心知识点。无论是校招笔试还是技术面谈面试官都喜欢用给定一组进程的到达时间和服务时间请计算不同调度算法下的完成时间和周转时间这类题目来考察候选人对操作系统原理的理解深度。本文将用同一组进程数据手把手带你演练FCFS、SJF、HRRN三种经典调度算法的完整计算过程帮你建立清晰的解题框架。1. 理解进程调度的基本概念进程调度是操作系统内核的核心功能之一它决定了CPU资源如何分配给多个竞争执行的进程。一个优秀的调度算法需要在公平性和效率之间找到平衡点同时考虑响应时间和吞吐量等关键指标。关键术语解析到达时间(Arrival Time): 进程进入就绪队列的时间点服务时间(Serve Time): 进程需要占用CPU执行的总时间完成时间(Finish Time): 进程结束执行的时间点周转时间(Turnaround Time): 完成时间减去到达时间带权周转时间(Weighted Turnaround Time): 周转时间与服务时间的比值提示带权周转时间反映了进程的相对等待成本数值越小表示调度效率越高我们以这组进程数据为例贯穿全文演示计算过程进程到达时间服务时间A03B26C44D65E822. 先来先服务(FCFS)调度算法详解FCFS(First Come First Serve)是最直观的调度策略就像超市收银台排队一样严格按照进程到达的顺序分配CPU资源。2.1 FCFS算法执行流程初始化维护一个时间线变量current_time初始为0调度规则选择当前已到达但未执行的进程中到达时间最早的如果多个进程同时到达通常按输入顺序处理计算步骤进程开始执行时间 max(进程到达时间, 前一个进程完成时间)完成时间 开始执行时间 服务时间周转时间 完成时间 - 到达时间带权周转时间 周转时间 / 服务时间2.2 实例计算过程让我们用表格形式展示FCFS算法的完整计算过程进程到达时间服务时间开始时间完成时间周转时间带权周转时间A030331.0B263971.17C4491392.25D651318122.4E821820126.0执行时间线可视化0-3:A | 3-9:B | 9-13:C | 13-18:D | 18-20:E2.3 FCFS算法的特点分析优势实现简单调度开销小对所有进程公平无饥饿现象劣势平均等待时间较长本例中为8.6对短作业不友好如进程E的带权周转时间高达6.0可能导致CPU和I/O设备利用率低下注意FCFS算法在进程到达顺序不理想时可能出现护航效应(Convoy Effect)即长进程阻塞后方短进程的执行3. 短作业优先(SJF)调度算法深度剖析SJF(Shortest Job First)算法试图优化系统平均周转时间优先执行预计运行时间短的进程。3.1 SJF算法的两种变体非抢占式SJF一旦进程开始执行就运行到完成抢占式SJF(又称最短剩余时间优先)当新进程到达时如果其服务时间比当前执行进程的剩余时间短则抢占CPU本文重点讲解非抢占式SJF的实现。3.2 SJF算法执行步骤初始状态所有进程标记为未调度current_time 0调度时机每当CPU空闲时初始时或进程完成时选择策略从已到达的未调度进程中选择服务时间最短的计算指标同FCFS算法3.3 实例计算过程让我们逐步计算SJF调度下的各项指标第一轮调度current_time0就绪进程A选择A执行完成时间3第二轮调度current_time3已到达进程B(到达时间2)、C(到达时间4还未到)只有B就绪选择B执行完成时间9第三轮调度current_time9已到达未调度进程C、D、E比较服务时间C(4)、D(5)、E(2)选择E执行虽然E到达时间是8但当前时间已到9完成时间11第四轮调度current_time11剩余进程C(4)、D(5)选择C执行完成时间15第五轮调度current_time15剩余进程D选择D执行完成时间20最终结果表格进程到达时间服务时间开始时间完成时间周转时间带权周转时间A030331.0B263971.17E8291131.5C441115112.75D651520142.8执行时间线0-3:A | 3-9:B | 9-11:E | 11-15:C | 15-20:D3.4 SJF算法优劣分析优势理论上能提供最小的平均周转时间特别适合短作业繁多的场景劣势长作业可能饥饿本例中D进程最后执行需要预知或估算进程运行时间实际系统中难以精确获取实现复杂度高于FCFS4. 高响应比优先(HRRN)调度算法实战HRRN(Highest Response Ratio Next)算法试图平衡等待时间和服务时间克服FCFS和SJF的某些缺点。4.1 响应比计算公式响应比(RR) (等待时间 服务时间) / 服务时间 1 (等待时间 / 服务时间)其中等待时间 current_time - 到达时间4.2 HRRN算法执行流程初始状态current_time0所有进程未调度调度时机CPU空闲时初始或进程完成时选择策略计算所有已到达未调度进程的响应比选择响应比最高的进程执行指标计算同前两种算法4.3 实例逐步计算第一轮调度current_time0只有A到达选择A执行完成时间3第二轮调度current_time3就绪进程B(到达时间2)计算响应比B的等待时间3-21RR11/6≈1.17选择B执行完成时间9第三轮调度current_time9就绪进程C(到达时间4)、D(到达时间6)、E(到达时间8)计算各进程响应比C: 等待时间9-45RR15/42.25D: 等待时间9-63RR13/51.6E: 等待时间9-81RR11/21.5选择响应比最高的C执行完成时间13第四轮调度current_time13就绪进程D、E计算响应比D: 等待时间13-67RR17/52.4E: 等待时间13-85RR15/23.5选择E执行虽然服务时间短但响应比更高完成时间15第五轮调度current_time15剩余进程D选择D执行完成时间20最终结果表格进程到达时间服务时间开始时间完成时间周转时间带权周转时间A030331.0B263971.17C4491392.25E82131573.5D651520142.8执行时间线0-3:A | 3-9:B | 9-13:C | 13-15:E | 15-20:D4.4 HRRN算法特点总结优势兼顾了等待时间和服务时间长作业随着等待时间增加响应比会上升避免了饥饿平均周转时间通常优于FCFS劣势每次调度都需要计算所有就绪进程的响应比开销较大仍然需要预知服务时间5. 三种算法综合对比与面试技巧通过同一组进程数据的计算我们可以直观比较三种算法的表现性能指标对比表算法平均周转时间平均带权周转时间最大带权周转时间FCFS8.62.566.0(E)SJF7.61.842.8(D)HRRN8.02.143.5(E)面试常见问题解析如何选择调度算法批处理系统SJF或HRRN交互式系统时间片轮转或多级反馈队列实时系统优先级调度SJF为什么能提供最小平均周转时间数学上可以证明通过交换论证任何非SJF的调度顺序通过交换相邻的逆序对都能减少平均周转时间HRRN中响应比公式的设计原理分子体现公平性等待时间分母体现效率服务时间形式为(等待服务)/服务而非等待/服务确保数值≥1面试实战建议遇到调度算法题先明确是哪种调度策略画时间线图可以帮助理清思路计算时注意检查进程到达时间与当前时间的关系可以先用简单例子验证算法理解是否正确

更多文章