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