关键词:
形式化验证
复杂数据结构
内存模型
程序逻辑
归纳性质谓词
摘要:
在信息系统与社会生产生活日益紧密的新时代,软件正成为各行各业的新型基础设施,构建高可信的软件系统已然成为重大研究课题。操作系统和编译器等安全攸关软件运行的正确性和安全性,是建立在其上的信息系统可信赖的重要保障。形式化验证是保障软件正确性的有力方法,对软件的行为和性质进行规范化描述,并通过公式化的推导和证明,达到验证系统正确性的目标。复杂数据结构作为操作系统内核管理和调度的对象,其性质的正确性验证是领域内研究的重点和难点。
操作系统中存在的复杂数据结构,可能包含多个嵌套的结构体或者指针类型的对象,基于普通程序逻辑的推理方法,无法准确描述操作复杂数据结构程序的性质;借用复杂逻辑的表达形式,则会造成规范描述繁杂,自动定理证明器无法及时给出验证结果,使得自动化验证方法的效率有所降低。一方面,现有工作针对复杂数据结构的验证,或采取需求建模的方法,能够对高层全局性质进行机械式的验证;或进行语义拆分,借用程序逻辑对复杂结构进行性质定义和验证,可以处理较复杂形式的数据结构的描述和验证。另一方面,对于特定复杂结构在抽象层的描述表达能力不够,不能验证具体程序所期望的性质,且在不做语义拆分的情况下,难以开展对复杂数据结构的形式化描述和验证。本文的研究重点在于,对复杂数据结构具体程序验证和规范描述方法的改进,使得验证工作能够对复杂结构程序行为和特征进行描述,满足形式化规范的性质表达要求,同时能够顺利进行自动化验证。本文引入经过扩展的内存模型,将内存操作融入到复杂数据结构程序的验证中,并在程序规范的描述中对复杂数据结构归纳性质进行了描述和定义。本文的主要贡献如下:
1.基于类C语言内存模型,首先将内存块的操作抽象为函数的形式,并通过定义函数的语义操作说明内存块对象的相关性质;其次,针对抽象程序层,定义符合复杂结构描述的文法和语义,并通过内存操作的一致性,建立数据结构对象和具体内存对象之间的映射关系,通过符号化的程序逻辑进行推理。该方法将程序层面对于复杂数据结构的操作放在低层进行验证,将高层程序信息携带至抽象的内存模型,使得验证不再关注复杂程序性质的抽取和处理,重点关注数据结构对象之间的性质描述。
2.提出了一种构造归纳性质谓词的直观方法,验证人员可以将这些归纳定义作为参考编写规范,在保证自动定理证明器的证明能力的前提下,丰富归纳谓词的表达能力,使得程序迭代操作复杂数据结构的归纳性质,可以通过构造的归纳谓词来表达。同时,对于更复杂的归纳谓词,引入自动构造谓词的算法,该算法为复杂数据结构构造相应的归纳性质谓词,减少验证人员的工作量,提高验证的自动化程度。