一种schedule调度模块的形式化验证方法技术

技术编号:22329803 阅读:79 留言:0更新日期:2019-10-19 12:13
本发明专利技术公开一种schedule调度模块的形式化验证方法,针对现有技术对于MILS架构的schedule调度模块的验证过程较为复杂,验证效率低下的问题;本发明专利技术通过对schedule调度模块的源代码进行重构操作;对重构之后的代码进行形式化建模;对重构之后的代码进行形式化定理描述;对所建立的形式化模型以及定理描述的状态变化进行形式化证明;保证系统的功能正确性和安全性。

【技术实现步骤摘要】
一种schedule调度模块的形式化验证方法
本专利技术属于计算机及程序可信领域,特别涉及一种对程序代码进行正确性及安全性的验证技术。
技术介绍
形式化方法以逻辑系统为基础,支持对计算系统进行严格规约(描述)、建模和验证,通过形式化方法进行严格证明的系统,可以认为其满足功能正确性,且无二义性,这是因为形式化方法基于严格数学基础。通过形式化语言构建的规约,对应于软件生命周期不同阶段的状态描述,而验证是对不同状态之间满足的各种逻辑关系即在不同状态所需要满足的各类正确性需求进行证明。也因此形式化证明可以证明一个系统存在某个缺陷或者无法匹配某个属性的问题,经过形式化方法严格证明的系统可以被认为是正确和可靠的。根据CCF中国计算机科学技术发展报告,形式化方法越来越受到国际国内计算机学术界重视。形式化方法已经被许多国际标准化组织列为安全有关系统必备的技术手段。在软件安全等级的SIL1-4中,安全级别最高的SIL3和SIL4要求必须使用形式化方法。而在IT产业界,微软开发了一系列形式化验证工具来对众多软件的正确性分析;Facebook将给予分离逻辑的验证工具Infer广泛用于其Android应用的开发过程中;国内的华为公司成立形式化验证团队,使用定理证明辅助工具验证操作系统内核正确性和安全性等。近些年来,对于实际系统进行代码级的形式化证明主要分为操作系统内核验证和编译器验证。操作系统内核验证的工作有seL4微内核的形式化证明,这是由国外NICTA工作室完成的,主要通过构建机器模型,证明抽象规范每一步的状态变换,可执行规范都会产生唯一对应状态转换。经过形式化证明的seL4内核可以针对缓冲区溢出、引用空指针、指针类型错误以及内存泄漏等问题进行有效防御,国内方面主要是中科大团队对μC/OS-Ⅱ的验证。在编译器方面,最出名的便是INRIA对Compcert的证明以及后续工作。该编译器提供了数学上的、经过机器检查的证明,即证明生成的可执行代码的行为完全符合源程序的语义规定。经过该编译器编译的C代码可以排除编译器引入错误的可能性。也就是说该编译器生成的可执行代码被证明与源代码C程序的语义所指定行为完全一致。但是现有技术对于MILS架构的schedule调度模块的验证过程较为复杂,验证效率低下。
技术实现思路
为解决上述技术问题,本专利技术提出一种schedule调度模块的形式化验证方法。本专利技术采用的技术方案为:一种schedule调度模块的形式化验证方法,包括:S1、对schedule调度模块的源代码进行重构操作;S2、对重构之后的代码进行形式化建模;S3、对重构之后的代码进行形式化定理描述;S4、对所建立的形式化模型以及定理描述的状态变化进行形式化证明。所述步骤S1具体为:对schedule调度模块的源代码中引用的函数或者其他数据类型执行导入操作;采用if…else…语句代替函数中的goto语句;将内联汇编代码重构为普通C代码;将复杂类型的函数分离出来,作为单独函数进行证明。步骤S2具体为:采用CompcertC编译器和VST工具对函数的结构进行自动化建模。步骤S3所述的定理描述包括:对抽象逻辑进行描述、对具体逻辑进行描述。当已证明一个函数的具体逻辑和抽象逻辑一致性之后,如果待证明函数当中包含了该函数的调用,则在待证明函数进行证明时,使用已证明函数的抽象逻辑代替待证明函数的具体逻辑。本专利技术的有益效果:本专利技术的方法首先对MILS架构的核心模块代码进行梳理重构,保证改代码能够被CompcertC编译器编译通过;其次是对代码进行分析整理掌握核心模块代码执行原理以及功能需求,并描述出该需求;然后通过辅助工具完成对改代码函数的建模工作;之后根据函数结构对函数进行抽象化功能描述,再根据所建立模型以及功能描述和功能需求,进行定理描述;最后对定理进行形式化证明工作,证明模块的正确性和可靠性;通过形式化验证的方法保证了schedule调度模块的功能正确性和安全性,进一步提高MILS架构的安全性和可信度。附图说明图1为本专利技术的实现框图;图2为本专利技术实施例提供的Spec形式化描述流程图。具体实施方式本专利技术采用CompcertC编译器进行MILS架构的schedule调度模块的形式化验证。CompcertC编译器是由法国INRIA研究所完成的经过形式化证明的编译器。该编译器提供了数学上的、经过机器检查的证明,即证明生成的可执行代码的行为完全符合源程序的语义规定。经过该编译器编译的C代码可以排除编译器引入错误的可能性。也就是说该编译器生成的可执行代码被证明与源代码C程序的语义所指定行为完全一致。该编译器一共包括3个部分,第一部分为代码解析、类型检查以及预处理,即将C代码转换为CompcertC语言的抽象语法树。这一部分是没有进行形式化证明的,但是因为CompecertC就相当于C的子集,因此编译器可以根据C语言具体语法输出生成CompcertC代码,所以可以通过手动检查这部分转换结果;第二部分为将CompcertC语法树转换为汇编语法树,这一部分经过Coq工具证明了正确性;第三部分为组装和链接,即将第二部分所生成的汇编语言抽象语法树以具体汇编语法打印,调用系统汇编工具以及链接器分别生成目标文件和可执行文件。本专利技术的实现流程如图1所示,主要分为三大部分来实现的。第一部分是对源代码进行重构操作,第二部分是对重构之后的代码进行形式化描述工作,包括对函数和数据类型等数据结构形式化建模操作,以及通过对函数执行前后状态变化关系分析所完成的形式化定理描述工作,第三部分则是对第二部分所建立的形式化模型以及定理描述的状态变化进行形式化证明工作,如果证明成立,则表示该函数具有正确性,如果不成立,则存在两种结果,一种是因为函数本身存在问题,不具备正确性,另一种则是因为定理描述存在问题,描述不完备。1、代码重构操作代码重构部分主要包括以下内容:1)将文件中所有导入关系导入到该文件中,即将文件中引用的函数或者其他数据类型等导入到该函数中。源代码通过CompcertC编译,CompcertC编译器只能编译单个文件,其对文件中引用关系和导入关系工作做得不是太好,因此首先需要将该文件中所有导入关系都导入到该文件中,保证文件能够成功编译。本步骤包含了许多宏选择定义,即通过某个属性的值的定义结果,来选择应该导入哪些头文件或者具体类型定义。因此在进行这部分工作时,需要使用#error语句进行测试,即在所要求的环境下,测试宏选择定义的路径选择结果。2)对函数中出现goto语句部分进行重构,即使用语义相同结构代替goto语句,保证函数中不会出现goto结构。Compcert编译器是无法识别goto语句结构的,因此为了能够顺利编译,需要在保证函数功能不变前提下进行重构操作,在代码分析过程中,需要考虑到goto跳转的位置,对于跳转到函数内部位置的goto语句可以使用if…else…语句来代替,而对于跳转到函数外部位置的goto语句,则需要谨慎分析,必要时添加函数调用。在整个代码中,所有goto语句均为跳转到函数内部位置。3)对函数中出现内联汇编部分进行重构,将汇编代码替换为C语言代码形式。内联汇编,就是在程序编写过程中,加入汇编语言。传统的汇编语言抽象程度比较低,无法用来编写大型程序,而且汇编本文档来自技高网
...

