用于星载处理器的程序执行流程跳转错误检测方法转让专利

申请号 : CN200910043424.5

文献号 : CN101551775B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 张传胜杨建伟王跃科邢克飞杨俊周永彬陈建云明德祥钟小鹏胡助理

申请人 : 中国人民解放军国防科学技术大学

摘要 :

本发明公开了一种用于星载处理器的程序执行流程跳转错误的检测方法,其步骤为:①处理器程序运行时,初始化跳转状态矩阵,进行步骤②;②根据程序基本模块之间的跳转关系,构建基本模块跳转矩阵,进行步骤③;③顺次执行各个基本模块的跳转状态检测流程,执行跳转检验矩阵;④通过统计跳转检验矩阵中元素“1”的数量是否为1,如果为1则上次跳转正常,进行步骤③,否则上次跳转异常,进行步骤⑤;⑤结束所有状态,进行程序故障处理。本发明是一种原理简单、操作方便、可靠性好的用于星载处理器的程序执行流程跳转错误的检测方法。

权利要求 :

1.一种用于星载处理器的程序执行流程跳转错误的检测方法,其特征在于,其步骤为:

1.1处理器程序运行时,初始化跳转状态矩阵,进行步骤1.2;所述跳转状态矩阵为一个用于标记程序当前跳转状态的N阶全局二维矩阵F,当基本模块bi即将跳往基本模块bj时,对应Fij=1;对于单线程程序,每个时刻只能发生一次跳转,因此F有且只有一个元素为1,其余为0;

1.2根据程序基本模块之间的跳转关系,构建基本模块跳转矩阵,进行步骤1.3;所述基本模块跳转矩阵为一个N阶全局二维矩阵J,其描述了基本模块bi、bj之间的跳转关系Jij:如果bi可以跳转到bj,那么Jij=1,否则Jij=0;

1.3顺次执行各个基本模块的跳转状态检测流程,执行跳转检验矩阵;所述跳转检验矩阵为一个用于检测程序最近一次跳转是否有效的N阶局部二维矩阵C,矩阵中元素为“1”的位置表示最近发生的模块跳转行为;对于单线程处理器软件程序,同时只能存在一次模块跳转,因此C中有且只有一个元素为1;如果C的元素为全0,或者包含多个1,则表示最近一次跳转为非法跳转;

1.4通过统计跳转检验矩阵中元素“1”的数量是否为1,如果为1则上次跳转正常,进行步骤1.3,否则上次跳转异常,进行步骤1.5;

1.5结束所有状态,进行程序故障处理。

2.根据权利要求1所述的用于星载处理器的程序执行流程跳转错误的检测方法,其特征在于,对程序跳转错误检测的具体流程为:

2.1处理器程序运行时,初始化跳转状态矩阵F=0,以及F00=1,进行步骤2.2;

2.2根据程序基本模块之间的跳转关系,构建基本模块跳转矩阵J,进行步骤2.3;

2.3顺次执行各个基本模块的跳转状态检测流程;

2.4检测判别基本模块跳转状态是否异常,如果出现异常,进行步骤2.5,否则进行步骤2.3;

2.5结束所有状态,进行程序故障处理。

3.根据权利要求1或2所述的用于星载处理器的程序执行流程跳转错误的检测方法,其特征在于,所述基本模块的跳转状态检测流程为:

3.1计算跳转检验矩阵C=J*F,进行步骤3.2;

3.2统计跳转检验矩阵C中有元素“1”的数量C_Flag1_Sum,进行步骤3.3;

3.3判别上次跳转是否正常,如果C_Flag1_Sum=1,则上次跳转正常,进行步骤3.4,否则,上次跳转异常,返回上次跳转异常到程序跳转错误检测流程;

3.4执行基本模块的功能代码,进行步骤3.5;

3.5计算跳转状态矩阵F,如果程序基本模块的跳转方向为bi→bj,那么就令F的元素Fij=1,返回上次跳转正常到程序跳转错误检测流程。

说明书 :

技术领域

本发明主要涉及到空间仪器工程领域,特指一种用于星载处理器的程序执行流程跳转错误检测方法。

背景技术

处理器的程序存储区、关键变量、功能型模块的故障,将影响程序的执行流程,造成程序指针的“跑飞”、模块执行时间的大幅变化等时序型错误。
特别是在空间仪器工程应用中,随着超大规模集成电路(VLSI,Very Large Scale Integratedcircuits)的发展和应用,数字信号处理器(DSP,Digital Signal Processor)依靠其强大的信号处理能力和优越的接口性能逐渐成为星载高速信号处理平台的重要组成部分,开始在航天工程中得到应用。然而,VLSI工作频率越来越高,工作电压越来越低,这使星载DSP等处理器对单粒子效应表现出了更强的敏感性,容易出现单粒子翻转等故障,从而容易造成处理器程序的执行流程发生异常造成程序“跑死”、“跑飞”等问题。尤其是对于工业级和军品级的DSP等器件,由于大量采用片上SRAM(Static Random Access Memory),受空间高能粒子影响发生单粒子效应的概率大大提高,严重影响器件的正常工作,这限制了此类器件在空间仪器工程中的应用。

