自动运行时检查

自动运行时检查

2024 南京大学《操作系统:设计与实现》
自动运行时检查

应对 “死局”:程序员的自救

我们可以在运行时检查一切明确的 Specification!

  • AA/ABBA 型死锁
  • 数据竞争
  • 带符号整数溢出 (undefined behavior)
  • Use after free
  • ……

动态程序分析:状态机执行历史的一个函数 f(τ)f(\tau)

  • 付出程序执行变慢的代价
  • 找到更多 bugs
2024 南京大学《操作系统:设计与实现》
自动运行时检查

运行时 Lock Ordering 检查

一个想法

  • 为每一个 acquire/release 记录 tid 和 lock name
  • Assert: G(V,E)G(V, E) 无成环
    • VV: 所有的 lock names
    • EE: 每当观测到持有 uu 时获取 vv 就把 (u,v)(u, v) 加入 EE
T1 ACQ a
T1 ACQ b
T1 REL b
T2 ACQ b
T2 REL b
...
2024 南京大学《操作系统:设计与实现》
自动运行时检查

Linux Kernel Lockdep

解决锁的 “命名” 问题

我们有一个山寨实现!

2024 南京大学《操作系统:设计与实现》
自动运行时检查

ThreadSanitizer: 运行时的数据竞争检查

基本想法

  • 同时发生在不同线程、同一变量、至少一个是写操作
  • 但 T1: load(x); T1: t = t + 1; T2: store(x); 依然是数据竞争

对于发生在不同线程且至少有一个是写的 x,yx,y 检查

xyyxx \prec y \lor y \prec x

2024 南京大学《操作系统:设计与实现》
自动运行时检查

应对死局:Sanitizers

现代复杂软件系统必备的支撑工具

2024 南京大学《操作系统:设计与实现》