【技术保护点】
1.一种schedule调度模块的形式化验证方法,其特征在于,包括:S1、对schedule调度模块的源代码进行重构操作;S2、对重构之后的代码进行形式化建模;S3、对重构之后的代码进行形式化定理描述;S4、对所建立的形式化模型以及定理描述的状态变化进行形式化证明。

【技术特征摘要】
1.一种schedule调度模块的形式化验证方法,其特征在于,包括:S1、对schedule调度模块的源代码进行重构操作;S2、对重构之后的代码进行形式化建模;S3、对重构之后的代码进行形式化定理描述;S4、对所建立的形式化模型以及定理描述的状态变化进行形式化证明。2.根据权利要求1所述的一种schedule调度模块的形式化验证方法,其特征在于,所述步骤S1具体为:对schedule调度模块的源代码中引用的函数或者其他数据类型执行导入操作;采用if…else…语句代替函数中的goto语句;将内联汇编代码重构为普通C代码;将复杂类型的函数分离出来,作为单独函数进...

【专利技术属性】
技术研发人员:杨霞郭文生罗雄高扬卢秀台张冯博廖士钞向蓓蓓古涛铭瞿元钱智成李南铮潘文睿黄一熊宇
申请(专利权)人:电子科技大学
类型:发明
国别省市:四川,51

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1