蹇彪,李佳
(工业和信息化部电子第五研究所,广州510610)
一种VxWorks平台下的软件看门狗设计缺陷及改进方法
蹇彪,李佳
(工业和信息化部电子第五研究所,广州510610)
介绍VxWorks平台下基于定时器实现的软件看门狗的一种设计缺陷,提供一种利用VxWorks中的信号量同步和任务优先级实现的改进方法。测试结果表明改进后的看门狗能够有效地提高系统运行的可靠性。
VxWorks;看门狗;定时器;设计缺陷
国防工业系统中,尤其是航空航天领域中的一些利用嵌入式计算机软件作为控制核心的系统,如飞控系统、发动机控制系统等,通常需要工作在恶劣环境中,因此对系统可靠性的要求都比较高。这些系统的嵌入式软件在运行过程中,可能由于硬件电路的干扰,造成软件的异常跳转,从而形成非设计的死循环,导致软件“跑飞”、功能失效等异常情况,这时候软件若不能及时复位重新恢复正常运行,可能导致整个系统任务失败的严重后果。为了提高系统可靠性,这些系统通常都需要设计看门狗,在系统发生错误“跑飞”时,能够及时地对系统进行复位,使系统从故障状态下恢复正常运行。
看门狗是指在系统中通过软件或硬件方式在一定的时间周期内监控系统的运行状况,如果在规定的时间内没有收到来自系统的触发信号,则将系统强制复位,以保证系统在受到干扰或故障时仍然能够维持正常的工作状态[1]。
单片机等无操作系统的嵌入式软件属于单任务应用,看门狗一般由寄存器、定时器和看门狗电路等部件构成,其原理如图1所示。CPU正常工作过程中,寄存器计数值需要在一定的延时周期内被清零,如果没有清零动作,看门狗电路将产生一个复位信号使系统重新启动或者通过一个非屏蔽中断执行故障恢复子程序。软件设计逻辑如图2所示,清看门狗计数器的命令必须在主程序内,如果看门狗没有被清零,复位后软件将从启动程序(地址0x0000)开始运行[2]。因此设计看门狗时需要计算主程序的运行时间,通常选择看门狗延时周期远远高于计算出的循环时间,或者在测试到的循环时间基础上预留较大余量。
图1 微处理器通过计数清除看门狗定时器
VxWorks、uC/OS、Linux等嵌入式操作系统都能够支持多任务环境,因此这些平台下嵌入式软件的软件结构也不再由单一的主循环和中断服务函数构成,而是由若干个不同优先级的任务和中断服务函数构成。由于操作系统在一定程度上降低了应用系统中软件设计的工作量,所以这些平台下嵌入式软件的看门狗设计一般通过软件方式实现。设计方式根据实际使用需求的不同可以分为以下两种。一种是仅需要提供应用软件的基本运行保护,通过设计一个看门狗定时中断,在中断服务程序中执行“喂狗”操作即可。当中断服务程序异常,即系统已无法提供最基本的服务时执行复位重启。另一种是需要保护特定的核心任务,通过设置一个更低级别的看门狗任务来守护核心任务,在看门狗任务中执行“喂狗”操作,当核心任务失败时执行复位重启[3]。
图2 应用看门狗的程序设计基本流程
某机载系统的嵌入式软件运行在VxWorks平台下,该软件作为整个系统的控制中枢,使用VxWorks的看门狗定时器设计了软件看门狗,用于提高系统的运行可靠性。软件结构如图3所示。看门狗定时器设计在看门狗任务中,当软件运行异常,看门狗任务无法轮询分配到CPU运行时间时,看门狗定时器计数无法被及时清零,触发看门狗“狗叫”,VxWorks系统复位,软件重新启动运行。
图3 软件结构图
为了验证看门狗对系统安全保护措施的有效性,在软件测试过程中通过故障注入方式分别在各工作任务和通信任务中插桩注入包含延时语句的故障代码,模拟软件“跑飞”的异常运行情况。注入的故障代码的触发条件由与被测软件通信的上位机下发的通信指令决定,以保证故障的触发条件和触发时机可控。测试结果如表1所示。
表1 看门狗测试结果
测试结果表明,该软件看门狗仅能够保护比看门狗任务优先级高的工作任务,无法保护低优先级任务。并且在高优先级的通信任务异常时,看门狗不但未成功复位,系统还出现了“假死机”现象。通过对问题现象的隔离分析,发现系统失去响应是因为看门狗定时器中断执行复位失败。当通信任务“跑飞”触发看门狗定时器回调函数执行REBOOT进行复位时,系统需要先保存中断现场,并将程序指针重新指向程序入口地址。但是由于此时通信任务正在转发处理通信数据,堆栈数据量较大,导致中断现场保存时间过长,定时器中断被其他外部中断打断了处理过程而未能及时返回。软件复位最终未能完成,程序指针未能成功指向程序入口地址,引起了VxWorks操作系统的任务调度紊乱、丧失实时性。
通过以上分析,定位了该软件导致看门狗保护策略失效的设计缺陷为:①仅能保护比看门狗任务优先级高的任务;②在定时器中断回调函数中执行了会导致中断阻塞的REBOOT操作。
VxWorks提供了二进制、互斥和计数等三种信号量用于实现任务间的通信、同步和互斥。由于互斥信号量不可以在中断服务程序中释放,计数信号量只是在二进制信号量基础上增加了对信号量释放次数的计数,而二进制信号量在经过高度优化后,是所有任务间通信机制中,速度最快、最常用的手段[4-5]。因此,针对上述软件设计缺陷,利用二进制信号量对看门狗功能进行了设计改进。改进后的软件结构如图4所示。
主要改进措施为:①更改了看门狗喂狗操作所在任务和需要保护的工作任务的任务优先级,将看门狗喂狗操作放到低优先级任务中,比所有需要保护的工作任务的优先级低;②新建一个具有最高优先级的看门狗复位执行任务,以确保REBOOT复位动作能够立即被执行;③删除看门狗定时器中断回调函数中的REBOOT操作语句,改为释放复位信号量的方式通知具有最高优先级的看门狗复位任务执行REBOOT操作。
图4 改进后的软件结构图
对改进后的软件看门狗按照表1执行了回归测试,所有测试结果均为通过。测试结果表明,任意工作任务、通信任务等出现异常“跑飞”情况下,系统均能够触发看门狗成功地执行复位重启。
本文介绍了VxWorks平台下某机载系统嵌入式软件中存在的一种看门狗设计缺陷,通过对软件缺陷原因进行分析,提出了利用信号量同步和任务优先级实现的改进方法。通过回归测试验证表明,改进后的看门狗设计方法能够有效地提高嵌入式系统运行的可靠性,具有较强的工程应用价值。
[1]李观文,衣平,邓英华.看门狗技术在改善系统可靠性中的应用.机床电气[J],2005,1:26-27.
[2]王彬,李文新,李得天,刘礼.通过看门狗软件设计提高抗干扰能力的方法.计算机技术与发展[J],2012,22(10):188-189.
[3]Kovacs G,Kiss B,Eric N.Watchdog–A Practical Approach of Fault Detection[C].Information Control Problems in Manufacturing.[s.l.]: [s.n.],2006:124-126.
[4]王才善,陈光武.基于VxWorks的实时多任务程序设计机制分析.铁路计算机应用[J],2009,18(5):12-15.
[5]武华,刘军伟.基于VxWorks的多任务程序设计.计算机技术与发展[J],2011,21(9):163-165.
JIAN Biao,LI Jia
(Research Center of Software Quality Engineering,CEPREI,Guangzhou 510610)
Introduces the design detect of software watchdog,which is implemented based on timer of VxWorks,provides an improvement method, which uses synchronized semaphore and task priority.Test results show that this method improves the reliability effectively of the system.
VxWorks;Watchdog;Timer;Design Detect
1007-1423(2016)16-0047-04DOI:10.3969/j.issn.1007-1423.2016.16.014
蹇彪(1987-),男,湖南常宁人,硕士,研究方向为嵌入式软件测试
2016-05-04
2016-05-25Design Defect of Software Watchdog and Its Improvement Method Based on VxWorks
李佳(1988-),女,湖南长沙人,本科,研究方向为软件可靠性