專利名稱:基于鏈接表的軟件主動(dòng)容錯(cuò)方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種軟件主動(dòng)容錯(cuò)方法,特別是一種基于鏈接表的軟件主動(dòng)容錯(cuò)方法,采用基于鏈接表的月面巡視探測(cè)器軟件主動(dòng)容錯(cuò)設(shè)計(jì)方法。
背景技術(shù):
軟件容錯(cuò)是軟件能檢測(cè)到系統(tǒng)中將要發(fā)生或已經(jīng)發(fā)生的軟件或硬件故障并從故障中恢復(fù)的能力,有兩層含義一是用軟件來達(dá)到容錯(cuò)的目的,二是軟件本身要容許軟件故障。主要目的是提供足夠的冗余信息和算法程序,使系統(tǒng)在實(shí)際運(yùn)行時(shí)能夠及時(shí)發(fā)現(xiàn)程序設(shè)計(jì)錯(cuò)誤,采取補(bǔ)救措施,以提高軟件可靠性,保證整個(gè)計(jì)算機(jī)系統(tǒng)的正常運(yùn)行。故障恢復(fù)的策略一般有兩種前向恢復(fù)和后向恢復(fù)(D.K.Pradhan,N.H.Vaidya.Roll-Forward anfRoll-Back RecoveryPerformance Reliability Tradeoff.IEEE Transactionsoncomputers[J].46(3),1997372-378)。所謂前向恢復(fù)是指使當(dāng)前的計(jì)算繼續(xù)下去,把系統(tǒng)恢復(fù)成連貫的正確狀態(tài),彌補(bǔ)當(dāng)前狀態(tài)的不連貫情況,這需要有錯(cuò)誤的詳細(xì)說明。所謂后向恢復(fù)是指系統(tǒng)恢復(fù)到前一個(gè)正確狀態(tài),繼續(xù)執(zhí)行。
容錯(cuò)的主要方法是冗余,其中軟件冗余技術(shù)分為差異冗余和無差異冗余兩類,無差異冗余可以處理某些物理故障,差異冗余可以容忍設(shè)計(jì)故障。能夠容忍軟件設(shè)計(jì)故障的差異冗余容錯(cuò)技術(shù)主要有有恢復(fù)塊方法和N-版本程序設(shè)計(jì),另外還有一致性恢復(fù)的軟件容錯(cuò)方法、防衛(wèi)式程序設(shè)計(jì)等。
恢復(fù)塊方法1975年,以B.Randell為首的英國(guó)NewCastle大學(xué)的研究組提出了“恢復(fù)塊”方法(B.Randell and J.Xu,″The Evolution of theRecovery Block Concept″,in Software Fault Tolerance(M.Lyu,Ed.),Trends in Software,pp.1-22,J.Wiley,1994),采用后向恢復(fù)策略。它提供具有相同功能的主塊和幾個(gè)后備塊,一個(gè)塊就是一個(gè)執(zhí)行完整的程序段,主塊首先投入運(yùn)行,結(jié)束后進(jìn)行驗(yàn)收測(cè)試,如果沒有通過驗(yàn)收測(cè)試,系統(tǒng)經(jīng)現(xiàn)場(chǎng)恢復(fù)后由一后備塊運(yùn)行。這一過程可以重復(fù)到耗盡所有的后備塊,或者某個(gè)程序故障行為超出了預(yù)料,從而導(dǎo)致不可恢復(fù)的后果。設(shè)計(jì)時(shí)應(yīng)保證實(shí)現(xiàn)主塊和后備塊之間的獨(dú)立性,避免相關(guān)錯(cuò)誤的產(chǎn)生,使主塊和后備塊之間的共性錯(cuò)誤降到最低限度。驗(yàn)收測(cè)試程序完成故障檢測(cè)功能,它本身的故障對(duì)恢復(fù)塊方法而言是共性,因此,必須保證它的正確性。
N-版本程序設(shè)計(jì)方法1977年,美國(guó)加利福尼亞大學(xué)洛杉磯分校的A.Avizienis等人提出了“N版本編程”方案(Algirda Avizienis.TheN-version Approach to Fault_Tolerant Software.IEEE Trans.On SoftwareEng.Vol.SE-11,No.121491-1501,Dec 1985.)這是一種靜態(tài)的故障屏蔽技術(shù),采用前向恢復(fù)的策略,其設(shè)計(jì)思想是用N個(gè)具有相同功能的程序同時(shí)執(zhí)行一項(xiàng)計(jì)算,結(jié)果通過多數(shù)表決來選擇。其中N份程序必須由不同的人獨(dú)立設(shè)計(jì),使用不同的方法,不同的設(shè)計(jì)語言,不同的開發(fā)環(huán)境和工具來實(shí)現(xiàn)。目的是減少N版本軟件在表決點(diǎn)上相關(guān)錯(cuò)誤的概率。另外,由于各種不同版本并行執(zhí)行,有時(shí)甚至在不同的計(jì)算機(jī)中執(zhí)行,必須解決彼此之間的同步問題。
其他容錯(cuò)方法包括一致性恢復(fù)的軟件容錯(cuò)方法是Scott綜合了基于表決的容錯(cuò)方法和基于恢復(fù)的容錯(cuò)方法,于1983年提出了一種容錯(cuò)方法(Kanekava et al.Dependable Onboard Computer Systems with a NewMethod-Stepwise Negotiating Voting.Proceedings of IEEE 10thSymposium on Fault-Tolerant Computing.198913-19)。在這種容錯(cuò)方法中,系統(tǒng)首先按表決的的容錯(cuò)方法運(yùn)行N版本程序,然后對(duì)運(yùn)行結(jié)果進(jìn)行表決,如果表決結(jié)果不一致時(shí),那么系統(tǒng)又按照恢復(fù)重試的方法進(jìn)入恢復(fù)塊重新運(yùn)行備份程序,而不會(huì)使系統(tǒng)失效。
N-版本編程和恢復(fù)塊方法在航天、航空領(lǐng)域已有實(shí)際應(yīng)用。可以看出,N-版本編程是在程序級(jí)的冗余,這N個(gè)版本是并行運(yùn)行的,類似于靜態(tài)冗余,并且允許各程序版本由于不同的程序員在不同的編程方式下有隨機(jī)的差異,因而是相互獨(dú)立的。而恢復(fù)塊則應(yīng)用于模塊級(jí),在正常情況下只運(yùn)行主模塊,類似于動(dòng)態(tài)硬件冗余,主模塊和恢復(fù)塊之間的獨(dú)立性是由設(shè)計(jì)者故意使它們盡可能不同而獲得的。這兩種方法的另一個(gè)不同是仲裁器?;謴?fù)塊方法要求每一個(gè)模塊建一個(gè)可接受測(cè)試器,而N-版本編程只要一個(gè)表決器。Scott的一致性恢復(fù)方法雖然綜合了以上兩種方法的優(yōu)點(diǎn),提高了可靠性,但同時(shí)也綜合了兩種方法的缺點(diǎn),即同時(shí)增大了時(shí)間和空間上的開銷。
我國(guó)航天器軟件容錯(cuò)設(shè)計(jì)方法,目前主要是恢復(fù)塊和N-版本技術(shù)。其中,以月面巡視探測(cè)器為代表的在未知環(huán)境工作的航天器又和星船一類軌道運(yùn)行的航天器不同。衛(wèi)星、飛船所面對(duì)的空間環(huán)境是已知環(huán)境,針對(duì)環(huán)境的算法是固定的,并且是地面可以仿真驗(yàn)證的,不存在在空間驗(yàn)證同一功能不同算法的要求,而月面巡視探測(cè)器工作在未知環(huán)境中,存在一些不能進(jìn)行地面仿真驗(yàn)證的問題,因此需要考慮從功能角度容錯(cuò),實(shí)現(xiàn)軟件重構(gòu)。
由于月面巡視探測(cè)器采用綜合電子系統(tǒng),因此整車軟件也集成在一起,實(shí)現(xiàn)整車的各項(xiàng)管理、算法實(shí)現(xiàn)、數(shù)據(jù)的采集、處理和傳輸?shù)裙δ埽@就對(duì)軟件的可靠性和安全性提出了很高的要求,所以軟件能夠容錯(cuò)是滿足安全可靠要求的必要手段;其次,由于月面巡視探測(cè)器科學(xué)使命的特殊,尤其在首次登月的探測(cè)器上,有很多試驗(yàn)性質(zhì)的項(xiàng)目,算法多樣化,以便于試驗(yàn),這就要求軟件易于通過冗余重構(gòu)來重組具有類似功能的不同代碼模塊,以充分驗(yàn)證不同的算法的差別;再者,行星表面的環(huán)境存在很多未知的因素,而地面軟件測(cè)試通常能夠檢測(cè)出代碼的致命性錯(cuò)誤,但很難完全檢測(cè)出在實(shí)際環(huán)境中可能發(fā)生的非致命性錯(cuò)誤,因此要求軟件具有一定的自主容錯(cuò)能力,以保證整車的正常功能。
發(fā)明內(nèi)容
本發(fā)明的技術(shù)解決問題克服現(xiàn)有技術(shù)的不足,提供一種基于鏈接表的軟件主動(dòng)容錯(cuò)方法,該方法實(shí)現(xiàn)了軟件的重構(gòu),具有主動(dòng)容錯(cuò)能力,提高了軟件的可靠性和安全性,從而提高了使用該軟件系統(tǒng)的可靠性和安全性。
本發(fā)明的另一技術(shù)解決問題在上述發(fā)明目的的基礎(chǔ)上,又節(jié)省了時(shí)間和存儲(chǔ)空間,提高了效率。
本發(fā)明的技術(shù)解決方案基于鏈接表的軟件主動(dòng)容錯(cuò)方法,其特點(diǎn)在于(1)將軟件分成應(yīng)用軟件和容錯(cuò)軟件兩個(gè)部分;(2)應(yīng)用軟件為實(shí)現(xiàn)功能的全部軟件,應(yīng)用軟件根據(jù)功能劃分多個(gè)功能模塊,每一種功能模塊均包含一個(gè)主算法和N個(gè)備份算法;啟動(dòng)時(shí),先進(jìn)行各功能模塊主算法的運(yùn)行;(3)容錯(cuò)軟件監(jiān)測(cè)上述應(yīng)用軟件各功能模塊的運(yùn)行,一旦應(yīng)用軟件某功能模塊的主算法檢測(cè)有錯(cuò)誤,容錯(cuò)軟件將修改記錄有應(yīng)用軟件各功能模塊之間鏈接關(guān)系的模塊關(guān)系鏈接表,重新加載至應(yīng)用軟件功能模塊,啟動(dòng)運(yùn)行應(yīng)用軟件該功能模塊的N個(gè)備份軟件,實(shí)現(xiàn)對(duì)應(yīng)用軟件進(jìn)行重構(gòu),達(dá)到主動(dòng)容錯(cuò)的目的;(4)當(dāng)N個(gè)備份軟件均檢測(cè)有錯(cuò)誤時(shí),容錯(cuò)軟件將屏蔽掉應(yīng)用軟件的該功能模塊。
所述應(yīng)用軟件的N個(gè)備份算法為N個(gè)不同版本的備份算法,N個(gè)不同版本的備份算法在運(yùn)行中經(jīng)過表決后,輸出正確的結(jié)果。所述的表決原則為(1)N個(gè)備份算法中,任何一個(gè)算法在運(yùn)行中出現(xiàn)檢測(cè)錯(cuò)誤,即中止并不再參與該此表決;(2)N個(gè)備份算法中,只要有一個(gè)備份算法在運(yùn)行中未出現(xiàn)檢測(cè)錯(cuò)誤,則輸出該備份算法的正確結(jié)果;(3)N個(gè)備份算法中,如果有兩個(gè)或兩個(gè)以上備份算法均未出現(xiàn)檢測(cè)錯(cuò)誤,則按順序輸出最高級(jí)備份算法的正確結(jié)果;(4)如果N個(gè)備份算法均出現(xiàn)檢測(cè)錯(cuò)誤,則由容錯(cuò)軟件作異常處理,任何一個(gè)均不再使用。
所述的主算法在開始運(yùn)行時(shí)加載到內(nèi)存,N個(gè)備份算法存儲(chǔ)在非易失性存儲(chǔ)器中。
本發(fā)明與現(xiàn)有技術(shù)相比的優(yōu)點(diǎn)在于
(1)本發(fā)明將軟件分成應(yīng)用軟件和容錯(cuò)軟件分為兩個(gè)部分,應(yīng)用軟件為實(shí)現(xiàn)功能的全部軟件,由主算法和N個(gè)備份算法組成,容錯(cuò)軟件由插入在應(yīng)用軟件中的代碼組成,當(dāng)應(yīng)用軟件出現(xiàn)錯(cuò)誤時(shí),引起容錯(cuò)軟件的執(zhí)行,來處理應(yīng)用軟件的錯(cuò)誤,通過修改模塊關(guān)系鏈接表,啟動(dòng)N個(gè)備份軟件,實(shí)現(xiàn)對(duì)應(yīng)用軟件進(jìn)行重構(gòu),達(dá)到主動(dòng)容錯(cuò)的目的,提高了軟件的可靠性和安全性,從而提高了使用該軟件系統(tǒng)的可靠性和安全性。如月面巡視探測(cè)器等。
(2)現(xiàn)有技術(shù)的一致性恢復(fù)的軟件容錯(cuò)方法要先按照恢復(fù)塊進(jìn)行容錯(cuò),而在恢復(fù)塊中再按照N版本處理;而本發(fā)明先主算法運(yùn)行,再按照備份算法進(jìn)行容錯(cuò),而在備份算法中又按照N-版本備份算法處理,且開始運(yùn)行時(shí)只有主算法加載到內(nèi)存,N個(gè)備份算法存儲(chǔ)在非易失性存儲(chǔ)器中,所以避免了初始運(yùn)行時(shí)占用計(jì)算和動(dòng)態(tài)存儲(chǔ)資源太多的問題,節(jié)省了存儲(chǔ)空間,提高了容錯(cuò)的實(shí)時(shí)性。
(3)現(xiàn)有技術(shù)恢復(fù)塊方法中,當(dāng)主算法運(yùn)行完時(shí)對(duì)主算法要接受測(cè)試器的測(cè)試,而備份算法也需要進(jìn)行測(cè)試,這樣使得運(yùn)行時(shí)間大大增加;本發(fā)明應(yīng)用軟件中的主算法和N個(gè)備份算法并沒有接受測(cè)試器,而是在主算法運(yùn)行過程中監(jiān)視其運(yùn)算是否出現(xiàn)錯(cuò)誤,即若主算法運(yùn)行過程中沒有錯(cuò)誤,則主算法運(yùn)行結(jié)果可信,若主算法運(yùn)行過程中有錯(cuò)誤,則主算法不可信,更換備份算法重新計(jì)算,從而縮短了運(yùn)行時(shí)間,使得效率更高。
(4)本發(fā)明的備份算法由多個(gè)版本的備份算法組成N-版本結(jié)構(gòu),與現(xiàn)有的N版本結(jié)構(gòu)的方法不同主要體現(xiàn)在表決方式上。現(xiàn)有的N版本結(jié)構(gòu)方法的表決原則為在所有同時(shí)運(yùn)行的備份算法都結(jié)束之后,把相同次數(shù)最多的計(jì)算結(jié)果作為最后結(jié)果輸出;而本發(fā)明的備份算法的表決原則是過程表決,即只要有某一算法運(yùn)行過程中出錯(cuò),就退出表決,若備份算法運(yùn)行過程中沒有出錯(cuò),則其運(yùn)算結(jié)果即是可信的,最后選擇那些沒有出錯(cuò)的備份算法中優(yōu)先級(jí)最高的算法的結(jié)果作為最終輸出結(jié)果。這樣既可以提前中止出錯(cuò)的備份算法,降低計(jì)算資源需求,又避免該出錯(cuò)算法可能帶來的負(fù)面影響,對(duì)備份算法設(shè)置優(yōu)先級(jí)又可以避免給出對(duì)近似結(jié)果的確認(rèn)原則設(shè)計(jì),降低了容錯(cuò)的復(fù)雜度,提高了實(shí)時(shí)性。
圖1為本發(fā)明的應(yīng)用軟件中一個(gè)功能模塊的結(jié)構(gòu)圖;圖2為本發(fā)明的容錯(cuò)軟件參與運(yùn)行的流程圖。
具體實(shí)施例方式
如圖1所示,本發(fā)明將軟件分成應(yīng)用軟件和容錯(cuò)軟件兩個(gè)部分。應(yīng)用軟件為實(shí)現(xiàn)功能的全部軟件,應(yīng)用軟件根據(jù)功能劃分多個(gè)功能模塊,每一種功能模塊均包含一個(gè)主算法和N個(gè)備份算法,圖1中為一個(gè)功能模塊的主算法和備份算法流程圖,其他功能模塊與之相同。
啟動(dòng)時(shí),應(yīng)用軟件各功能模塊先運(yùn)行主算法,主算法在開始運(yùn)行時(shí)加載到內(nèi)存,N個(gè)備份算法存儲(chǔ)在非易失性存儲(chǔ)器中。此時(shí)容錯(cuò)軟件監(jiān)測(cè)應(yīng)用軟件各功能模塊的運(yùn)行,如圖2所示。容錯(cuò)軟件由錯(cuò)誤記錄表、模塊關(guān)系鏈接表、重組規(guī)則表、錯(cuò)誤捕捉代碼、錯(cuò)誤處理代碼五個(gè)部分組成。
錯(cuò)誤捕捉代碼對(duì)應(yīng)用軟件各功能模產(chǎn)生的錯(cuò)誤代碼進(jìn)行捕捉,記錄在錯(cuò)誤記錄表中,通過錯(cuò)誤記錄表引發(fā)軟中斷,進(jìn)行錯(cuò)誤處理,錯(cuò)誤處理代碼通過查詢重組規(guī)則表,提取出規(guī)則來修改模塊關(guān)系鏈接表,重新加載到應(yīng)用軟件功能模塊上。錯(cuò)誤記錄表,用于實(shí)時(shí)記錄應(yīng)用軟件運(yùn)行過程中出現(xiàn)的錯(cuò)誤,以錯(cuò)誤代號(hào)的方式存儲(chǔ)在錯(cuò)誤記錄表中,錯(cuò)誤代號(hào)所表示的錯(cuò)誤類型分為三種指令類型,是由遙控指令決定模塊重組的變化,而寫入的錯(cuò)誤代號(hào);重組相關(guān)類型,是由模塊自身產(chǎn)生的錯(cuò)誤而寫入的錯(cuò)誤代號(hào),該錯(cuò)誤表明該模塊出現(xiàn)問題,需要換用其他模塊;非重組相關(guān)類型,是由模塊自身產(chǎn)生的錯(cuò)誤而寫入的錯(cuò)誤代號(hào),該錯(cuò)誤不能表明本模塊出現(xiàn)問題,可能是其他原因。
模塊關(guān)系鏈接表,用于記錄應(yīng)用軟件不同模塊之間當(dāng)前的鏈接關(guān)系,初始時(shí)為各功能模塊的主算法之間的鏈接,系統(tǒng)啟動(dòng)時(shí)只加載模塊關(guān)系鏈接表上所描述的算法,不同模塊之間的調(diào)用關(guān)系也是據(jù)此進(jìn)行,修改模塊鏈接表即為某一模塊的主算法被備用算法代替,由此產(chǎn)生加載和調(diào)用的更新,實(shí)現(xiàn)容錯(cuò)和軟件重構(gòu)。
重組規(guī)則表記錄,為預(yù)先設(shè)定的軟件模塊之間的重組規(guī)則,包含兩個(gè)內(nèi)容一是當(dāng)某模塊的主算法出現(xiàn)錯(cuò)誤時(shí),如何采用備份算法替代;二是當(dāng)某模塊的主算法和備用算法都出現(xiàn)錯(cuò)誤時(shí),該模塊在模塊關(guān)系鏈接表中如何刪除,并把其他的模塊重新鏈接在一起,以實(shí)現(xiàn)軟件的降額重構(gòu)。
錯(cuò)誤捕捉代碼,是在算法運(yùn)行時(shí),用于監(jiān)測(cè)算法運(yùn)行錯(cuò)誤的程序代碼,這些代碼分散插入在應(yīng)用軟件的模塊算法的關(guān)鍵點(diǎn)中,若算法產(chǎn)生錯(cuò)誤,則被錯(cuò)誤捕捉代碼捕捉,并指定該錯(cuò)誤的類型和代號(hào),寫入錯(cuò)誤記錄表中。
錯(cuò)誤處理代碼,根據(jù)錯(cuò)誤記錄表中的最新錯(cuò)誤代號(hào),查找重組規(guī)則表中關(guān)于此錯(cuò)誤的處理規(guī)則,修改模塊關(guān)系鏈接表,達(dá)到容錯(cuò)和軟件重構(gòu)的目的,當(dāng)錯(cuò)誤記錄表被修改后,產(chǎn)生軟中斷來調(diào)用錯(cuò)誤處理代碼。
如圖2所示,一旦應(yīng)用軟件某功能模塊的主算法檢測(cè)有錯(cuò)誤,容錯(cuò)軟件將錯(cuò)誤捕捉代碼對(duì)應(yīng)用軟件各功能模產(chǎn)生的錯(cuò)誤代碼進(jìn)行捕捉,記錄在錯(cuò)誤記錄表中,通過錯(cuò)誤記錄表引發(fā)軟中斷,進(jìn)行錯(cuò)誤處理,錯(cuò)誤處理代碼通過查詢重組規(guī)則表,提取出規(guī)則來修改模塊關(guān)系鏈接表,重新加載到應(yīng)用軟件功能模塊上,啟動(dòng)存儲(chǔ)在非易失性存儲(chǔ)器中N個(gè)備份軟件,實(shí)現(xiàn)對(duì)應(yīng)用軟件進(jìn)行重構(gòu),達(dá)到容錯(cuò)的目的。
如圖1所示,當(dāng)容錯(cuò)軟件啟動(dòng)應(yīng)用軟件的N個(gè)備份算法后,N個(gè)不同版本的備份算法在運(yùn)行中要經(jīng)過表決后,輸出正確的結(jié)果,表決原則為(1)N個(gè)備份算法中,任何一個(gè)算法在運(yùn)行中出現(xiàn)檢測(cè)錯(cuò)誤,即不再使用;(2)N個(gè)備份算法中,只要有一個(gè)備份算法在運(yùn)行中未出現(xiàn)檢測(cè)錯(cuò)誤,則輸出該備份算法的正確結(jié)果;(3)N個(gè)備份算法中,如果有兩個(gè)或兩個(gè)以上備份算法均未出現(xiàn)檢測(cè)錯(cuò)誤,則按順序輸出最高級(jí)備份算法的正確結(jié)果;(4)如果N個(gè)備份算法均出現(xiàn)檢測(cè)錯(cuò)誤,則作異常處理,任何一個(gè)均不再使用,容錯(cuò)軟件將屏蔽掉應(yīng)用軟件的該功能模塊。
下面以月面巡視探測(cè)器為例對(duì)其軟件進(jìn)行詳細(xì)說明。月面巡視探測(cè)器軟件遵循上述基于鏈接表的主動(dòng)容錯(cuò)方法進(jìn)行設(shè)計(jì),包括1軟件由應(yīng)用軟件和容錯(cuò)軟件組成。
2應(yīng)用軟件由以下功能模塊組成遙控遙測(cè)模塊、安全模塊、導(dǎo)航模塊、移動(dòng)控制模塊、視覺處理模塊、路徑規(guī)劃模塊、桅桿控制模塊、太陽翼控制模塊、天線控制模塊、機(jī)械臂控制模塊、有效載荷控制模塊、熱控模塊等。其中每個(gè)功能模塊都由1-4種算法組成,按圖1進(jìn)行設(shè)計(jì),應(yīng)用軟件初始加載都是主算法。每個(gè)功能模塊的算法如表1所示。
表1 功能模塊的算法冗余
3容錯(cuò)軟件由五個(gè)部分組成錯(cuò)誤記錄表、模塊關(guān)系鏈接表、重組規(guī)則表、錯(cuò)誤捕捉代碼、錯(cuò)誤處理代碼。
其中,錯(cuò)誤記錄表采用容量為20個(gè)循環(huán)隊(duì)列,隊(duì)列的每一個(gè)元素由二元數(shù)據(jù)(errorTYPE,errorCODE)組成,errorTYPE用于記錄錯(cuò)誤類型,0,1,2分別表示指令類型、重組相關(guān)類型和非重組相關(guān)類型。errorCODE用于記錄錯(cuò)誤的編號(hào)。錯(cuò)誤編號(hào)與對(duì)應(yīng)的錯(cuò)誤說明預(yù)先定義,在月面巡視探測(cè)器中,總計(jì)有478種錯(cuò)誤編號(hào),其中重組相關(guān)編號(hào)有224種。
模塊關(guān)系鏈接表記錄了每個(gè)功能模塊的自身和連接屬性,采用如下描述(module,methodType,ifactive,preModule1,preModule2,preModule3,preModule4,nextmodule1,nextmodule2,nextmodule3,nextmodule4),其中module代表模塊編號(hào),methodType是該模塊采用的算法,ifactive表示該模塊是否不再使用,preModule記錄可以調(diào)用本模塊的其他模塊,nextmodule記錄本模塊可以調(diào)用的其他模塊。以表1中的路徑規(guī)劃模塊為例,其在模塊關(guān)系鏈接表中的初始描述為(6,0,TRUE,1,2,11,NULL,5,3,NULL)。應(yīng)用程序在加載時(shí),加載的依據(jù)就是鏈接表中每個(gè)模塊的methodType,而每個(gè)模塊的其他算法存儲(chǔ)在非易失性存儲(chǔ)器上而暫不加載到內(nèi)存。應(yīng)用軟件進(jìn)行重構(gòu)就是通過以下來實(shí)現(xiàn)
●修改methodType導(dǎo)致模塊算法改變;●修改preModule和nextmodule導(dǎo)致模塊連接關(guān)系改變。
重組規(guī)則表記錄了預(yù)先定義的重組規(guī)則,共有224條,對(duì)應(yīng)于重組相關(guān)編號(hào)的224種。
權(quán)利要求
1.基于鏈接表的軟件主動(dòng)容錯(cuò)方法,其特征在于(1)將軟件分成應(yīng)用軟件和容錯(cuò)軟件兩個(gè)部分;(2)應(yīng)用軟件為實(shí)現(xiàn)功能的全部軟件,應(yīng)用軟件根據(jù)功能劃分多個(gè)功能模塊,每一種功能模塊均包含一個(gè)主算法和N個(gè)備份算法;啟動(dòng)時(shí),先進(jìn)行各功能模塊主算法的運(yùn)行;(3)容錯(cuò)軟件監(jiān)測(cè)上述應(yīng)用軟件各功能模塊的運(yùn)行,一旦應(yīng)用軟件某功能模塊的主算法檢測(cè)有錯(cuò)誤,容錯(cuò)軟件將修改記錄有應(yīng)用軟件各功能模塊之間鏈接關(guān)系的模塊關(guān)系鏈接表,重新加載至應(yīng)用軟件功能模塊,啟動(dòng)運(yùn)行該功能模塊的N個(gè)備份軟件,實(shí)現(xiàn)對(duì)應(yīng)用軟件進(jìn)行重構(gòu),達(dá)到主動(dòng)容錯(cuò)的目的;(4)當(dāng)N個(gè)備份軟件均檢測(cè)有錯(cuò)誤時(shí),容錯(cuò)軟件將屏蔽掉應(yīng)用軟件的該功能模塊。
2.根據(jù)權(quán)利要求1所述的基于鏈接表的軟件主動(dòng)容錯(cuò)方法,其特征在于所述(2)中應(yīng)用軟件的N個(gè)備份算法為N個(gè)不同版本的備份算法,N個(gè)不同版本的備份算法在運(yùn)行中經(jīng)過表決后,輸出正確的結(jié)果。
3.根據(jù)權(quán)利要求2所述的基于鏈接表的軟件主動(dòng)容錯(cuò)方法,其特征在于所述N個(gè)不同版本的備份算法的表決原則為(1)N個(gè)備份算法中,任何一個(gè)算法在運(yùn)行中出現(xiàn)檢測(cè)錯(cuò)誤,即中止并不再參與該表決;(2)N個(gè)備份算法中,只要有一個(gè)備份算法在運(yùn)行中未出現(xiàn)檢測(cè)錯(cuò)誤,則輸出該備份算法的正確結(jié)果;(3)N個(gè)備份算法中,如果有兩個(gè)或兩個(gè)以上備份算法均未出現(xiàn)檢測(cè)錯(cuò)誤,則按順序輸出最高級(jí)備份算法的正確結(jié)果;(4)如果N個(gè)備份算法均出現(xiàn)檢測(cè)錯(cuò)誤,則由容錯(cuò)軟件作異常處理,任何一個(gè)均不再使用。
4.根據(jù)權(quán)利要求1或2所述的基于鏈接表的軟件主動(dòng)容錯(cuò)方法,其特征在于所述的主算法在開始運(yùn)行時(shí)加載到內(nèi)存,N個(gè)備份算法存儲(chǔ)在非易失性存儲(chǔ)器中。
5.根據(jù)權(quán)利要求1所述的基于鏈接表的軟件主動(dòng)容錯(cuò)方法,其特征在于所述的容錯(cuò)軟件由錯(cuò)誤記錄表、模塊關(guān)系鏈接表、重組規(guī)則表、錯(cuò)誤捕捉代碼、錯(cuò)誤處理代碼五個(gè)部分組成,錯(cuò)誤捕捉代碼對(duì)應(yīng)用軟件各功能模產(chǎn)生的錯(cuò)誤代碼進(jìn)行捕捉,記錄在錯(cuò)誤記錄表中,通過錯(cuò)誤記錄表引發(fā)軟中斷,進(jìn)行錯(cuò)誤處理,錯(cuò)誤處理代碼通過查詢重組規(guī)則表,提取出規(guī)則來修改模塊關(guān)系鏈接表,重新加載到應(yīng)用軟件功能模塊上,啟動(dòng)N個(gè)備份軟件,實(shí)現(xiàn)對(duì)應(yīng)用軟件進(jìn)行重構(gòu),達(dá)到容錯(cuò)的目的。
6.根據(jù)權(quán)利要求5所述的基于鏈接表的軟件主動(dòng)容錯(cuò)方法,其特征在于所述的錯(cuò)誤記錄表用于實(shí)時(shí)記錄應(yīng)用軟件運(yùn)行過程中出現(xiàn)的錯(cuò)誤,以錯(cuò)誤代號(hào)的方式存儲(chǔ)在錯(cuò)誤記錄表中,錯(cuò)誤代號(hào)所表示的錯(cuò)誤類型分為三種指令類型,是由遙控指令決定模塊重組的變化,而寫入的錯(cuò)誤代號(hào);重組相關(guān)類型,是由模塊自身產(chǎn)生的錯(cuò)誤而寫入的錯(cuò)誤代號(hào),該錯(cuò)誤表明該模塊出現(xiàn)問題,需要換用其他模塊;非重組相關(guān)類型,是由模塊自身產(chǎn)生的錯(cuò)誤而寫入的錯(cuò)誤代號(hào),該錯(cuò)誤不能表明本模塊出現(xiàn)問題,可能是其他原因。
7.根據(jù)權(quán)利要求6所述的基于鏈接表的軟件主動(dòng)容錯(cuò)方法,其特征在于所述的錯(cuò)誤記錄表采用容量為20個(gè)循環(huán)隊(duì)列,隊(duì)列的每一個(gè)元素由二元數(shù)據(jù)errorTYPE,errorCODE組成,errorTYPE用于記錄錯(cuò)誤類型,0,1,2分別表示指令類型、重組相關(guān)類型和非重組相關(guān)類型,errorCODE用于記錄錯(cuò)誤的編號(hào),錯(cuò)誤編號(hào)與對(duì)應(yīng)的錯(cuò)誤說明預(yù)先定義。
8.根據(jù)權(quán)利要求1或5所述的基于鏈接表的軟件主動(dòng)容錯(cuò)方法,其特征在于所述的模塊關(guān)系鏈接表用于記錄應(yīng)用軟件不同模塊之間當(dāng)前的鏈接關(guān)系,采用如下描述module,methodType,ifactive,preModule1,preModule2,preModule3,preModule4,nextmodule1,nextmodule2,nextmodule3,nextmodule4,其中module代表模塊編號(hào),methodType是該模塊采用的算法,ifactive表示該模塊是否不再使用,preModule記錄可以調(diào)用本模塊的其他模塊,nextmodule記錄本模塊可以調(diào)用的其他模塊。
9.根據(jù)權(quán)利要求5所述的基于鏈接表的軟件主動(dòng)容錯(cuò)方法,其特征在于所述的重組規(guī)則表記錄為預(yù)先設(shè)定的軟件模塊之間的重組規(guī)則,包含兩個(gè)內(nèi)容一是當(dāng)某模塊的主算法出現(xiàn)錯(cuò)誤時(shí),該如何采用備份算法替代;二是當(dāng)某模塊的主算法和備用算法都出現(xiàn)錯(cuò)誤時(shí),該模塊在模塊關(guān)系鏈接表中如何刪除,并把其他的模塊重新鏈接在一起,以實(shí)現(xiàn)軟件的降額重構(gòu)。
10.根據(jù)權(quán)利要求5所述的基于鏈接表的軟件主動(dòng)容錯(cuò)方法,其特征在于所述的錯(cuò)誤捕捉代碼是在算法運(yùn)行時(shí),用于監(jiān)測(cè)算法運(yùn)行錯(cuò)誤的程序代碼,這些代碼分散插入在應(yīng)用軟件的模塊算法的關(guān)鍵點(diǎn)中,若算法產(chǎn)生錯(cuò)誤,則被錯(cuò)誤捕捉代碼捕捉,并指定該錯(cuò)誤的類型和代號(hào),寫入錯(cuò)誤記錄表中。
11.根據(jù)權(quán)利要求5所述的基于鏈接表的軟件主動(dòng)容錯(cuò)方法,其特征在于所述的錯(cuò)誤處理代碼根據(jù)錯(cuò)誤記錄表中的最新錯(cuò)誤代號(hào),查找重組規(guī)則表中關(guān)于此錯(cuò)誤的處理規(guī)則,修改模塊關(guān)系鏈接表,達(dá)到容錯(cuò)和軟件重構(gòu)的目的,當(dāng)錯(cuò)誤記錄表被修改后,產(chǎn)生軟中斷來調(diào)用錯(cuò)誤處理代碼。
全文摘要
基于鏈接表的軟件主動(dòng)容錯(cuò)方法,將軟件分成應(yīng)用軟件和容錯(cuò)軟件兩個(gè)部分,應(yīng)用軟件為實(shí)現(xiàn)功能的全部軟件,將應(yīng)用軟件根據(jù)功能劃分多個(gè)功能模塊,每一種功能模塊均包含一個(gè)主算法和N個(gè)備份算法;容錯(cuò)軟件監(jiān)測(cè)應(yīng)用軟件各功能模塊的運(yùn)行,一旦應(yīng)用軟件某功能模塊的主算法檢測(cè)有錯(cuò)誤,容錯(cuò)軟件將修改記錄應(yīng)用軟件各功能模塊之間鏈接關(guān)系的模塊關(guān)系鏈接表,重新加載至應(yīng)用軟件功能模塊,啟動(dòng)運(yùn)行該功能模塊的N個(gè)備份軟件,實(shí)現(xiàn)對(duì)應(yīng)用軟件進(jìn)行重構(gòu),達(dá)到容錯(cuò)的目的;當(dāng)N個(gè)備份軟件均檢測(cè)有錯(cuò)誤時(shí),容錯(cuò)軟件將屏蔽掉應(yīng)用軟件的該功能模塊。本發(fā)明實(shí)現(xiàn)了軟件的重構(gòu),具有自主容錯(cuò)能力,提高了軟件的可靠性和安全性,同時(shí)節(jié)省了時(shí)間和存儲(chǔ)空間,提高了效率。
文檔編號(hào)G06F11/36GK101075206SQ20071012290
公開日2007年11月21日 申請(qǐng)日期2007年7月3日 優(yōu)先權(quán)日2007年7月3日
發(fā)明者王磊, 張志 申請(qǐng)人:北京控制工程研究所