一種星載操作系統(tǒng)集成的故障快速自主處理方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及一種星載操作系統(tǒng)集成的故障快速自主處理方法,屬于高可靠、高可 信嵌入式操作系統(tǒng)軟件領(lǐng)域。
【背景技術(shù)】
[0002] 操作系統(tǒng)是星載計算機軟件的重要組成部分,由于星載計算機對可靠性要求極 高,因此需要操作系統(tǒng)具有較高的容錯能力,在軟件層面上支持快速的自主故障處理和修 復。
[0003] 傳統(tǒng)星載操作系統(tǒng)中,對故障(異常)處理是利用處理器硬件的中斷或是陷阱,從 而進入異常服務(wù)程序完成對故障處理。這種方法雖然切實有效,但是有兩點局限:一是需要 硬件支持,如果軟件運行時發(fā)生的故障不能引起處理器中斷或陷阱,則不能對故障進行處 理;二是由于處理器中斷或陷阱的類型有限,因此識別和處理的故障種類也有限。
【發(fā)明內(nèi)容】
[0004] 本發(fā)明解決的技術(shù)問題是:為進一步提高軟件的故障診斷和處理能力,作為現(xiàn)有 操作系統(tǒng)級異常故障處理的補充,提出一種星載操作系統(tǒng)集成的故障快速自主處理方法, 使得操作系統(tǒng)提供了應(yīng)用層面的一種故障診斷和處理機制,能夠采用軟件手段有效解決系 統(tǒng)中處理器中斷或陷阱無法識別和處理的故障問題。
[0005] 本發(fā)明的技術(shù)解決方案是:一種星載操作系統(tǒng)集成的故障快速自主處理方法,包 括基于hash表的故障快速查找和基于故障消息隊列機制的故障動態(tài)自主處理兩個主要組 成部分,步驟如下:
[0006] 1)實現(xiàn)基于哈希表(hash)表的故障快速查找,查找以故障代碼為關(guān)鍵字
[0007] 11)定義hash表的表項記錄,用于故障信息的管理,每個表項記錄包括:故障代 碼、故障診斷結(jié)果和用戶自定義的故障處理函數(shù),每種故障對應(yīng)一個唯一的故障代碼,即故 障代碼是表項的關(guān)鍵字;
[0008] 12)根據(jù)故障代碼這個關(guān)鍵字,利用hash函數(shù)計算向hash表中插入表項記錄以及 在hash表中查找表項記錄的位置,如果計算過程中有兩個或多個表項記錄的計算位置發(fā) 生重疊,采用線性探測再散列的方法解決;
[0009] 2)實現(xiàn)基于故障消息隊列機制的故障動態(tài)自主處理
[0010] 21)定義一個故障消息隊列,隊列中每一項至少包括故障代碼;
[0011] 22)在星載操作系統(tǒng)運行過程中,當內(nèi)核檢測到故障時,把故障代碼發(fā)送到故障消 息隊列;
[0012] 23)通過故障消息隊列取得故障代碼,根據(jù)故障代碼在hash表中進行查找,得出 故障診斷結(jié)果,并調(diào)用由用戶自定義的故障處理函數(shù)進行故障處理。
[0013] 所述步驟12)中采用線性探測再散列方法解決hash函數(shù)值沖突問題通過以下公 式進行計算:
[0014] Hi= (H(key)+d^modL, (Ii=I, 2, ???,k,kL-I
[0015] 其中,L為hash表長度,H(key)為故障代碼ercode在hash表中的位置,Hi為第 i次解決沖突的位置。
[0016] 本發(fā)明與現(xiàn)有技術(shù)相比具有如下優(yōu)點:
[0017] (1)傳統(tǒng)星載操作系統(tǒng)對故障處理是利用處理器硬件的中斷或陷阱進入異常處理 程序而實現(xiàn)的,這種方法雖然可靠、有效,但是與硬件相關(guān)性高、且處理的故障種類有限。本 發(fā)明方法完全采用軟件實現(xiàn)故障的處理,具有良好的可移植和通用性。
[0018] (2)本發(fā)明對故障信息的檢索采用hash方法,不需要進行排序,保證了處理的快 速、高效;故障數(shù)量理論上不受限制;故障處理函數(shù)用戶可定制,具有高度靈活性。
[0019] (3)本發(fā)明采用消息隊列實現(xiàn)故障信息的運行時動態(tài)處理,具有自動處理功能,不 需要人為干預;由于使用消息隊列,保證了系統(tǒng)中其他模塊的運行不會被阻塞。
【附圖說明】
[0020] 圖1為本發(fā)明星載操作系統(tǒng)故障快速自主處理方法的總體結(jié)構(gòu);
[0021] 圖2為故障信息的hash表的結(jié)構(gòu);
[0022] 圖3為基于消息隊列的故障處理機制。
【具體實施方式】
[0023] 一、方法原理
[0024] 為了進一步提高操作系統(tǒng)的可靠性、增加軟件對故障的處理能力,本發(fā)明采用軟 件方法實現(xiàn)了一種故障處理方法。該方法的主要思想是給每種故障定義一個故障代碼及其 相關(guān)信息的記錄,并建立記錄的快速查找表;在操作系統(tǒng)運行時,發(fā)生故障時把故障代碼通 過消息機制發(fā)送給故障消息隊列,可以由其他任務(wù)從故障消息隊列中取出故障代碼,并根 據(jù)故障代碼快速檢索查找表,進行相應(yīng)的處理。
[0025] 由于利用hash表技術(shù)實現(xiàn)操作系統(tǒng)內(nèi)核級別對故障的快速檢索,加快了故障處 理的速度,減少了故障處理對處理器的占用率。
[0026] 由于采用消息隊列機制實現(xiàn)對故障的收集和處理,在時間上起到了緩沖的作用, 解決了故障發(fā)現(xiàn)任務(wù)與故障診斷和處理任務(wù)之間的同步問題,同時避免了故障處理過程中 占用其他任務(wù)的執(zhí)行時間,從機理上避免了其他任務(wù)發(fā)生阻塞的可能性。
[0027] 二、設(shè)計方案
[0028] 給每種故障定義一個故障代碼,并以故障代碼為關(guān)鍵字建立故障記錄快速查找 表;操作系統(tǒng)運行過程中,如果發(fā)生故障則把故障代碼發(fā)送到消息隊列,從消息隊列中取得 故障消息后,根據(jù)故障代碼快速檢索查找表,進行相應(yīng)的處理。本發(fā)明包括基于hash表的 故障快速查找和基于故障消息隊列機制的故障動態(tài)自主處理兩個主要組成部分,本發(fā)明的 方案如圖1所示。
[0029] 利用本發(fā)明的方法實現(xiàn)上述功能如下:
[0030] 1)為每種故障分配一個故障代碼,定義故障診斷結(jié)果,并由用戶定義故障處理函 數(shù),作為一個記錄項,以hash查找表的方式組織,實現(xiàn)以故障代碼為關(guān)鍵字的快速插入和 快速查找。
[0031] 11)定義hash表的表項記錄,用于故障信息的管理,每個表項記錄包括:故障代 碼、故障診斷結(jié)果和用戶自定義的故障處理函數(shù),每種故障對應(yīng)一個唯一的故障代碼,即故 障代碼是表項的關(guān)鍵字。
[0032] 12)根據(jù)故障代碼這個關(guān)鍵字,利用hash函數(shù)計算向hash表中插入表項記錄以及