多线程程序验证与形状分析中的引用集关系
在软件开发过程中,多线程程序的正确性验证以及对程序堆结构的精确分析至关重要。本文将介绍如何通过抽象线程实现多线程程序的验证,以及如何利用引用集关系来增强形状分析的能力。
多线程程序验证
传统的多线程程序验证方法存在一定的局限性。在某些验证过程中,消息传递通信进程通过布尔抽象被抽象为下推自动机,但我们允许更丰富的抽象。因为布尔程序可以被编码为抽象线程,但由于可能存在无界数据,并非每个线程都能被编码为布尔程序。
Spec# 中的所有权方法和分离逻辑通过将注释限制在局部堆,有可能使规范更易于管理。Flanagan 等人允许在线程规范中使用线性有序的控制状态,但不允许抽象线程具有丰富的控制结构。而我们的方法是在无调用情况下对其方法的一种扩展。
我们提出了一个组合框架来检查多线程程序的正确性。抽象线程的概念为描述现实生活中的多线程程序模型提供了直观且富有表现力的形式。通过研究现实设备驱动程序中的两个协议,我们证明了该方法的可行性。
嵌入线程模块化推理
对于无调用的有限状态程序,若具有线程模块化证明,我们可以找到足够的抽象线程来证明其属性。抽象线程的大小与线程模块化规范的大小呈线性关系,与共享状态的数量呈二次关系。
假设一个单过程,其控制位置集为 Local,每个线程 t 的过程转换关系为 →t。我们需要证明从预条件 pre 开始的所有线程的并发执行尊重不变式 I,并且每个线程终止时满足后条件 post。线程模块化证明需要编写规范 (A, E),其中 E 表示环境假设,A 表示线程的抽象。
抽象是一个与停顿步骤交织的语句序列。如果对于每个线程 t,将
超级会员免费看
订阅专栏 解锁全文

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



