面向星载应用的软件故障注入方法.pdf_第1页
面向星载应用的软件故障注入方法.pdf_第2页
面向星载应用的软件故障注入方法.pdf_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

日 遮过 墨日 D o i l 0 3 9 6 9 i s s n 1 6 7 1 1 0 4 1 2 0 1 3 0 2 0 1 0 面向星载应用的软件故障注入方法 张程烨 张大伟 陈 辰 9 1 8 7 2 部队 北京 1 0 2 4 4 2 墨 麦旦 摘要 为真实模拟单粒子翻转故障 对星载容错技术实现有效验证 本文基于V x Wo r k s 嵌入式操作系统提出了一种面向应 用任务的软件故障注入方法 该方法结合V x Wo r k s 的多任务运行环境和动态加载模块机制 通过用户指令与配置文件结 合的方式 能够按照指定时间间隔将故障实时注入测试任务的任务栈 程序计数器 数据段等五个特定区域 硬件开发平 台的实验结果表明 该故障注入方法安全可靠 可以作为星载容错机制的可靠性检测手段有效实施 关键词 软件故障注入 V x Wo r k s 单粒子翻转 星载应用 动态加载 中图分类号 T P 3 1 1 5 2 文献标 志码 A A s o ft imp l e me n t e d f a u l t in j e c t i o n me t h o d f o r o n bo a r d a p pl ic a t io n ZHANG Ch e ng y e ZHANG Da we i CHEN Ch e n Na v a l E q u ip m e n t T e c h n o l o g y I n s t i t u t i o n B e i j in g 1 0 2 4 4 2 C h i n a Ab s t r a c t l n O r d e r t o s i mu l a t e t h e r e a l S i n g l e E v e n t U p S E U1 f a u l t a n d v a l i d a t e t h e f a u lt t o l e r a n c e t e c h n i q u e f o r o n b o a r d c o mp u t e r s t h i s p a p e r p r o p o s e s a s o f t i mp l e me n t e d f a u l t in j e c t i o n me t h o d f o r o n b o a r d a p p l i c a t i o n s o n V x W o r k s On t h e b a s i s o f mu l t i t a s k i n g e n v i r o n men t a n d d y n a mi c Ioa di n g me c h a n i s m o f Vx Wo r k s u s er c omman d a n d c o n fig u r a t i o n fil e a r e c o mb i n e d a s a me t h o d wh i c h c a n I n j e c t f a u l t s n t o f i v e s e c t i o n s o f a r u n n in g t a s k i n c l u d i n fl s t a c k p r o g r a m c o u n t e r P C d a t a s e g me n t a n d S O o n b y a p p o i n t e d i n t e r v a 1 T h e r e s u lt o f e x p e r i me n t wh i c h i S a c c o m p l i s h e d o n t h e h a r d w a r e p l a t f o r m s h o ws t h a t t h i s f a u l t i n j e c t i o n me t h o d i S s a f e a n d r e l i a b l e e n o u g h t o t e s t t h e r e l i a b i l i t y o f f a u l t t ol e r a n c e t e c h n i qu e f or o n b oa r d ap p l i c a t i o n s K e y wo r d s s o f t wa r e imp l e me n t e d f a u lt i n j e c t i o n V x Wo r k s s in g le e v e n t u p o n b o a r d a p p l i c a t i o n d y n a mi c l o a d i n g 0 引言 随着现代航天技术 和计算机技术 的快 速进步和发 展 星载计算机则担负着越来越多的计算任务 任务主 要有效载荷信息处理及管理 1 卫星姿态和轨道控制等 等 然而 在宇宙中高能粒子的辐射作用下 星载计算机 中的电子器件很可能因高能粒子的冲击引发单粒子效 应 从而影响任务的正常运行 甚至发生严重事故 据资 料统计 单粒子翻转 S E U 是单粒子效应中最为常见的 一 种故障 当太空中的辐射粒子与星载计算机发生碰撞 时 导致电子器件 的逻辑电路中存储位的高低电位发生 翻转 即S E u故障 所幸的是 S E U是一种瞬态故障 可 以通过一定的容错手段进行恢复 目前 国内外已研究并采用多种容错手段来应对单 粒子效应所造成的影响 提高星载计算机的可靠性 而 验证这些容错设计的正确性及其效率 则需要借助故障 注入技术来对外太空环境下的S E U故障进行模拟 通过 故障注入 一方面可以深入了解系统发生故障后的具体 表现 指导容错技术的研发 另一方面可以根据需求人工 控制故障的发生位置和时机 对容错技术的有效性加以 验证 因此 目前许多故障注入技术已被广泛应用于容 错机制的检测和评估 成为衡量计算机系统可靠性的重 要手段 本文针对Vx Wo r k s 星载嵌入式操作系统 提 出了一 种用于模拟S E U 等瞬态故障的软件故障注入方法 并在 以P o we r P C6 0 3 为核心的商用器件 COT S 开发板上加以 实现 该技术以指定的应用任务为目标 通过定时触发 的方式和基于优先级抢占的任务调度策略 并利用动态加 3 6 EI C V0 1 2 0 2 01 3 No 2 载模块机制 实现了对程序计数器 P C 任务通用寄存 器 GP R 1 数据段 栈段和代码段等区域的故障注入 注 入精度高 操作难度低 占用空间小 具有良好的可观察 性和可控性 1 相关研究 国内外普遍采用的故障注人技术从实现机制上看 主要有基于硬件实现的故障注入和基于软件实现的故障 注 入两类 基于硬件的故障注入方法就是使用额外的硬件将故 障注入到目标系统硬件中 可分为接触式和非接触式 前 者将注 入器 和 目标 系统 在物 理上 连 接在 一起 从 外部 改变目标芯片的电压或电流 例如使用管脚级的探针和 插座 后者则是利用某种外部因素产生某种物理现象 例 如重离子射线照射 电磁干扰 激光注入等 硬件故障注 入方法可以真实地模拟故障 但是实验装置复杂 费用 高 而且容易对硬件造成损伤 相比之下 基于软件的故 障注入方法实现简单 价 格低廉 近年来更受到国内外研究者的青睐 软件故障 注入方法 通过特定的程序修改 目标程序的执行语句 增加 修改 删除数据 或直接修改寄存器 存储器的内 容 来模拟硬件或软件故障的发生 按故障注入触发时 机可分为编译时注入和运行时注入 按故障触发方法又 可分为定时触发 事件触发和负载触发等 目前较 为常 用的软件故障注入工具有F E RRARI NF T AP E J I F I X c e p t io n 等 但是这些故障注入工具的开发模型大多针 对分布式 网络等容错系统 设计复杂 价格 昂贵 且因 其运行时大规模占用系统空间 因此在面对实时性强 空 噩 塞旦 间资源少的星载系统时往往不能达到较好的效果 2 面向应用的软件故障注入方法 近年来 系统级容错手段日趋成熟 应用级容错也得 到了深入发展 应用任务是星载系统运行的重要部分 从节约系统空间开销 增强故障注入灵活性的角度研究 面向应用任务的故障注入方法 可以对研发中的应用级 容错手段进行辅助和验证 有很强的针对性 本文选取 星载领域广泛使用的Vx Wo r k s 嵌入式操作系统为开发平 台 提出了一种精确易控的软件故障注入方法 并以此实 现了可动态加载的软件故障注入工具 2 1 Vx Wo r k s 的多任 务运行 环境 Vx Wo r k s 嵌入式操作系统以任务为基本执行单位 在星载系统中 星载应用通常以用户任务的形式出现 用 户通过动态加载的方式将相关的应用程序模块加载到系 统中并启动任务 任务完成初始化工作后 根据入口函数 地址找到对应模块的代码段和数据段 开始执行程序 直至任务结束 V x Wo r k s 的每个任务都拥有自己独立的 任务控制块T C B和任务栈 但与普通操作系统不同的是 V x Wo r k s 允许所有任务 用户任务和内核任务 共享地址 空间 在这种运行模式下 操作系统不存在用户态和核心 态之分 任务间执行调度只需要进行C P U现场的切换 系 统调用也和普通函数调用没有差别 任务之 间还可以直 接访问地址空间 整个系统始终运行在一个高实时性的 环境中 本文提出的故障注入方法正是在这样的多任务 环境 下 实现 的 2 2 面向应用任务的软件故障注入方法 为了达到对S E U故障模拟的真实性 故障的注入必 须是实时的 即在应用程序运行的过程中 将故障注入 到任务使用的寄存器或内存单元中 这一功能实现的关 键在于确定故障注入位置和注入时机 本文对这两个关 键问题的解决办法是通过Vx Wo r k s 的动态加载模块机制 和基于优先级抢占的任务调度策略 动态加载是指在系统运行时 通过一系列预定的动 作将指定模块加载到系统中的技术 在加载过程中 操 作系统会获取模块代码段 数据段等相关信息 同时将 其保存到内核相应的数据结构中 嵌入式系统中的大部 分应用任务正是通过动态加载模块机制运行的 而基于 优先级抢占的任务调度策略则是指系统在运行过程中 如果有优先级 比正在运行任务级别高的任务就绪 则正 在运行的任务会把CP U使用权交给优先级高的任务 即 以任务的优先级大小来分配CP U资源 假设需要注入故障的任务为t a s k A 本文在t a s k A运 行之前首先创建一个故障注入任务t a s k l n j e c t 如图1 所 示 整个故障注入流程可分为以下步骤 1 用户通过相关指令启动t a s k l n j e c t 任务 该任务将 t a s k A对应 的应用模 块动态加 载到 目标 机 上 并 由此记 录 下代码段 数据段的相关位置信息 2 1 在t a s k l n j e c t 中创建t a s k A 作为其子任务启动 由于 t a s k l n j e c t 被赋予了更高的优先级 所以t a s k A被创建后 并没有直接运行 而是处于挂起的状态 3 t a s k l n j e c t 读取用户配置文件获取故障注入要求 并根据文件中指定 的时间间隔TO 设 置定时器 之后 t a s k I n ie c t 任务被挂起 系统将CP u资源分配给了t a s k A 4 t a s k AiE 常运行T 0 时间后 t a s k l n j e c t 过定时器 把 自己唤醒并抢占CP U 然后对处于挂起状态的t a s k A注 入故障 由于此时t a s k A的T CB 和任务栈中都保存了被挂 起前执行现场的数据 因此对其中的数据进行修改即完 欢迎订阅 欢迎撰稿 欢迎发布产品广告信息 日抖 遮让盛昱日 成了故障注入 5 在故障注入完成之后 t a s k I n j e c t 再次挂起 此时 系统再次将C P U交还t a s k A运行 如果还需注入故障 那 么如此反复直g t a s k A结束或所有故障注入完毕 这里需要提醒的是 确保在t a s k A的运行过程中 没 有除t a s k l n j e c t P g b 的应用任务抢占 IJ CP U资源 以保证 故障准确 及时地注入 是 图 1 面 向应 用任 务 的故 障注 入流 程 该故 障注入方法使用一个配置文件与t a s k I n j e c t 进 行交互 以满足用户对注入故障的可控性要求 在启动 t a s k l n j e c t 前 配置文件的信息由用户填写 内容项包括 故障注入 区域 故障注入方式 测试任务名称 故障注入 时刻等等 例如用户将F 盘下t a s k A O 模块作为测试模块 测试任务t a s k A k口函数名为f u n c A 任务优先级1 1 0 任务栈6 0 0 0 字节 当t a s k A运行时 0 2 0 0 ms 内对其通用 寄存器进行随机故障注入 前一次故障注入之后1 0 0 ms 内对其数据段进行随机故障注入 配置文件信息如表1 所示 表1 配置文件信息 M o d ul e Na me ho s t F t a s k A O Ent r yNa me f un c A T as kP r io r it y l 1 O Fa u l t Cnt 1 Ta s k S t a c k Siz e 60 0 O PC Swit c h 1 F a u l t Re g Ra n Ad dr Ad dr Ra n Va 1 u e Va l U e Ra n T im e Tim e 1 1 0 1 0 1 2 0 0 5 l 0 l 0 1 l 0 0 其中 每个故障注入区域F a u l t R e g 可支持如表2 所列 的五种注入方式 采用配置文件控制故障注入过程 进一步拓展了故 障注入的实用性 一方面通过对故障的注入位置 注入 时机 注入 内容等多个方面进行精确控制 提升了 全面 测试容错手段的能力 另一方面通过对时间间隔T n 的设 置 实现了不同故障不同时间的多次注入 增强了模拟单 粒子效应的真实性 EI C Vo 1 2 0 2 0 1 3 No 2 3 7 日 硒遮盐 墨臼 表2 五类故障注入区域的注入方式说明 注入区域 地址髓机获取 地址指定获取 变量随机 变量指定修改 R a n A d d r 1 修改 R a n V a u e 1 时取 F a u l t R e g R a n A d d r 1 时取A d d r 值 R a n V a u e l V a l u e 值 寄存器 G P R 0 3 l 号 寄存 器 将A d d r 作为 值 3 2 将V a l u e 作为 寄存器号 范 位 随机 修改后变量 1 随机获取 值 范围为0 围为0 3 1 翻转一 2 32 I 位 PC 注 入 故 障 时 将 当 前 使 Pc跳 过 任 务 的 当前 PC 32位 Value条 指 令 2 随 机 翻 继 续 运 行 Pc值 转 一 位 将A d d r 作为 地址所 将V a l u e 作为 栈段 任务栈中随机 偏移字节数 指向单 修改后变量 获取 与任务栈首地 元 8 位 值 范围为0 3 随机翻 2 8 l 按字 节对齐 址相加得 到 指定地 址 转 一位 将A d d r 作为 地址 所 代码段 任务 代码段中 偏移字节数 指 向单 将V a l u e 作为 随机获取 按字 与代码段首地 元 8 位 修改后变量 4 值 范围为0 节对 齐 址相加得 到 随机翻 2 1 指 定地址 转 一位 将A d d r 作 为 地 址所 数据 段 任 务数据段 中 偏 移字节数 指向单 将V a l u e 作为 随机 获取 按字 与数据段首 元 8 位 修改后变量 5 值 范 围为0 节对齐 地址相加得 随机翻 2 1 到指定地址 转 一位 随机 随机选 择以上5 i区域 中的一种 按 地址随机 获取 变量 随机修 f 0 改方式进行 故障注 入 1 3 故障注入工具的实现 根据 2 2 提 出的故 障注入方法 本 文实现了基 于 V x Wo r k s 的故障注入工具 该故障注入 丁具是一个由c 语 言编写的独立程序模块 它和普通应用程序一样 也要先 动态加载到目标机上才可运行 该故障注入工具包括一个 输入文件 一个输出文件及四个功能模块 如图2 所示 统计模块 换 图2故障 注入 工具 的实现 框架 预取模块用来读取用户配置文件信息 并将其存放 到自行建立的数据结构中 该数据结构通常以数组形式 存放 每一项存放执行不同区域故障注入的参数 总控 模块从数据结构中读取故障注入参数 完成测试任务的 启动和故障注入过程 的控制 注入模块则完成故障注入 区域的定位及故障注入的实施 统计模块在每次故障注 入前 后收集任务和所注故障的相关信息r 例如当前P C 故障注入地址 原始值 修改值等 并记录在故障 日志 中 以便测试后进行结果分析 考虑到测试任务可能会执行某些系统调用函数 若 在此期间注入故障 则会直接对操作系统产生影响 本 文在总控模块中增加了一个P C 开关 当P C 开关打开 为 1 时 注入故障前将对测试任务执行现场的P C 值进行判 断 若在对应模块的代码段范围内则允许注入 否则说明 正在执行内核函数 取消注入 用户可以按照需求 决定 是否要打开P C开关 3 实验结果与分析 在故障注入的情况下 应用任务可能有以下三种运 行结果 A 在运行过程中应用程序发生异常 B 应用程序运行结束 显示错误的执行结果 C 应用程序运行结束 但显示正确的执行结果 此时 将这情况A和B称为故障注入有效 因为当任 务运行在具有一定错误检测能力的环境中时 上述情况A 和B都能被及时发现 并对其进行容错处理 将情况C称 3 8 EI C V0 1 2 0 2 0 1 3 No 2 曼 塞旦 为故障注入失效 因为当情况C出现时 说 明故障极有可 能注入到了某些无法引发程序错误的位置 如未执行到 的分支程序 程序未使用到的寄存器等等 本文在实验过程中 选取了以P o we r P C 6 0 3 处理器为核 心的B NC 8 3 7 7 开发板作为目标机 将科学计算中常见的规 模为5 0 0 5 0 0 的矩阵乘法程序 Ma t r ix Mu l t i p l y 简称MM 作为测试程序 该程序在编译时已经过一定容错加固处 理 故障注入工具分别对测试任务的G P R P C 栈段 数据 段和代码段五个区域进行了随机地址的随机注入 测试任 务每运行一次注 一 个故障 共运行1 0 0 0 次 注入过程中 打开P C 开关 整理故障日志后 得到表3 所示结果 表3 故障注入结果 注 入区 故障注 入失 注入次数 容错 结果 错 域 效 系统崩溃 成 功 误 GP R 2 00 4l 1 5 7 l l P C 2 00 1 9 5 l l 栈段 2 0 0 I 1 1 8 7 数 据段 2 0 0 1 5 1 8 2 0 代码 段 2 0 0 1 1 8 7 6 从实验结果可以看出 P C 数据段故障注入失效的 概率较低 但是在GP R 任务栈 和代码段注入的故障 则因程序的规模 申请的任务栈空间等因素而产生较大 面积的失效 总体来说 这一现象符合单粒子效应随机陛 的特点 而从故障注入有效的数据来看 经容错加固后 MM程序的容错成功率 容错成功率 容错成功次数 故障 注入有效次数 可以达 1 9 7 8 通过故障日志记录的信 息 我们可以对有效注入但未检测出的故障进行追踪 这些故障主要与存储器的读写操作有关 很可能是由于 修改了关键的指令码或者数据内容所致 该实验结果为 容错机制在内存保护方面的改进提供了 参考和借鉴 4 结束语 本文

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论