SMT 基于验证 Px86 程序的持久性不变量
1. 引言
在程序验证中,确保程序在各种情况下的正确性至关重要,特别是对于可能因崩溃而导致部分指令未执行的情况。本文主要探讨了如何对 Px86 程序的持久性不变量进行验证,涉及到对内存模型变量的赋值、崩溃情况的建模、模型的适应以及符号编码等方面。
2. 崩溃建模
在 DPTSOsyn 等模型下,程序的语义是基于部分执行图定义的,因此需要考虑程序崩溃导致部分指令未执行的情况。例如,对于一个程序 P 和一个恢复例程,若恢复例程断言恢复的 d 值为 1,传统方法可能仅考虑完整执行情况,认为程序是安全的,但实际上可能存在崩溃导致部分指令未执行的情况。
为了解决这个问题,一种直接的方法是引入额外的布尔变量来表示每个节点在执行前是否崩溃,将其纳入 enabled 公式中。为了减少额外变量的使用,还提出了一种基于完整执行图的 DPTSOsyn 语义的适应方法。
3. 适应 DPTSOsyn 模型
3.1 重新定义 dtpo
为了定义基于完整执行图的 DPTSOsyn 模型(DPTSOsyn,full),需要重新定义 dtpo 。在 DPTSOsyn 中,不能简单假设所有刷新操作在任何未持久化的写入之前执行,因为崩溃可能在这些刷新操作之前发生。因此,只有在崩溃后观察到的写入的 porf 前缀中的刷新操作才应排在任何未持久化的写入之前。
形式上, dtpo 定义为:
[dtpo \triangleq \bigcup_{x\in Lo
超级会员免费看
订阅专栏 解锁全文
49

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



