Lazy loaded image
🪜 实时操作系统
原理篇09-一致性、可预测性、确定性 - 谈中断延迟和线程切换延迟
Words 817Read Time 3 min
2026-8-19
2026-8-19
🎯
本篇目标:把三个被用烂的词说清楚——一致性、可预测性、确定性,并落到两个具体指标:中断延迟和线程切换延迟。

一、三个词,一个意思的三种说法

  • 一致性(consistency):同样的输入,行为每次都一样;
  • 可预测性(predictable):延迟有上界,能提前算出来;
  • 确定性(deterministic):最坏情况可复现、可证明。
实时系统的“实时”不是“快”,而是最坏情况时间有保证。一个平均 1µs、最坏 100µs 的系统,比平均 10µs、最坏 20µs 的系统更不实时。所以衡量 RTOS 要看最坏值,不是平均值。

二、中断延迟:从硬件到软件的完整链条

中断延迟 = 从中断请求产生,到 ISR 第一条指令开始执行的时间。拆开看:
  1. 硬件固定开销:Cortex-M 的中断响应(压栈、取向量)约 12 个周期,所有 RTOS 一样;
  1. 关中断窗口:内核临界区里关中断的时间。这是 RTOS 自己引入的最大变量——关得越久,中断延迟越差;
  1. 高优先级抢占链:来了更高优先级中断,当前中断还得再等。
所以 RTOS 的设计铁律是:临界区越短越好。stp_rtos 的 stp_hw_interrupt_disable 用 PRIMASK 全局关中断,因此临界区必须精悍;FreeRTOS 在 Cortex-M 上进一步用 BASEPRI 只屏蔽受管中断,让高优先级中断仍可响应——这是 stp_rtos 可借鉴的优化点。

三、线程切换延迟

线程切换延迟 = 从“决定切换”到“新线程开始执行”的时间。Cortex-M 上主要由 PendSV 决定:
固定保存/恢复 R4~R11(8 个寄存器)+ 硬件弹栈 8 个字,切换时间基本恒定,不随任务数量变化。这正是“确定性”的体现:切换开销是 O(1),不是 O(n)。

四、PendSV 为什么必须是最低优先级

如果 PendSV 优先级高,它会在某个 ISR 执行到一半时插入切换,导致:
  • 被中断的 ISR 要等整个切换完成才能继续 → 中断延迟被拉长且不可预测;
  • 切换本身可能被更高优先级中断打断 → 切换时间也不确定。
把 PendSV 设为最低优先级后,所有 ISR 都跑完才切换,切换时机确定、切换过程不被中断打断,两个延迟都变得可预测。

五、小结

  • 实时 = 最坏情况有界,不是平均快;
  • 中断延迟的大头是“关中断窗口”,要拼命缩短;
  • 线程切换 O(1),PendSV 最低优先级保证切换时机确定。
核心一句话:确定性不是玄学,是“关中断短 + 切换 O(1) + PendSV 最低优先级”三个工程决策的叠加。
上一篇
原理篇08-优先级抢占式调度(实践4)
下一篇
原理篇10-测试不同操作系统延迟(实践6)

Comments
Loading...