準(zhǔn)時(shí)的重要性:為嵌入式列車控制系統(tǒng)選擇操作系統(tǒng)
搶占式內(nèi)核
搶占式內(nèi)核是實(shí)時(shí)操作系統(tǒng)的一個(gè)核心特點(diǎn),在一個(gè)沒有搶占式內(nèi)核調(diào)用的操作系統(tǒng)中,系統(tǒng)遇到不可預(yù)測的延遲會引起關(guān)鍵活動(dòng)錯(cuò)過截止時(shí)間— 使得系統(tǒng)無法滿足其可靠性的要求。
這些延遲是由高優(yōu)先級用戶線程等待完整的內(nèi)核調(diào)用來完成所引起的,即使這個(gè)調(diào)用是系統(tǒng)中最低級別的進(jìn)程造成的。更為糟糕的是,當(dāng)驅(qū)動(dòng)程序或其它系統(tǒng)服務(wù)(通常在內(nèi)核調(diào)用時(shí)執(zhí)行)代表客戶線程執(zhí)行時(shí),優(yōu)先級信息通常會丟失。
然而,在一個(gè)設(shè)計(jì)良好的實(shí)時(shí)操作系統(tǒng)中,搶占不會發(fā)生的時(shí)間窗極其短暫,通常是在納秒級,實(shí)時(shí)操作系統(tǒng)對中斷被禁止的時(shí)間和搶占關(guān)閉上規(guī)定了一個(gè)上限。該上限允許開發(fā)者確定最壞情況的延遲并在其設(shè)計(jì)中做調(diào)整。
為確保可預(yù)測性和關(guān)鍵活動(dòng)的及時(shí)完成,實(shí)時(shí)操作系統(tǒng)必須盡可能簡單,以便在通過內(nèi)核的最長的非搶占式代碼路徑上有一個(gè)明確的上限。通過一個(gè)包括只用短執(zhí)行路徑服務(wù)的內(nèi)核和分配給外部進(jìn)程或線程的密集型操作(例如進(jìn)程加載)能實(shí)現(xiàn)最佳的簡易性。
優(yōu)先級繼承
優(yōu)先級反轉(zhuǎn)是一種低優(yōu)先級線程阻止高優(yōu)先級線程完成其工作的情況。表3顯示了一個(gè)低優(yōu)先級線程封鎖高優(yōu)先級線程的例子。這也許是通過同步引起(例如,警報(bào)和數(shù)據(jù)記錄器共享由鎖或信號燈控制的資源,警報(bào)等待數(shù)據(jù)記錄器解除鎖定的資源),或通過警報(bào)要求一項(xiàng)目前由數(shù)據(jù)記錄器使用的服務(wù)引起的。
在圖3的例子中,一個(gè)中等優(yōu)先級的線程(數(shù)據(jù)聚合器)搶占低優(yōu)先級的記錄器,但不需要該記錄器使用的資源,這使記錄器保持了資源控制。當(dāng)警報(bào)嘗試運(yùn)行,它搶占了聚合器并封鎖,但不能訪問仍被記錄器控制的資源。由于警報(bào)的封鎖,調(diào)度程序?qū)ふ夷苓\(yùn)行的優(yōu)先級別最高的線程,并運(yùn)行聚合器,顛倒線程優(yōu)先級。
圖3 有了優(yōu)先級繼承,高優(yōu)先級線程不會被封鎖
優(yōu)先級繼承是一個(gè)阻止優(yōu)先級反轉(zhuǎn)的機(jī)制。它將高優(yōu)先級線程的優(yōu)先級分配給低優(yōu)先級線程直到線程完成。在上面的這個(gè)例子中,數(shù)據(jù)記錄器將繼承警報(bào)的優(yōu)先級,因此不能被數(shù)據(jù)聚合器搶占。它將完成并恢復(fù)到原來的優(yōu)先級,而且警報(bào)將解除封鎖并不受數(shù)據(jù)聚合器的影響,該機(jī)制在圖4中顯示。
圖4 自適應(yīng)分區(qū)是保護(hù)特定線程和線程組的一套規(guī)則
時(shí)間分區(qū)
在與安全相關(guān)的系統(tǒng)里,如果一個(gè)子系統(tǒng)缺乏CPU周期,它提供的服務(wù)也許對其它子系統(tǒng)來說是不可用的。例如,在地鐵系統(tǒng)里,如果一個(gè)車載ATP系統(tǒng)的通信棧進(jìn)程在需要時(shí)無法響應(yīng),該車載ATP系統(tǒng)也許要與軌旁ATP基礎(chǔ)設(shè)施承擔(dān)通信中斷并開始啟動(dòng)安全程序,減速或停止列車并中斷上下線的服務(wù)。
時(shí)間分區(qū)通過硬件或軟件的手段強(qiáng)制分配CPU預(yù)算,解決資源饑餓。它可以防止進(jìn)程或線程壟斷其它進(jìn)程或線程需要的CPU周期??赡艹霈F(xiàn)兩種類型的分區(qū):靜態(tài)和自適應(yīng)。
在靜態(tài)分區(qū)中,任務(wù)在區(qū)內(nèi)分組,每個(gè)區(qū)分配了一定比例的CPU時(shí)間。沒有一個(gè)任務(wù)在任何區(qū)內(nèi)能消耗超過分區(qū)預(yù)先確定的CPU時(shí)間。通過確保每個(gè)分區(qū)都能得到一定的CPU時(shí)間,該限制確保所有的關(guān)鍵進(jìn)程總是能夠保持運(yùn)行。
不幸的是,沒有進(jìn)程能夠使用比分配給它分區(qū)限定的更多的CPU周期,即使其它分區(qū)沒有使用所有分配給它們的時(shí)間。因此,靜態(tài)分區(qū)白白浪費(fèi)了CPU周期并降低了系統(tǒng)處理高峰需求的能力。
與靜態(tài)分區(qū)一樣,自適應(yīng)分區(qū)為進(jìn)程或進(jìn)程組保留了CPU周期。然而,不像靜態(tài)分區(qū),自適應(yīng)分區(qū)使用動(dòng)態(tài)調(diào)度算法,重新分配未使用的CPU周期給需要的分區(qū)。只有當(dāng)CPU運(yùn)行時(shí),它才執(zhí)行分區(qū)預(yù)算。自適應(yīng)分區(qū)從而讓系統(tǒng)以100% 的能力運(yùn)行,僅當(dāng)一個(gè)分區(qū)以上的進(jìn)程競爭周期時(shí),它才執(zhí)行分區(qū)預(yù)算。
此外,自適應(yīng)分區(qū)基于預(yù)先確定的標(biāo)準(zhǔn),能在系統(tǒng)運(yùn)行時(shí)調(diào)整預(yù)算。例如,一個(gè)負(fù)責(zé)制動(dòng)調(diào)整的分區(qū)也許在每小時(shí)低于20公里的速度時(shí)被分配30%的CPU時(shí)間,而在更高速度時(shí)分配到45%的CPU時(shí)間。
軟件看門狗
要求可用性保證的系統(tǒng)會實(shí)施以硬件為導(dǎo)向的高可用性解決方案和軟件看門狗。
軟件看門狗是一個(gè)監(jiān)測系統(tǒng)并進(jìn)行多階段恢復(fù)或清除關(guān)閉的一個(gè)用戶空間進(jìn)程??撮T狗必須自我檢測并彈性處理內(nèi)部故障。它如果意外停止,必須通過將其任務(wù)移交給鏡像進(jìn)程從而立即、完全重建其自我狀態(tài)。
如發(fā)生故障,看門狗可以執(zhí)行多種操作以確保系統(tǒng)安全性并恢復(fù)。例如,它能夠中止然后重啟故障進(jìn)程,避免系統(tǒng)重啟。或者,它也能終止該進(jìn)程和相關(guān)進(jìn)程,初始化硬件到一個(gè)安全狀態(tài),然后以協(xié)調(diào)的方式重新啟動(dòng)終止的進(jìn)程?;蛘?,如果故障至關(guān)重要,看門狗可以執(zhí)行可控的關(guān)閉或重啟整個(gè)系統(tǒng)并發(fā)出報(bào)警。
最后,軟件看門狗能夠監(jiān)測傳統(tǒng)的硬件看門狗不可見的系統(tǒng)事件。例如,硬件看門狗能確保驅(qū)動(dòng)程序正服務(wù)于硬件,但可能無法檢測到其他程序是否正確的與該驅(qū)動(dòng)程序溝通。而軟件看門狗可以彌補(bǔ)這一差距,當(dāng)它檢測到一個(gè)內(nèi)部異常時(shí)能夠采取行動(dòng)。本文引用地址:http://www.ex-cimer.com/article/159690.htm linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
評論