25.抢占-vs-时间片.md 3.6 KB

抢占 vs 时间片

判别规则(核心,唯一要记的)

  • 有更高优先级任务就绪 → 抢占(跨优先级);tick 到点且同优先级 → 时间片(同级内部)
  • 核心不变量:正在运行的永远是最高优先级就绪任务
  • 抢占只发生在调度点;关中断/临界区内不发生。tick 到点只是"检查机会",切不切换看优先级

一句话:"高优先级插入靠抢占,同级轮流靠时间片。"

抽象描述(一句话本质)

抢占式调度 = "最高优先级的就绪任务一定在运行"。两件事触发切换:抢占(高优先级就绪 → 立刻打断)和时间片(同优先级 tick 到点轮流)。抢占对优先级响应,时间片对公平响应。

正反例(建立直觉)

  • 正例1(抢占):低优先级任务在跑 → 高优先级任务就绪(中断唤醒)→ 立刻抢占,低优先级被踢回 Ready
  • 正例2(时间片):两个同优先级任务都 Ready → 各跑一个 tick 时间片 → 轮流
  • 反例1:以为抢占随时发生 → 错,只发生在调度点(tick 中断、更高优先级就绪),关中断/临界区内不会
  • 反例2:以为时间片发生在不同优先级之间 → 错,只有同优先级才时间片;不同优先级永远高优先级先跑

易混对比

抢占(preemption) 时间片(time slicing)
触发 更高优先级就绪 tick 到点(同优先级)
目的 保证最高优先级先跑 同优先级公平轮流
作用对象 跨优先级 同优先级内部
结果 低优先级被踢回 Ready 轮流执行,都分到时间

变体验证(3 题,全过=学会)

  1. 任务 L(优先级2) 在跑,中断唤醒任务 H(优先级5) → 抢占
  2. 任务 X、Y 同优先级(3),X 在跑 → 时间片轮转
  3. 陷阱题:任务 P(优先级4) 在跑,tick 到点,任务 Q(优先级2) 就绪 → P 继续运行,既不是抢占也不是时间片——Q 优先级更低抢不走 CPU;时间片只在同优先级之间发生

口述要点(面试怎么讲)

  • 结论先行:高优先级就绪 → 抢占;同优先级 tick 到点 → 时间片;低优先级就绪 → 永不切换
  • 为什么临界区/关中断里不抢占:临界区 = 关中断 → tick 中断进不来 → 调度器没有运行机会 → 调度点被物理移除 → 抢占无从发生。代价:中断响应延迟、实时性受损
  • tick 到点 ≠ 时间片:tick 到点只是检查机会。就绪队列无同优先级时:① 有更高优先级 → 抢占 ② 只有更低优先级 → 当前任务继续运行。跨优先级切换只看优先级高低
  • 饿死(starvation):最高优先级任务不阻塞(忙等/死循环)→ 低优先级永远拿不到 CPU。对策:高优先级主动让出(延时/阻塞),或事件驱动而非忙等
  • 易错点:以为 tick 到点就切换;以为时间片跨优先级;以为临界区还能被切走

关系网络

相邻概念 和本主题的关系 孤立理解会犯的错
任务状态机 Running↔Ready 的两条路径就是抢占和时间片 以为切换靠"任务完成"
临界区 关中断 → 调度点消失 → 不抢占 以为临界区里还能被切走
优先级反转 抢占规则被破坏的场景:低优先级间接挡住高优先级 以为抢占永远发生
实时性 抢占延迟 = 中断/关中断的影响 以为抢占是瞬时的

学习日期

2026-08-03


每主题一页,复习时只翻本目录。