一种基于重构控制流图的控制流错误检测优化方法技术

技术编号:3942606 阅读:424 留言:0更新日期:2012-04-11 18:40
本发明专利技术公开了一种基于重构控制流图的控制流错误检测优化方法,目的是提供一种新的基于重构控制流图的控制流错误检测优化方法,解决检错效率不高等问题。技术方案是将源程序划分为基本块,构建基本块表,并基于基本块表构建程序控制流图,然后基于控制流图,划分逻辑块,构建逻辑块表,接着复制基本块,使得逻辑块相互独立,再根据配置要求均匀切割逻辑块,构建基本逻辑块表,最后基于基本逻辑块表,重构程序控制流图。基于重构的控制流图即可实现现有的控制流错误检测算法。采用本发明专利技术能够灵活配置基本块的划分,使得现有的控制流检错算法能够基于重构的控制流图直接应用,有效提高检错算法的效率。

【技术实现步骤摘要】

本专利技术涉及一种控制流错误检测的优化方法,尤其是在空间辐射环境下对由于单 粒子效应引起的程序控制流错误进行检测的优化方法。
技术介绍
空间探测活动投入大、风险高,对可靠性有着极高的要求。太空中影响空间探测器 安全的主要因素是宇宙射线的辐射,因为这些宇宙射线中的高能带电粒子流会使电子器件 出现硬件故障。空间辐射环境对电子器件的影响主要表现为单粒子效应。普通计算机所使用的芯片一般是商用微处理器COTS (Commercial Off-the-Shelf),在空间环境中,为了防止空间辐射的影响,一般使用经过特殊工艺设计与 加工的微处理器芯片,即抗辐照器件。抗辐照器件主要通过硬件冗余实现容错,具有很高的 可靠性。但是由于其设计非常复杂,研制周期很长,产业规模和产量都很小,价格非常昂贵。 由于硬件的冗余,抗辐照器件的芯片面积通常成倍增加,这不仅使芯片成品率下降,也带来 了功耗的迅速增长。而且按照这种方式生产出来的抗辐照器件的性能通常落后于同时代的 COTS很多代。COTS由于产量很大且使用广泛、经过充分的市场竞争,所以一般性能很高,价 格相对较低,且任何国家都无法对其进行封锁和禁运。其缺点是对空间环境比较敏感,容易 产生单粒子效应。计算机发展的历史表明,很多原本用硬件实现的技术同样可以用软件来实现,在 COTS上进行面向硬件故障的软件容错可以弥补COTS在容错能力方面的不足。国内外已开 展很多实验探讨在空间环境中能否使用以及如何使用C0TS。实验结果表明在COTS上面 向硬件故障的软件容错方法所实现的性能,可以比基于抗辐照器件的空间计算机高一个数 量级;面向硬件故障的软件容错方法可以有效提高基于COTS的空间计算机的可靠性,能够 很好地应对空间辐射的影响,同时还能够使成本降低。通过与采用抗辐照器件的硬件容错方法比较可以发现,基于COTS的软件容错方 法除可靠性方面比硬件容错方法略低之外,在性能、成本、功耗和灵活性方面都拥有巨大的 优势。软件容错方法包括故障检测、定位、恢复等过程,其中,故障检测是故障定位及恢复的 基础。空间辐射环境中的单粒子效应可能导致星载计算机上的寄存器、存储器、缓存等存储 部位出现故障,也可能导致总线、算术逻辑运算单元、指令译码器等功能部件出现故障。这 些故障可能致使计算机中的指令序列出现执行顺序错误或者数据错误,前者又称控制流错 误。针对数据错误和控制流错误,现有的软件容错方法一般采用不同的故障检测策略分别 对其检测。现有的针对控制流错误的软件检测方法大多是采用标签分析的方法,这类方法 的基本步骤是第一步,为程序构造控制流图。构造控制流图前需要先将程序划分为基本块,基本块是 程序中能够顺序执行的指令序列的最大集合,这组指令只有一个入口和一个出口,入口就 是第一条指令,出口就是最后一条指令,基本块中除了最后一条指令可能是跳转指令外,其 它指令都不能是跳转指令。控制流图是以基本块为结点,以基本块之间存在的跳转关系为边的有向图。划分出基本块后即可根据基本块间固有的控制流关系直接得出控制流图,因 此划分基本块是构造控制流图的关键。这一步的具体步骤是1. 1将程序划分为基本块,构建基本块表。基本块表存放每个基本块的信息,包括基本 块编号、入口指令地址和出口指令地址。具体过程为 1.1.1确定各个基本块的入口指令,它们是 1 程序的第一条指令;或者1 条件转移指令或无条件转移指令跳转到的指令;或者 1 紧跟在条件转移指令或函数调用后面的指令;或者 1 被调用函数的第一条指令。1. 1. 2对每个入口指令,确定其对应的出口指令,它们是1 入口指令后除当前入口指令外的第一个入口指令前的指令;或者 1 入口指令后的第一个转移指令或函数调用指令;或者 1 程序的结束指令。1. 1. 3分别将每个入口指令和其对应的出口指令之间的程序块划分为一个基本 块。为每个基本块分配一个基本块编号,并将基本块编号和入口指令地址、出口指令地址存 入基本块表。1.2基于基本块表,构造程序控制流图。定义函数调用所在的基本块为函数调用 块,定义紧接在函数调用块后面的基本块为返回块,定义被调用函数的第一个基本块为入 口块,定义被调用函数的结束基本块为出口块。控制流图的构造方法是分析基本块表中每 个基本块的出口指令,如果是转移指令,则存在当前基本块到转移目标所在的基本块之间 的控制流关系;如果是函数调用指令,则存在函数调用块到对应入口块的控制流关系;如 果不是转移指令或函数调用指令,则存在当前基本块到下一条指令所在的基本块之间的控 制流关系。将基本块作为结点,如果一个结点Bi到另一个结点B」有控制流关系,则产生Bi 到B」的一条有向边,用这种方法构造出控制流图。Bi定义为B」的前驱基本块,B」定义为Bi 的后继基本块。第二步,基于控制流图,实现控制流错误检测算法。具体方法是为每个基本块分配 不同的静态标签并在其中插装检测指令。程序运行时这些插装的检测指令根据当前控制流 为每个基本块计算出一个动态标签,并比较动态标签和静态标签是否一致来确定控制流是 否出错。控制流正常时,每个基本块的静态标签应该和动态标签相等,否则说明控制流出现 错误。采用标签分析方法的不同控制流错误检测算法在执行第一步时的操作完全相同,其 不同之处主要体现为本步中静态标签的设计和在基本块中插装的检测指令不同。另外,同 一种算法在所有基本块内插装检测指令的方式是相同的(插装的指令相同,指令条数相同, 插装指令在基本块内的相对位置也相同)。基于标签分析的控制流错误检测方法在程序内部插装少量的指令,可以检测出绝 大部分的控制流错误。但是这类方法在第一步中构造出的控制流图所包含的基本块大小一 般存在明显的差异,导致第二步在所有基本块内插装相同的检测指令后,算法的保护效率 下降(算法的保护效率和可靠性成正比,和时间开销成反比),原因是对于较小的基本块, 如只包含1条跳转指令的基本块,发生控制流错误的概率很小,但是却需要在基本块内插 装多条指令实现控制流错误检测,检错的时空开销很大;对于部分较大的基本块,发生各种控制流错误的概率很大,插装同样数量的检测指令却难以保证错误检测率,尤其是现有的 绝大多数控制流错误检测方法不能检测基本块内指令执行顺序的错误,这些算法受这种问 题的影响更为明显。鉴于标签分析方法存在的上述问题,需要在其第一步的基础上重构控 制流图,使得基于重构的控制流图实现的控制流检错算法能够获得算法时空开销、可靠性 的平衡和保护效率的提高。重构控制流图的方法是调整基本块的划分方法,然后基于调整 后的基本块和基本块之间的控制流关系重新构造程序的控制流图。目前通过重构控制流图方法平衡性能和可靠性的算法并不多,由于基本块间的 控制流关系是由程序的固有属性决定的,一旦基本块的划分完成,基本块间的控制流关系 也就可以确定,所以不同的重构控制流图方法的区别主要表现为基本块的划分方法不同。 2007年9月《航天返回与遥感》第28卷第3期发表的作者为康晓军、王劲强、王芸的论文 “基于扩展块的星载软件控制流容错评价方法”提出了一种基于扩展块重构控制流图,实现 控制流错误检测优化的方法,其基本步骤是第一步,为程序构造控制流图。具体方法同标签分析方法第一步。第二步,重构控制流本文档来自技高网...

