资源竞争不是“多个任务在抢资源”,而是:
多个执行流在时间维度上对同一系统状态产生不可交换影响
在 HRTOS 中,它的本质是: 时间路径分叉(Temporal Path Divergence)
换句话说,资源竞争描述的是多个执行流在同一时间窗口内争夺同一演化方向的能力。谁先获得资源,不仅改变结果顺序,也改变后续所有任务的可达时间。
资源竞争的完整因果链:
资源请求 → 等待队列形成 → 执行延迟 → 调度重排 → 时间偏移 → 系统抖动
关键点: 竞争不是问题,延迟传播才是问题
延迟一旦进入因果链,就会沿着等待队列、优先级关系和共享对象所有权继续放大。因此真正需要建模的不是某一次阻塞,而是阻塞在任务图中的传播半径。
① CPU(时间资源)
本质是“执行时间分配权”,竞争直接改变时间线。
② Memory(空间资源)
竞争会转化为访问延迟(Cache miss / Bus stall)。
③ Synchronization(状态资源)
Mutex / Semaphore 实际上是“时间阻断器”。
三类资源虽然表现不同,但都会以时间形式暴露:CPU 竞争表现为得不到执行片段,内存竞争表现为访问等待,同步竞争表现为状态转移被暂停。RTOS 设计必须把它们统一换算成时间成本。
资源竞争通过三种方式破坏确定性:
✔ Execution delay injection(执行延迟注入)
✔ Scheduling order perturbation(调度顺序扰动)
✔ Path amplification(路径放大效应)
结果不是“慢”,而是: 时间边界失效
很多现场问题之所以难查,是因为局部几十微秒的等待会在控制链后部变成毫秒级相位偏移。资源竞争真正危险的地方,就在于这种跨层放大效应。
传统理解:Blocking Chain
HRTOS 视角:Blocking Graph(阻塞图)
多个任务形成依赖图:
T1 → R1 ← T2 → R2 ← T3
问题不在链长,而在: 循环依赖 + 不可预测解锁点
把阻塞看成图而不是链,有助于识别隐藏热点,例如多个中优先级任务共同夹击高优先级控制任务,或者两个共享对象形成闭环依赖。
优先级反转本质不是调度错误,而是:
时间优先级语义被资源锁重新排序
结果:
✔ 高优先级任务失去时间优先权 ✔ 调度模型与执行模型解耦 ✔ 系统进入不可证明状态
优先级继承和优先级天花板的价值,就在于把这类时间层级崩塌重新拉回可分析范围。它们不是性能优化手段,而是保证高优先级语义不被锁结构吞掉的控制机制。
真正的竞争不在 heap,而在微架构层:
• Cache line bouncing • Memory bus arbitration • DMA burst preemption
这些因素导致: 同一函数执行时间变成随机变量
在高性能 MCU 或 SoC 上,Cache 着色、DMA 总线仲裁和共享 SRAM 端口冲突都可能比应用层锁更先触发抖动。因此资源竞争分析必须穿透 API,看到微架构层的真实争用。
HRTOS 的目标不是“消除竞争”,而是:
✔ 将竞争转化为可建模延迟 ✔ 将不可预测性转化为上界函数 ✔ 将系统行为变为可证明集合
所谓可控系统,并不是完全没有竞争,而是竞争的等待时间和传播范围都有上界,可以被纳入 response time analysis。能否建立这类上界,才是资源设计是否合格的分水岭。
资源竞争失控不会“崩溃”,而是退化为:
• WCET 不存在 • Deadline 无法证明 • Scheduling becomes probabilistic • RTOS → GPOS 行为漂移
本质结论: 系统仍在运行,但已经失去系统性