首页> 中国专利> 一种故障注入规则延迟加载的方法

一种故障注入规则延迟加载的方法

摘要

本发明公开了一种故障注入规则延迟加载的方法。以约定的通信协议和故障规则描述方式,由测试平台向指令集模拟器发送故障注入命令;指令集模拟器解析故障注入规则,模拟寄存器、内存和外设,加载目标程序;遇到读指令时,若操作地址有对应的故障注入规则且该规则当前有效,计算该条规则上一次作用时刻与当前时刻的间隔,再结合故障规则的特性和写指令元操作列表,通过计算确定规则发生情况,实现规则的一次性模拟;把一次性模拟的故障作用于目标位置,并把作用值作为读指令访问结果返回。本发明解决了传统模拟器的故障注入实现性能开销过大、实现复杂的问题,极大地提升了模拟器故障注入实现的性能。本发明适用于任何模拟器的故障注入实现。

著录项

  • 公开/公告号CN106897214A

    专利类型发明专利

  • 公开/公告日2017-06-27

    原文格式PDF

  • 申请/专利权人 浙江大学;

    申请/专利号CN201710005049.X

  • 发明设计人 张志豪;蔡铭;

    申请日2017-01-04

  • 分类号G06F11/36;

  • 代理机构杭州求是专利事务所有限公司;

  • 代理人刘静

  • 地址 310058 浙江省杭州市西湖区余杭塘路866号

  • 入库时间 2023-06-19 02:40:00

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2019-10-15

    授权

    授权

  • 2017-07-21

    实质审查的生效 IPC(主分类):G06F11/36 申请日:20170104

    实质审查的生效

  • 2017-06-27

    公开

    公开

说明书

技术领域

本发明应用于带故障注入功能的指令集模拟器实现,是一种故障注入规则延迟加载的方法。

背景技术

如今,仿真技术和虚拟技术被广泛应用各个领域,特别在嵌入式系统的开发过程中,由于在不同应用领域中,嵌入式开发要求的硬件体系差别很大,用软件进行系统仿真或虚拟硬件非常必要。

指令集模拟器是在本地计算机环境下模拟其它处理器上程序运行过程的工具。它通过模拟每条指令在目标处理器上的执行效果来模拟目标机程序,是目标处理器的软件模拟。

随着软件测试需求的不断提出,用户希望通过受控实验向系统中刻意引入故障,观察系统中存在故障时的行为,来确保程序运行的抗干扰和容错能力。

而基于模拟的故障注入技术,是使用在模拟测试的计算机原型上,通过在模拟过程中,改变逻辑值来达到故障注入的效果。基于模拟的故障注入不存在物理故障注入对目标系统可访问的限制,可使注入试验在模拟范围内的任何细节之处进行,并且具备成本低、快速部署、所注入的故障可精确监控等优点。

在指令集模拟器的故障注入设计中,常见的故障注入规则有翻转、保持、观察等,可以在指定的时钟周期内,有规律地对目标寄存器或内存进行逻辑值改写或保持等,来对程序运行进行灵活地故障注入控制。

故障注入系统的设计涉及到命令协议、规则实际、规则管理与加载作用等诸多问题,实现复杂度高。

此外,传统的指令集模拟器故障注入实现会在每次规则生效时,根据故障规则的内容对目标内存或寄存器进行写操作,会造成极大的内存或寄存器访问性能消耗。

基于上述技术背景,本发明创新地提出了一种故障注入规则延迟加载的方法,使得故障注入系统的设计更为简单灵活,性能得到极大的提高。

发明内容

本发明的目的在于针对现有技术的不足,提供一种故障注入规则延迟加载的方法。

如图1所示,传统的指令集模拟和故障注入规则加载步骤如下:

(1)外部故障规则通过协定通信协议向模拟器注入;

(2)解析故障注入规则;

(3)加载目标程序,对寄存器、内存、外设进行模拟;

