首页/操作系统/02-process/多级反馈队列调度 🔗 在 Obsidian 中打开
操作系统 · 02-process

多级反馈队列调度

重要度 ★★★★ 多级反馈队列MLFQ多级队列
速查
MLFQ 设多个优先级递减、时间片递增的就绪队列:新进程入最高队列,时间片用完未完成则降级;短作业高优先级快速完成,长作业最终以 FCFS 保底不饥饿。

速查

项目
定义多个就绪队列,各队列优先级和时间片不同
核心思想让短作业优先执行,长作业逐级降低优先级
队列间规则高优先级队列优先,同队列内用 FCFS+RR
降级条件进程在时间片内未完成,降到下一级队列

核心概念

多级反馈队列(MLFQ)是最通用、最复杂的调度算法之一。它使用多个就绪队列,每个队列有不同的优先级和时间片大小。

规则

  1. 设置多个就绪队列,优先级从高到低,时间片从小到大
  2. 新进程进入最高优先级队列
  3. 高优先级队列中的进程优先执行(抢占式)
  4. 同一队列内使用FCFS + 时间片轮转
  5. 进程在当前队列的时间片内未完成,降到下一级队列(反馈)
  6. 只有高优先级队列为空时,才执行低优先级队列

典型配置(3 级队列):

队列优先级时间片调度方式
Q1最高最短(如 8ms)RR
Q2中等中等(如 16ms)RR
Q3最低最长(如 32ms)FCFS
特点
  • 短作业友好:短作业在高优先级队列就完成
  • 长作业不饥饿:虽然降级,但最终在最低队列获得 FCFS 服务
  • I/O 密集型优先:I/O 阻塞后回到高优先级队列

关键性质

性质说明
短作业友好短作业在高优先级队列完成,响应快
长作业公平最终在最低队列用 FCFS,不会饿死
I/O 密集型友好I/O 阻塞后回到高优先级队列
是否抢占是(高优先级可抢占低优先级)
是否饥饿不会(最低队列有 FCFS 保底)

常见考法

考法解题套路
队列降级进程时间片用完 → 降到下一级队列
新进程去哪新进程进入最高优先级队列
I/O 阻塞后去哪I/O 完成后回到最高优先级队列(重新开始)
是否饥饿不会饥饿——最低队列用 FCFS 保底
与 SJF 的关系MLFQ 近似实现了 SJF 的效果(短作业在高优先级队列完成)

易错点

注意
  • 新进程进入最高优先级队列,不是最低
  • 进程 I/O 阻塞后回到最高优先级队列(奖励 I/O 密集型进程)
  • 降级条件是"时间片用完未完成"——如果在时间片内完成,不会降级
  • 最低优先级队列通常用FCFS(不是 RR),保证长作业不被饿死
  • MLFQ 不是简单的优先级调度——它有反馈机制(降级)

核心结论

必背
  1. MLFQ 综合了 RR、优先级调度、FCFS 的优点,是最实用的调度算法之一
  2. 短作业在高优先级队列完成,实现了近似 SJF 的效果
  3. 长作业逐级降级但不会饿死(最低队列 FCFS 保底)
  4. I/O 密集型进程因频繁阻塞后回到高优先级队列而获益
  5. 现代 OS(如 Linux CFS、Windows 调度器)都使用 MLFQ 的变体

记忆卡片

MLFQ 的核心规则?
多队列(优先级递减、时间片递增),高优先级先执行,时间片用完降级。
新进程进入哪个队列?
最高优先级队列。
进程 I/O 完成后回到哪?
最高优先级队列(奖励 I/O 密集型进程)。
MLFQ 会饥饿吗?
不会——最低队列用 FCFS 保底。
MLFQ 与 SJF 的关系?
MLFQ 近似实现 SJF——短作业在高优先级队列就完成,长作业逐级降级。

交互动画 · 进程在队列间降级

Q1 最高优先级时间片 8ms · RR Q2 中优先级时间片 16ms · RR Q3 最低优先级时间片 32ms · FCFS
点击「新进程到达」让进程进入最高优先级队列 Q1
每点一次「降级」,进程在时间片内未完成则降到下一级队列
高优先级队列空时才调度低优先级队列;降级使长作业逐级下沉,但最低队列以 FCFS 保底不饥饿。

相关知识点

scheduling-algorithm-comparison round-robin-scheduling priority-scheduling

↑ 以上为站内 HTML 相对链接(纯网页可浏览);本页右上「在 Obsidian 中打开」跳回源笔记。