发明内容

本发明要解决的技术问题就在于:针对现有技术存在的技术问题,本发明提供一种原理简单、操作方便、可靠性好的用于星载处理器的程序执行流程跳转错误的检测方法。
为解决上述技术问题,本发明采用以下技术方案。
一种用于星载处理器的程序执行流程跳转错误的检测方法,其特征在于步骤为:
1.1处理器程序运行时,初始化跳转状态矩阵,进行步骤1.2;所述跳转状态矩阵为一个用于标记程序当前跳转状态的N阶全局二维矩阵F,当基本模块bi即将跳往基本模块bj时,对应Fij=1;对于单线程程序,每个时刻只能发生一次跳转,因此F有且只有一个元素为1,其余为0;
1.2根据程序基本模块之间的跳转关系,构建基本模块跳转矩阵,进行步骤1.3;所述基本模块跳转矩阵为一个N阶全局二维矩阵J,其描述了基本模块bi,bj之间的跳转关系Jij:如果bi可以跳转到bj,那么Jij=1,否则Jij=0;
1.3顺次执行各个基本模块的跳转状态检测流程,执行跳转检验矩阵;所述跳转检验矩阵为一个用于检测程序最近一次跳转是否有效的N阶局部二维矩阵C,矩阵中元素为“1”的位置表示最近发生的模块跳转行为;对于单线程处理器软件程序,同时只能存在一次模块跳转,因此C中有且只有一个元素为1;如果C的元素为全0,或者包含多个1,则表示最近一次跳转为非法跳转;
1.4通过统计跳转检验矩阵中元素“1”的数量是否为1,如果为1则上次跳转正常,进行步骤1.3,否则上次跳转异常,进行步骤1.5;
1.5结束所有状态,进行程序故障处理。
作为本发明的进一步改进:
对程序跳转错误检测的具体流程为:
2.1处理器程序运行时,初始化跳转状态矩阵F=0,以及F00=1,进行步骤2.2;
2.2根据程序基本模块之间的跳转关系,构建基本模块跳转矩阵J,进行步骤2.3;
2.3顺次执行各个基本模块的跳转状态检测流程;
2.4检测判别基本模块跳转状态是否异常,如果出现异常,进行步骤2.5,否则进行步骤2.3;
2.5结束所有状态,进行程序故障处理。
所述基本模块的跳转状态检测流程为:
3.1计算跳转检验矩阵C=J*F,进行步骤3.2;
3.2统计跳转检验矩阵C中有元素“1”的数量C_Flag1_Sum,进行步骤3.3;
3.3判别上次跳转是否正常,如果C_Flag1_Sum=1,则上次跳转正常,进行步骤3.4,否则,上次跳转异常,返回上次跳转异常到程序跳转错误检测流程;
3.4执行基本模块的功能代码,进行步骤3.5;
3.5计算跳转状态矩阵F,如果程序基本模块的跳转方向为bi→bj,那么就令F的元素Fij=1,返回上次跳转正常到程序跳转错误检测流程。
与现有技术相比,本发明的优点就在于:
1.本发明基于基本模块跳转矩阵实现了程序执行流程跳转错误的检测方法,尤其是适用于空间仪器工程等恶劣环境下的程序执行流程跳转错误的检测;本发明首先构建程序的基本模块跳转矩阵,然后在每个基本模块中计算跳转检验矩阵和跳转状态矩阵,通过统计跳转检验矩阵中元素“1”的数量是否为1实现对程序执行流程跳转错误的实时检测;
2.本发明实现原理简单,检测程序植入方便,能够快速在处理器程序中进行检测点部署和实现;
3.本发明程序流程跳转错误检测概率高,能够快速检测出由于单粒子翻转等异常所引发的各种跳转错误;
4.本发明在处理器程序中植入代码量少,计算占用处理器时间短,合理划分基本模块,不会影响处理器程序的主要性能指标。

附图说明

图1是本发明单线程基本模块跳转关系示意图;
图2是本发明单线程基本模块跳转矩阵结构示意图;
图3是本发明程序基本模块跳转错误检测流程示意图;
图4是本发明基本模块跳转状态检测流程示意图。

具体实施方式

