一种基于单类支持向量机的多位SDC脆弱指令识别方法技术

技术编号:28374587 阅读:15 留言:0更新日期:2021-05-08 00:01
本发明专利技术公开了一种基于单类支持向量机的多位SDC脆弱指令识别方法,包括:构建多位SDC脆弱指令识别模型训练样本数据集;构建表征数据在程序中传播的指令数据传播特征;计算目标指令的多位屏蔽概率;生成基于数据变量的与程序数据流相关的指令集合,并构建指令的屏蔽特征;构建传播性特征向量;构建固有性特征向量;基于单类支持向量机训练多位SDC脆弱指令识别模型;提取目标程序的指令特征,利用多位SDC脆弱指令识别模型对目标程序多位SDC脆弱指令进行识别。本发明专利技术方法分类准确率高,召回率高,f‑score也较高,可以有效应用于单粒子效应造成的嵌入式系统中数据单位或多位翻转后导致的程序中多位SDC脆弱指令的识别。

【技术实现步骤摘要】
一种基于单类支持向量机的多位SDC脆弱指令识别方法
本专利技术属于软加固和可信软件领域,特别是一种基于单类支持向量机的多位SDC脆弱指令识别方法。
技术介绍
随着半导体制造技术的不断发展,处理器不断缩减集成电路的尺寸、降低工作的电压。然而,由于器件敏感度的提高,在计算机性能大幅度提升的同时使得芯片更容易受到空间辐射的影响。在恶劣辐射环境中,由高能粒子辐照或电磁干扰等造成的单粒子效应是计算机系统失效的主要原因之一。单粒子翻转(SingleEventUpset,SEU)是单粒子效应最主要的表现形式。SEU是指高能粒子轰击器件使其逻辑状态发生翻转,使得存储值的某一位由1变为0或由0变为1,可以通过重新写入逻辑值恢复其状态。这种由单粒子翻转造成的系统硬件故障是一种软错误。在计算机运行过程中,因为信号或者数据不正确造成的故障被称为软错误。导致软错误的原因有多种,从电路设计出现问题到元器件之间相互干扰均有可能发生软错误。但相比单粒子翻转所引起的软错误造成的事故,在航天等领域其他原因造成事故的占比要小很多。软错误会改变寄存器或存储器中的数值,从而导致处理器将程序带入错误循环或者直接进入死循环无法跳出。软错误还可以修改某些计算数值,造成数据结果的错误。由于软错误发生时缺乏足够“明显”的信息,因此使用者往往在错误发生了很久之后才能察觉,甚至始终没有意识到发生过软错误。尤其是静默数据损坏(SilentDataCorruption,SDC)这类错误难以检测,具体表现为程序似乎正常执行,但是最终数据结果或者中间过程的数据出现了错误。针对瞬时故障导致的程序SDC错误,传统的冗余检测与加固技术存在着高成本问题。但由于该类方法实施简单,运行稳定,且具有较高的检测率,因此有不少改进的研究工作。如美国普林斯顿大学的Reis提出了一种可以检测软错误的SWIFT(SoftwareImplementedFaultTolerance)技术。SWIFT首先通过回收程序在执行期间未使用的指令级资源来对程序进行冗余,在程序运行的同时执行冗余计算副本,然后通过检查点比较原始程序的运算结果和冗余副本的计算结果来检测SDC错误。但是,这种方法设置的冗余副本需要复制大量的指令,在程序执行时也需要额外执行副本,产生了巨大的性能开销。断言检测技术则是通过在程序中插入断言来检测数据流错误。断言的内容是在正常情况下程序运行时的数值特征,如数值区间、数值间的关系等。Hari等人针对SDC错误提出了一种程序级的SDC检测器,这种检测器就是通过在程序中植入断言的方法来检测数据流错误,有效降低了空间成本和性能开销。但是由于程序断言的提取主要靠人工分析,存在较大的随机性,所以这种方法灵活性和普适性较差。而且如果断言设置的不好,检测率就会下降。为了规避传统的断言检测技术与冗余检测技术的缺点,学界提出了一种将二者混合的冗余断言检测技术。这类技术仅对程序中对SDC较为敏感的部分进行冗余处理,再通过插桩断言来对错误进行检测。如Hari等人就提出了Relyzer方法以检测SDC错误,将程序对SDC错误的敏感程度称为SDC脆弱性。该方法通过故障注入寻找程序中SDC脆弱性高的位置,并针对这些位置进行冗余处理。既节省了一部分成本,又提高了方法的灵活性与普适性。因此,冗余断言检测技术已成为SDC错误检测的研究热点。但目前主流的冗余断言检测技术大多考虑的是单粒子单位翻转,未考虑到多位翻转问题。如Liu等人于2019年提出的SDCPredictor方法和wang等人提出的PVInsiden方法等都是只考虑单粒子单位翻转的方法。无论在理论还是实现技术层面,研究单粒子多位翻转问题要比只考虑单粒子单位翻转问题更具有挑战性。首先单粒子多位翻转现象比单粒子单位翻转现象更为随机,其发生形式相比单位翻转更加多样化。其次,对于多位翻转造成的软错误在程序中传播的研究也更具难度。
技术实现思路
本专利技术的目的在于提供一种基于单类支持向量机的多位SDC脆弱指令识别方法,能有效地对辐射环境下受到单粒子翻转影响的程序进行多位SDC脆弱指令识别。实现本专利技术目的的技术解决方案为:一种基于单类支持向量机的多位SDC脆弱指令识别方法,所述方法包括以下步骤:步骤1,对程序集进行故障注入实验,分析得到指令的多位SDC脆弱性值PecSDC,根据脆弱性值对指令进行分类,构建多位SDC脆弱指令识别模型训练样本数据集;步骤2,根据步骤1得到的程序指令样本,遍历样本数据集构建表征数据在程序中传播的指令数据传播特征Fdata,FOP,FCMP;步骤3,遍历样本数据集,计算目标指令的多位屏蔽概率Pmask;步骤4,遍历样本数据集,生成基于数据变量的与程序数据流相关的指令集合Sdf,结合步骤3中的多位屏蔽概率计算屏蔽概率特征fm,并构建指令的屏蔽特征Fmask;步骤5,根据步骤1、步骤2、步骤4得到的程序指令样本的多位SDC脆弱性值、数据传播特征和屏蔽特征,遍历样本数据集构建与错误传播相关的指令的传播性特征向量Fspread;步骤6,遍历样本数据集,构建与指令本身性质相关的指令的固有性特征向量Finherence;步骤7,根据步骤1得到的指令多位SDC脆弱性值和步骤5以及步骤6得到的指令特征向量,基于单类支持向量机训练多位SDC脆弱指令识别模型;步骤8,使用步骤5和步骤6的方法提取目标程序的指令特征,根据步骤7中训练得到的多位SDC脆弱指令识别模型对目标程序多位SDC脆弱指令进行识别。本专利技术与现有技术相比,其显著优点为:1)使用程序分析的方法分析目标程序,从指令传播性特征和指令固有性特征两方面更全面的获得影响指令多位SDC脆弱性的特征,从而提高识别多位SDC脆弱指令SDC脆弱性预测的准确性;2)使用单类支持向量机模型训练多位SDC脆弱指令识别模型,使得模型具有较好的泛化能力。下面结合附图对本专利技术作进一步详细描述。附图说明图1为本专利技术的一种基于单类支持向量机的多位SDC脆弱指令识别方法的流程图。图2为多位SDC脆弱指令识别准确率比较图。图3为多位SDC脆弱指令识别召回率比较图。图4为多位SDC脆弱指令识别f-score比较图。具体实施方式为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。在一个实施例中,结合图1,提供了一种基于单类支持向量机的多位SDC脆弱指令识别方法,该方法包括以下步骤:步骤1、对程序集进行故障注入实验,析得到指令的多位SDC脆弱性值PecSDC,根据脆弱性值对指令进行分类,构建多位SDC脆弱指令识别模型训练样本数据集。所述的指令的多位SDC脆弱性值采用如下公式:式中,集合Isset是程序的静态指令集合,Ii表示程序中的第i条静态指令,size()表示括号内集合的元素个数,size(Isset)表示程序内静态指令数目;集合Idse本文档来自技高网
...

