Skip to Content
面试题库Operating System[面试题] 常见的批处理调度算法有哪些?FCFS、SJF、SRTN 分别是什么?

[面试题] 常见的批处理调度算法有哪些?FCFS、SJF、SRTN 分别是什么?

📖 版块 A:知识讲解版 (温故知新)

  • 批处理系统的目标
    1. 用户交互少。
    2. 更关注整体吞吐量和平均周转时间。
  • FCFS(First Come First Serve,先来先服务)
    1. 按作业到达顺序依次执行。
    2. 实现简单,公平直观。
    3. 缺点是容易让短作业长时间等待,出现“护航效应”。
  • SJF(Shortest Job First,短作业优先)
    1. 优先调度估计运行时间最短的作业。
    2. 对平均周转时间更友好。
    3. 缺点是长作业可能长期得不到调度,出现饥饿。
  • SRTN(Shortest Remaining Time Next,最短剩余时间优先)
    1. 是 SJF 的抢占式版本。
    2. 当新作业到达时,会和当前作业的剩余时间比较。
    3. 如果新作业更短,就抢占当前作业。
    4. 响应更灵活,但切换更频繁。

🎤 版块 B:面试实战版 (高手逐字稿)

Q:常见的批处理调度算法有哪些?FCFS、SJF、SRTN 分别是什么?

🧠 破局思路:这题一定先说“批处理系统的目标是什么”,否则后面算法优劣都没有参照系。批处理系统不强调交互体验,而是强调吞吐量和周转时间。

💬 高手逐字稿

如果是批处理系统,调度算法最主要的目标一般不是“谁先响应”,而是整体吞吐量高不高、平均周转时间好不好。因为这类系统用户交互少,更关注的是一批作业整体跑完的效率。

最基础的算法是 FCFS,也就是先来先服务。它按到达顺序排队执行,优点是特别简单,也比较容易理解,看起来很公平。但它有一个明显问题:如果前面来了一个很长的大任务,后面一堆小任务就得一直等,这会导致平均周转时间变差,这就是经典的“护航效应”。

为了改善这个问题,就有了 SJF,也就是短作业优先。它的思路是优先运行预计执行时间最短的任务。这样做通常能显著优化平均周转时间,因为一堆短任务会很快被清掉,系统整体看起来更高效。但它的问题也很明显:如果短任务源源不断地来,那长任务可能一直排不到,出现饥饿现象。

再进一步,就是 SRTN,也就是最短剩余时间优先。你可以把它理解成 SJF 的抢占式版本。SJF 一般是当前任务一旦开始跑,就让它跑完;SRTN 则更激进,当前任务正在执行时,如果突然来了一个剩余时间更短的新任务,系统会立刻把当前任务挂起,先去执行那个更短的任务。

所以三者的对比可以这么记:

  • FCFS:最简单,公平直观,但对短任务不友好。
  • SJF:平均周转时间更优,但可能饿死长任务。
  • SRTN:在 SJF 基础上进一步提高效率,但切换开销更大,调度实现更复杂。

如果面试官再追问一句“现实里为什么很难完美用 SJF”,你可以补一句:因为系统往往很难准确提前知道一个任务到底会跑多久。

最后更新于:
⏱️

登录后开始阅读

当前 MVP 版本只开放邮箱密码登录注册。完成登录后即可进入面试题内容。

还没有账号?先去注册