以下将结合具体实施例和说明书附图对本发明做进一步详细说明。
本发明一种用于星载处理器的程序执行流程跳转错误的检测方法,其步骤在于:
1.1处理器程序运行时,初始化跳转状态矩阵,进行步骤1.2;
1.2根据程序基本模块之间的跳转关系,构造基本模块跳转矩阵,进行步骤1.3;
1.3顺次执行各个基本模块的跳转状态检测流程,计算跳转检验矩阵;
1.4通过统计跳转检验矩阵中元素“1”的数量是否为1,如果为1则上次跳转正常,进行步骤1.3,否则上次跳转异常,进行步骤1.5;
1.5结束所有状态,进行程序故障处理。
程序基本模块(Basic Block)是程序指令顺序执行的一段代码,在基本模块中,如果没有指令错误,程序地址指针将从模块起始点开始执行,并在模块结束点跳转。各种处理器软件程序的一个线程可以看作是一组非交的程序基本模块的集合B,基本模块之间通过特定的跳转图,按照地址关系联系在一起:
B={b0,b1,…,bi,…,bN-1}
其中,bi为处理器软件程序中的第i个基本模块(i∈[0,N-1]),N为基本模块的数量。
基本模块跳转矩阵是与基本模块跳转图对应的一个N阶全局二维矩阵J,描述了基本模块bi、bj之间的跳转关系Jij:
如果bi可以跳转到bj,那么Jij=1,否则Jij=0。
跳转检验矩阵是用于检测程序最近一次跳转是否有效的一个N阶局部二维矩阵C,矩阵中元素为“1”的位置表示最近发生的模块跳转行为。对于单线程处理器软件程序,同时只能存在一次模块跳转,因此,C中有且只有一个元素为1。如果C的元素为全0,或者包含多个1,则表示最近一次跳转为错误跳转。
跳转状态矩阵是用于标记程序当前跳转状态的一个N阶全局二维矩阵F,当基本模块bi即将跳往基本模块bj时,对应Fij=1。对于单线程程序,每个时刻只能发生一次跳转,因此F有且只有一个元素为1,其余为0。
程序跳转错误检测流程是对程序基本模块间跳转错误进行检测的一系列执行过程,对于单线程处理器软件程序,其具体步骤如下:
2.1处理器程序运行时,初始化跳转状态矩阵F=0,以及F00=1,进行步骤2.2;
2.2根据程序基本模块之间的跳转关系,构建基本模块跳转矩阵J,进行步骤2.3;
2.3顺次执行各个基本模块的跳转状态检测流程;
2.4检测判别基本模块跳转状态是否异常,如果出现异常,进行步骤2.5,否则进行步骤2.3;
2.5结束所有状态,进行程序故障处理。
基本模块跳转状态检测流程是对基本模块内跳转状态进行检测的一系列执行过程,对于单线程处理器软件程序,其具体步骤如下:
3.1计算跳转检验矩阵C=J*F,进行步骤3.2;
3.2统计跳转检验矩阵C中有元素“1”的数量C_Flag1_Sum,进行步骤3.3;
3.3判别上次跳转是否正常,如果C_Flag1_Sum=1,则上次跳转正常,进行步骤3.4,否则,上次跳转异常,返回上次跳转异常到程序跳转错误检测流程;
3.4执行基本模块的功能代码,进行步骤3.5;
3.5计算跳转状态矩阵F,如果程序基本模块的跳转方向为bi→bj,那么就令F的元素Fij=1,返回上次跳转正常到程序跳转错误检测流程。
对于多进程的处理器程序,B、J、F和C需要增加维数来表示相应的线程,其跳转区间监测方法的判断原则与单线程程序一样。
在具体实施例中,如图1所示,本发明一个具体实施例的基本模块跳转关系,图中基本模块数量N=5,方向箭头表示模块之间的跳转路径,基本模块的集合为B:
B={b0,b1,b2,b3,b4}
基本模块跳转图为:
b0→b1,b0→b4;
b1→b2,b1→b3;
b2→b2,b2→b4;
b3→b3,b3→b4。
如图2所示,本发明具体实施例的基本模块跳转矩阵结构是一个N=5阶全局二维矩阵J,矩阵元素J01=1,J12=1,J13=1,J22=1,J24=1,J33=1,J34=1,其余元素为0;。
如图3所示,本发明的单线程处理器程序跳转错误检测流程,其具体步骤如下:
2.1处理器程序运行时,初始化跳转状态矩阵F=0,以及F00=1,进行步骤2.2;
2.2根据程序基本模块之间的跳转关系,构造基本模块跳转矩阵J,进行步骤2.3;
2.3顺次执行各个基本模块的跳转状态检测流程;
2.4检测判别基本模块跳转状态是否异常,如果出现异常,进行步骤2.5,否则进行步骤2.3;
2.5结束所有状态,进行程序故障处理。
如图4所示,本发明的基本模块跳转状态检测流程,其具体步骤如下:
3.1计算跳转检验矩阵C=J*F,进行步骤3.2;
3.2统计跳转检验矩阵C中有元素“1”的数量C_Flag1_Sum,进行步骤3.3;
3.3判别上次跳转是否正常,如果C_Flag1_Sum=1,则上次跳转正常,进行步骤3.4,否则,上次跳转异常,返回上次跳转异常到程序跳转错误检测流程;
3.4执行基本模块的功能代码,进行步骤3.5;
3.5计算跳转状态矩阵F,如果程序基本模块的跳转方向为bi→bj,那么就令F的元素Fij=1,返回上次跳转正常到程序跳转错误检测流程。
以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。