专利名称:用于星载处理器的程序执行流程跳转错误检测方法
技术领域:
本发明主要涉及到空间仪器工程领域,特指一种用于星载处理器的程序执行流程跳转错 误检测方法。
背景技术:
处理器的程序存储区、关键变量、功能型模块的故障,将影响程序的执行流程,造成程 序指针的"跑飞"、模块执行时间的大幅变化等时序型错误。
特别是在空间仪器工程应用中,随着超大规模集成电路(VLSI, Very Large Scale Integrated circuits)的发展和应用,数字信号处理器(DSP, Digital Signal Processor)依靠其强大的信号 处理能力和优越的接口性能逐渐成为星载高速信号处理平台的重要组成部分,开始在航天工 程中得到应用。然而,VLSI工作频率越来越高,工作电压越来越低,这使星载DSP等处理 器对单粒子效应表现出了更强的敏感性,容易出现单粒子翻转等故障.从而容易造成处理器 程序的执行流程发生异常造成程序"跑死"、"跑飞"等问题。尤其是对于工业级和军品级的DSP 等器件,由于大量采用片上SRAM (Static Random Access Memory),受空间高能粒子影响发 生单粒子效应的概率大大提高,严重影响器件的正常工作,这限制了此类器件在空间仪器工 程中的应用。
发明内容
本发明要解决的技术问题就在于针对现有技术存在的技术问题,本发明提供一种原理 简单、操作方便、可靠性好的用于星载处理器的程序执行流程跳转错误的检测方法。
为解决上述技术问题,本发明采用以下技术方案。
一种用于星载处理器的程序执行流程跳转错误的检测方法,其特征在于步骤为
① 处理器程序运行时,初始化跳转状态矩阵,进行步骤②;所述跳转状态矩阵为一个用 于标记程序当前跳转状态的W阶全局二维矩阵F,当基本模块6,即将跳往基本模块^时,对
应^=1;对于单线程程序,每个时刻只能发生一次跳转,因此F有且只有一个元素为1,其
余为0;
② 根据程序基本模块之间的跳转关系,构建基本模块跳转矩阵,进行步骤③;所述 基本模块跳转矩阵为一个AT阶全局二维矩阵J,其描述了基本模块&,^之间的跳转关系
J": V/,_/e
,如果6,可以跳转到^,那么々=1,否则J「0;
③ 顺次执行各个基本模块的跳转状态检测流程,执行跳转检验矩阵;所述跳转检验矩阵为一个用于检测程序最近一次跳转是否有效的iV阶局部二维矩阵C ,矩阵中元素为"l"的位置 表示最近发生的模块跳转行为;对于单线程处理器软件程序,同时只能存在一次模块跳转, 因此C中有且只有一个元素为1;如果C的元素为全O,或者包含多个l,则表示最近一次跳 转为非法跳转;
通过统计跳转检验矩阵中元素"l"的数量是否为1,如果为1则上次跳转正常,进行步 骤③,否则上次跳转异常,进行步骤⑤;
◎结束所有状态,进行程序故障处理。 作为本发明的进一步改进
所述程序跳转错误检测流程为
① 处理器程序运行时,初始化跳转状态矩阵尸=0,以及F。。 =1,进行步骤②;
② 根据程序基本模块之间的跳转关系,构建基本模块跳转矩阵J,进行步骤③;
③ 顺次执行各个基本模块的跳转状态检测流程;
检测判别基本模块跳转状态是否异常,如果出现异常,进行步骤⑤,否则进行步骤③; 结束所有状态,进行程序故障处理。 所述基本模块跳转状态检测流程为
① 计算跳转检验矩阵C:J^F,进行步骤②;
② 统计跳转检验矩阵c中有元素"r的数量c-^"LS"w,进行步骤③;
③ 判别上次跳转是否正常,如果C-i^agl-S"/n",则上次跳转正常,进行步骤 ,否 则,上次跳转异常,返回上次跳转异常到程序跳转错误检测流程;
④ 执行基本模块的功能代码,进行步骤⑤;
◎计算跳转状态矩阵F,如果程序基本模块的跳转方向为6, —~,那么就令F的元素 =1,返回上次跳转正常到程序跳转错误检测流程。 与现有技术相比,本发明的优点就在于.-
1. 本发明基于基本模块跳转矩阵实现了程序执行流程跳转错误的检测方法,尤其是适用 于空间仪器工程等恶劣环境下的程序执行流程跳转错误的检测;本发明首先构建程序的基本 模块跳转矩阵,然后在每个基本模块中计算跳转检验矩阵和跳转状态矩阵,通过统计跳转检 验矩阵中元素"l"的数量是否为1实现对程序执行流程跳转错误的实时检测;
2. 本发明实现原理简单,检测程序植入方便,能够快速在处理器程序中进行检测点部署 和实现;
53. 本发明程序流程跳转错误检测概率高,能够快速检测出由于单粒子翻转等异常所引发 的各种跳转错误;
4. 本发明在处理器程序中植入代码量少,计算占用处理器时间短,合理划分基本模块, 不会影响处理器程序的主要性能指标。
图1是本发明单线程基本模块跳转关系示意图; 图2是本发明单线程基本模块跳转矩阵结构示意图; 图3是本发明程序基本模块跳转错误检测流程示意图; 图4是本发明基本模块跳转状态检测流程示意图。
具体实施例方式
以下将结合具体实施例和说明书附图对本发明做进一步详细说明。 本发明一种用于星载处理器的程序执行流程跳转错误的检测方法,其步骤在于
① 处理器程序运行时,初始化跳转状态矩阵,进行步骤②;
② 根据程序基本模块之间的跳转关系,构造基本模块跳转矩阵,进行步骤③;
③ 顺次执行各个基本模块的跳转状态检测流程,计算跳转检验矩阵;
通过统计跳转检验矩阵中元素'T'的数量是否为1,如果为1则上次跳转正常,进行步 骤③,否则上次跳转异常,进行步骤⑤;
⑤结束所有状态,进行程序故障处理。
程序基本模块(Basic Block)是程序指令顺序执行的一段代码,在基本模块中,如果没 有指令错误,程序地址指针将从模块起始点开始执行,并在模块结束点跳转。各种处理器软 件程序的一个线程可以看作是一组非交的程序基本模块的集合5 ,基本模块之间通过特定的 跳转图,按照地址关系联系在一起-5"6。A,…A,…,VJ
其中,4为处理器软件程序中的第f个基本模块(/e
,如果^可以跳转到^,那么^=1,否则、=0。
跳转检验矩阵是用于检测程序最近一次跳转是否有效的一个W阶局部二维矩阵C,矩阵 中元素为'T,的位置表示最近发生的模块跳转行为。对于单线程处理器软件程序,同时只能存在一次模块跳转,因此,C中有且只有一个元素为1。如果C的元素为全O,或者包含多个l, 则表示最近一次跳转为错误跳转。
跳转状态矩阵是用于标记程序当前跳转状态的一个iV阶全局二维矩阵F ,当基本模块&,
即将跳往基本模块^时,对应^ =1。对于单线程程序,每个时刻只能发生一次跳转,因此F
有且只有一个元素为l,其余为0。
程序跳转错误检测流程是对程序基本模块间跳转错误进行检测的一系列执行过程,对于 单线程处理器软件程序,其具体步骤如下-
① 处理器程序运行时,初始化跳转状态矩阵,=0,以及F。。 =1,进行步骤②;
② 根据程序基本模块之间的跳转关系,构建基本模块跳转矩阵/,进行步骤③;
③ 顺次执行各个基本模块的跳转状态检测流程;
④ 检测判别基本模块跳转状态是否异常,如果出现异常,进行步骤⑤,否则进行步骤(D; 结束所有状态,进行程序故障处理。
基本模块跳转状态检测流程是对基本模块内跳转状态进行检测的一系列执行过程,对于
单线程处理器软件程序,其具体歩骤如下
① 计算跳转检验矩阵。=>/*^,进行步骤②;
② 统计跳转检验矩阵C中有元素"1"的数量C —尸/叫1_5"附,进行步骤③;
③ 判别上次跳转是否正常,如果C —Ftogl — SM/n-l,则上次跳转正常,进行步骤④,否 则,上次跳转异常,返回上次跳转异常到程序跳转错误检测流程;
执行基本模块的功能代码,进行步骤⑤;
⑤ 计算跳转状态矩阵F,如果程序基本模块的跳转方向为6,4^,那么就令F的元素 ^=1,返回上次跳转正常到程序跳转错误检测流程。
对于多进程的处理器程序,5、丄F和C需要增加维数来表示相应的线程,其跳转区间 监测方法的判断原则与单线程程序一样。
在具体实施例中,如图所示,本发明一个具体实施例的基本模块跳转关系,图中基本 模块数量^ = 5,方向箭头表示模块之间的跳转路径,基本模块的集合为B-
5 = {60, W3》4}
基本模块跳转图为
60 4 V 60 4 64 ;
Z), 4 67 ,4 5
762 — Z>2 ,62 — 64 5
63 — 63 ,&3 ~> 64 <=
如图2所示,本发明具体实施例的基本模块跳转矩阵结构是一个7V = 5阶全局二维矩阵J, 矩阵元素J。i二l, J12=l, >/13=1, "/22=1, >/24=1, J33=l, 、4=1,其余元素为0;。
如图3所示,本发明的单线程处理器程序跳转错误检测流程,其具体步骤如下-
① 处理器程序运行时,初始化跳转状态矩阵F-O,以及i^-l,进行步骤②;
② 根据程序基本模块之间的跳转关系,构造基本模块跳转矩阵J,进行步骤③;
③ 顺次执行各个基本模块的跳转状态检测流程;
检测判别基本模块跳转状态是否异常,如果出现异常,进行步骤⑤,否则进行步骤③; ⑤结束所有状态,进行程序故障处理。
如图4所示,本发明的基本模块跳转状态检测流程,其具体步骤如下.-
① 计算跳转检验矩阵C-J^^F,进行步骤②;
② 统计跳转检验矩阵C中有元素"r'的数量C — f7绍L&w,进行步骤③;
③ 判别上次跳转是否正常,如果C —Ftegl—5"附=1,则上次跳转正常,进行步骤④,否 则,上次跳转异常,返回上次跳转异常到程序跳转错误检测流程;
④ 执行基本模块的功能代码,进行步骤⑤;
⑤ 计算跳转状态矩阵F,如果程序基本模块的跳转方向为6,—~,那么就令F的元素
& =1,返回上次跳转正常到程序跳转错误检测流程。
以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡 属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通 技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本 发明的保护范围。
权利要求
1、一种用于星载处理器的程序执行流程跳转错误的检测方法,其特征在于,其步骤为①处理器程序运行时,初始化跳转状态矩阵,进行步骤②;所述跳转状态矩阵为一个用于标记程序当前跳转状态的N阶全局二维矩阵F,当基本模块bi即将跳往基本模块bj时,对应Fij=1;对于单线程程序,每个时刻只能发生一次跳转,因此F有且只有一个元素为1,其余为0;②根据程序基本模块之间的跳转关系,构建基本模块跳转矩阵,进行步骤③;所述基本模块跳转矩阵为一个N阶全局二维矩阵J,其描述了基本模块bi、bj之间的跳转关系Jij<maths id="math0001" num="0001" ><math><![CDATA[ <mrow><mo>∀</mo><mi>i</mi><mo>,</mo><mi>j</mi><mo>∈</mo><mo>[</mo><mn>0</mn><mo>,</mo><mi>N</mi><mo>-</mo><mn>1</mn><mo>]</mo> </mrow>]]></math> id="icf0001" file="A2009100434240002C1.tif" wi="26" he="5" top= "89" left = "29" img-content="drawing" img-format="tif" orientation="portrait" inline="yes"/></maths>,如果bi可以跳转到bj,那么Jij=1,否则Jij=0;③顺次执行各个基本模块的跳转状态检测流程,执行跳转检验矩阵;所述跳转检验矩阵为一个用于检测程序最近一次跳转是否有效的N阶局部二维矩阵C,矩阵中元素为“1”的位置表示最近发生的模块跳转行为;对于单线程处理器软件程序,同时只能存在一次模块跳转,因此C中有且只有一个元素为1;如果C的元素为全0,或者包含多个1,则表示最近一次跳转为非法跳转;④通过统计跳转检验矩阵中元素“1”的数量是否为1,如果为1则上次跳转正常,进行步骤③,否则上次跳转异常,进行步骤⑤;⑤结束所有状态,进行程序故障处理。
2、 根据权利要求1所述的用于星载处理器的程序执行流程跳转错误的检测方法,其特征 在于,所述程序跳转错误检测流程为① 处理器程序运行时,初始化跳转状态矩阵F-O,以及F。。 =1,进行步骤②;② 根据程序基本模块之间的跳转关系,构建基本模块跳转矩阵J,进行步骤③;③ 顺次执行各个基本模块的跳转状态检测流程; 检测判别基本模块跳转状态是否异常,如果出现异常,进行步骤⑤,否则进行步骤③; ⑤结束所有状态,进行程序故障处理。
3、 根据权利要求1或2所述的用于星载处理器的程序执行流程跳转错误的检测方法,其 特征在于,所述基本模块跳转状态检测流程为① 计算跳转检验矩阵C-J4F,进行步骤②;② 统计跳转检验矩阵C中有元素'T'的数量C一i^flg1—S"m,进行步骤③;③ 判别上次跳转是否正常,如果C—F&gl—SMm=l,则上次跳转正常,进行步骤 ,否 则,上次跳转异常,返回上次跳转异常到程序跳转错误检测流程;④执行基本模块的功能代码,进行步骤⑤; 计算跳转状态矩阵F,如果程序基本模块的跳转方向为6, —~,那么就令F的元素 =1,返回上次跳转正常到程序跳转错误检测流程。
全文摘要
本发明公开了一种用于星载处理器的程序执行流程跳转错误的检测方法,其步骤为①处理器程序运行时,初始化跳转状态矩阵,进行步骤②;②根据程序基本模块之间的跳转关系,构建基本模块跳转矩阵,进行步骤③;③顺次执行各个基本模块的跳转状态检测流程,执行跳转检验矩阵;④通过统计跳转检验矩阵中元素“1”的数量是否为1,如果为1则上次跳转正常,进行步骤③,否则上次跳转异常,进行步骤⑤;⑤结束所有状态,进行程序故障处理。本发明是一种原理简单、操作方便、可靠性好的用于星载处理器的程序执行流程跳转错误的检测方法。
文档编号G06F11/36GK101551775SQ20091004342
公开日2009年10月7日 申请日期2009年5月15日 优先权日2009年5月15日
发明者周永彬, 张传胜, 明德祥, 俊 杨, 杨建伟, 王跃科, 胡助理, 邢克飞, 钟小鹏, 陈建云 申请人:中国人民解放军国防科学技术大学