空间环境中,DSP等器件越来越频繁地发生单粒子软错误,严重影响了系统安全可靠地运行。针对DSP程序存储区的软错误,本文提出了一种基于完整性检查的控制流错误恢复方法。该方法在基于完整性检查的控制流错误检测方法的基础上,只需设置一个恢复指针和恢复存储区,即可在检测到控制流错误之后快速地恢复控制流错误。论文提出的方法对DSP的抗软错误加固设计与开发具有重要的指导意义。
高性能DSP 常用作空间飞行器信号处理系统的核心器件。当前,在深亚微米工艺下,集成电路的集成度不断增加、工艺尺寸越来越小、电路节点的临界电荷大大降低,使得DSP 在空间环境中更容易发生单粒子软错误[1]。软错误并没有对DSP 造成永久性的损伤,但可能造成存储的程序或数据发生改变,影响程序正确的执行流程,导致输出错误[2]。因此,必须采取相应的加固、容错或检错纠错等措施,增强其抗软错误能力。
DSP 是一种典型的商用现成品(COTS, commercial-off-the-shelf) [3]。COTS 产品的体系结构在形成后就不能更改,这使得在DSP 上不能应用一些传统的集成电路加固方法,如采用抗辐照材料对敏感器件进行屏蔽加固或进行模块冗余等[4]。
因此,基于DSP 的空间信号处理系统的容错方案多采用控制流错误检测和恢复方法。控制流错误是指程序偏离正确的执行流程,即在没有出现跳转指令的地方发生了跳转, 在出现跳转指令的地方却不跳转或发生错误跳转[5]。
当前,控制流错误检测主要是采取签名监测的思想。即先将程序划分为若干个基本块的集合,在编译时为每个基本块分派一个静态签名,程序运行时再计算出基本块的动态签名,并通过比较静态签名与动态签名的一致性来判断程序是否发生控制流错误[6]-[12]。R. Vemu 等人首次提出了控制流错误恢复算法及其实现,它本质上是在原程序中添加一个例程,该例程能够恢复原程序代码间的非法分支转移[13]。
谭兰芳等人提出了一种类似的恢复算法CFEDR [14] [15],该方法能检测并恢复所有的基本块间的控制流错误并恢复绝大部分基本块内的控制流量错误。
Hamid R. Zaradi 等人提出了CDCC 和MCP [16]两种控制流恢复算法。CDCC 主要根据数据依赖图,为全局变量赋值影子变量,当检测到错误时再将影子变量赋值给对应的全局变量,从而实现状态恢复。MCP 则是通过将控制流恢复至全局变量赋初值的位置来实现错误的恢复。
为此,本文借鉴签名检测,提出了一种基于程序执行流程完整性检查的DSP 软错误恢复方法ICBR (Integrity Checking Based Recovery)。该方法通过检查每个基本块的执行完整性来判断程序是否发生控制流错误;当检测出软错误后,引导程序控制流返回到出错的基本块处,重新开始执行。本文方法相对已有的控制流检测技术,移植性好、检测覆盖率高,且能以很小的存储开销来实现软错误的恢复。
2. 基于完整性检查的控制流错误恢复方法 2.1. 基于完整性检查的控制流错误检测 控制流错误是指程序偏离正确的执行流程,即在没有出现跳转指令的地方发生了跳转,在出现跳转