论文部分内容阅读
在一些高可靠性领域,计算机系统的应用越来越广泛,如交通控制、医疗、核电站、银行、电讯系统和航空航天等。在这些领域中,计算机系统的失效可能造成巨大的人员伤亡和经济损失。另外,在高性能并行计算领域,计算机可靠性的重要性也越来越高。并行计算机通常用于一些高强度计算应用,如基础物理/化学、飞机/汽车建模等,这些应用不仅运行时间长,而且由于并行计算所带来的电子器件增多导致故障发生的可能性增大。特别是对于航天领域,由于宇宙射线的存在,会导致计算机系统经常发生各种故障。可靠性计算机一般都采用容错机制来检测软件或硬件故障,定位故障源或可能从这些故障/错误中恢复。但如何在系统应用之前对这些容错机制的有效性、可用性进行评估和验证,检验它们是否和我们事先预想的情况相一致。这就需要一种有效的对容错机制进行评测的方法和工具。同时,在对软件系统装配容错机制之前,考虑到容错机制的效率因素,把容错机制放于何处及如何放置才能发挥它们的最大作用,这就需要了解软件系统中错误的产生与传播过程,以及找出软件系统中相对薄弱的环节或部分。最后在找到软件系统的薄弱环节以后,如何对之进行加固也是一个很重要的内容。计算机系统的可靠性验证是一个复杂艰巨的任务,一般使用理论建模方法,但由于故障激活机制和错误传播过程非常复杂,在大多数情况下都是不完全可知的,所以很难对实际系统进行建模。故障注入技术作为一种实验评测方法被证明是一种高效的可靠性验证方法,他通过人为的在目标系统中产生故障,加速系统发生故障和失效的过程,通过对注入故障后系统的反应信息进行监测和分析,可获得对目标系统可靠性和容错性能的评测结果。与其它方法相比,故障注入具有应用范围广、结果精确度高、时间花费少等优点,已引起众多学者和研究人员的重视。本文首先研究了进行故障注入的一些基本原理和方法,结合航天领域的特点设计了故障模型,然后提出了一种分布式的故障注入工具的架构,并在Linux系统上进行了开发与实现。经实验验证,该工具可在分布式系统或单机系统中注入多种故障,同时还拥有强大的数据回收功能,并具有很好的可移植性(可在所有类Unix操作系统平台上运行)和可扩展性。这为以后研究分布式系统的可靠性奠定了一定的基础。以该故障注入工具为基础,本文又分别在信号和模块级别上研究了故障在软件中的生成与传播过程,并定义了描述此过程的参数及其计算方法,其中首次提出了模块泄漏率和活动率的概念,并给出了软件脆弱点的概念及确定原则,最后在一卫星光纤陀螺捷联航姿控制系统上对该框架的正确性和有效性进行了验证。这为从设计角度来减少软件系统模块间的错误传播提供了理论基础,同时也为评测软件系统可靠性提供了方法,并为如何放置容错机制才能使之达到效率最高提供了依据。找到了软件系统中的脆弱点,但如何对它们进行加固处理,也是本文考虑的一个内容。本文针对航天领域强辐射的特点,分别从程序控制流和数据流角度提出了两种在线加固方法。控制流加固方法(RSCFC)可以检测程序中的控制流错误,该方法首先识别程序中的各个基本模块,然后把基本模块间的关系编码进模块标记中,最后在每个基本模块的首部和尾部分别加上测试和设置指令,通过一全局变量来检测程序的执行流程。该方法不仅可用于高级语言,也可在汇编语言级上实现。通过在几个C语言标准程序上使用该方法,并进而进行故障注入实验,结果表明该方法在对程序代码大小和性能影响不大的条件下可把未探测故障率从原始程序的20.7~68.8%降低到2.8~20.4%。数据流加固方法(SBC)通过对程序中变量进行简单编码和解码操作后,可对发生在程序数据空间内的单“位”错误进行检测并进而纠正。故障注入的实验结果表明,对于程序数据段错误,该算法可把错误输出从原始程序的27%~49%降低到0.01%~0.02%,同时故障纠正率接近100%;对于程序堆栈段错误,该算法可把错误输出从原始程序的10%~70%降低到1%~3%,故障纠正率也在73%以上。在软件系统实现上,我们把故障注入平台、错误传播和软件脆弱点检测集成到了一起,统称软件脆弱点识别环境SAVIE。本文在最后对SAVIE设计实现进行了描述,包括系统结构、各个模块的功能、使用流程和方法等。