1说明书摘要基于链接表的软件主动容错方法,将软件分成应用软件和容错软件两个部分,应用软件为实现功能的全部软件,将应用软件根据功能划分多个功能模块,每一种功能模块均包含一个主算法和N个备份算法;容错软件监测应用软件各功能模块的运行,一旦应用软件某功能模块的主算法检测有错5误,容错软件将修改记录应用软件各功能模块之间链接关系的模块关系链接表,重新加载至应用软件功能模块,启动运行该功能模块的N个备份软件,实现对应用软件进行重构,达到容错的目的;当N个备份软件均检测有错误时,容错软件将屏蔽掉应用软件的该功能模块。本发明实现了软件的重构,具有自主容错能力,提高了软件的可靠性和安全性,同时节省了时间和存储10空间,提高了效率。1摘要附图主算法备份算法备份算法1备份算法2备份算法3备份算法n错误检测表决程序进入输出正确结果无错误有错误错误检测输出正确结果无错误异常处理有错误1权利要求书1、基于链接表的软件主动容错方法,其特征在于:(1)将软件分成应用软件和容错软件两个部分;(2)应用软件为实现功能的全部软件,应用软件根据功能划分多个功能模块,每一种功能模块均包含一个主算法和N个备份算法;启动时,先5进行各功能模块主算法的运行;(3)容错软件监测上述应用软件各功能模块的运行,一旦应用软件某功能模块的主算法检测有错误,容错软件将修改记录有应用软件各功能模块之间链接关系的模块关系链接表,重新加载至应用软件功能模块,启动运行该功能模块的N个备份软件,实现对应用软件进行重构,达到主动容错的10目的;(4)当N个备份软件均检测有错误时,容错软件将屏蔽掉应用软件的该功能模块。2、根据权利要求1所述的基于链接表的软件主动容错方法,其特征在于:所述(2)中应用软件的N个备份算法为N个不同版本的备份算法,N15个不同版本的备份算法在运行中经过表决后,输出正确的结果。3、根据权利要求2所述的基于链接表的软件主动容错方法,其特征在于:所述N个不同版本的备份算法的表决原则为:(1)N个备份算法中,任何一个算法在运行中出现检测错误,即中止并不再参与该表决;(2)N个备份算法中,只要有一个备份算法在运行中未出现检测错误,则输出该备20份算法的正确结果;(3)N个备份算法中,如果有两个或两个以上备份算法均未出现检测错误,则按顺序输出最高级备份算法的正确结果;(4)如果N个备份算法均出现检测错误,则由容错软件作异常处理,任何一个均不再使用。4、根据权利要求1或2所述的基于链接表的软件主动容错方法,其特25征在于:所述的主算法在开始运行时加载到内存,N个备份算法存储在非易2失性存储器中。5、根据权利要求1所述的基于链接表的软件主动容错方法,其特征在于:所述的容错软件由错误记录表、模块关系链接表、重组规则表、错误捕捉代码、错误处理代码五个部分组成,错误捕捉代码对应用软件各功能模产生的错误代码进行捕捉,记录在错误记录表中,通过错误记录表引发软中断,5进行错误处理,错误处理代码通过查询重组规则表,提取出规则来修改模块关系链接表,重新加载到应用软件功能模块上,启动N个备份软件,实现对应用软件进行重构,达到容错的目的。6、根据权利要求5所述的基于链接表的软件主动容错方法,其特征在于:所述的错误记录表用于实时记录应用软件运行过程中出现的错误,以错10误代号的方式存储在错误记录表中,错误代号所表示的错误类型分为三种:指令类型,是由遥控指令决定模块重组的变化,而写入的错误代号;重组相关类型,是由模块自身产生的错误而写入的错误代号,该错误表明该模块出现问题,需要换用其他模块;非重组相关类型,是由模块自身产生的错误而写入的错误代号,该错误不能表明本模块出现问题,可能是其他原因。157、根据权利要求6所述的基于链接表的软件主动容错方法,其特征在于:所述的错误记录表采用容量为20个循环队列,队列的每一个元素由二元数据errorTYPE,errorCODE组成,errorTYPE用于记录错误类型,0,1,2分别表示指令类型、重组相关类型和非重组相关类型,errorCODE用于记录错误的编号,错误编号与对应的错误说明预先定义。208、根据权利要求1或5所述的基于链接表的软件主动容错方法,其特征在于:所述的模块关系链接表用于记录应用软件不同模块之间当前的链接关系,采用如下描述:module,methodType,ifactive,preModule1,preModule2,preModule3,preModule4,nextmodule1,nextmodule2,nextmodule3,nextmodule4,其中module代表模块编号,methodType是25该模块采用的算法,ifactive表示该模块是否不再使用,preModule记录可3以调用本模块的其他模块,nextmodule记录本模块可以调用的其他模块。9、根据权利要求5所述的基于链接表的软件主动容错方法,其特征在于:所述的重组规则表记录为预先设定的软件模块之间的重组规则,包含两个内容:一是当某模块的主算法出现错误时,该如何采用备份算法替代;二是当某模块的主算法和备用算法都出现错误时,该模块在模块关系链接表中5如何删除,并把其他的模块重新链接在一起,以实现软件的降额重构。10、根据权利要求5所述的基于链接表的软件主动容错方法,其特征在于:所述的错误捕捉代码是在算法运行时,用于监测算法运行错误的程序代码,这些代码分散插入在应用软件的模块算法的关键点中,若算法产生错误,则被错误捕捉代码捕捉,并指定该错误的类型和代号,写入错误记录表中。1011、根据权利要求5所述的基于链接表的软件主动容错方法,其特征在于:所述的错误处理代码根据错误记录表中的最新错误代号,查找重组规则表中关于此错误的处理规则,修改模块关系链接表,达到容错和软件重构的目的,当错误记录表被修改后,产生软中断来调用错误处理代码。151说明书基于链接表的软件主动容错方法技术领域本发明涉及一种软件主动容错方法,特别是一种基于链接表的软件主动容错方法,采用基于链接表的月面巡视探测器软件主动容错设计方法。5背景技术软件容错是软件能检测到系统中将要发生或已经发生的软件或硬件故障并从故障中恢复的能力,有两层含义:一是用软件来达到容错的目的,二是软件本身要容许软件故障。主要目的是提供足够的冗余信息和算法程序,使系统在实际运行时能够及时发现程序设计错误,采取补救措施,以提高软10件可靠性,保证整个计算机系统的正常运行。故障恢复的策略一般有两种:前向恢复和后向恢复(D.K.Pradhan,N.H.Vaidya.Roll-ForwardanfRoll-BackRecovery:PerformanceReliabilityTradeoff.IEEETransactionsoncomputers[J].46(3),1997:372-378)。所谓前向恢复是指使当前的计算继续下去,把系统恢复成连贯的正确状态,弥补当前状态的不连贯情况,这15需要有错误的详细说明。所谓后向恢复是指系统恢复到前一个正确状态,继续执行。容错的主要方法是冗余,其中软件冗余技术分为差异冗余和无差异冗余两类,无差异冗余可以处理某些物理故障,差异冗余可以容忍设计故障。能够容忍软件设计故障的差异冗余容错技术主要有有恢复块方法和N-版本20程序设计,另外还有一致性恢复的软件容错方法、防卫式程序设计等。恢复块方法:1975年,以B.Randell为首的英国NewCastle大学的研究组提出了“恢复块”方法(B.RandellandJ.Xu,TheEvolutionoftheRecoveryBlockConcept,inSoftwareFaultTolerance(M.Lyu,Ed.),TrendsinSoftware,pp.1-22,J.Wiley,1994),采用后向恢复策略。它提252供具有相同功能的主块和几个后备块,一个块就是一个执行完整的程序段,主块首先投入运行,结束后进行验收测试,如果没有通过验收测试,系统经现场恢复后由一后备块运行。这一过程可以重复到耗尽所有的后备块,或者某个程序故障行为超出了预料,从而导致不可恢复的后果。设计时应保证实现主块和后备块之间的独立性,避免相关错误的产生,使主块和后备块之间5的共性错误降到最低限度。验收测试程序完成故障检测功能,它本身的故障对恢复块方法而言是共性,因此,必须保证它的正确性。N-版本程序设计方法:1977年,美国加利福尼亚大学洛杉矶分校的A.Avizienis等人提出了“N版本编程”方案(AlgirdaAvizienis.TheN-versionApproachtoFault_TolerantSoftware.IEEETrans.OnSoftware10Eng.Vol.SE-11,No.12:1491-1501,Dec1985.)这是一种静态的故障屏蔽技术,采用前向恢复的策略,其设计思想是用N个具有相同功能的程序同时执行一项计算,结果通过多数表决来选择。其中N份程序必须由不同的人独立设计,使用不同的方法,不同的设计语言,不同的开发环境和工具来实现。目的是减少N版本软件在表决点上相关错误的概率。另外,由于各15种不同版本并行执行,有时甚至在不同的计算机中执行,必须解决彼此之间的同步问题。其他容错方法包括:一致性恢复的软件容错方法是Scott综合了基于表决的容错方法和基于恢复的容错方法,于1983年提出了一种容错方法(Kanekavaetal.DependableOnboardComputerSystemswithaNew20Method-StepwiseNegotiatingVoting.ProceedingsofIEEE10thSymposiumonFault-TolerantComputing.1989:13-19)。在这种容错方法中,系统首先按表决的的容错方法运行N版本程序,然后对运行结果进行表决,如果表决结果不一致时,那么系统又按照恢复重试的方法进入恢复块重新运行备份程序,而不会使系统失效。25N-版本编程和恢复块方法在航天、航空领域已有实际应用。可以看出,N-版本编程是在程序级的冗余,这N个版本是并行运行的,类似于静态冗3余,并且允许各程序版本由于不同的程序员在不同的编程方式下有随机的差异,因而是相互独立的。而恢复块则应用于模块级,在正常情况下只运行主模块,类似于动态硬件冗余,主模块和恢复块之间的独立性是由设计者故意使它们尽可能不同而获得的。这两种方法的另一个不同是仲裁器。恢复块方法要求每一个模块建一个可接受测试器,而N-版本编程只要一个表决器。5Scott的一致性恢复方法虽然综合了以上两种方法的优点,提高了可靠性,但同时也综合了两种方法的缺点,即同时增大了时间和空间上的开销。我国航天器软件容错设计方法,目前主要是恢复块和N-版本技术。其中,以月面巡视探测器为代表的在未知环境工作的航天器又和星船一类轨道运行的航天器不同。卫星、飞船所面对的空间环境是已知环境,针对环境的10算法是固定的,并且是地面可以仿真验证的,不存在在空间验证同一功能不同算法的要求,而月面巡视探测器工作在未知环境中,存在一些不能进行地面仿真验证的问题,因此需要考虑从功能角度容错,实现软件重构。由于月面巡视探测器采用综合电子系统,因此整车软件也集成在一起,实现整车的各项管理、算法实现、数据的采集、处理和传输等功能,这就对15软件的可靠性和安全性提出了很高的要求,所以软件能够容错是满足安全可靠要求的必要手段;其次,由于月面巡视探测器科学使命的特殊,尤其在首次登月的探测器上,有很多试验性质的项目,算法多样化,以便于试验,这就要求软件易于通过冗余重构来重组具有类似功能的不同代码模块,以充分验证不同的算法的差别;再者,行星表面的环境存在很多未知的因素,而地20面软件测试通常能够检测出代码的致命性错误,但很难完全检测出在实际环境中可能发生的非致命性错误,因此要求软件具有一定的自主容错能力,以保证整车的正常功能。发明内容本发明的技术解决问题:克服现有技术的不足,提供一种基于链接表的25软件主动容错方法,该方法实现了