掌桥专利:专业的专利平台
掌桥专利
首页

一种面向COTS平台的星载软件EDAC容错方法

文献发布时间:2023-06-19 18:37:28


一种面向COTS平台的星载软件EDAC容错方法

技术领域

本发明属于星载软件设计领域,涉及一种星载软件的EDAC容错方法。

背景技术

随着空间环境复杂度的提升,航天器在轨应用模式不断丰富,在传统航天器姿态测量控制基础上,需要逐步增强对空间态势的感知、预测,并根据感知结果自主开展任务规划和实施,对航天器的在轨自主能力提出了更高的要求。星载软件作为航天器功能实现的主要载体,其复杂度不断提升,与此同时,态势感知、理解等功能涉及大量数据的实时解算及融合处理,也必然需要更为强大的在轨数据处理能力。

另一方面,为了应对恶劣的空间辐射环境以及航天高可靠性需求,现有星载计算机普遍采用抗辐照加固等措施,但其运算处理性能却远落后于商用器件(COTS:commercialoff the shelf),难以适应高性能计算的需求。COTS器件虽然性能优势较大,但其本身抗辐照能力的欠缺,也难以直接应用。因此低成本高可靠的在星载环境下发挥COTS器件的作用,现实意义巨大。

目前的星载计算机容错技术主要是依靠硬件容错和软件容错两种方式。

硬件容错一般在处理器和存储单元增加容错设计,在计算过程中,硬件容错可通过设计表决器或看门狗的方法,一方面通过采用多数表决并选择多数相同的输出作为实际结果,另一方面在面对软件运行异常或跑飞等工况,通过看门狗定时器,适时将程序从异常状态拉回。在数据存取过程,硬件容错可通过冗余校验方法实现容错,典型的星载计算单元(如SoC2008、BM3803、SOC2012等),均在硬件层面采用了奇偶校验、三模冗余、片上EDAC等容错策略。

软件容错一般通过软件设计阶段和软件编译阶段增加容错措施,设计阶段容错方法包括N-版本和恢复块方法,以及相应的容错算法设计。容错算法中最重要是软件EDAC方法,通过模拟硬件EDAC机制,对执行代码进行EDAC校验,从而检错和纠错。软件编译阶段则通过改进编译器,在代码特定位置插入容错指令。美国JPL的REE计划,以及斯坦福大学可靠性计算中心的ARGOS试验,提出了若干详细的编译容错算法。其中EDDI和ED4I是比较有名的编译容错算法。EDDI和ED4I在汇编语言级别进行指令复制,并且在每一个存储指令之前进行冗余比较,以确保计算结果一致性。容错编译根据所保护的内容不同,分为数据流保护技术和控制流保护技术,典型的数据流保护方法包括EDDI、ED4I、VAR等,典型的控制流保护方法包括CFCSS、YACCA、CEDA等。

结合目前星载领域的需求,上述容错方法存在的问题主要有:

(1)硬件容错无需额外的软件开销,具有较高的可靠性,但具备硬件容错机制的宇航级计算产品成本高昂,增加了获取和应用成本。同时宇航产品与当前COTS器件在性能上不可同日而语。因此,使用硬件容错已经不能适应当前和未来空间智能化应用的需求。

(2)容错编译方法,无一例外都会带来软件运行时间和空间上的开销。例如在EDDI中,软件容错的时间开销高达170%;源到源编译容错的空间开销为2.9倍,而时间开销高达2.6倍。从其实现机理上分析,容错编译方法目前仍以数据流和控制流的正确性判断为主,即仅仅能够通过插入校验等方式,判断出数据或控制流的异常,但无法实现纠错,在软件设计环节或编译环节,还需要考虑异常发生后的程序执行分支走向问题。

(3)软件纠错检错方法,与硬件EDAC相比,能够部分实现EDAC功能,从调研的实现方法看,EDAC的实现逻辑是将程序执行、程序等待和程序EDAC校验三个环节分开,程序执行和程序等待所占时间比例较高,该段过程无刷新来确保对SEU的防护,容错效果仍需改进。同时EDAC检纠错内容与当前执行程序的关联性较弱,并不能实时保证即将执行的程序是否存在问题。

基于上述分析,现有的容错方法并不适用于基于COTS搭建的星载系统。

发明内容

本发明解决的技术问题是:克服现有技术的不足,提供了一种基于COTS平台的软件EDAC设计方法,可实现对在轨运行代码段的周期性自动检错和纠错,在降低系统开销的同时,能够有效检测单粒子反转异常并纠正,保证星载软件连续正常运行。

本发明的技术解决方案是:一种面向COTS平台的星载软件EDAC容错方法,采用软件模块调度前校验与空闲时段校验相结合的方式对星载软件的全部执行代码进行EDAC校验,其中:

所述的软件模块调度前校验:是在每个软件模块执行之前,先对该模块编译生成的全部可执行代码调用EDAC校验模块进行校验,确保全部可执行代码正确后再执行;

所述的空闲时段校验:是利用处理器空闲时间,周期性的对全部软件可执行代码从头到尾进行循环校验,每周期校验对应长度的代码,确保每隔一段时间完成一次对全部软件模块的可执行代码的校验。

进一步的,所述的先对该模块编译生成的全部可执行代码调用EDAC校验模块进行校验,具体为:通过对软件原始可执行代码程序段插桩,从Mapfile文件中获取程序段起始地址和结束地址,并按该地址,在原始可执行代码中找到对应的程序段内容,通过遍历程序段中的模块调用语句,并通过符号解析获取该被调用模块的起始地址和结束地址,在调用语句前插入调用EDAC校验模块的语句,并以被调用模块的起始地址和结束地址为调用参数,实现每个被调用模块执行前完成被调用模块的EDAC校验。

