基于链接表的软件主动容错方法

文档序号:6610400阅读:148来源:国知局
专利名称:基于链接表的软件主动容错方法
技术领域
本发明涉及一种软件主动容错方法,特别是一种基于链接表的软件主动容错方法,采用基于链接表的月面巡视探测器软件主动容错设计方法。
背景技术
软件容错是软件能检测到系统中将要发生或已经发生的软件或硬件故障并从故障中恢复的能力,有两层含义一是用软件来达到容错的目的,二是软件本身要容许软件故障。主要目的是提供足够的冗余信息和算法程序,使系统在实际运行时能够及时发现程序设计错误,采取补救措施,以提高软件可靠性,保证整个计算机系统的正常运行。故障恢复的策略一般有两种前向恢复和后向恢复(D.K.Pradhan,N.H.Vaidya.Roll-Forward anfRoll-Back RecoveryPerformance Reliability Tradeoff.IEEE Transactionsoncomputers[J].46(3),1997372-378)。所谓前向恢复是指使当前的计算继续下去,把系统恢复成连贯的正确状态,弥补当前状态的不连贯情况,这需要有错误的详细说明。所谓后向恢复是指系统恢复到前一个正确状态,继续执行。
容错的主要方法是冗余,其中软件冗余技术分为差异冗余和无差异冗余两类,无差异冗余可以处理某些物理故障,差异冗余可以容忍设计故障。能够容忍软件设计故障的差异冗余容错技术主要有有恢复块方法和N-版本程序设计,另外还有一致性恢复的软件容错方法、防卫式程序设计等。
恢复块方法1975年,以B.Randell为首的英国NewCastle大学的研究组提出了“恢复块”方法(B.Randell and J.Xu,″The Evolution of theRecovery Block Concept″,in Software Fault Tolerance(M.Lyu,Ed.),Trends in Software,pp.1-22,J.Wiley,1994),采用后向恢复策略。它提供具有相同功能的主块和几个后备块,一个块就是一个执行完整的程序段,主块首先投入运行,结束后进行验收测试,如果没有通过验收测试,系统经现场恢复后由一后备块运行。这一过程可以重复到耗尽所有的后备块,或者某个程序故障行为超出了预料,从而导致不可恢复的后果。设计时应保证实现主块和后备块之间的独立性,避免相关错误的产生,使主块和后备块之间的共性错误降到最低限度。验收测试程序完成故障检测功能,它本身的故障对恢复块方法而言是共性,因此,必须保证它的正确性。
N-版本程序设计方法1977年,美国加利福尼亚大学洛杉矶分校的A.Avizienis等人提出了“N版本编程”方案(Algirda Avizienis.TheN-version Approach to Fault_Tolerant Software.IEEE Trans.On SoftwareEng.Vol.SE-11,No.121491-1501,Dec 1985.)这是一种静态的故障屏蔽技术,采用前向恢复的策略,其设计思想是用N个具有相同功能的程序同时执行一项计算,结果通过多数表决来选择。其中N份程序必须由不同的人独立设计,使用不同的方法,不同的设计语言,不同的开发环境和工具来实现。目的是减少N版本软件在表决点上相关错误的概率。另外,由于各种不同版本并行执行,有时甚至在不同的计算机中执行,必须解决彼此之间的同步问题。
其他容错方法包括一致性恢复的软件容错方法是Scott综合了基于表决的容错方法和基于恢复的容错方法,于1983年提出了一种容错方法(Kanekava et al.Dependable Onboard Computer Systems with a NewMethod-Stepwise Negotiating Voting.Proceedings of IEEE 10thSymposium on Fault-Tolerant Computing.198913-19)。在这种容错方法中,系统首先按表决的的容错方法运行N版本程序,然后对运行结果进行表决,如果表决结果不一致时,那么系统又按照恢复重试的方法进入恢复块重新运行备份程序,而不会使系统失效。
N-版本编程和恢复块方法在航天、航空领域已有实际应用。可以看出,N-版本编程是在程序级的冗余,这N个版本是并行运行的,类似于静态冗余,并且允许各程序版本由于不同的程序员在不同的编程方式下有随机的差异,因而是相互独立的。而恢复块则应用于模块级,在正常情况下只运行主模块,类似于动态硬件冗余,主模块和恢复块之间的独立性是由设计者故意使它们尽可能不同而获得的。这两种方法的另一个不同是仲裁器。恢复块方法要求每一个模块建一个可接受测试器,而N-版本编程只要一个表决器。Scott的一致性恢复方法虽然综合了以上两种方法的优点,提高了可靠性,但同时也综合了两种方法的缺点,即同时增大了时间和空间上的开销。
我国航天器软件容错设计方法,目前主要是恢复块和N-版本技术。其中,以月面巡视探测器为代表的在未知环境工作的航天器又和星船一类轨道运行的航天器不同。卫星、飞船所面对的空间环境是已知环境,针对环境的算法是固定的,并且是地面可以仿真验证的,不存在在空间验证同一功能不同算法的要求,而月面巡视探测器工作在未知环境中,存在一些不能进行地面仿真验证的问题,因此需要考虑从功能角度容错,实现软件重构。
由于月面巡视探测器采用综合电子系统,因此整车软件也集成在一起,实现整车的各项管理、算法实现、数据的采集、处理和传输等功能,这就对软件的可靠性和安全性提出了很高的要求,所以软件能够容错是满足安全可靠要求的必要手段;其次,由于月面巡视探测器科学使命的特殊,尤其在首次登月的探测器上,有很多试验性质的项目,算法多样化,以便于试验,这就要求软件易于通过冗余重构来重组具有类似功能的不同代码模块,以充分验证不同的算法的差别;再者,行星表面的环境存在很多未知的因素,而地面软件测试通常能够检测出代码的致命性错误,但很难完全检测出在实际环境中可能发生的非致命性错误,因此要求软件具有一定的自主容错能力,以保证整车的正常功能。

