李偉
摘 ?要:隨著臨近空間飛行器的發(fā)展,空空導(dǎo)彈作戰(zhàn)空域也向超高空域拓展,因此在空空導(dǎo)彈設(shè)計(jì)時(shí)需要考慮高能粒子引起的計(jì)算機(jī)系統(tǒng)瞬時(shí)故障。本文從軟件防護(hù)的角度出發(fā),針對(duì)該故障提出了一種基于冗余備份及校驗(yàn)和的軟件數(shù)據(jù)流加固方法。試驗(yàn)表明,該算法對(duì)單粒子翻轉(zhuǎn)引起的瞬態(tài)故障具有良好的防護(hù)性,具有通用性好、易移植等優(yōu)點(diǎn)。
關(guān)鍵詞:飛控軟件;軟故障;單粒子翻轉(zhuǎn);軟件容錯(cuò);數(shù)據(jù)流錯(cuò)誤恢復(fù)
中圖分類號(hào):TP302.8 ? ? 文獻(xiàn)標(biāo)識(shí)碼:A
1 ? 引言(Introduction)
近年來(lái)臨近空間飛行器的發(fā)展大大加快,空空導(dǎo)彈的作戰(zhàn)空域也需要從傳統(tǒng)的低空域向臨近空間超高空域拓展[1]。而臨近空間超高空域的空間輻射環(huán)境遠(yuǎn)比空空導(dǎo)彈傳統(tǒng)低空域作戰(zhàn)環(huán)境復(fù)雜,在臨近空間中電子、光子、中子及質(zhì)子等高能粒子的輻射強(qiáng)度大大增加,這些高能粒子輻射強(qiáng)度的增加會(huì)對(duì)電子設(shè)備的正常運(yùn)轉(zhuǎn)造成嚴(yán)重影響。這種現(xiàn)象稱之為高能粒子輻照的單粒子效應(yīng)(Single Event Effects,SEE),具體又可分為單粒子翻轉(zhuǎn)(Single Event Upset,SEU)、單粒子閂鎖(Single Event Latchup,SEL)和單粒子燒毀(Single Event Burnout,SEB)。如果空空導(dǎo)彈在該空域作戰(zhàn),需要考慮這些影響。而空空導(dǎo)彈工作周期較短,一般不會(huì)發(fā)生單粒子閂鎖或單粒子燒毀,因此需要重點(diǎn)考慮的是單粒子翻轉(zhuǎn)造成電子器件內(nèi)部的邏輯狀態(tài)改變,即器件內(nèi)部的數(shù)據(jù)狀態(tài)在0和1之間的轉(zhuǎn)變。這種轉(zhuǎn)變會(huì)形成瞬態(tài)故障,影響系統(tǒng)的正常運(yùn)行。
目前,在單粒子效應(yīng)防護(hù)方面可分為硬件防護(hù)和軟件防護(hù),硬件防護(hù)[2]方面有器件屏蔽設(shè)計(jì)、電路加固設(shè)計(jì)及硬件冗余等技術(shù),軟件防護(hù)方面有指令冗余[3]、多線程[4]、進(jìn)程冗余[5]等技術(shù)。因此,需要在該領(lǐng)域作戰(zhàn)的空空導(dǎo)彈可靠性設(shè)計(jì)時(shí)除了在硬件方面進(jìn)行必要的屏蔽防護(hù)外,在軟件方面也需要考慮采用必要的防護(hù)措施。
本文從軟件的角度對(duì)單粒子效應(yīng)引起的瞬態(tài)故障的防護(hù)機(jī)制進(jìn)行研究,提出了一種基于冗余備份及校驗(yàn)和的軟件數(shù)據(jù)流加固方法(Backups-Check Software Error Detection and Recovery,BSEDR),可對(duì)空空導(dǎo)彈嵌入式飛控軟件中的部分核心代碼進(jìn)行加固實(shí)現(xiàn),該方法相對(duì)于硬件防護(hù)具有靈活性高、通用性好、易于移植及成本低等優(yōu)點(diǎn)。
2 ? 系統(tǒng)設(shè)計(jì)(System design)
軟件的數(shù)據(jù)流錯(cuò)誤是指單粒子翻轉(zhuǎn)引起的瞬態(tài)故障發(fā)生在系統(tǒng)的數(shù)據(jù)存儲(chǔ)或傳輸單元,在數(shù)據(jù)的存儲(chǔ)或者傳輸過(guò)程中發(fā)生了數(shù)值跳變,導(dǎo)致程序流程雖然正常運(yùn)行但運(yùn)算結(jié)果出現(xiàn)錯(cuò)誤,這將給系統(tǒng)帶來(lái)嚴(yán)重后果,特別是某些重要數(shù)據(jù)如發(fā)生錯(cuò)誤甚至?xí)斐蔀?zāi)難性后果。這對(duì)于空空導(dǎo)彈這樣一種對(duì)可靠性要求極高的系統(tǒng)來(lái)說(shuō)是不可接受的,因此有必要采取有效地容錯(cuò)機(jī)制來(lái)檢測(cè)和糾正這種數(shù)據(jù)流錯(cuò)誤。
一個(gè)完整的軟件數(shù)據(jù)流錯(cuò)誤容錯(cuò)處理機(jī)制如圖1所示。
軟件數(shù)據(jù)流錯(cuò)誤容錯(cuò)處理機(jī)制一般包括故障檢測(cè)算法,以及必要的數(shù)據(jù)恢復(fù)算法,在正常的程序運(yùn)行流程中加入故障檢測(cè)算法,如果檢測(cè)到程序數(shù)據(jù)流發(fā)生故障,則執(zhí)行數(shù)據(jù)恢復(fù)流程,如未檢測(cè)到故障則繼續(xù)執(zhí)行正常的程序流程。
常見的軟件數(shù)據(jù)流容錯(cuò)處理機(jī)制一般有三變量冗余投票算法,該算法的基本原理為對(duì)每個(gè)需要加固的數(shù)據(jù)變量均形成兩個(gè)冗余變量,并將變量數(shù)值賦予另外兩個(gè)冗余變量,涉及該變量的運(yùn)算賦值語(yǔ)句均執(zhí)行三遍冗余,在該數(shù)據(jù)變量需要進(jìn)行運(yùn)算或重新賦值前,將該數(shù)據(jù)變量與該變量的兩個(gè)冗余變量進(jìn)行對(duì)比,如數(shù)值一致則表明未發(fā)生故障,如數(shù)值不一致則表明故障已發(fā)生,這時(shí)采用投票原則將數(shù)值一致占多數(shù)的作為真值將三個(gè)變量重新賦值后進(jìn)行后續(xù)程序流程。三變量冗余投票算法的實(shí)質(zhì)是利用一種軟件冗余的方法實(shí)現(xiàn)了三硬件冗余的效果,該算法偽代碼示例見圖2。
該算法雖然原理簡(jiǎn)單,執(zhí)行效果也較好,但是算法實(shí)現(xiàn)會(huì)產(chǎn)生大量的冗余變量,同時(shí)占用大量的寄存器資源并造成較大的性能開銷,對(duì)資源約束較為嚴(yán)格的空空導(dǎo)彈飛控軟件來(lái)說(shuō)并不適用。
本文所采用的基于冗余備份及校驗(yàn)和的軟件數(shù)據(jù)流加固方法是基于冗余復(fù)算[6]思想,利用變量的冗余備份及檢驗(yàn)和對(duì)程序數(shù)據(jù)流故障進(jìn)行檢驗(yàn)及恢復(fù)。該方法主要分為故障檢測(cè)及數(shù)據(jù)恢復(fù)兩部分機(jī)制,算法具體步驟如下:
(1)首先對(duì)某一程序功能模塊中所有需要加固的程序變量v1、v2…vn初次賦值時(shí)進(jìn)行備份,生成變量副本v1_backup、v2_backup…vn_backup。
(2)對(duì)該模塊中所有需要加固的程序變量v1、v2…vn及進(jìn)行累加,形成變量累加值sum,對(duì)所有變量副本v1_backup、v2_backup…vn_backup進(jìn)行累加,形成變量副本累加值sum_backup。
(3)在變量v1、v2…vn再次引用或賦值前,對(duì)變量進(jìn)行故障檢測(cè),即與其副本變量v1_backup、v2_backup…vn_backup進(jìn)行對(duì)比。
(4)以變量v1進(jìn)行舉例,如果檢測(cè)到變量v1與其副本變量v1_backup數(shù)值不一致,則判斷該變量發(fā)生故障,執(zhí)行下列數(shù)據(jù)恢復(fù)步驟。
(a)對(duì)比變量累加值sum及變量副本累加值sum_backup,如數(shù)值一致則表明sum變量數(shù)值未發(fā)生變化,表明該數(shù)值可信,則在此時(shí)將所有加固的程序變量v1、v2…vn累加后與原累加值sum進(jìn)行對(duì)比,如相等則表明變量v1未發(fā)生改變,v1的數(shù)值正確,將該數(shù)值重新賦予v1_backup,如程序變量v1、v2…vn累加后的值與原累加值sum不一致,則表明變量v1已發(fā)生改變,v1的數(shù)值錯(cuò)誤,此時(shí)認(rèn)為變量副本v1_backup中的數(shù)值正確,將變量副本v1_backup中的正確數(shù)值重新賦予變量v1,同時(shí)對(duì)變量sum及sum_backup的數(shù)值用變量v1的正確數(shù)值進(jìn)行更新。
(b)如果變量累加值sum及變量副本累加值sum_backup經(jīng)對(duì)比不一致,則表明sum或sum_backup發(fā)生了變化,則將所有程序變量v1、v2…vn累加后與原累加值sum,將變量副本v1_backup、v2_backup…vn_backup累加后與副本變量原累加值sum_backup均進(jìn)行對(duì)比,取相等的作為sum的真值,重復(fù)進(jìn)行步驟(a)的對(duì)比。
(5)如檢測(cè)到變量與其變量副本數(shù)值一致,則判斷該變量無(wú)故障發(fā)生,繼續(xù)執(zhí)行后續(xù)程序步驟。
(6)程序變量v1、v2…vn重新賦值后,將對(duì)應(yīng)的副本變量v1_backup、v2_backup…vn_backup值進(jìn)行更新,同時(shí)更新累加變量sum及其副本累加變量sum_backup的數(shù)值。
算法原理框圖如圖3所示。
該算法與常規(guī)的三變量冗余投票算法相比,僅需要對(duì)變量進(jìn)行雙冗余,而數(shù)據(jù)錯(cuò)誤判斷及恢復(fù)的算法復(fù)雜度并沒有增加,因此節(jié)省了大量的計(jì)算機(jī)資源。而且如果三變量冗余投票算法中三變量有兩個(gè)變量同時(shí)發(fā)生數(shù)值跳變,則該算法會(huì)將故障值作為真值進(jìn)行后續(xù)程序運(yùn)行,不能正確進(jìn)行故障檢測(cè)與數(shù)值恢復(fù),算法將會(huì)失效。而本文所采用的基于冗余備份及校驗(yàn)和的軟件數(shù)據(jù)流加固方法則通過(guò)加入副本累加值sum_backup變量,在程序變量v和累加變量sum同時(shí)發(fā)生數(shù)值跳變的時(shí)候仍然可以進(jìn)行正確的故障檢測(cè)與數(shù)值恢復(fù),因此該算法具有較強(qiáng)的魯棒性。
從空空導(dǎo)彈飛控軟件實(shí)際運(yùn)行情況看,不同數(shù)據(jù)變量對(duì)于程序運(yùn)行的可靠性影響并不相同,只有小部分重要的數(shù)據(jù)變量對(duì)于系統(tǒng)運(yùn)行的可靠性有重大影響。因此,并不需要對(duì)程序中所有的數(shù)據(jù)變量均進(jìn)行加固,可綜合考慮空空導(dǎo)彈飛控軟件的實(shí)際特點(diǎn)與計(jì)算資源的合理運(yùn)用,重點(diǎn)識(shí)別出對(duì)導(dǎo)彈安全性、飛行任務(wù)達(dá)成影響較大的數(shù)據(jù)變量,如導(dǎo)彈的位置、速度、姿態(tài)、目標(biāo)信息、傳感器信息、過(guò)載指令、舵控指令、引信起爆指令等變量,利用本文所述的基于冗余備份及校驗(yàn)和的軟件數(shù)據(jù)流加固算法進(jìn)行數(shù)據(jù)加固。
3 ? 試驗(yàn)研究(Research and experiment)
算法的有效性需要試驗(yàn)來(lái)進(jìn)行證明,為了驗(yàn)證本文所提出的基于冗余備份及校驗(yàn)和的軟件數(shù)據(jù)流加固算法的有效性,設(shè)計(jì)如下試驗(yàn):利用某型空空導(dǎo)彈數(shù)字仿真環(huán)境[7],對(duì)飛控軟件中識(shí)別出的較為重要的數(shù)據(jù)變量:穩(wěn)定控制模塊中滾轉(zhuǎn)、俯仰和偏航三通道過(guò)載指令,利用基于冗余備份及校驗(yàn)和的軟件數(shù)據(jù)流加固算法進(jìn)行加固。同時(shí)在程序中模仿單粒子反轉(zhuǎn)引起的瞬態(tài)故障模式,利用軟件插裝技術(shù)在程序不同運(yùn)行周期對(duì)三通道過(guò)載指令依次進(jìn)行故障注入,改變?nèi)ǖ肋^(guò)載指令變量的數(shù)值。加固算法和模擬故障代碼實(shí)現(xiàn)后,運(yùn)行該數(shù)字仿真平臺(tái)進(jìn)行試驗(yàn)。本次試驗(yàn)中加固算法及故障注入部分的偽代碼示例如圖4所示。
數(shù)字仿真平臺(tái)運(yùn)行后結(jié)果如圖5所示。從圖中可看出,在程序三個(gè)不同運(yùn)行周期故障注入時(shí),三通道過(guò)載指令的故障均被成功識(shí)別,算法正確進(jìn)行了故障檢測(cè)和數(shù)值恢復(fù)。
4 ? 結(jié)論(Conclusion)
從試驗(yàn)結(jié)果看,本文采用的基于冗余備份和校驗(yàn)和的軟件數(shù)據(jù)流加固方法對(duì)單粒子翻轉(zhuǎn)引起的數(shù)據(jù)流軟瞬態(tài)故障防護(hù)效果良好。采用軟件防護(hù)的方法不依賴于硬件環(huán)境,不需要增添或改造硬件,通用性好、成本低且容易實(shí)現(xiàn),應(yīng)用前景廣闊。
本文所采用的試驗(yàn)是在數(shù)字仿真環(huán)境下進(jìn)行的,只是初步驗(yàn)證了算法的有效性,而如果要將算法真正應(yīng)用于空空導(dǎo)彈飛控軟件,則需要在實(shí)際的導(dǎo)彈硬件平臺(tái)上進(jìn)行進(jìn)一步試驗(yàn)。因此,下一步的計(jì)劃是在某型空空導(dǎo)彈硬件平臺(tái)上進(jìn)行試驗(yàn),綜合考慮導(dǎo)彈硬件平臺(tái)的計(jì)算資源及需要加固的程序變量數(shù)量,在保證硬件平臺(tái)機(jī)時(shí)冗余度的約束條件下,篩選出需要加固的重要數(shù)據(jù)變量,利用本文采用的基于冗余備份和校驗(yàn)和的軟件數(shù)據(jù)流加固方法進(jìn)行加固后開展試驗(yàn),進(jìn)一步驗(yàn)證算法的有效性,為將算法真正應(yīng)用于空空導(dǎo)彈中做好準(zhǔn)備。
參考文獻(xiàn)(References)
[1] 樊會(huì)濤,張鵬鵬.空空導(dǎo)彈面臨的挑戰(zhàn)[J].航空兵器,2017(2):3-7.
[2] 傅忠傳,陳紅松,崔剛,等.處理器容錯(cuò)技術(shù)研究與展望[J].計(jì)算機(jī)研究與發(fā)展,2007,44(1):154-160.
[3] Oh N,Shirvani P P,McCluskey E J.Error Detection by Duplicated Instructions in Super-Scalar Processors[J].IEEE Trans on Reliability,2002,51(1):63-75.
[4] Wang C,Kim H,Wu Y,et al.Compiler-Managed Software-Based Redundant Multi-Threading for Transient Fault Detection[C].Proc of the Int'l Symp Code Generation and Optimization,2007:244-258.
[5] Shye A,Blomstedt J,Moseley T,et al.PLR:A Software Approach to Transient Fault Tolerance for Multi-core Architectures[J].IEEE Trans on Dependable and Secure Computing,2009,6(2):135-148.
[6] S.K.Reinhardt,S.S.Mukherjee.Transient Fault Detection via Simultaneous Multithreading[C].Proc.of the 27th International Symposium on Computer Architecture,2000:25-36.
[7] 王明惠,朱光宇,王慧敏.基于PowerPC的飛控軟件設(shè)計(jì)實(shí)現(xiàn)及驗(yàn)證[J].航空兵器,2013(4):54-57.
作者簡(jiǎn)介:
李 ?偉(1983-),男,碩士,工程師.研究領(lǐng)域:飛行控制軟件.