进一步的,所述的EDAC校验模块在程序存储区同时存放两份,同时设计两个单独运行的校验任务,所述两个单独运行的校验任务交错运行,分别对两个EDAC校验模块中的程序段进行校验和刷新操作。

进一步的,所述的EDAC校验模块进行EDAC容错采用(39:32)的海明码,其中可执行代码的码字长度为32位,EDAC校验码为7位,合计39位,实现纠一检二功能。

进一步的,所述的EDAC校验码也分配32位地址空间,低7位为有效校验码,高25位屏蔽。

进一步的,所述的EDAC校验码作为可执行代码的一部分,与可执行代码程序段和数据段共同落焊到存储芯片中,其中校验码单独开辟存储空间,存放于程序段和数据段二者存储地址之后,软件运行前,由引导软件将程序段和校验段内容搬运至内存中的TEXT段地址空间。

本发明与现有技术相比的优点在于:

(1)本发明方法采用“运行代码优先校验”的改进思路,使得EDAC校验过程与后续执行代码运行之间的间隔时间更小,以减少该段时间之内出现单粒子反转的可能性,适用于航天器等具备高可靠性高安全性需求的应用领域;

(2)本发明方法综合考虑了嵌入式环境下软件任务运行可靠性以及校验软件本身运行可靠性两方面的融合需求,通过设计双份EDAC校验软件,并增加两个独立任务,在软件正常运行的间隙,交错执行实现对EDAC软件本身的防护,进一步增强软件整体的可靠性。

附图说明

图1为本发明软件EDAC容错方法整体设计图;

图2为本发明针对软件模块调度前校验的可执行代码程序段插桩示意图;

图3为本发明软件程序存放设计图;

图4为本发明软件EDAC运行设计示意图。

具体实施方式

以下结合说明书附图对本发明做进一步的详细说明。

本发明一种面向COTS平台的星载软件EDAC容错方法,覆盖软件的生成过程和在轨运行过程两部分,包含的模块及其相互关系见图1。实施过程如下所示:

(1)星载软件源代码经过编译器编译后,形成星载软件原始可执行代码以及对应的Mapfile文件,二者作为本方法的输入,其中可执行代码包含程序段和数据段的实际内容,软件落焊时二者连续存放于FLASH/EEPROM等存储芯片中,软件运行前由引导软件将二者分别搬运至内存中并运行;Mapfile文件包含可执行代码中程序段中各模块以及数据段中各变量的地址信息。

(2)可执行代码程序段插桩:从Mapfile文件中获取程序段起始和结束地址,并按该地址,在原始可执行代码中找到对应的程序段内容。通过遍历程序段中的模块调用语句,即搜索CALL语句以及CALL语句调用的模块。基于Mapfile文件,通过符号解析获取该被调用模块的起始和结束地址,在每个CALL语句前插入调用EDAC校验模块的语句,并以被调用模块的起始和结束地址为调用参数,同时以插桩之后的程序段内容为基础,更新Mapfile文件中程序段中各模块的地址信息,插桩方法如图2所示。

(3)可执行代码程序段纠错编码:插桩之后的程序段中,每条可执行代码的码字长度均为32位。为每条可执行代码设计对应的(39:32)的海明码,其中可执行代码的码字长度为32位,校验码为7位,合计39位,可以实现纠一检二功能。为确保处理器运行效率,对每条校验码也分配32位地址空间,低7位为有效校验码,高25位屏蔽。

(4)可执行代码存储设计:将步骤(3)增加的校验码,作为可执行代码的一部分,与插桩之后的程序段、可执行代码数据段,共同落焊到存储芯片中。为校验码单独开辟存储空间,连续存放于插桩之后的程序段、可执行代码数据段二者存储地址之后。软件运行前,由引导软件将程序段和校验段内容搬运至内存中的TEXT段地址空间,将数据段搬运至内存中的DATA段地址空间,BSS段维持原有操作。上述操作完成后,软件开始由TEXT段起始地址开始运行。如图3所示。

(5)校验算法模块的自身校验:考虑到EDAC代码也在程序存储区中作为一个特殊的任务执行,也有单粒子翻转的可能性,因此需要额外保证它的正常运行。为此,在程序存储区同时存放两份EDAC算法模块:EDAC一区和EDAC二区。同时设计两个单独运行的任务,在正常软件任务每个周期执行的起始时刻,首先启动两个任务并分别运行一次,实现两区EDAC算法模块的相互校验,确保EDAC模块自身正确性。

(6)软件模块调度前校验:在步骤(5)之后,正常软件任务开始调度。由于软件步骤(2)中已完成可执行代码程序段插桩操作,在每个软件模块被调用执行之前,会首先调用EDAC算法模块,对该调用模块所包含的全部可执行代码进行校验。

(7)软件模块本身执行:在步骤(6)完成对调用模块的校验之后,该调用模块正常执行。之后按程序逻辑再进行后续调用模块的校验和执行,循环执行步骤(6)和步骤(7),直至当前任务所调用的全部模块执行完毕,处理器进入空闲时段。

(8)空闲时段软件校验:软件任务调度运行之后,处理器进入空闲时段后,启动空闲时段软件校验任务,对全部软件可执行代码从头到尾进行循环校验。依据空闲时间每周期校验对应长度的代码,确保每隔一段时间整体代码完成一次全面校验。软件整体执行和校验过程如图4所示。

本发明说明书中未作详细描述的内容属本领域技术人员的公知技术。

技术分类

06120115629503