準(zhǔn)時(shí)的重要性:為嵌入式列車(chē)控制系統(tǒng)選擇操作系統(tǒng)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
為確保安全和效率,鐵路和運(yùn)輸系統(tǒng)正在實(shí)施各種保護(hù)系統(tǒng),如列車(chē)自動(dòng)保護(hù)(ATP)、積極列車(chē)控制(PTC)和基于通信的列車(chē)控制(CBTC)等。地鐵和其他軌道交通系統(tǒng)正在采用自動(dòng)列車(chē)操作(ATO)系統(tǒng)并運(yùn)行“無(wú)人駕駛”列車(chē)(沒(méi)有駕駛員或駕駛員只用來(lái)處理緊急情況的列車(chē))。
這些控制系統(tǒng)與安全息息相關(guān)。它們必須滿(mǎn)足IEC 61508和EN 5012x標(biāo)準(zhǔn)中所設(shè)定的嚴(yán)格可靠性要求。本文側(cè)重于介紹操作系統(tǒng)中對(duì)系統(tǒng)可靠性帶來(lái)最直接影響的一些特點(diǎn):確保實(shí)時(shí)性的架構(gòu)特性、故障分離和故障恢復(fù)等功能。
圖1 新西蘭的ONTRACK安裝了一個(gè)四頻道RoIP裝置,命名為ORC,作為IP網(wǎng)絡(luò)和傳統(tǒng)的VHF/IHF無(wú)線(xiàn)電網(wǎng)絡(luò)之間的橋梁,用于促進(jìn)列車(chē)安全運(yùn)行和追蹤軌道工人的位置。
標(biāo)準(zhǔn)
二十年前,歐洲電工標(biāo)準(zhǔn)化委員會(huì)頒發(fā)了鐵路應(yīng)用標(biāo)準(zhǔn)EN 50126,它定義了可靠性、可用性、可維護(hù)性和安全性的規(guī)范,同時(shí)頒布了用于鐵路控制和保護(hù)系統(tǒng)軟件的標(biāo)準(zhǔn)EN50128和用于發(fā)送信號(hào)的安全相關(guān)的電子系統(tǒng)的標(biāo)準(zhǔn)EN 50129。
EN 50128:強(qiáng)調(diào)了軟件架構(gòu)的重要性:“軟件架構(gòu)是軟件和軟件安全完整性等級(jí)開(kāi)發(fā)的基本安全策略。”規(guī)定如果要求SIL 3 或SIL 4的系統(tǒng)部署COTS(商用現(xiàn)成)軟件,“應(yīng)定義一個(gè)策略以檢測(cè)COTS軟件的故障并保護(hù)系統(tǒng)免于故障”。
可靠性和隔離性
在一個(gè)軟件系統(tǒng)中,可靠性是可用性和可靠性的組合。這些品質(zhì)主要取決于操作系統(tǒng)審計(jì)架構(gòu)。
操作系統(tǒng)架構(gòu)是整個(gè)系統(tǒng)可靠性的基礎(chǔ),它決定了將組件與不同的SIL要求進(jìn)行分離的難度和成本。
例如,一個(gè)ATO系統(tǒng)可能包含了一個(gè)顯示非關(guān)鍵信息的多媒體組件。該組件只需要達(dá)到SIL1或甚至SIL 0(EN標(biāo)準(zhǔn)為非安全相關(guān)的軟件定義了SIL 0)就可以了,而關(guān)鍵組件(處理與軌旁基礎(chǔ)設(shè)施相關(guān)的通信、管理減速和制動(dòng),報(bào)警等)則需要SIL 3或更高的認(rèn)證。一個(gè)有利于SIL 0組件分離的架構(gòu)不能在系統(tǒng)的安全關(guān)鍵部分上妥協(xié):
a) 簡(jiǎn)化設(shè)計(jì),允許以最少的集成工作為SIL 0組件使用COTS軟件
b) eli消除了為滿(mǎn)足SIL 3要求而產(chǎn)生的設(shè)計(jì)、構(gòu)建和驗(yàn)證非關(guān)鍵組件的成本。
c) 由于它減少了安全關(guān)鍵系統(tǒng)的范圍,側(cè)重于關(guān)鍵系統(tǒng)組件的開(kāi)發(fā)和驗(yàn)證,使得整體系統(tǒng)更為安全。
架構(gòu)
支持可靠性保證的操作系統(tǒng)通常被稱(chēng)為實(shí)時(shí)操作系統(tǒng)(RTOS)。實(shí)時(shí)操作系統(tǒng)的架構(gòu)是不同的。最常見(jiàn)的架構(gòu)是實(shí)時(shí)執(zhí)行、單片式和微內(nèi)核。
實(shí)時(shí)執(zhí)行
盡管已有50年歷史,實(shí)時(shí)執(zhí)行模式依然是許多實(shí)時(shí)操作系統(tǒng)的基礎(chǔ)。在此模式中,所有軟件組件—內(nèi)核、網(wǎng)絡(luò)協(xié)議棧、文件系統(tǒng)、設(shè)備驅(qū)動(dòng)程序和應(yīng)用程序均在單一的內(nèi)存地址空間里運(yùn)行。
雖然有效,但該架構(gòu)有兩大弱點(diǎn)。首先,任何模塊中的單一指針錯(cuò)誤均能破壞內(nèi)核或任何其它模塊所使用的內(nèi)存,從而可能導(dǎo)致系統(tǒng)范圍內(nèi)的故障。其次,系統(tǒng)崩潰也許沒(méi)有留下幫助識(shí)別錯(cuò)誤的診斷信息。
宏內(nèi)核
宏內(nèi)核實(shí)時(shí)操作系統(tǒng)通過(guò)使用一個(gè)架構(gòu)解決了內(nèi)存錯(cuò)誤所引起的系統(tǒng)崩潰的問(wèn)題,在該架構(gòu)里,用戶(hù)應(yīng)用程序作為內(nèi)存保護(hù)進(jìn)程而運(yùn)行。
該架構(gòu)保護(hù)了內(nèi)核免于錯(cuò)誤的用戶(hù)代碼,但內(nèi)核組件仍舊與文件系統(tǒng)、協(xié)議棧和驅(qū)動(dòng)程序共享地址空間。因此,這些服務(wù)中的任何一個(gè)錯(cuò)誤都能讓系統(tǒng)崩潰。例如,在一個(gè)Linux操作系統(tǒng)中,驅(qū)動(dòng)程序組成75%的代碼,每一行顯示能達(dá)到內(nèi)核的潛在錯(cuò)誤。與實(shí)時(shí)執(zhí)行操作系統(tǒng)一樣,單片式操作系統(tǒng)架構(gòu)的系統(tǒng)也許難于滿(mǎn)足可靠性的要求。
微內(nèi)核
在一個(gè)微內(nèi)核實(shí)時(shí)操作系統(tǒng)中,應(yīng)用程序、設(shè)備驅(qū)動(dòng)程序、文件系統(tǒng)和網(wǎng)絡(luò)協(xié)議棧存在于內(nèi)核之外的一個(gè)獨(dú)立的地址空間;它們即與內(nèi)核分離而且彼此分離。某一個(gè)組件中的故障不會(huì)波及系統(tǒng)。此外,由于它同樣以可預(yù)見(jiàn)的方式運(yùn)行,因此系統(tǒng)能重啟故障組件。
圖2 微內(nèi)核:組件彼此分離,一個(gè)組件的故障不會(huì)波及整個(gè)系統(tǒng)
對(duì)于安全相關(guān)的系統(tǒng),內(nèi)核與其它組件彼此分離是有利的。不是所有的組件都需要實(shí)現(xiàn)系統(tǒng)的安全關(guān)鍵部分所需的SIL。所要求的是較低級(jí)別的SIL組件能與安全關(guān)鍵組件分離。
這種分離也能通過(guò)虛擬機(jī)實(shí)現(xiàn)(管理程序),但這種策略通常需要更強(qiáng)大的處理器,這限制了合適的處理器的選擇并增加了成本。它也增加了系統(tǒng)的復(fù)雜程度,并可能影響實(shí)時(shí)性能。
實(shí)時(shí)操作系統(tǒng)的關(guān)鍵特點(diǎn)
微內(nèi)核架構(gòu)只是實(shí)現(xiàn)操作系統(tǒng)可靠性的一個(gè)特點(diǎn)。其它關(guān)鍵特點(diǎn)包括:
• 通過(guò)搶占低優(yōu)先級(jí)的內(nèi)核調(diào)用來(lái)滿(mǎn)足實(shí)時(shí)性的承諾
• 由于優(yōu)先級(jí)反轉(zhuǎn),防止不可預(yù)知的行為和系統(tǒng)故障
• 保證CPU資源調(diào)度的可用性以防止關(guān)鍵進(jìn)程饑餓
• 利用軟件看門(mén)狗監(jiān)視進(jìn)程,并在組件發(fā)生故障時(shí)采取糾正行動(dòng)[!--empirenews.page--]
搶占式內(nèi)核
搶占式內(nèi)核是實(shí)時(shí)操作系統(tǒng)的一個(gè)核心特點(diǎn),在一個(gè)沒(méi)有搶占式內(nèi)核調(diào)用的操作系統(tǒng)中,系統(tǒng)遇到不可預(yù)測(cè)的延遲會(huì)引起關(guān)鍵活動(dòng)錯(cuò)過(guò)截止時(shí)間— 使得系統(tǒng)無(wú)法滿(mǎn)足其可靠性的要求。
這些延遲是由高優(yōu)先級(jí)用戶(hù)線(xiàn)程等待完整的內(nèi)核調(diào)用來(lái)完成所引起的,即使這個(gè)調(diào)用是系統(tǒng)中最低級(jí)別的進(jìn)程造成的。更為糟糕的是,當(dāng)驅(qū)動(dòng)程序或其它系統(tǒng)服務(wù)(通常在內(nèi)核調(diào)用時(shí)執(zhí)行)代表客戶(hù)線(xiàn)程執(zhí)行時(shí),優(yōu)先級(jí)信息通常會(huì)丟失。
然而,在一個(gè)設(shè)計(jì)良好的實(shí)時(shí)操作系統(tǒng)中,搶占不會(huì)發(fā)生的時(shí)間窗極其短暫,通常是在納秒級(jí),實(shí)時(shí)操作系統(tǒng)對(duì)中斷被禁止的時(shí)間和搶占關(guān)閉上規(guī)定了一個(gè)上限。該上限允許開(kāi)發(fā)者確定最壞情況的延遲并在其設(shè)計(jì)中做調(diào)整。
為確??深A(yù)測(cè)性和關(guān)鍵活動(dòng)的及時(shí)完成,實(shí)時(shí)操作系統(tǒng)必須盡可能簡(jiǎn)單,以便在通過(guò)內(nèi)核的最長(zhǎng)的非搶占式代碼路徑上有一個(gè)明確的上限。通過(guò)一個(gè)包括只用短執(zhí)行路徑服務(wù)的內(nèi)核和分配給外部進(jìn)程或線(xiàn)程的密集型操作(例如進(jìn)程加載)能實(shí)現(xiàn)最佳的簡(jiǎn)易性。
優(yōu)先級(jí)繼承
優(yōu)先級(jí)反轉(zhuǎn)是一種低優(yōu)先級(jí)線(xiàn)程阻止高優(yōu)先級(jí)線(xiàn)程完成其工作的情況。表3顯示了一個(gè)低優(yōu)先級(jí)線(xiàn)程封鎖高優(yōu)先級(jí)線(xiàn)程的例子。這也許是通過(guò)同步引起(例如,警報(bào)和數(shù)據(jù)記錄器共享由鎖或信號(hào)燈控制的資源,警報(bào)等待數(shù)據(jù)記錄器解除鎖定的資源),或通過(guò)警報(bào)要求一項(xiàng)目前由數(shù)據(jù)記錄器使用的服務(wù)引起的。
在圖3的例子中,一個(gè)中等優(yōu)先級(jí)的線(xiàn)程(數(shù)據(jù)聚合器)搶占低優(yōu)先級(jí)的記錄器,但不需要該記錄器使用的資源,這使記錄器保持了資源控制。當(dāng)警報(bào)嘗試運(yùn)行,它搶占了聚合器并封鎖,但不能訪(fǎng)問(wèn)仍被記錄器控制的資源。由于警報(bào)的封鎖,調(diào)度程序?qū)ふ夷苓\(yùn)行的優(yōu)先級(jí)別最高的線(xiàn)程,并運(yùn)行聚合器,顛倒線(xiàn)程優(yōu)先級(jí)。
圖3 有了優(yōu)先級(jí)繼承,高優(yōu)先級(jí)線(xiàn)程不會(huì)被封鎖
優(yōu)先級(jí)繼承是一個(gè)阻止優(yōu)先級(jí)反轉(zhuǎn)的機(jī)制。它將高優(yōu)先級(jí)線(xiàn)程的優(yōu)先級(jí)分配給低優(yōu)先級(jí)線(xiàn)程直到線(xiàn)程完成。在上面的這個(gè)例子中,數(shù)據(jù)記錄器將繼承警報(bào)的優(yōu)先級(jí),因此不能被數(shù)據(jù)聚合器搶占。它將完成并恢復(fù)到原來(lái)的優(yōu)先級(jí),而且警報(bào)將解除封鎖并不受數(shù)據(jù)聚合器的影響,該機(jī)制在圖4中顯示。
圖4 自適應(yīng)分區(qū)是保護(hù)特定線(xiàn)程和線(xiàn)程組的一套規(guī)則
時(shí)間分區(qū)
在與安全相關(guān)的系統(tǒng)里,如果一個(gè)子系統(tǒng)缺乏CPU周期,它提供的服務(wù)也許對(duì)其它子系統(tǒng)來(lái)說(shuō)是不可用的。例如,在地鐵系統(tǒng)里,如果一個(gè)車(chē)載ATP系統(tǒng)的通信棧進(jìn)程在需要時(shí)無(wú)法響應(yīng),該車(chē)載ATP系統(tǒng)也許要與軌旁ATP基礎(chǔ)設(shè)施承擔(dān)通信中斷并開(kāi)始啟動(dòng)安全程序,減速或停止列車(chē)并中斷上下線(xiàn)的服務(wù)。
時(shí)間分區(qū)通過(guò)硬件或軟件的手段強(qiáng)制分配CPU預(yù)算,解決資源饑餓。它可以防止進(jìn)程或線(xiàn)程壟斷其它進(jìn)程或線(xiàn)程需要的CPU周期??赡艹霈F(xiàn)兩種類(lèi)型的分區(qū):靜態(tài)和自適應(yīng)。
在靜態(tài)分區(qū)中,任務(wù)在區(qū)內(nèi)分組,每個(gè)區(qū)分配了一定比例的CPU時(shí)間。沒(méi)有一個(gè)任務(wù)在任何區(qū)內(nèi)能消耗超過(guò)分區(qū)預(yù)先確定的CPU時(shí)間。通過(guò)確保每個(gè)分區(qū)都能得到一定的CPU時(shí)間,該限制確保所有的關(guān)鍵進(jìn)程總是能夠保持運(yùn)行。
不幸的是,沒(méi)有進(jìn)程能夠使用比分配給它分區(qū)限定的更多的CPU周期,即使其它分區(qū)沒(méi)有使用所有分配給它們的時(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)程競(jìng)爭(zhēng)周期時(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í)間。
軟件看門(mén)狗
要求可用性保證的系統(tǒng)會(huì)實(shí)施以硬件為導(dǎo)向的高可用性解決方案和軟件看門(mén)狗。
軟件看門(mén)狗是一個(gè)監(jiān)測(cè)系統(tǒng)并進(jìn)行多階段恢復(fù)或清除關(guān)閉的一個(gè)用戶(hù)空間進(jìn)程??撮T(mén)狗必須自我檢測(cè)并彈性處理內(nèi)部故障。它如果意外停止,必須通過(guò)將其任務(wù)移交給鏡像進(jìn)程從而立即、完全重建其自我狀態(tài)。
如發(fā)生故障,看門(mén)狗可以執(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)重要,看門(mén)狗可以執(zhí)行可控的關(guān)閉或重啟整個(gè)系統(tǒng)并發(fā)出報(bào)警。
最后,軟件看門(mén)狗能夠監(jiān)測(cè)傳統(tǒng)的硬件看門(mén)狗不可見(jiàn)的系統(tǒng)事件。例如,硬件看門(mén)狗能確保驅(qū)動(dòng)程序正服務(wù)于硬件,但可能無(wú)法檢測(cè)到其他程序是否正確的與該驅(qū)動(dòng)程序溝通。而軟件看門(mén)狗可以彌補(bǔ)這一差距,當(dāng)它檢測(cè)到一個(gè)內(nèi)部異常時(shí)能夠采取行動(dòng)。