【技术保护点】
一种基于重构控制流图的控制流错误检测优化方法,包括以下步骤:第一步,将源程序划分为基本块,构建基本块表;第二步,基于基本块表,构建程序控制流图;其特征在于还包括以下步骤:第三步,基于控制流图,划分逻辑块,构建逻辑块表:3.1构造并初始化局部路径链和标志位:分别为每个基本块构造一个局部路径链,局部路径链是多个基本块组成的链表,链表中每个结点存放一个基本块编号,链表的第一个结点定义为链头,链表的最后一个结点定义为链尾;为基本块B↓[m]构造的局部路径链L↓[m]的链头存放B↓[m逻辑块表和基本块表,统计每个逻辑块包含的指令数量N;5.2对每个逻辑块,如果其长度N大于长度上限n,则将其平均分割为*N/n*个基本逻辑块;如果其长度N小于等于n,该逻辑块也为一个基本逻辑块;基本逻辑块为长度原本小于n的逻辑块和将逻辑块根据n进行平均分割得到的块,所有基本逻辑块的长度都小于或等于n;n为所有的基本逻辑块大小的上限,取值范围是1≤n≤N↓[max],N↓[max]是最大的逻辑块的长度;**表示上取整运算;5.3为分割得到的每个基本逻辑块分配不同的编号,并将基本逻辑块编号和入口指令地址、出口指令地址存入基本逻辑块表;第六步,基于基本逻辑块表,重构程序控制流图。]的编号;针对每个局部路径链分别创建一个对应的标志位,初始值置为真;3.2基于控制流图更新局部路径链:针对每个对应标志位为真的局部路径链,若该链表的链尾对应的基本块B↓[end]是分界块,则将该链表对应的标志位置为假;若B↓[end]不是分界块,则查找控制流图中B↓[end]的后继基本块,并将后继基本块的编号作为一个新结点插入到链表尾部;分界块指多扇出块、程序结束块、函数调用块的前驱、函数调用块或出口块,多扇出块是指控制流图中有多于一个后继的基本块;3.3判断是否所有局部路径链对应的标志位都为假,如果是则执行第3.4步,否则转到第3.2步;3.4删除符合条件的局部路径链:选择满足如下删除条件的链表L↓[short]和L↓[long],然后删除L↓[short]:lL↓[short]是L↓[long]中的一段;且lL↓[short]的链头对应的基本块在控制流图中的任何前驱基本块都不是分界块;3.5判断是否还存在符合第3.4步删除条件的局部路径链,如果是则执行第3.4步,否则转到第3.6步;3.6基于局部路径链构建逻辑块表:为每个局部路径链分配编号,将每个局部路径链和对应的编号...

【技术特征摘要】

【专利技术属性】
技术研发人员:谭庆平李建立宁洪徐建军周会平谭兰芳徐锡山
申请(专利权)人:中国人民解放军国防科学技术大学
类型:发明
国别省市:43[中国|湖南]

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

1