【技术保护点】
1.一种基于单类支持向量机的多位SDC脆弱指令识别方法,其特征在于,所述方法包括以下步骤:/n步骤1,对程序集进行故障注入实验,分析得到指令的多位SDC脆弱性值P

【技术特征摘要】
1.一种基于单类支持向量机的多位SDC脆弱指令识别方法,其特征在于,所述方法包括以下步骤:
步骤1,对程序集进行故障注入实验,分析得到指令的多位SDC脆弱性值PecSDC,根据脆弱性值对指令进行分类,构建多位SDC脆弱指令识别模型训练样本数据集;
步骤2,根据步骤1得到的程序指令样本,遍历样本数据集构建表征数据在程序中传播的指令数据传播特征Fdata,FOP,FCMP;
步骤3,遍历样本数据集,计算目标指令的多位屏蔽概率Pmask;
步骤4,遍历样本数据集,生成基于数据变量的与程序数据流相关的指令集合Sdf,结合步骤3中的多位屏蔽概率计算屏蔽概率特征fm,并构建指令的屏蔽特征Fmask;
步骤5,根据步骤1、步骤2、步骤4得到的程序指令样本的多位SDC脆弱性值、数据传播特征和屏蔽特征,遍历样本数据集构建与错误传播相关的指令的传播性特征向量Fspread;
步骤6,遍历样本数据集,构建与指令本身性质相关的指令的固有性特征向量Finherence;
步骤7,根据步骤1得到的指令多位SDC脆弱性值和步骤5以及步骤6得到的指令特征向量,基于单类支持向量机训练多位SDC脆弱指令识别模型;
步骤8,使用步骤5和步骤6的方法提取目标程序的指令特征,根据步骤7中训练得到的多位SDC脆弱指令识别模型对目标程序多位SDC脆弱指令进行识别。