发明内容
本发明的技术解决问题克服现有技术的不足,提供一种基于链接表的软件主动容错方法,该方法实现了软件的重构,具有主动容错能力,提高了软件的可靠性和安全性,从而提高了使用该软件系统的可靠性和安全性。
本发明的另一技术解决问题在上述发明目的的基础上,又节省了时间和存储空间,提高了效率。
本发明的技术解决方案基于链接表的软件主动容错方法,其特点在于(1)将软件分成应用软件和容错软件两个部分;(2)应用软件为实现功能的全部软件,应用软件根据功能划分多个功能模块,每一种功能模块均包含一个主算法和N个备份算法;启动时,先进行各功能模块主算法的运行;(3)容错软件监测上述应用软件各功能模块的运行,一旦应用软件某功能模块的主算法检测有错误,容错软件将修改记录有应用软件各功能模块之间链接关系的模块关系链接表,重新加载至应用软件功能模块,启动运行应用软件该功能模块的N个备份软件,实现对应用软件进行重构,达到主动容错的目的;(4)当N个备份软件均检测有错误时,容错软件将屏蔽掉应用软件的该功能模块。
所述应用软件的N个备份算法为N个不同版本的备份算法,N个不同版本的备份算法在运行中经过表决后,输出正确的结果。所述的表决原则为(1)N个备份算法中,任何一个算法在运行中出现检测错误,即中止并不再参与该此表决;(2)N个备份算法中,只要有一个备份算法在运行中未出现检测错误,则输出该备份算法的正确结果;(3)N个备份算法中,如果有两个或两个以上备份算法均未出现检测错误,则按顺序输出最高级备份算法的正确结果;(4)如果N个备份算法均出现检测错误,则由容错软件作异常处理,任何一个均不再使用。
所述的主算法在开始运行时加载到内存,N个备份算法存储在非易失性存储器中。
本发明与现有技术相比的优点在于
(1)本发明将软件分成应用软件和容错软件分为两个部分,应用软件为实现功能的全部软件,由主算法和N个备份算法组成,容错软件由插入在应用软件中的代码组成,当应用软件出现错误时,引起容错软件的执行,来处理应用软件的错误,通过修改模块关系链接表,启动N个备份软件,实现对应用软件进行重构,达到主动容错的目的,提高了软件的可靠性和安全性,从而提高了使用该软件系统的可靠性和安全性。如月面巡视探测器等。
(2)现有技术的一致性恢复的软件容错方法要先按照恢复块进行容错,而在恢复块中再按照N版本处理;而本发明先主算法运行,再按照备份算法进行容错,而在备份算法中又按照N-版本备份算法处理,且开始运行时只有主算法加载到内存,N个备份算法存储在非易失性存储器中,所以避免了初始运行时占用计算和动态存储资源太多的问题,节省了存储空间,提高了容错的实时性。
(3)现有技术恢复块方法中,当主算法运行完时对主算法要接受测试器的测试,而备份算法也需要进行测试,这样使得运行时间大大增加;本发明应用软件中的主算法和N个备份算法并没有接受测试器,而是在主算法运行过程中监视其运算是否出现错误,即若主算法运行过程中没有错误,则主算法运行结果可信,若主算法运行过程中有错误,则主算法不可信,更换备份算法重新计算,从而缩短了运行时间,使得效率更高。
(4)本发明的备份算法由多个版本的备份算法组成N-版本结构,与现有的N版本结构的方法不同主要体现在表决方式上。现有的N版本结构方法的表决原则为在所有同时运行的备份算法都结束之后,把相同次数最多的计算结果作为最后结果输出;而本发明的备份算法的表决原则是过程表决,即只要有某一算法运行过程中出错,就退出表决,若备份算法运行过程中没有出错,则其运算结果即是可信的,最后选择那些没有出错的备份算法中优先级最高的算法的结果作为最终输出结果。这样既可以提前中止出错的备份算法,降低计算资源需求,又避免该出错算法可能带来的负面影响,对备份算法设置优先级又可以避免给出对近似结果的确认原则设计,降低了容错的复杂度,提高了实时性。


