火星探路者的优先级反转事故:究竟发生了什么
来源:nerdyelectronics.com — 2026-03-28
📋 概述
复盘 1997 年火星探路者的反复重启事故。VxWorks 以抢占式优先级调度运行各任务:低频的气象任务先取得信息总线信号量,随后一个优先级高于气象、低于总线管理任务的通信任务抢占了它,导致最该运行的总线管理任务迟迟得不到执行,看门狗判定超时并下令整机重启。工程师在实验室复现后定位到优先级反转,最终把信号量的优先级继承标志从默认的关改为开,并通过 VxWorks 的 C 解释器在轨上改掉那个全局变量,重启才停止。
🔑 核心要点
- 事故由优先级反转引发,最终表现为看门狗超时触发整机重启
- 低优先级任务持锁、高优先级任务等待,中优先级任务趁机抢占
- 修复只是打开信号量的优先级继承标志——而它默认是关的
- 借 VxWorks 内置的 C 语言解释器在轨上修改全局变量完成修复
- 事故前飞行前测试就出现过重启,当时被当成硬件故障忽略
- 教训:没有详细的行为追踪就无法定位问题,调试设施至关重要
💡 金句
只有对系统实际行为做详细追踪,才能捕获并识别出那条出错的执行序列。
👍 0
👎 0
← 返回 Lobsters 首页