E2E功能安全(Functional Safety)是一項系統(tǒng)特性,由于基于功能安全的設(shè)計會影響到系統(tǒng)設(shè)計,所以從系統(tǒng)開發(fā)初始階段就要進(jìn)行考慮。由于軟件的復(fù)雜度會影響 到功能安全的設(shè)計,所以在AUTOSAR規(guī)范中,包含了部分與功能安全相關(guān)的需求,這些新技術(shù)和概念能夠幫助降低功能安全相關(guān)組件的復(fù)雜度。不過需要強(qiáng)調(diào)的是,AUTOSAR雖然通過提供安全措施和機(jī)制來支持基于功能安全產(chǎn)品開發(fā),但這些獨立的安全措施(Safety Measure)并不能形成整體的安全解決方案。
在功能安全標(biāo)準(zhǔn)(ISO 26262 2018, Part 6)中,提到了要避免軟件相關(guān)元素之間干擾(Freedom from Interference between software elements)。軟件之間的相互干擾主要集中在軟件的執(zhí)行時間(Timing),軟件間的死鎖(Dead locks,Live locks),內(nèi)存使用(Memory),信息交換(Information Exchange)。
本文主要介紹一下AUTOSAR規(guī)范中對于軟件內(nèi)存分區(qū)的保護(hù)措施。
1 失效模式
基于組件化設(shè)計的嵌入式系統(tǒng)中,通常會同時包含不同ASIL等級的功能安全相關(guān)組件(包括非功能安全相關(guān)的組件)。低ASIL等級的軟件組件有可能會以錯誤的方式讀寫高ASIL等級的軟件組件。如果不同的軟件組件能夠在不同的內(nèi)存分區(qū)中執(zhí)行,則可以避免產(chǎn)生內(nèi)存訪問相關(guān)的影響。
這篇文章中介紹了AUTOSAR OS和RTE的部分功能,這些功能用于支持多個SWC在不同的內(nèi)存分區(qū)中執(zhí)行,用于避免內(nèi)存異常訪問。
根據(jù)ISO 26262 Part 6,內(nèi)存相關(guān)的異常訪問分類如下:
內(nèi)容的破壞(Corruption of Contents)
讀寫其它組件的分配管理的內(nèi)存空間
AUTOSAR中提供的內(nèi)存分區(qū)(Memory Partitioning)機(jī)制通過限制訪問內(nèi)存及基于內(nèi)存映射的硬件(如Flash,Register)等,支持內(nèi)存使用的保護(hù)。
內(nèi)存分區(qū)意味著把不同的OS-Application部署于不同的內(nèi)存區(qū)域,這樣,特別是代碼執(zhí)行時,一個分區(qū)內(nèi)的代碼無法修改另一個分區(qū)的內(nèi)存數(shù)據(jù)。而且,內(nèi)存分區(qū)還可以保護(hù)只讀的區(qū)域(如代碼段)。
AUTOSAR的內(nèi)存分區(qū)和用戶/特權(quán)機(jī)制相關(guān)的特性,可以支持軟件組件之間的FFI,如SWC內(nèi)存相關(guān)的錯誤不會擴(kuò)散到其它的軟件組件,同時,處于用戶態(tài)的SWC也無法修改或重新配置CPU內(nèi)部的寄存器。
2 內(nèi)存分區(qū)機(jī)制介紹
內(nèi)存分區(qū)是AUTOSAR OS和RTE的一個擴(kuò)展機(jī)制,這在AUTOSAR相關(guān)的規(guī)范中有描述。在這篇文章中,會以在AUTOSAR方法論中提到的Runnable,Tasks,SWC和OS-Application之間上下文關(guān)系的形式介紹這個擴(kuò)展機(jī)制。
2.1 應(yīng)用程序(Application Software)
在AUTOSAR架構(gòu)中,應(yīng)用程序位于RTE之上的,并且包含一組內(nèi)部存在信息交換的軟件組件(SWC),這些軟件組件實現(xiàn)一系列的原子功能(不可拆分),組合在一起實現(xiàn)應(yīng)用程序的功能。
AUTOSAR的SWC與硬件無關(guān),所以這些SWC可以集成在任何ECU的硬件上。為了實現(xiàn)ECU內(nèi)(Inter-)和ECU間(Intra-)通信,AUTOSAR SWC僅通過RTE進(jìn)行通信(Exclusively)。
AUTOSAR SWC包含一系列的功能實現(xiàn)和變量定義,通過這些提供內(nèi)部的功能實現(xiàn)。這些功能實現(xiàn)和變量定義對于外部是不可見的,僅能通過公布的RTE接口使用。
AUTOSAR SWC也提供了函數(shù)接口,但只能在運(yùn)行時調(diào)用。這些C語言的函數(shù)在AUTOSAR中被叫做Runnable。Runnable不能主動執(zhí)行,而是通過配置的形式,分配到某個位于操作系統(tǒng)中的可執(zhí)行的實體上,比如,作為一個OS-Task調(diào)用的代碼段。
Runnable以周期性執(zhí)行或者以外部觸發(fā)的形式在OS-Task的上下文中執(zhí)行。從分配的角度來看,一個SWC可以由多個Runnable構(gòu)成,一個OS-Task可以觸發(fā)多個Runnable(同一個SWC內(nèi)的Runnable可以在不同的OS-Task上執(zhí)行),一個OS-Application可以管理多個OS-Task,而OS-Application和內(nèi)存分區(qū)(Partition)之間,是一對一的關(guān)系。
2.2 OS-Application
AUTOSAR的OS-Application是操作系統(tǒng)對象的集合體,其中包括任務(wù) (Tasks),中斷服務(wù)程序 (ISRs),調(diào)度表 (Schedule Tables),計數(shù)器 (Counters)和警報 (Alarms),這些對象構(gòu)成一個內(nèi)聚的功能單元。在一個OS-Application內(nèi)的各個對象可以互相訪問。
操作系統(tǒng)內(nèi)的在同一個OS-Application內(nèi)的對象,可以分屬于不同的SWC。RTE實現(xiàn)了一段內(nèi)存空間,為這些在同一個OS-Application內(nèi)的對象相互訪問,提供了不受限的通信支持。
OS-Application可以分為2類:
受信任 (Trusted)的OS-Application可以不受那些運(yùn)行時的監(jiān)控 (Monitoring)或者保護(hù) (Protection)特性的限制執(zhí)行。這類應(yīng)用可以不受限的訪問內(nèi)存和操作系統(tǒng)API。受信任的應(yīng)用對于執(zhí)行時間上也不受限制,同時也可以在任何支持的處理器上以特權(quán)模式執(zhí)行。
不受信任 (Non-trusted)的OS-Application不可以在運(yùn)行時監(jiān)控及保護(hù)機(jī)制關(guān)閉的時候執(zhí)行。這類應(yīng)用在訪問內(nèi)存、操作系統(tǒng)API時都有限制,同時也不允許以特權(quán)模式執(zhí)行。
2.3 通信與代碼共享
一個OS-Application可以包含多個SWC及相關(guān)的Runnable。Runnable只允許直接訪問SWC內(nèi)部的變量和函數(shù)。內(nèi)部的函數(shù)調(diào)用及變量訪問對于其它SWC來說是不可見的,主要原因是這些函數(shù)及變量在SWC相關(guān)的頭文件中根本就沒有聲明。這也說明,AUTOSAR標(biāo)準(zhǔn)并不期望從其它的SWC中直接通過變量訪問及直接的執(zhí)行另一個SWC內(nèi)部的代碼。AUTOSAR中,SWC之間,僅允許基于RTE進(jìn)行組件間的通信。
2.4 應(yīng)用 (Application Software)內(nèi)的內(nèi)存分區(qū)
基于AUTOSAR開發(fā)的ECU內(nèi)部可以包含功能安全相關(guān)與功能安全無關(guān)的SWC。ISO 26262要求不同的ASIL等級的軟件組件之間要避免相互干擾 (Freedom from interference)。
AUTOSAR操作系統(tǒng)通過將OS-Application放置于獨立的內(nèi)存區(qū)域內(nèi),實現(xiàn)避免內(nèi)存相關(guān)的干擾。這個機(jī)制叫做內(nèi)存分區(qū) (Memory Partitioning)。一個OS-Application不能直接修改另一個OS-Application的內(nèi)部數(shù)據(jù),從而實現(xiàn)相互之間的保護(hù)。
應(yīng)用軟件可以包含不同等級的SWC,但這些SWC不能分配到同一個OS-Application內(nèi)。內(nèi)存分區(qū)無法對位于同一個OS-Application內(nèi)部的SWC提供保護(hù)。操作系統(tǒng)也只能阻止OS-Application間的非法訪問,無法阻止一個有故障的SWC訪問位于同一個OS-Application內(nèi)的其它SWC的數(shù)據(jù)。
2.5 SWC內(nèi)部的內(nèi)存分區(qū)
可能會有一些SWC有在內(nèi)部包含不同ASIL等級的Runnable的需求,這就要求避免相互干擾的機(jī)制要在這些SWC之間進(jìn)行。但在Runnable的設(shè)計上來說,是屬于SWC的屬性,但一個SWC只能分配到一個OS-Application上,所以基于OS-Application的內(nèi)存分區(qū)機(jī)制無法保障一個SWC內(nèi)部的不同等級的Runnable之間相互干擾。這個特性就需要AUTOSAR操作系統(tǒng)支持Task之間的內(nèi)存分區(qū),因為Runnable是在某個Task上調(diào)用執(zhí)行的。(目前還不確定是否有AUTOSAR OS支持這個特性)
2.6 實現(xiàn)內(nèi)存分區(qū)
大量的系統(tǒng)及軟件級的TSC (Technical Safety Concept)可以使用內(nèi)存分區(qū)機(jī)制來實現(xiàn)。
通常BSW位于受信任 (Trusted)區(qū)域,部分SWC可以和BSW一樣在受信任區(qū)域,以管理 (Supervisor)權(quán)限運(yùn)行。其它的內(nèi)存區(qū)域可以劃分為多個內(nèi)存分區(qū),每個內(nèi)存分區(qū)內(nèi)可以有一個或多個SWC以用戶態(tài)運(yùn)行。
現(xiàn)代的安全相關(guān)的微處理器通常都在硬件級別上支持內(nèi)存分區(qū)機(jī)制,這主要是通過內(nèi)存保護(hù)單元 (Memory Protection Unit, MPU)來實現(xiàn)的。
在一個典型的MPU實現(xiàn)中,不受信的應(yīng)用也可以配置為訪問多個內(nèi)存區(qū)域。訪問的方式可以是讀、寫、執(zhí)行及這些的組件。針對MPU的配置要用管理權(quán)限。
MPU的保護(hù)可以針對內(nèi)存、Flash及外設(shè)進(jìn)行。另外,使用內(nèi)存分區(qū)的可能場景有如下幾個:
SWC位于同一個內(nèi)存分區(qū)中
位于同一個內(nèi)存分區(qū)中的SWC可以相互訪問內(nèi)部數(shù)據(jù),進(jìn)而可以造成內(nèi)部數(shù)據(jù)破壞
標(biāo)準(zhǔn)定義SWC不能直接訪問外設(shè),因為處理器的架構(gòu)對于SWC來說不透明。如果強(qiáng)行使用SWC訪問外設(shè),這會導(dǎo)致系統(tǒng)嚴(yán)重的安全風(fēng)險
SWC位于不同的內(nèi)存分區(qū)中
位于不同內(nèi)存分區(qū)的的SWC不可以相互訪問內(nèi)部數(shù)據(jù),也就不能破壞其它SWC的數(shù)據(jù)了
標(biāo)準(zhǔn)定義SWC不能直接訪問外設(shè),因為處理器的架構(gòu)對于SWC來說不透明。如果強(qiáng)行使用SWC訪問外設(shè),這會導(dǎo)致系統(tǒng)嚴(yán)重的安全風(fēng)險
MCAL驅(qū)動程序
MCAL驅(qū)動是一系列函數(shù)集合,如讀、寫及初始化等。這類接口必須在BSW或CDD中執(zhí)行
MCAL驅(qū)動可以訪問外設(shè)空間,根據(jù)不同的處理器實現(xiàn),可能會需要管理權(quán)限
3 檢測與響應(yīng)
內(nèi)存分區(qū)的安全機(jī)制通過限制訪問內(nèi)存及支持內(nèi)存映射的外設(shè)的方法來實現(xiàn)保護(hù)。一塊分區(qū)內(nèi)的代碼,無法修改另一個分區(qū)的數(shù)據(jù)。內(nèi)存分區(qū)也支持只讀方式的訪問,這個可以用來保護(hù)那些基于內(nèi)存映射訪問的硬件。SWC也可以被限定為禁止訪問CPU的寄存器,如重新配置等。
在支持MPU或MMU的硬件上使用內(nèi)存分區(qū)機(jī)制,操作系統(tǒng)要事先進(jìn)行合理的配置來檢測和阻止不正確的內(nèi)存訪問。一旦出現(xiàn)了在非受信區(qū)域的內(nèi)存訪問或者執(zhí)行了不合法的CPU指令,這些訪問首先會被阻止,然后處理器硬件會產(chǎn)生一個異常 (Exception)。操作系統(tǒng)和RTE會處理這些異常,執(zhí)行內(nèi)存分區(qū)的關(guān)閉 (Shutdown),或重啟分區(qū)內(nèi)的所有SWC的動作。
4 限制條件
如果分區(qū)內(nèi)的SWC都設(shè)置為相同的ASIL等級,則不需要按照ISO 26262中要求的FFI來設(shè)計安全機(jī)制。同時,對于OS-Application,可以包含多個SWC,但內(nèi)存分區(qū)的關(guān)閉或重啟機(jī)制是針對整個分區(qū)進(jìn)行,所以即使?fàn)顟B(tài)正常的SWC也會受到影響
內(nèi)存分區(qū)機(jī)制不適用于受信任的OS-Application,受信區(qū)域中的代碼執(zhí)行不會被保護(hù)機(jī)制監(jiān)控Task級的內(nèi)存保護(hù)不是AUTOSAR的強(qiáng)制標(biāo)準(zhǔn),所以O(shè)S-Application內(nèi)部的FFI可能內(nèi)存分區(qū)會帶來性能上的影響。由于增加了內(nèi)存分區(qū),會導(dǎo)致上下文的切換增多BSW的軟件不支持內(nèi)存分區(qū),所以才會有Safe BSW的方案。
審核編輯:劉清
評論
查看更多