图1为本发明的应用软件中一个功能模块的结构图;图2为本发明的容错软件参与运行的流程图。
具体实施例方式
如图1所示,本发明将软件分成应用软件和容错软件两个部分。应用软件为实现功能的全部软件,应用软件根据功能划分多个功能模块,每一种功能模块均包含一个主算法和N个备份算法,图1中为一个功能模块的主算法和备份算法流程图,其他功能模块与之相同。
启动时,应用软件各功能模块先运行主算法,主算法在开始运行时加载到内存,N个备份算法存储在非易失性存储器中。此时容错软件监测应用软件各功能模块的运行,如图2所示。容错软件由错误记录表、模块关系链接表、重组规则表、错误捕捉代码、错误处理代码五个部分组成。
错误捕捉代码对应用软件各功能模产生的错误代码进行捕捉,记录在错误记录表中,通过错误记录表引发软中断,进行错误处理,错误处理代码通过查询重组规则表,提取出规则来修改模块关系链接表,重新加载到应用软件功能模块上。错误记录表,用于实时记录应用软件运行过程中出现的错误,以错误代号的方式存储在错误记录表中,错误代号所表示的错误类型分为三种指令类型,是由遥控指令决定模块重组的变化,而写入的错误代号;重组相关类型,是由模块自身产生的错误而写入的错误代号,该错误表明该模块出现问题,需要换用其他模块;非重组相关类型,是由模块自身产生的错误而写入的错误代号,该错误不能表明本模块出现问题,可能是其他原因。
模块关系链接表,用于记录应用软件不同模块之间当前的链接关系,初始时为各功能模块的主算法之间的链接,系统启动时只加载模块关系链接表上所描述的算法,不同模块之间的调用关系也是据此进行,修改模块链接表即为某一模块的主算法被备用算法代替,由此产生加载和调用的更新,实现容错和软件重构。
重组规则表记录,为预先设定的软件模块之间的重组规则,包含两个内容一是当某模块的主算法出现错误时,如何采用备份算法替代;二是当某模块的主算法和备用算法都出现错误时,该模块在模块关系链接表中如何删除,并把其他的模块重新链接在一起,以实现软件的降额重构。
错误捕捉代码,是在算法运行时,用于监测算法运行错误的程序代码,这些代码分散插入在应用软件的模块算法的关键点中,若算法产生错误,则被错误捕捉代码捕捉,并指定该错误的类型和代号,写入错误记录表中。
错误处理代码,根据错误记录表中的最新错误代号,查找重组规则表中关于此错误的处理规则,修改模块关系链接表,达到容错和软件重构的目的,当错误记录表被修改后,产生软中断来调用错误处理代码。
如图2所示,一旦应用软件某功能模块的主算法检测有错误,容错软件将错误捕捉代码对应用软件各功能模产生的错误代码进行捕捉,记录在错误记录表中,通过错误记录表引发软中断,进行错误处理,错误处理代码通过查询重组规则表,提取出规则来修改模块关系链接表,重新加载到应用软件功能模块上,启动存储在非易失性存储器中N个备份软件,实现对应用软件进行重构,达到容错的目的。
如图1所示,当容错软件启动应用软件的N个备份算法后,N个不同版本的备份算法在运行中要经过表决后,输出正确的结果,表决原则为(1)N个备份算法中,任何一个算法在运行中出现检测错误,即不再使用;(2)N个备份算法中,只要有一个备份算法在运行中未出现检测错误,则输出该备份算法的正确结果;(3)N个备份算法中,如果有两个或两个以上备份算法均未出现检测错误,则按顺序输出最高级备份算法的正确结果;(4)如果N个备份算法均出现检测错误,则作异常处理,任何一个均不再使用,容错软件将屏蔽掉应用软件的该功能模块。
下面以月面巡视探测器为例对其软件进行详细说明。月面巡视探测器软件遵循上述基于链接表的主动容错方法进行设计,包括1软件由应用软件和容错软件组成。
2应用软件由以下功能模块组成遥控遥测模块、安全模块、导航模块、移动控制模块、视觉处理模块、路径规划模块、桅杆控制模块、太阳翼控制模块、天线控制模块、机械臂控制模块、有效载荷控制模块、热控模块等。其中每个功能模块都由1-4种算法组成,按图1进行设计,应用软件初始加载都是主算法。每个功能模块的算法如表1所示。
表1 功能模块的算法冗余


