45、RGSep动作推理:用于细粒度并发堆操作程序的自动验证

RGSep动作推理:用于细粒度并发堆操作程序的自动验证

1. 引言

底层C语言程序员经常依赖两种容易出错的编程特性:手动内存管理( malloc/free )和并发。虽然有一些验证技术可以单独处理这两个特性,但很少有技术能够同时处理使用这两种特性的程序。

RGSep是依赖保证推理的扩展,结合了分离逻辑。它使用依赖(rely)和保证(guarantee)这两个二元关系来描述共享状态的更新。线程的依赖关系低估了它能容忍的来自环境的干扰,而保证关系则高估了线程能进行的更新,即它对并发环境造成的干扰。RGSep将这些二元关系表示为一组动作的自反和传递闭包,这些动作是描述可能的小更新的前置条件 - 后置条件对。

以往,用户需要手动使用RGSep的证明规则来证明程序的正确性,这既繁琐又容易出错。本文将之前的半自动化工作扩展为完全自动化,提出了Infer - Actions算法,该算法将依赖和保证关系计算为一组动作,每个动作都扩展了一个特殊的上下文断言,描述不受动作影响的状态部分。在推理这些动作的过程中,算法还能证明内存安全性、发现形状不变式并验证用户提供的断言。

2. 预备知识
2.1 程序语言

考虑一阶C语言子集的程序,程序由初始化阶段和可能无限数量的线程的顶级并行组合组成。程序命令包括空命令、变量赋值、内存加载和存储、内存分配、假设语句、顺序组合、非确定性选择、循环和原子命令。重要的是,中间语言中内存访问的原子性是显式的,默认情况下内存访问是非原子的,当内存访问由内存模型保证为原子时(如对易失性变量或字段的单字内存访问),将其包含在原子块中。


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值