蹇彪,李佳
(工業(yè)和信息化部電子第五研究所,廣州510610)
一種VxWorks平臺(tái)下的軟件看門狗設(shè)計(jì)缺陷及改進(jìn)方法
蹇彪,李佳
(工業(yè)和信息化部電子第五研究所,廣州510610)
介紹VxWorks平臺(tái)下基于定時(shí)器實(shí)現(xiàn)的軟件看門狗的一種設(shè)計(jì)缺陷,提供一種利用VxWorks中的信號(hào)量同步和任務(wù)優(yōu)先級(jí)實(shí)現(xiàn)的改進(jìn)方法。測試結(jié)果表明改進(jìn)后的看門狗能夠有效地提高系統(tǒng)運(yùn)行的可靠性。
VxWorks;看門狗;定時(shí)器;設(shè)計(jì)缺陷
國防工業(yè)系統(tǒng)中,尤其是航空航天領(lǐng)域中的一些利用嵌入式計(jì)算機(jī)軟件作為控制核心的系統(tǒng),如飛控系統(tǒng)、發(fā)動(dòng)機(jī)控制系統(tǒng)等,通常需要工作在惡劣環(huán)境中,因此對(duì)系統(tǒng)可靠性的要求都比較高。這些系統(tǒng)的嵌入式軟件在運(yùn)行過程中,可能由于硬件電路的干擾,造成軟件的異常跳轉(zhuǎn),從而形成非設(shè)計(jì)的死循環(huán),導(dǎo)致軟件“跑飛”、功能失效等異常情況,這時(shí)候軟件若不能及時(shí)復(fù)位重新恢復(fù)正常運(yùn)行,可能導(dǎo)致整個(gè)系統(tǒng)任務(wù)失敗的嚴(yán)重后果。為了提高系統(tǒng)可靠性,這些系統(tǒng)通常都需要設(shè)計(jì)看門狗,在系統(tǒng)發(fā)生錯(cuò)誤“跑飛”時(shí),能夠及時(shí)地對(duì)系統(tǒng)進(jìn)行復(fù)位,使系統(tǒng)從故障狀態(tài)下恢復(fù)正常運(yùn)行。
看門狗是指在系統(tǒng)中通過軟件或硬件方式在一定的時(shí)間周期內(nèi)監(jiān)控系統(tǒng)的運(yùn)行狀況,如果在規(guī)定的時(shí)間內(nèi)沒有收到來自系統(tǒng)的觸發(fā)信號(hào),則將系統(tǒng)強(qiáng)制復(fù)位,以保證系統(tǒng)在受到干擾或故障時(shí)仍然能夠維持正常的工作狀態(tài)[1]。
單片機(jī)等無操作系統(tǒng)的嵌入式軟件屬于單任務(wù)應(yīng)用,看門狗一般由寄存器、定時(shí)器和看門狗電路等部件構(gòu)成,其原理如圖1所示。CPU正常工作過程中,寄存器計(jì)數(shù)值需要在一定的延時(shí)周期內(nèi)被清零,如果沒有清零動(dòng)作,看門狗電路將產(chǎn)生一個(gè)復(fù)位信號(hào)使系統(tǒng)重新啟動(dòng)或者通過一個(gè)非屏蔽中斷執(zhí)行故障恢復(fù)子程序。軟件設(shè)計(jì)邏輯如圖2所示,清看門狗計(jì)數(shù)器的命令必須在主程序內(nèi),如果看門狗沒有被清零,復(fù)位后軟件將從啟動(dòng)程序(地址0x0000)開始運(yùn)行[2]。因此設(shè)計(jì)看門狗時(shí)需要計(jì)算主程序的運(yùn)行時(shí)間,通常選擇看門狗延時(shí)周期遠(yuǎn)遠(yuǎn)高于計(jì)算出的循環(huán)時(shí)間,或者在測試到的循環(huán)時(shí)間基礎(chǔ)上預(yù)留較大余量。
圖1 微處理器通過計(jì)數(shù)清除看門狗定時(shí)器
VxWorks、uC/OS、Linux等嵌入式操作系統(tǒng)都能夠支持多任務(wù)環(huán)境,因此這些平臺(tái)下嵌入式軟件的軟件結(jié)構(gòu)也不再由單一的主循環(huán)和中斷服務(wù)函數(shù)構(gòu)成,而是由若干個(gè)不同優(yōu)先級(jí)的任務(wù)和中斷服務(wù)函數(shù)構(gòu)成。由于操作系統(tǒng)在一定程度上降低了應(yīng)用系統(tǒng)中軟件設(shè)計(jì)的工作量,所以這些平臺(tái)下嵌入式軟件的看門狗設(shè)計(jì)一般通過軟件方式實(shí)現(xiàn)。設(shè)計(jì)方式根據(jù)實(shí)際使用需求的不同可以分為以下兩種。一種是僅需要提供應(yīng)用軟件的基本運(yùn)行保護(hù),通過設(shè)計(jì)一個(gè)看門狗定時(shí)中斷,在中斷服務(wù)程序中執(zhí)行“喂狗”操作即可。當(dāng)中斷服務(wù)程序異常,即系統(tǒng)已無法提供最基本的服務(wù)時(shí)執(zhí)行復(fù)位重啟。另一種是需要保護(hù)特定的核心任務(wù),通過設(shè)置一個(gè)更低級(jí)別的看門狗任務(wù)來守護(hù)核心任務(wù),在看門狗任務(wù)中執(zhí)行“喂狗”操作,當(dāng)核心任務(wù)失敗時(shí)執(zhí)行復(fù)位重啟[3]。
圖2 應(yīng)用看門狗的程序設(shè)計(jì)基本流程
某機(jī)載系統(tǒng)的嵌入式軟件運(yùn)行在VxWorks平臺(tái)下,該軟件作為整個(gè)系統(tǒng)的控制中樞,使用VxWorks的看門狗定時(shí)器設(shè)計(jì)了軟件看門狗,用于提高系統(tǒng)的運(yùn)行可靠性。軟件結(jié)構(gòu)如圖3所示。看門狗定時(shí)器設(shè)計(jì)在看門狗任務(wù)中,當(dāng)軟件運(yùn)行異常,看門狗任務(wù)無法輪詢分配到CPU運(yùn)行時(shí)間時(shí),看門狗定時(shí)器計(jì)數(shù)無法被及時(shí)清零,觸發(fā)看門狗“狗叫”,VxWorks系統(tǒng)復(fù)位,軟件重新啟動(dòng)運(yùn)行。
圖3 軟件結(jié)構(gòu)圖
為了驗(yàn)證看門狗對(duì)系統(tǒng)安全保護(hù)措施的有效性,在軟件測試過程中通過故障注入方式分別在各工作任務(wù)和通信任務(wù)中插樁注入包含延時(shí)語句的故障代碼,模擬軟件“跑飛”的異常運(yùn)行情況。注入的故障代碼的觸發(fā)條件由與被測軟件通信的上位機(jī)下發(fā)的通信指令決定,以保證故障的觸發(fā)條件和觸發(fā)時(shí)機(jī)可控。測試結(jié)果如表1所示。
表1 看門狗測試結(jié)果
測試結(jié)果表明,該軟件看門狗僅能夠保護(hù)比看門狗任務(wù)優(yōu)先級(jí)高的工作任務(wù),無法保護(hù)低優(yōu)先級(jí)任務(wù)。并且在高優(yōu)先級(jí)的通信任務(wù)異常時(shí),看門狗不但未成功復(fù)位,系統(tǒng)還出現(xiàn)了“假死機(jī)”現(xiàn)象。通過對(duì)問題現(xiàn)象的隔離分析,發(fā)現(xiàn)系統(tǒng)失去響應(yīng)是因?yàn)榭撮T狗定時(shí)器中斷執(zhí)行復(fù)位失敗。當(dāng)通信任務(wù)“跑飛”觸發(fā)看門狗定時(shí)器回調(diào)函數(shù)執(zhí)行REBOOT進(jìn)行復(fù)位時(shí),系統(tǒng)需要先保存中斷現(xiàn)場,并將程序指針重新指向程序入口地址。但是由于此時(shí)通信任務(wù)正在轉(zhuǎn)發(fā)處理通信數(shù)據(jù),堆棧數(shù)據(jù)量較大,導(dǎo)致中斷現(xiàn)場保存時(shí)間過長,定時(shí)器中斷被其他外部中斷打斷了處理過程而未能及時(shí)返回。軟件復(fù)位最終未能完成,程序指針未能成功指向程序入口地址,引起了VxWorks操作系統(tǒng)的任務(wù)調(diào)度紊亂、喪失實(shí)時(shí)性。
通過以上分析,定位了該軟件導(dǎo)致看門狗保護(hù)策略失效的設(shè)計(jì)缺陷為:①僅能保護(hù)比看門狗任務(wù)優(yōu)先級(jí)高的任務(wù);②在定時(shí)器中斷回調(diào)函數(shù)中執(zhí)行了會(huì)導(dǎo)致中斷阻塞的REBOOT操作。
VxWorks提供了二進(jìn)制、互斥和計(jì)數(shù)等三種信號(hào)量用于實(shí)現(xiàn)任務(wù)間的通信、同步和互斥。由于互斥信號(hào)量不可以在中斷服務(wù)程序中釋放,計(jì)數(shù)信號(hào)量只是在二進(jìn)制信號(hào)量基礎(chǔ)上增加了對(duì)信號(hào)量釋放次數(shù)的計(jì)數(shù),而二進(jìn)制信號(hào)量在經(jīng)過高度優(yōu)化后,是所有任務(wù)間通信機(jī)制中,速度最快、最常用的手段[4-5]。因此,針對(duì)上述軟件設(shè)計(jì)缺陷,利用二進(jìn)制信號(hào)量對(duì)看門狗功能進(jìn)行了設(shè)計(jì)改進(jìn)。改進(jìn)后的軟件結(jié)構(gòu)如圖4所示。
主要改進(jìn)措施為:①更改了看門狗喂狗操作所在任務(wù)和需要保護(hù)的工作任務(wù)的任務(wù)優(yōu)先級(jí),將看門狗喂狗操作放到低優(yōu)先級(jí)任務(wù)中,比所有需要保護(hù)的工作任務(wù)的優(yōu)先級(jí)低;②新建一個(gè)具有最高優(yōu)先級(jí)的看門狗復(fù)位執(zhí)行任務(wù),以確保REBOOT復(fù)位動(dòng)作能夠立即被執(zhí)行;③刪除看門狗定時(shí)器中斷回調(diào)函數(shù)中的REBOOT操作語句,改為釋放復(fù)位信號(hào)量的方式通知具有最高優(yōu)先級(jí)的看門狗復(fù)位任務(wù)執(zhí)行REBOOT操作。
圖4 改進(jìn)后的軟件結(jié)構(gòu)圖
對(duì)改進(jìn)后的軟件看門狗按照表1執(zhí)行了回歸測試,所有測試結(jié)果均為通過。測試結(jié)果表明,任意工作任務(wù)、通信任務(wù)等出現(xiàn)異?!芭茱w”情況下,系統(tǒng)均能夠觸發(fā)看門狗成功地執(zhí)行復(fù)位重啟。
本文介紹了VxWorks平臺(tái)下某機(jī)載系統(tǒng)嵌入式軟件中存在的一種看門狗設(shè)計(jì)缺陷,通過對(duì)軟件缺陷原因進(jìn)行分析,提出了利用信號(hào)量同步和任務(wù)優(yōu)先級(jí)實(shí)現(xiàn)的改進(jìn)方法。通過回歸測試驗(yàn)證表明,改進(jìn)后的看門狗設(shè)計(jì)方法能夠有效地提高嵌入式系統(tǒng)運(yùn)行的可靠性,具有較強(qiáng)的工程應(yīng)用價(jià)值。
[1]李觀文,衣平,鄧英華.看門狗技術(shù)在改善系統(tǒng)可靠性中的應(yīng)用.機(jī)床電氣[J],2005,1:26-27.
[2]王彬,李文新,李得天,劉禮.通過看門狗軟件設(shè)計(jì)提高抗干擾能力的方法.計(jì)算機(jī)技術(shù)與發(fā)展[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的實(shí)時(shí)多任務(wù)程序設(shè)計(jì)機(jī)制分析.鐵路計(jì)算機(jī)應(yīng)用[J],2009,18(5):12-15.
[5]武華,劉軍偉.基于VxWorks的多任務(wù)程序設(shè)計(jì).計(jì)算機(jī)技術(shù)與發(fā)展[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-),男,湖南常寧人,碩士,研究方向?yàn)榍度胧杰浖y試
2016-05-04
2016-05-25Design Defect of Software Watchdog and Its Improvement Method Based on VxWorks
李佳(1988-),女,湖南長沙人,本科,研究方向?yàn)檐浖煽啃?/p>