33、多线程程序验证与形状分析中的引用集关系

多线程程序验证与形状分析中的引用集关系

在软件开发过程中,多线程程序的正确性验证以及对程序堆结构的精确分析至关重要。本文将介绍如何通过抽象线程实现多线程程序的验证,以及如何利用引用集关系来增强形状分析的能力。

多线程程序验证

传统的多线程程序验证方法存在一定的局限性。在某些验证过程中,消息传递通信进程通过布尔抽象被抽象为下推自动机,但我们允许更丰富的抽象。因为布尔程序可以被编码为抽象线程,但由于可能存在无界数据,并非每个线程都能被编码为布尔程序。

Spec# 中的所有权方法和分离逻辑通过将注释限制在局部堆,有可能使规范更易于管理。Flanagan 等人允许在线程规范中使用线性有序的控制状态,但不允许抽象线程具有丰富的控制结构。而我们的方法是在无调用情况下对其方法的一种扩展。

我们提出了一个组合框架来检查多线程程序的正确性。抽象线程的概念为描述现实生活中的多线程程序模型提供了直观且富有表现力的形式。通过研究现实设备驱动程序中的两个协议,我们证明了该方法的可行性。

嵌入线程模块化推理

对于无调用的有限状态程序,若具有线程模块化证明,我们可以找到足够的抽象线程来证明其属性。抽象线程的大小与线程模块化规范的大小呈线性关系,与共享状态的数量呈二次关系。

假设一个单过程,其控制位置集为 Local,每个线程 t 的过程转换关系为 →t。我们需要证明从预条件 pre 开始的所有线程的并发执行尊重不变式 I,并且每个线程终止时满足后条件 post。线程模块化证明需要编写规范 (A, E),其中 E 表示环境假设,A 表示线程的抽象。

抽象是一个与停顿步骤交织的语句序列。如果对于每个线程 t,将

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值