无状态模型检查在事件驱动程序中的应用
1. 主要概念与挑战
在事件驱动程序的验证中,动态部分顺序约减(DPOR)算法是一种重要的技术。下面将介绍相关的核心概念和面临的挑战。
1.1 Optimal - DPOR 回顾
用于事件驱动程序的 DPOR 算法是 Optimal - DPOR 的扩展。以图 1 中的程序片段为例,有三个线程 s、t 和 u 访问三个共享变量 x、y 和 z,a、b、c 和 d 是线程局部寄存器。
Optimal - DPOR 首先探索一个最大执行路径,并检查其中的竞争条件。对于每个竞争,它会构造一个替代执行的初始片段,该片段会反转竞争并在竞争发生前从已探索的执行路径分支出去。
假设第一个执行路径是 E1,DPOR 算法首先计算其“happens - before”顺序(记为 $\xrightarrow{hb}_{E1}$),它是以下两个顺序的并集的传递闭包:
- 程序顺序:对每个线程中的事件进行全序排序(E1 左侧的蓝色小箭头)。
- 冲突顺序:对冲突事件进行排序。如果两个事件访问同一个共享变量,且至少有一个是写操作,则它们是冲突的(E1 左侧的红色弧线)。
一个竞争由在 $\xrightarrow{hb} {E1}$ 顺序中相邻的不同线程中的两个冲突事件组成。在 E1 中有两个竞争。以第一个竞争为例,第一个事件是 s: x = 1,第二个事件是 t: b = x。替代执行通过将 E1 中在 $\xrightarrow{hb} {E1}$ 顺序中不晚于第一个事件的事件序列(即 t: a = y; u: c = z)与竞争的第二个事件 t: b = x
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