(4)基于(3)模拟的寄存器、内存和外设,模拟每条指令在目标处理器上的执行效果;

(5)基于(4),在每条指令的模拟执行过程中,遍历故障规则,判断是否有生效的故障注入规则,如果有,则根据故障注入规则的有效性和内容,通过改写逻辑值的方式来进行故障注入;

(6)回到(4)继续模拟下一条指令,直至程序结束。

传统指令集模拟器的故障注入实现中,在每个时钟周期都会遍历所有的故障注入规则,而这些故障注入规则所操作的地址内容往往不会立刻被读到,而在这些操作地址被故障注入改写逻辑值到被读取的过程中,会被频繁地计算新的改写值并改写到操作地址。

本发明提供的一种故障注入规则延迟加载的方法,包括如下步骤:

(1)以约定的通信协议RSP(Remote Serial Protocol)和故障规则描述方式,由测试平台向指令集模拟器发送故障注入命令;

(2)由指令集模拟器的调试桩对通信内容进行响应,并解析故障注入规则;

(3)指令集模拟器模拟寄存器、内存和外设,并加载目标程序对程序的每条指令进行模拟;

(4)在模拟过程中,遇到写指令时,把写指令记录保存到注入点的写指令元操作列表中,遇到读指令时,若该读指令的操作地址有对应的故障注入规则,并且该规则当前有效,那么计算该条规则上一次作用时刻与当前时刻的间隔,再结合故障规则的特性和写指令元操作列表,通过计算确定规则发生情况,实现规则的一次性模拟;

(5)把一次性模拟的故障作用于目标位置,并把作用值作为读指令访问结果返回,指令集模拟器回到步骤(4)继续模拟下一条指令,直至程序结束。

进一步地,所述步骤1的故障规则格式具体为:

<故障类型><注入点类型>:<注入点地址><注入控制标志><注入参数><作用次数><起始作用时间><结束作用时间>

其中故障类型包括翻转、保持、改写、观察四种,注入点类型包括寄存器和内存地址两种,注入点地址按注入点类型为寄存器编号或内存地址,注入控制标志用于控制注入方式和规律(默认不设置),注入参数根据故障类型不同为翻转掩码、保持值、改写值和0,作用次数为规则下故障注入操作的有效操作次数,起始作用时间和结束作用时间描述了故障规则的有效期。

进一步地,所述的一次性模拟算法为:

(1)找到在读操作之前生效的故障规则的集合,根据故障类型分别为cHold、cChange、cReverse;

(2)将4字节大小的故障注入点拆分为4个子作用块,并把规则拆分为在这4个子作用块上的子规则,并按(3)-(5)分别保存为规则集合collectB1,collectB2,collectB3和collectB4;

(3)将cHold拆分为4个子作用块上的子规则并分别保存到collectBi(i为1~4)中;

(4)将cChange拆分为4个子作用块上的子规则并分别保存到collectBi中,遍历collectBi并只保留开始作用时间最新的子规则;

(5)将cReverse拆分为4个子作用块上的子规则,遍历collectBi,如果子规则的作用时间小于集合中最新的子规则,那么将翻转子规则构造为与已有的cHold和cChange子规则不冲突的规则后保存到集合中;

(6)分别对collectBi中的规则按时间逐一计算;

(7)合并4字节的计算值为最终的计算结果。

进一步地,根据故障注入规则和指令访问内存或寄存器的特性,把故障注入规则的加载与作用延迟到对目标位置读操作时,来减小故障注入规则频繁加载与作用带来的内存或寄存器访问代价。

进一步地,故障规则从开始生效到规则加载触发期间内多次作用的一次性模拟,可以根据运算规则进行计算优化,来减小故障注入规则的计算代价。

本发明方法把对故障规则的加载从每次指令的操作地址命中延迟到读取该操作地址的逻辑值,也就是真正用到该操作地址的逻辑值时,一方面免去每个时钟周期指令模拟时对故障规则的遍历过程,一方面以一次性加载、计算、作用于目标寄存器或内存的方式,来减少频繁的、不必要的寄存器或内存访问。

