伤人性命的并发 Bug

伤人性命的并发 Bug

2024 南京大学《操作系统:设计与实现》
伤人性命的并发 Bug

回顾:Diablo I 物品克隆

2024 南京大学《操作系统:设计与实现》
伤人性命的并发 Bug

事件级的并发

Event(doMouseMove) {
    hoveredItem = Item("$1");
}

    // 被插入的非预期事件
    Event(clickEvent) {
        hoveredItem = Item("$99");  // <- Shared state
        Inventory.append(hoveredItem);
    }

Event(doPickUp) {
    InHand = hoveredItem;
}
2024 南京大学《操作系统:设计与实现》
伤人性命的并发 Bug

“Killed by a Machine”

Therac-25 Incident (1985-1987)

  • 事件驱动导致的并发 bug,导致至少 6 人死亡

center

2024 南京大学《操作系统:设计与实现》
伤人性命的并发 Bug

The Therac-25

center

assert mode in [Electron(Low), XRay(High)]
assert mirror in [On, Off]
assert not (mode == XRay(High) and mirror == Off)
2024 南京大学《操作系统:设计与实现》
伤人性命的并发 Bug

The Killer Software Bug in History

Diablo I 案例再现

  • 选择 X-Ray (High) Mode
    • 机器开始移动 mirror,大约需要 8s 完成...
    • 切换到 Electron (Low) Mode (OK)
    • 迅速切换到 X-Ray (High) Mode
    • Assertion fail: Malfunction 54; 操作员下意识地按下 Continue……

全数字化带来的悲剧

  • 在更早的产品 (Therac-20) 中,assertion fail 会触发电路互锁 (interlock) 直接停机,需要手工重启
2024 南京大学《操作系统:设计与实现》
伤人性命的并发 Bug

这甚至不是 Therac-25 的最后一个杀人 Bug

问题修复后……

  • If the operator sent a command at the exact moment the counter overflowed, the machine would skip setting up some of the beam accessories

最终解决方法

  • 独立的硬件安全方案
  • 检测到大计量照射时直接停机

思考:AI 时代的 “最后防线” 在哪里?

  • 我们会不会从此生活在 AI 为我们生成的幻觉中?
2024 南京大学《操作系统:设计与实现》