3容错软件由五个部分组成错误记录表、模块关系链接表、重组规则表、错误捕捉代码、错误处理代码。
其中,错误记录表采用容量为20个循环队列,队列的每一个元素由二元数据(errorTYPE,errorCODE)组成,errorTYPE用于记录错误类型,0,1,2分别表示指令类型、重组相关类型和非重组相关类型。errorCODE用于记录错误的编号。错误编号与对应的错误说明预先定义,在月面巡视探测器中,总计有478种错误编号,其中重组相关编号有224种。
模块关系链接表记录了每个功能模块的自身和连接属性,采用如下描述(module,methodType,ifactive,preModule1,preModule2,preModule3,preModule4,nextmodule1,nextmodule2,nextmodule3,nextmodule4),其中module代表模块编号,methodType是该模块采用的算法,ifactive表示该模块是否不再使用,preModule记录可以调用本模块的其他模块,nextmodule记录本模块可以调用的其他模块。以表1中的路径规划模块为例,其在模块关系链接表中的初始描述为(6,0,TRUE,1,2,11,NULL,5,3,NULL)。应用程序在加载时,加载的依据就是链接表中每个模块的methodType,而每个模块的其他算法存储在非易失性存储器上而暂不加载到内存。应用软件进行重构就是通过以下来实现
●修改methodType导致模块算法改变;●修改preModule和nextmodule导致模块连接关系改变。
重组规则表记录了预先定义的重组规则,共有224条,对应于重组相关编号的224种。
权利要求
1.基于链接表的软件主动容错方法,其特征在于(1)将软件分成应用软件和容错软件两个部分;(2)应用软件为实现功能的全部软件,应用软件根据功能划分多个功能模块,每一种功能模块均包含一个主算法和N个备份算法;启动时,先进行各功能模块主算法的运行;(3)容错软件监测上述应用软件各功能模块的运行,一旦应用软件某功能模块的主算法检测有错误,容错软件将修改记录有应用软件各功能模块之间链接关系的模块关系链接表,重新加载至应用软件功能模块,启动运行该功能模块的N个备份软件,实现对应用软件进行重构,达到主动容错的目的;(4)当N个备份软件均检测有错误时,容错软件将屏蔽掉应用软件的该功能模块。
2.根据权利要求1所述的基于链接表的软件主动容错方法,其特征在于所述(2)中应用软件的N个备份算法为N个不同版本的备份算法,N个不同版本的备份算法在运行中经过表决后,输出正确的结果。
3.根据权利要求2所述的基于链接表的软件主动容错方法,其特征在于所述N个不同版本的备份算法的表决原则为(1)N个备份算法中,任何一个算法在运行中出现检测错误,即中止并不再参与该表决;(2)N个备份算法中,只要有一个备份算法在运行中未出现检测错误,则输出该备份算法的正确结果;(3)N个备份算法中,如果有两个或两个以上备份算法均未出现检测错误,则按顺序输出最高级备份算法的正确结果;(4)如果N个备份算法均出现检测错误,则由容错软件作异常处理,任何一个均不再使用。
4.根据权利要求1或2所述的基于链接表的软件主动容错方法,其特征在于所述的主算法在开始运行时加载到内存,N个备份算法存储在非易失性存储器中。
5.根据权利要求1所述的基于链接表的软件主动容错方法,其特征在于所述的容错软件由错误记录表、模块关系链接表、重组规则表、错误捕捉代码、错误处理代码五个部分组成,错误捕捉代码对应用软件各功能模产生的错误代码进行捕捉,记录在错误记录表中,通过错误记录表引发软中断,进行错误处理,错误处理代码通过查询重组规则表,提取出规则来修改模块关系链接表,重新加载到应用软件功能模块上,启动N个备份软件,实现对应用软件进行重构,达到容错的目的。
6.根据权利要求5所述的基于链接表的软件主动容错方法,其特征在于所述的错误记录表用于实时记录应用软件运行过程中出现的错误,以错误代号的方式存储在错误记录表中,错误代号所表示的错误类型分为三种指令类型,是由遥控指令决定模块重组的变化,而写入的错误代号;重组相关类型,是由模块自身产生的错误而写入的错误代号,该错误表明该模块出现问题,需要换用其他模块;非重组相关类型,是由模块自身产生的错误而写入的错误代号,该错误不能表明本模块出现问题,可能是其他原因。
7.根据权利要求6所述的基于链接表的软件主动容错方法,其特征在于所述的错误记录表采用容量为20个循环队列,队列的每一个元素由二元数据errorTYPE,errorCODE组成,errorTYPE用于记录错误类型,0,1,2分别表示指令类型、重组相关类型和非重组相关类型,errorCODE用于记录错误的编号,错误编号与对应的错误说明预先定义。
8.根据权利要求1或5所述的基于链接表的软件主动容错方法,其特征在于所述的模块关系链接表用于记录应用软件不同模块之间当前的链接关系,采用如下描述module,methodType,ifactive,preModule1,preModule2,preModule3,preModule4,nextmodule1,nextmodule2,nextmodule3,nextmodule4,其中module代表模块编号,methodType是该模块采用的算法,ifactive表示该模块是否不再使用,preModule记录可以调用本模块的其他模块,nextmodule记录本模块可以调用的其他模块。
9.根据权利要求5所述的基于链接表的软件主动容错方法,其特征在于所述的重组规则表记录为预先设定的软件模块之间的重组规则,包含两个内容一是当某模块的主算法出现错误时,该如何采用备份算法替代;二是当某模块的主算法和备用算法都出现错误时,该模块在模块关系链接表中如何删除,并把其他的模块重新链接在一起,以实现软件的降额重构。
10.根据权利要求5所述的基于链接表的软件主动容错方法,其特征在于所述的错误捕捉代码是在算法运行时,用于监测算法运行错误的程序代码,这些代码分散插入在应用软件的模块算法的关键点中,若算法产生错误,则被错误捕捉代码捕捉,并指定该错误的类型和代号,写入错误记录表中。
11.根据权利要求5所述的基于链接表的软件主动容错方法,其特征在于所述的错误处理代码根据错误记录表中的最新错误代号,查找重组规则表中关于此错误的处理规则,修改模块关系链接表,达到容错和软件重构的目的,当错误记录表被修改后,产生软中断来调用错误处理代码。
全文摘要
基于链接表的软件主动容错方法,将软件分成应用软件和容错软件两个部分,应用软件为实现功能的全部软件,将应用软件根据功能划分多个功能模块,每一种功能模块均包含一个主算法和N个备份算法;容错软件监测应用软件各功能模块的运行,一旦应用软件某功能模块的主算法检测有错误,容错软件将修改记录应用软件各功能模块之间链接关系的模块关系链接表,重新加载至应用软件功能模块,启动运行该功能模块的N个备份软件,实现对应用软件进行重构,达到容错的目的;当N个备份软件均检测有错误时,容错软件将屏蔽掉应用软件的该功能模块。本发明实现了软件的重构,具有自主容错能力,提高了软件的可靠性和安全性,同时节省了时间和存储空间,提高了效率。
文档编号G06F11/36GK101075206SQ20071012290
公开日2007年11月21日 申请日期2007年7月3日 优先权日2007年7月3日
发明者王磊, 张志 申请人:北京控制工程研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1