????????????????????????????第三章 QNX對HA的適用性
????????????????????????????????????????????????(The QNX Approach to HA)
?一: 重置“解決方案”
????????處理軟件故障的傳統(tǒng)方法包括以下機(jī)制:
? ? ?? (1)硬件/軟件看門狗
這是一個眾所周知的無故障硬件。它觸發(fā)某些代碼來檢查系統(tǒng)的完備性。這種完備性檢查通常涉及檢查一組寄存器,這些寄存器是由正常運(yùn)行的軟件組件不斷更新的。但是當(dāng)其中一個組件不能正常工作時,系統(tǒng)就會被重置。
? ? ?? (2)手動操作介入
許多系統(tǒng)的設(shè)計并沒有包含故障自動檢測機(jī)制,而是依賴于手動方式——由操作員監(jiān)視系統(tǒng)的健康狀況。如果系統(tǒng)狀態(tài)被視為無效的,則操作員就會采取適當(dāng)?shù)牟僮?,通常包括系統(tǒng)重置。
? ? ?? (3)內(nèi)存錯誤約束
操作系統(tǒng)(和硬件平臺)通常包含了一些特性,這些特性允許您在程序訪問不屬于自己的內(nèi)存時生成錯誤。一旦發(fā)生這種情況,程序就變得不可靠了。對于大多數(shù)實時操作人員來說,其結(jié)果是必須重新設(shè)置系統(tǒng),以便恢復(fù)到正常的操作狀態(tài)。
? ? ?? 所有以上這些方法在檢測軟件故障方面都比較成功。但是這種檢測的最終結(jié)果,特別是當(dāng)面對多個可能獨(dú)立的軟件組件中的大量錯誤時,系統(tǒng)重置是相當(dāng)激進(jìn)的方式。
二:傳統(tǒng)實時操作系統(tǒng)(RTOS)體系結(jié)構(gòu)
? ? ?? 傳統(tǒng)的實時嵌入式系統(tǒng)的架構(gòu)是造成系統(tǒng)恢復(fù)不佳的主要原因之一。這些系統(tǒng)的核心是一個實時執(zhí)行程序——一個由RTOS本身和許多任務(wù)組成的單一內(nèi)存映像。
? ? ?? 由于所有任務(wù)(包括關(guān)鍵的系統(tǒng)級服務(wù))都共享相同的地址空間,因此當(dāng)一個任務(wù)的完整性受到質(zhì)疑時,整個系統(tǒng)的完整性就會受到威脅。如果設(shè)備驅(qū)動程序之類的單個組件發(fā)生故障,RTOS本身也可能出現(xiàn)故障。在HA術(shù)語中,每個軟件組件應(yīng)該成為一個單點(diǎn)故障(SPOF)。在這種環(huán)境中,惟一可靠的恢復(fù)機(jī)制是重置系統(tǒng)并從頭開始。
? ? ?? 這樣的實時系統(tǒng)提供了非常低的故障恢復(fù)粒度,使得HA計劃和處理故障的過程看起來很簡單(系統(tǒng)重置),但通常成本非常高(在停機(jī)時間、系統(tǒng)恢復(fù)等方面)。對于一些嵌入式應(yīng)用程序,復(fù)位可能涉及一個專門的、耗時的過程,以使系統(tǒng)在現(xiàn)場完全恢復(fù)運(yùn)行。
三: 模塊化即粒度化(Modularity means granularity)
? ? ?? 這里真正需要的是一種更加模塊化的方法。系統(tǒng)架構(gòu)師經(jīng)常從設(shè)計/實現(xiàn)的角度將他們的系統(tǒng)解耦和模塊化。理想情況下,這些模塊不僅是設(shè)計的重點(diǎn),而且是故障恢復(fù)過程的重點(diǎn),因此,如果一個模塊發(fā)生故障,那么只有該模塊需要重置,系統(tǒng)其余部分的完整性應(yīng)保持不變。換句話說,那個特定的模塊應(yīng)該是SPOF。
? ? ? ? 這種模塊化方法還將幫助我們解決這樣一個事實,即系統(tǒng)重新啟動的平均修復(fù)時間(MTTR)比替換單個正在運(yùn)行的任務(wù)的MTTR要長得多。
? ? ? ? 這種對單個任務(wù)恢復(fù)的增加粒度類型正是QNX微內(nèi)核所提供的。QNX實時操作系統(tǒng)的體系結(jié)構(gòu)本身提供了許多固有的HA特性,以至于許多QNX用戶認(rèn)為這些特性是理所當(dāng)然的,并且常常在系統(tǒng)中設(shè)計可恢復(fù)性,而不用過多考慮這些特性。
? ? ? ? 讓我們簡要地看一下QNX RTOS的關(guān)鍵特性,并了解系統(tǒng)設(shè)計人員如何輕松地利用這些內(nèi)置HA-ready特性來構(gòu)建有效的HA系統(tǒng)。
四: HA的本質(zhì)
????????QNX微內(nèi)核架構(gòu)的三個關(guān)鍵因素直接組成了HA的本質(zhì):
? ? ?? 1. ? QNX Neutrino微內(nèi)核
? ? ? ? ? ? ? 只提供一些基本的服務(wù)(例如消息傳遞和實時調(diào)度)。這樣的結(jié)果就是能夠提供一個健壯、可靠的系統(tǒng)——內(nèi)核中代碼行數(shù)越少,操作系統(tǒng)出錯的可能性就越小。此外,內(nèi)核的固定優(yōu)先級搶占式調(diào)度器確保了一個可預(yù)測的系統(tǒng)----需要單獨(dú)分析和處理的HA軟件路徑更少。
? ? ? ?? 2. ? POSIX進(jìn)程模型
? ? ?? 這意味著系統(tǒng)進(jìn)程之間的mmu支持的完整的內(nèi)存保護(hù),使得隔離和保護(hù)單個任務(wù)變得很容易。進(jìn)程模型還提供了動態(tài)的進(jìn)程創(chuàng)建和銷毀,這對于HA系統(tǒng)尤其重要,因為您可以更容易地在現(xiàn)場執(zhí)行故障檢測、恢復(fù)和實時升級。
????????POSIX API提供了一個標(biāo)準(zhǔn)的編程環(huán)境,可以幫助實現(xiàn)系統(tǒng)簡化、驗證和驗證。
????????此外,進(jìn)程模型使您可以輕松地監(jiān)視外部任務(wù),這不僅有助于故障檢測和診斷,而且還有助于服務(wù)分發(fā)。
? ? ? ? ?? 3. ?? 消息傳遞
????????在QNX實時操作系統(tǒng)中,所有進(jìn)程間通信都是通過標(biāo)準(zhǔn)的消息傳遞進(jìn)行的。對于HA系統(tǒng),這有助于任務(wù)解耦、任務(wù)簡化和服務(wù)分發(fā)。
????????本地和網(wǎng)絡(luò)遠(yuǎn)程消息傳遞是相同的,對于應(yīng)用程序?qū)嶋H上是透明的。在網(wǎng)絡(luò)分布式HA系統(tǒng)中,基于QNX消息傳遞的方法可以促進(jìn)復(fù)制、冗余和系統(tǒng)簡化。
? ? ? ? 以上這些代表了一些比較突出的面向HA的特性,當(dāng)QNX RTOS構(gòu)成HA設(shè)計的基礎(chǔ)時,這些特性就很容易顯現(xiàn)出來。