[论文解读] Symmetry-Aware Predicate Abstraction for Shared-Variable Concurrent Programs (Extended Technical Report)
本文提出了一种针对共享变量并发C程序的对称性感知谓词抽象技术,通过利用线程对称性实现可扩展的模型检测。该方法通过一种新颖的布尔程序模板构造,提出了一种可靠的方法来处理同时涉及局部变量和共享变量的混合谓词,相较于不安全或朴素的方法,在并发基准测试中显著提升了性能与准确性。
Predicate abstraction is a key enabling technology for applying finite-state model checkers to programs written in mainstream languages. It has been used very successfully for debugging sequential system-level C code. Although model checking was originally designed for analyzing concurrent systems, there is little evidence of fruitful applications of predicate abstraction to shared-variable concurrent software. The goal of this paper is to close this gap. We have developed a symmetry-aware predicate abstraction strategy: it takes into account the replicated structure of C programs that consist of many threads executing the same procedure, and generates a Boolean program template whose multi-threaded execution soundly overapproximates the concurrent C program. State explosion during model checking parallel instantiations of this template can now be absorbed by exploiting symmetry. We have implemented our method in the SATABS predicate abstraction framework, and demonstrate its superior performance over alternative approaches on a large range of synchronization programs.
研究动机与目标
- 解决由于线程交错导致的状态空间爆炸所引发的共享变量并发程序验证可扩展性瓶颈。
- 开发一种可靠的谓词抽象策略,正确处理同时涉及局部变量和共享变量的混合谓词。
- 利用复制线程结构中的对称性,减少模型检测过程中的状态空间爆炸。
- 在真实并发基准测试中,证明所提出的对称性感知抽象方法在性能和正确性上优于不安全或朴素的抽象技术。
提出的方法
- 使用谓词抽象将包含共享变量和局部变量的C程序转换为布尔程序模板。
- 根据变量作用域将谓词分类为局部、共享或混合,并相应地分配布尔变量以保持正确性。
- 对共享谓词使用共享布尔变量,对局部谓词使用局部布尔变量,同时引入一种新颖的混合谓词处理方法,以避免不正确性。
- 构建一个多线程布尔程序模板,其执行行为对原C程序的行为进行过度近似。
- 利用线程复制中的对称性,在模型检测过程中减少状态空间,从而实现可扩展性。
- 将该方法集成到SATABS框架中,采用CEGAR驱动的精化机制以处理虚假反例。
实验结果
研究问题
- RQ1如何在应用于包含同时涉及局部变量和共享变量的混合谓词的并发C程序时,使谓词抽象保持正确性?
- RQ2朴素方法(例如,将所有混合谓词视为局部或共享)对模型检测的正确性和可扩展性有何影响?
- RQ3能否有效利用复制线程结构中的对称性,以减少并发程序验证中的状态空间爆炸?
- RQ4所提出的对称性感知抽象方法在真实并发基准测试中,与现有谓词抽象技术相比,在性能和正确性方面表现如何?
主要发现
- 所提出的方法通过正确处理混合谓词,实现了对共享变量并发程序的可靠抽象,避免了不安全方法中常见的虚假反例。
- 该对称性感知方法使模型检测能够处理比以往更大量级的线程数。
- 在安全基准测试中,该方法在比不安全替代方法更大的线程数下成功证明了正确性,而后者则失败或产生错误结果。
- 在不安全基准测试中,该方法在比不安全方法更小的线程数下检测到错误,而后者可能因虚假反例而无法精化。
- 不安全方法(将混合谓词视为局部或共享)频繁产生假阴性或精化失败,严重损害其在验证中的可靠性。
- 在SATABS中的实现表明,该方法在广泛的同步基准测试中表现出实际的可扩展性和正确性。
更好的研究,从现在开始
从阅读论文到最终审阅,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。