2.根据权利要求1所述的基于单类支持向量机的多位SDC脆弱指令识别方法,其特征在于,步骤1中所述指令的多位SDC脆弱性值采用下式计算:



式中,集合Isset是程序的静态指令集合,Ii表示程序中的第i条静态指令,size()表示括号内集合的元素个数,size(Isset)表示程序内静态指令数目;集合Idset是程序运行时的动态指令集合,ni为指令Ii的总动态执行次数;是指令Ii的第k条动态执行指令;PecSDC(Ii)为指令Ii的多位SDC脆弱性值;单粒子翻转现象引起单位数据流错误翻转的概率,记为PSBU;单粒子翻转现象引起横向二位数据流错误翻转的概率,记为PH2BU;单粒子翻转现象引起竖向二位数据流错误翻转的概率,记为PV2BU;单粒子翻转现象引起交叉二位数据流错误翻转的概率,记为PC2BU;单粒子翻转现象引起横向三位数据流错误翻转的概率,记为PH3BU;单粒子翻转现象引起竖向三位数据流错误翻转的概率,记为PV3BU;单粒子翻转现象引起L型三位数据流错误翻转的概率,记为PL3BU;设R代表向指令中注入故障的总次数,则代表向动态指令注入单粒子单位翻转故障的总次数,依此类推,分别代表向动态指令注入横向二位翻转故障、竖向二位翻转故障、交叉二位翻转故障、横向三位翻转故障、竖向三位翻转故障、L型三位翻转故障的总次数;T代表向指令中注入故障后造成SDC错误的次数,同理,分别代表对应类型的故障注入后造成SDC错误的次数。


3.根据权利要求2所述的基于单类支持向量机的多位SDC脆弱指令识别方法,其特征在于,步骤2中所构建的数据在程序中传播的指令数据传播特征Fdata,FOP,FCMP分别为下列向量:
(1)Fdata为数据变量中和SDC错误传播有关的特征,表示为四元组:
Fdata=<life(num),width(num),is_int,is_float>
式中,life(num)为数据变量num的生命周期,width(num)为数据变量的二进制位数,is_int表示判断当前数据变量类型是否为整型,is_float表示判断数据变量是否为浮点类型;
(2)FOP为与指令运算操作相关的特征,表示为二元组:
FOP=<is_and_op,is_or_op>
式中,is_and_op表示对运算类型的判断,判断其是否为与运算,is_or_op表示判断运算指令是否为或运算;
(3)FCMP为与指令比较运算相关的特征,表示为三元组:
FCMP=<is_cmp,is_icmp,is_fcmp>
式中,is_cmp表示对指令类型的判断,确认其是否为比较指令;is_icmp表示判断比较指令中的两个操作数是否均为整型,is_fcmp表示判断比较指令中的操作数是否含有浮点型。


4.根据权利要求3所述的基于单类支持向量机的多位SDC脆弱指令识别方法,其特征在于,步骤3中所述目标指令的多位屏蔽概率Pmask采用下式计算:



式中,分别代表指令的1位屏蔽概率、2位屏蔽概率和3位屏蔽概率;PSBU为单粒子翻转现象引起单位数据流错误翻转的概率,PH2BU为横向二位数据流错误翻转的概率,PV2BU为竖向二位数据流错误翻转的概率,PC2BU为交叉二位数据流错误翻转的概率,PH3BU为横向三位数据流错误翻转的概...

【专利技术属性】
技术研发人员:庄毅郑伟宁晏祖佳顾晶晶
申请(专利权)人:南京航空航天大学
类型:发明
国别省市:江苏;32

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1