本发明方法既可以用于故障注入系统的完整设计,也可以用于写寄存器或内存类型故障的重构,通过对故障规则的设计解耦,部分外部故障注入规则的延迟加载可以与其他规则的正常加载作用相兼容。

本发明具有的有益效果是:本发明通过对故障规则作用的延迟加载,来做到故障注入模块设计的简化和性能的提升,极大地减小了故障注入的计算和寄存器或内存的访问代价。

附图说明

图1是传统指令集模拟器的故障注入规则加载流程图;

图2是本发明指令集模拟器的故障注入规则延迟加载流程图。

具体实施方式

下面结合附图和具体实施例对本发明作进一步详细说明。

如图2所示,本发明提供的一种故障注入规则延迟加载的方法,包括如下步骤:

(1)以约定的通信协议RSP(Remote Serial Protocol)和故障规则描述方式,由测试平台向指令集模拟器发送故障注入命令;

(2)由指令集模拟器的调试桩对通信内容进行响应,并解析故障注入规则并保存到故障规则管理模块,由故障规则管理模块来负责故障规则的保存、命中查找、逻辑值计算和发起逻辑值改写;

(3)指令集模拟器模拟寄存器、内存和外设,并加载目标程序对程序的每条指令进行模拟;

(4)在模拟过程中,遇到写指令时,把写指令记录保存到注入点的写指令元操作列表中,遇到读指令时,若该读指令的操作地址有对应的故障注入规则,并且该规则当前有效,那么计算该条规则上一次作用时刻与当前时刻的间隔,再结合故障规则的特性和写指令元操作列表,通过计算确定规则发生情况,实现规则的一次性模拟;

(5)把一次性模拟的故障作用于目标位置,并把作用值作为读指令访问结果返回,指令集模拟器回到步骤(4)继续模拟下一条指令,直至程序结束。

进一步地,所述步骤1的故障规则格式具体为:

<故障类型><注入点类型>:<注入点地址><注入控制标志><注入参数><作用次数><起始作用时间><结束作用时间>

其中故障类型包括翻转、保持、改写、观察四种,注入点类型包括寄存器和内存地址两种,注入点地址按注入点类型为寄存器编号或内存地址,注入控制标志用于控制注入方式和规律(默认不设置),注入参数根据故障类型不同为翻转掩码、保持值、改写值和0,作用次数为规则下故障注入操作的有效操作次数,起始作用时间和结束作用时间描述了故障规则的有效期。

进一步地,所述的一次性模拟算法为:

(1)找到在读操作之前生效的故障规则的集合,根据故障类型分别为cHold、cChange、cReverse;

(2)将4字节大小的故障注入点拆分为4个子作用块,并把规则拆分为在这4个子作用块上的子规则,并按(3)-(5)分别保存为规则集合collectB1,collectB2,collectB3和collectB4;

(3)将cHold拆分为4个子作用块上的子规则并分别保存到collectBi(i为1~4)中;

(4)将cChange拆分为4个子作用块上的子规则并分别保存到collectBi中,遍历collectBi并只保留开始作用时间最新的子规则;

(5)将cReverse拆分为4个子作用块上的子规则,遍历collectBi,如果子规则的作用时间小于集合中最新的子规则,那么将翻转子规则构造为与已有的cHold和cChange子规则不冲突的规则后保存到集合中;

(6)分别对collectBi中的规则按时间逐一计算;

(7)合并4字节的计算值为最终的计算结果。

进一步地,根据故障注入规则和指令访问内存或寄存器的特性,把故障注入规则的加载与作用延迟到对目标位置读操作时,来减小故障注入规则频繁加载与作用带来的内存或寄存器访问代价。

进一步地,故障规则从开始生效到规则加载触发期间内多次作用的一次性模拟,可以根据运算规则进行计算优化,来减小故障注入规则的计算代价。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号