【答案解析】[解析] 软件容错的主要目的是提供足够的冗余信息和算法程序,使系统在实际运行时能够及时发现程序设计错误,采取补救措施,以提高软件可靠性,保证整个计算机系统的正常运行。
软件容错技术主要有恢复块方法、N版本程序设计和防卫式程序设计等。故障的恢复策略一般有两种:前向恢复和后向恢复。所谓前向恢复是指使当前的计算继续下去,把系统恢复成连贯的正确状态,弥补当前状态的不连贯情况,这需要有错误的详细说明。所谓后向恢复是指系统恢复到前一个正确状态,继续执行。这种方法显然不适合实时处理场合。
恢复块方法采用后向恢复策略,如图1所示。它提供具有相同功能的主块和几个后备块,一个块就是一个执行完整的程序段,主块首先投入运行,结束后进行验收测试,如果没有通过验收测试,系统经现场恢复后由一个后备块运行。这一过程可以重复到耗尽所有的后备块,或者某个程序故障行为超出了预料,从而导致不可恢复的后果。设计时应保证实现主块和后备块之间的独立性,避免相关错误的产生,使主块和后备块之间的共性错误降到最低限度。验收测试程序完成故障检测功能,它本身的故障对恢复块方法而言是共性,因此,必须保证它的正确性。
[*]
图1 恢复块方法
N版本程序设计如图2所示,它是一种静态的故障屏蔽技术,采用前向恢复的策略,其设计思想是用N个具有相同功能的程序同时执行一项计算,结果通过多数表决来选择。其中N份程序必须由不同的人独立设计,使用不同的方法、不同的设计语言、不同的开发环境和工具来实现。目的是减少N版本软件在表决点上相关错误的概率。另外,由于各种不同版本并行执行,有时甚至在不同的计算机中执行,必须解决彼此之间的同步问题。
[*]
图2 N版本程序设计
防卫式程序设计是一种不采用任何一种传统的容错技术就能实现软件容错的方法。对于程序中存在的错误和不一致性,其基本思想是通过在程序中包含错误检查代码和错误恢复代码,使得一旦错误发生,程序能撤销错误状态,恢复到一个已知的正确状态中去。其实现策略包括错误检测、破坏估计和错误恢复3个方面。
除上述3种方法外,提高软件容错能力亦可以从计算机平台环境、软件工程和构造异常处理模块等不同方面达到。此外,利用高级程序设计语言本身的容错能力,采取相应的策略,也是可行的办法。如C++语言中的try_except处理法,try_finally中止法等。
试题中提到的一致性检查和能力检查也是软件冗余的方法,其中,一致性检查是先预测程序的运行结果,然后将程序运行中和运行后的结果与预测值进行比较,根据比较结果判断软硬件的故障。能力检查是用诊断程序检查系统各个部件的功能是否符合设计的要求,例如,用诊断程序读/写存储器的各个存储单元以检查其读/写和存储功能是否正常,又如,用一组数据检查运算逻辑部件的功能是否正常。