AutoSar Classic Platform Os功能安全機制解析
前言
功能安全(Function Safety,有時也簡稱為FuSa)在工業(yè)控制、智能網(wǎng)聯(lián)汽車、航空航天等安全關(guān)鍵領(lǐng)域中已經(jīng)有了成熟的應(yīng)用。在國內(nèi)和國際,也有眾多標(biāo)準(zhǔn)定義了它的思路、流程和規(guī)范。本系列文章試圖以淺顯的方式,為這方面的初學(xué)者提供一些有益的參考。
一、如何理解功能安全?
我們不妨先來看看國家標(biāo)準(zhǔn)是怎么描述的(GB/T 20438):
這里有幾個關(guān)鍵點:
1. 功能安全針對誰
功能安全只針對“電氣、電子或者可編程電子設(shè)備”,我們在汽車領(lǐng)域中常見的ECU,就屬于這類設(shè)備。有些讀者可能會問:汽車上的機械裝置,比如剎車踏板,在不在功能安全研究的范圍?答案是:不在。
在工程上,通常認為機械裝置是絕對可靠的。雖然機械裝置也可能存在設(shè)計缺陷,或者原材料供應(yīng)或者在生產(chǎn)階段引入的缺陷,但這些是質(zhì)量管理要解決的問題,而不在功能安全的范疇內(nèi)。
2. 如何理解失效
失效很容易理解,國標(biāo)里面也講的很清楚。但是,有一個概念常常和它形成混淆,那就是“缺陷”。在功能安全培訓(xùn)一開始,也有同學(xué)常常問一個問題:如果這個ECU過了功能安全認證,是不是說ECU里面的軟件就沒有Bug了?當(dāng)然不是這樣的。
眾所周知,沒有缺陷的軟件是不存在的。功能安全的目標(biāo)是通過一定的流程和技術(shù)手段,確保這個ECU失效后,能夠有其他手段使系統(tǒng)不會產(chǎn)生預(yù)期的危害,或者將危害降低到可以接受的范圍內(nèi)。例如,我們可以在系統(tǒng)中增加一個ECU作為它的備份,如果另一個ECU失效,可以第一時間接替失效的ECU,避免出現(xiàn)列車碰撞、剎車失靈等危害。雖然標(biāo)準(zhǔn)中會引入保證軟件質(zhì)量的方法和技術(shù)要求,但是消滅缺陷不是功能安全的最終目標(biāo)。
3. 幾個關(guān)鍵概念
[1]共因失效(Common Cause Failure, CCF)
共因失效是在多通道系統(tǒng)里,兩個或多個通道由于共同故障導(dǎo)致的失效。避免共因失效最主要的手段是隔離和異構(gòu)。一方面,在設(shè)計上讓各個通道相互獨立;另一方面,各個通道盡量采用不同的技術(shù)來實現(xiàn),如采用不同的物理原理的傳感器(壓力/溫度…)。
[2]安全完整性等級(Safety Integrity Level, SIL)
SIL越高,故障的風(fēng)險也越大,對安全性的要求也越高。GB/T 20438把安全完整性等級分為4個級別:SIL1/SIL2/SIL3/SIL4。SIL4對應(yīng)最高安全完整性等級。
[3]常用的安全技術(shù):三板斧之冗余
如上面這張圖,冗余的關(guān)鍵在于:各個通道需要保持獨立性,避免產(chǎn)生上面講過的共因失效(CCF)。
[4]常用的安全技術(shù):三板斧之診斷
通過診斷通道對通道A的運行狀態(tài)或者輸出進行監(jiān)控,如果發(fā)現(xiàn)異常,則運行異常處理程序。異常處理程序可以是采用重啟通道A等手段使通道A重新恢復(fù)正常工作,也可以是給整個系統(tǒng)輸出錯誤信息,從而將通道A失效的影響降低到可接受的范圍內(nèi)。
[5]常用的安全技術(shù):三板斧之端到端通信保護
端到端通信保護的目標(biāo)是確保參與通信的兩端A和B,它們之間的數(shù)據(jù)收到不存在重復(fù)、丟失、延遲、錯誤、第三方篡改等異常情況。常用的措施有:給數(shù)據(jù)加CRC校驗,增加計數(shù)校驗等。
二、AutoSar Classic Platform Os功能安全機制解析
AUTOSAR是AUTomotive Open System Architecture的縮寫,是由全球汽車制造商、部件供應(yīng)商及其他電子、半導(dǎo)體和軟件系統(tǒng)公司聯(lián)合建立的一套體系結(jié)構(gòu)。這個體系結(jié)構(gòu)亮點很多,覆蓋面也很大,本文僅以其中的Classic Platform Os這一個模塊為例,看它采用了哪些技術(shù)來達到功能安全預(yù)期目標(biāo)。
1. AutoSar Classic Platform Os簡介
AutoSar Classic Platform Os是AutoSar Classic Platform中定義的一個嵌入式實時操作系統(tǒng)標(biāo)準(zhǔn)。這個標(biāo)準(zhǔn)的基礎(chǔ)是汽車領(lǐng)域中已經(jīng)被成熟應(yīng)用的OSEK標(biāo)準(zhǔn)。雖然在汽車領(lǐng)域中,OSEK已經(jīng)不是什么新鮮事物,但經(jīng)過AutoSar Classic Platform擴展之后,這個系統(tǒng)形成了它的獨到之處:
1. Os_Application
在OSEK中,最基本的運行單位是任務(wù)(Task)和中斷(Isr)。而在AutoSar Classic Platform中,在任務(wù)和中斷的外面又加了一層,稱為Os_Application。
Os_Application中可以包含多個任務(wù)和中斷,這有點類似于進程和線程之間的關(guān)系,但又不完全一樣。在進行調(diào)度時,操作系統(tǒng)處理的最基本單位仍然是任務(wù),Os_Application只是一個邏輯上的容器。這個容器的具體作用和特點,將在下文中單獨進行描述。
2. 強實時性
在同一個Os_Application內(nèi)部,任務(wù)調(diào)度方式只支持搶占式調(diào)度,高優(yōu)先級任務(wù)立即獲得處理器并進入執(zhí)行體。在Os_Application執(zhí)行結(jié)束后,還必須顯示調(diào)用TerminateApplication觸發(fā)后續(xù)的任務(wù)調(diào)度。
對于中斷,AutoSar Classic Platform繼承了OSEK的邏輯:將中斷分成兩類,一類中斷和二類中斷。一類中斷操作系統(tǒng)不感知,可以搶斷正在運行的任務(wù),中斷退出時也不觸發(fā)任務(wù)調(diào)度,非常適合對中斷處理實時性有很高要求的場合。二類中斷操作系統(tǒng)可以感知,在退出中斷時,操作系統(tǒng)可以觸發(fā)任務(wù)調(diào)度。通過以上設(shè)計,使AutoSar Classic Platform Os具備了很強的實時性。
3. 靜態(tài)資源分配
AutoSar Classic Platform Os中,不管是任務(wù)還是中斷,都是靜態(tài)配置的,這和通常見到的Ucos這類操作系統(tǒng)有本質(zhì)區(qū)別。
在Ucos中,通過調(diào)用OsTaskCreate來創(chuàng)建一個任務(wù)。而在AutoSar Classic Platform Os中,每個任務(wù)所需要的參數(shù)(任務(wù)ID、優(yōu)先級等)和所需要的資源(任務(wù)堆棧、執(zhí)行體指針等),在Os配置階段(在編譯之前),通過專用的配置工具,結(jié)合源代碼自動生成技術(shù),就被靜態(tài)指定了。在Os運行時,只能決定哪個任務(wù)在什么時候運行,在什么時候退出,而不能對已經(jīng)指定的任務(wù)資源進行動態(tài)創(chuàng)建和回收。
2. 空間分區(qū)和時間分區(qū)
內(nèi)存分區(qū)的作用是使不同功能安全等級的應(yīng)用在同一個操作系統(tǒng)上共存,且互不影響。比如在一個操作系統(tǒng)之上,構(gòu)建了3個應(yīng)用:應(yīng)用1滿足SIL2功能安全等級要求,應(yīng)用2滿足SIL4功能安全等級要求,應(yīng)用3滿足沒有功能安全等級要求。很顯然,這三個應(yīng)用所采用的功能安全等級不同,所以在運行時必須確保相互獨立,才能避免由于某個應(yīng)用失效而對其他應(yīng)用產(chǎn)生不利影響。對于應(yīng)用來說,確保相互獨立,主要從兩方面入手:空間和時間,即所謂的空間分區(qū)和時間分區(qū)。而這也是功能安全標(biāo)準(zhǔn)中所要求的,如前面提到的GB/T 20438以及汽車領(lǐng)域中的ISO26262。AutoSar Classic Platform Os也正是針對ISO26262的要求進行了相應(yīng)設(shè)計。
1. 空間分區(qū)
在 AutoSar Classic Platform Os中,一個Os_Application就是一個應(yīng)用,包含了若干任務(wù)和中斷。在存儲上,Os_Application無非就是由代碼段和數(shù)據(jù)段構(gòu)成的。這里的數(shù)據(jù)段包含了像堆棧、BSS段等,因為這些段也都是人為定義的,其本質(zhì)上也都可以算在數(shù)據(jù)段里面。所以,空間分區(qū)實質(zhì)上就是把各個Os_Application的代碼段和數(shù)據(jù)段進行隔離,使不同Os_Application只能執(zhí)行自己的代碼段,可以受控訪問其他Os_Application的數(shù)據(jù)段,這樣一來,就可以避免Os_Application之間產(chǎn)生不利的相互影響。
同時,在空間分區(qū)機制中,還涉及到用戶態(tài)和特權(quán)態(tài)的切換。用戶態(tài)和特權(quán)態(tài)是處理器的兩種工作狀態(tài)。當(dāng)處理器工作在用戶態(tài)時,應(yīng)用代碼不能訪問處理器核心控制寄存器等硬件資源,否則會產(chǎn)生異常(Trap)。如果要訪問,則必須在應(yīng)用代碼中明確觸發(fā)一個預(yù)定義好的異常,從而使處理器進入特權(quán)態(tài),才能訪問這些受控硬件資源。通過這種機制,就可以避免應(yīng)用代碼對關(guān)鍵硬件資源產(chǎn)生非法訪問。很明顯,操作系統(tǒng)應(yīng)該工作在特權(quán)態(tài)下,處于用戶態(tài)的應(yīng)用代碼進出特權(quán)態(tài)的接口,以及在特權(quán)態(tài)下所執(zhí)行的各種操作,都應(yīng)該由操作系統(tǒng)來提供。
空間分區(qū)這一機制在高安全嵌入式實時操作系統(tǒng)中被廣泛應(yīng)用,如Ucos安全版、VxWorks認證版、Qnx微內(nèi)核操作系統(tǒng)等。但是 AutoSar Classic Platform Os所設(shè)計的空間分區(qū)方案有自己的特點:AutoSar Classic Platform Os把Os_Application分為兩類,一是可信Os_Application,二是不可信Os_Application。在這里,可信Os_Application主要是指由廠商自行開發(fā)的應(yīng)用,而不可信Os_Application主要是指由第三方開發(fā)的應(yīng)用??尚臤s_Application可以和操作系統(tǒng)一起,運行在處理器特權(quán)態(tài)下,不可信Os_Application必須運行在用戶態(tài)下。這樣做的好處是能夠減少Os_Application進出特權(quán)態(tài)而產(chǎn)生的消耗??蓜e小看這個消耗:由用戶態(tài)進入特權(quán)態(tài),需要引發(fā)一次異常,而異??梢钥醋鍪侵袛?,那么就會多出1個中斷響應(yīng)時間。如果需要頻繁進入特權(quán)態(tài),那么這個時間累積起來,還是非??捎^的。像Qnx這樣的微內(nèi)核操作系統(tǒng),把操作系統(tǒng)內(nèi)核放在特權(quán)態(tài),而把外設(shè)驅(qū)動、上層應(yīng)用等統(tǒng)統(tǒng)作為應(yīng)用看待,放在用戶態(tài)。這樣做雖然有它的好處,但是也帶來了由于頻繁進行處理器狀態(tài)切換而產(chǎn)生的性能問題。
那么,空間分區(qū)如何實現(xiàn)呢?這里就要依賴于處理器本身。只有處理器具備MMU(內(nèi)存管理單元),或者MPU(內(nèi)存保護單元),才能實現(xiàn)這一機制。MMU把存儲空間劃分成多個頁面(Page),每個頁面可以設(shè)置訪問權(quán)限(只讀、可寫、可執(zhí)行等),這樣以來,就可以把Os_Application的代碼段和數(shù)據(jù)段映射到不同的頁面上,就可以實現(xiàn)不同Os_Application之間的隔離。使用MPU也可以實現(xiàn),只不過MPU在靈活性上通常比MMU要差一些。
2. 時間分區(qū)
時間分區(qū)是指,不同應(yīng)用在運行時間上相互隔離,不能產(chǎn)生相互影響。例如,應(yīng)用1出現(xiàn)死循環(huán),占著處理器不放,其他應(yīng)用都沒法運行,就是一個典型的例子。
時間分區(qū)的實現(xiàn)機制相對簡單一些。一般的做法是采用時間片輪轉(zhuǎn)的調(diào)度策略,就是每個任務(wù)運行完自己的時間片之后,就切換到其他任務(wù)運行,這樣就可以避免由單一任務(wù)運行時間過長,使其他任務(wù)“餓死”的問題。但在AutoSar Classic Platform Os中,由于沒有時間片輪轉(zhuǎn)調(diào)度機制,所以也就不能采用這種方式。
AutoSar Classic Platform Os定義了時間保護機制,變相實現(xiàn)時間分區(qū)。時間保護機制針對任務(wù)或者第二類中斷,通過預(yù)先配置的時間上限,來控制任務(wù)或者中斷的執(zhí)行時間、執(zhí)行頻次和鎖定資源的時間,具體如下:
1、執(zhí)行時間上限:當(dāng)任務(wù)或者中斷的執(zhí)行時間達到該上限時,操作系統(tǒng)強制結(jié)束該任務(wù)或者中斷,避免任務(wù)或者中斷運行時間過長;
2、間隔時間下限:當(dāng)任務(wù)或者中斷到來的間隔小于該下限時,操作系統(tǒng)需要捕獲這一異常,避免系統(tǒng)出現(xiàn)時序錯誤;
3、鎖定資源上限:當(dāng)任務(wù)或者中斷鎖定資源的時間達到該上限時,操作系統(tǒng)強制結(jié)束該任務(wù)或者中斷,避免任務(wù)或者中斷長時間占用資源而阻塞其他任務(wù)或者中斷。
3. 保護類機制
AutoSar Classic Platform Os在錯誤處理方面主要包括三塊內(nèi)容:堆棧保護、服務(wù)保護和Hook機制。
1. 堆棧保護
堆棧保護的主要目的是避免出現(xiàn)堆棧溢出。堆棧是任務(wù)或者中斷執(zhí)行所必須依賴的數(shù)據(jù)結(jié)構(gòu)。堆棧通常用來存放函數(shù)入?yún)ⅰ⒊鰠?、局部變量等運行時數(shù)據(jù)。堆棧有生長方向,向低地址生長還是向高地址生長,不同處理器定義有所不同。
堆棧保護的實現(xiàn)同樣依賴于處理器是否具備MMU或者MPU。如果具備,則利用MMU或者MPU的頁保護/段保護機制對堆棧進行保護,如果堆棧指針超出了頁面/段的保護范圍,則會產(chǎn)生異常。如果不具備MMU或者MPU,AutoSar Classic Platform Os同樣要求實現(xiàn)一種簡化的堆棧保護機制,但是這個時候,只能在發(fā)生任務(wù)調(diào)度或者中斷發(fā)生時去判斷任務(wù)或者中斷是否已經(jīng)發(fā)生了堆棧溢出,而無法在任務(wù)或者中斷執(zhí)行過程中實時監(jiān)控。
對于不具備MMU或者MPU的場景,這里介紹一種實現(xiàn)方法:
1、在操作系統(tǒng)初始化階段,將每個任務(wù)或者中斷所對應(yīng)的堆棧(就是一個靜態(tài)數(shù)組)初始化為預(yù)定義的魔術(shù)字,例如0xCC;
2、在任務(wù)調(diào)度時,在進入待執(zhí)行任務(wù)體之前,首先判斷該任務(wù)堆棧頂端數(shù)組元素值是否仍未預(yù)定義的魔術(shù)字0xCC,如果不是,則說明棧頂已經(jīng)被改寫過,說明任務(wù)已經(jīng)用滿了整個堆棧,有可能產(chǎn)生堆棧溢出;
3、在中斷(二類中斷)到來時,咱中斷響應(yīng)函數(shù)(Isr)頭部,執(zhí)行第二點中的操作,判斷中斷是否已經(jīng)用滿了整個堆棧。
2. 服務(wù)保護
服務(wù)保護中的“服務(wù)”是指操作系統(tǒng)對外提供的API編程接口,服務(wù)保護的意義就是要確保API編程接口本身抵抗出錯的能力。具體包含以下三類場景:
1、API接口入?yún)⒑戏ㄐ詸z查;
2、API接口上下文錯誤檢查。例如:在禁止調(diào)用某接口的場景下調(diào)用了該接口,比如在操作系統(tǒng)啟動時,在StartupHook里面不能調(diào)動啟動任務(wù)的接口;
3、排除可能導(dǎo)致出錯的調(diào)用場景。例如:在任務(wù)結(jié)束時,必須調(diào)用相應(yīng)接口釋放所占用的資源;在Os_Application之間相互調(diào)用接口時,需要檢查該接口的調(diào)用權(quán)限。
服務(wù)保護貫徹了功能安全標(biāo)準(zhǔn)中提倡防御式編程這一思想。
3. Hook機制
Hook顧名思義就是:鉤子。它的作用是給用戶向操作系統(tǒng)的執(zhí)行過程插入自定義代碼提供一種接口。以StartupHook為例:這個Hook由用戶自行定義,其調(diào)用的時間點是在操作系統(tǒng)初始化過程中。通過這個接口,用戶可以向系統(tǒng)初始化過程插入自己想要的代碼,例如初始化某些硬件寄存器、初始化某些全局變量等等。
AutoSar Classic Platform Os中定義的Hook類型很多,大多數(shù)是用來為用戶插入錯誤處理代碼而提供的,這里就不再一一贅述了。文章來源:http://www.zghlxwxcb.cn/news/detail-622419.html
結(jié)語:功能安全的思想和方法千頭萬緒,AutoSar Classic Platform Os也只是涉及到了其中一部分機制,其他相關(guān)內(nèi)容后續(xù)再和大家分享。文章來源地址http://www.zghlxwxcb.cn/news/detail-622419.html
到了這里,關(guān)于AutoSar Classic Platform Os功能安全機制解析的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!