陳麗蓉,燕立明,羅 蕾
(電子科技大學(xué)計(jì)算機(jī)科學(xué)與工程學(xué)院 成都 610054)
隨著汽車電子控制系統(tǒng)功能、復(fù)雜性的不斷增加,當(dāng)今一輛中檔轎車中裝備有大約80個(gè)電子控制單元(ECU),它們通過多達(dá)5種不同的總線系統(tǒng)來通信與交互。出于成本、可靠性等多方面因素考慮,一種趨勢是將大量ECU替換成少量但功能更強(qiáng)大的微控制器,原來運(yùn)行在若干專有ECU上的應(yīng)用共享一個(gè)微控制器。當(dāng)眾多功能集成在一個(gè)ECU中實(shí)現(xiàn)時(shí),要系統(tǒng)性地考慮汽車電子應(yīng)用在安全、可靠方面的需求。為了在運(yùn)行時(shí)分離不同來源的軟部件,從軟件層面阻止一定級別的故障傳播,在汽車電子嵌入式軟件設(shè)計(jì)中要通過分區(qū)機(jī)制來防止各軟部件之間的干擾[1]。AUTOSAR組織闡述了存儲(chǔ)分區(qū)和處理器工作模式對實(shí)現(xiàn)防干擾的支持[2];AUTOSAR OS規(guī)范[3]則提出了一系列與隔離保護(hù)相關(guān)的要求。
軟件分區(qū)分為操作系統(tǒng)分區(qū)和應(yīng)用分區(qū)。操作系統(tǒng)內(nèi)核、存儲(chǔ)軟件、通信診斷軟件、外設(shè)與I/O控制等基礎(chǔ)軟件模塊執(zhí)行在一個(gè)可信的、處于特權(quán)模式的操作系統(tǒng)分區(qū)中。應(yīng)用層軟件部件在邏輯上被劃分到不同的應(yīng)用中,一些應(yīng)用屬于不可信的、非特權(quán)模式的應(yīng)用分區(qū),而另一些應(yīng)用與操作系統(tǒng)一樣,也處于可信的、特權(quán)模式的操作系統(tǒng)分區(qū)。AUTOSAR規(guī)范要求實(shí)現(xiàn)不同應(yīng)用軟件之間的隔離保護(hù),以及應(yīng)用軟件與基礎(chǔ)軟件之間的隔離保護(hù)。另外為了滿足一些安全限制,該規(guī)范還進(jìn)一步基于程序的不同分段(數(shù)據(jù)、代碼、棧)提出了對操作系統(tǒng)、應(yīng)用以及執(zhí)行體等3個(gè)級別的隔離保護(hù)要求。AUTOSAR架構(gòu)中軟件分區(qū)的總體模型如圖1所示。
圖1 AUTOSAR架構(gòu)基于軟件分區(qū)的隔離保護(hù)模型
1) 操作系統(tǒng)保護(hù):禁止不可信應(yīng)用對操作系統(tǒng)數(shù)據(jù)段和棧進(jìn)行寫操作。
2) 應(yīng)用的隔離:
①禁止不可信應(yīng)用對其他應(yīng)用的私有數(shù)據(jù)段進(jìn)行寫或讀的操作。
②禁止不可信應(yīng)用對其他應(yīng)用中任務(wù)或ISR(中斷服務(wù)例程)的私有棧或數(shù)據(jù)段進(jìn)行寫操作。
③允許某個(gè)應(yīng)用禁止其他不可信應(yīng)用執(zhí)行其代碼段。
3) 執(zhí)行體的隔離:禁止(非強(qiáng)制)某個(gè)不可信應(yīng)用中的任務(wù)和ISR的數(shù)據(jù)段或棧被該應(yīng)用中的其他任務(wù)或ISR進(jìn)行寫操作。
上述隔離保護(hù)要求需要依賴特定硬件(比如MMU或MPU)的支持。而由于嵌入式處理器硬件資源(如TLB表項(xiàng)數(shù)量)的限制,使得規(guī)范中某些粒度的隔離保護(hù)需求難以實(shí)現(xiàn),如將一個(gè)應(yīng)用內(nèi)部不同任務(wù)與ISR所使用的數(shù)據(jù)和棧區(qū)分開來,文獻(xiàn)[4]也提到了該問題。如果將所有這些數(shù)據(jù)及棧的分段各放到一個(gè)獨(dú)立的存儲(chǔ)頁中,顯然頁的數(shù)量很容易超過TLB表項(xiàng)的數(shù)量。而利用MMU的缺頁異常處理機(jī)制解決該問題又會(huì)對系統(tǒng)的實(shí)時(shí)響應(yīng)特性帶來影響。因此基于單純的硬件機(jī)制所實(shí)現(xiàn)的隔離保護(hù)在一定程度上降低了操作系統(tǒng)的可用性。
文獻(xiàn)[5]提出了純粹基于軟件的存儲(chǔ)保護(hù)機(jī)制,但它主要是面向任務(wù)的,沒有達(dá)到應(yīng)用級的隔離保護(hù)粒度,也沒有考慮對中斷服務(wù)例程的隔離保護(hù);文獻(xiàn)[6]對比了基于硬件和軟件的存儲(chǔ)保護(hù)方案,但未描述具體實(shí)現(xiàn)細(xì)節(jié)且側(cè)重于編程語言(比如JAVA)所提供的安全特性;文獻(xiàn)[7]申明了操作系統(tǒng)提供存儲(chǔ)分區(qū)機(jī)制滿足故障隔離要求的重要性,但未提供具體實(shí)現(xiàn);文獻(xiàn)[8]涉及的問題域與本文類似,但面向航空電子領(lǐng)域,應(yīng)用環(huán)境有所差異;文獻(xiàn)[9]采用一種off-chip的方案檢測存儲(chǔ)訪問異常行為,但其不是操作系統(tǒng)內(nèi)置機(jī)制與功能;文獻(xiàn)[10]提出了一種較為通用的存儲(chǔ)保護(hù)機(jī)制,但基于ITRON規(guī)范及SH3 RISC處理器進(jìn)行的實(shí)現(xiàn)。
本文提出了一種軟件與硬件機(jī)制相結(jié)合的、分層實(shí)現(xiàn)隔離保護(hù)的框架和機(jī)制,有效利用硬件提供的保護(hù)功能,降低對硬件資源的需求,并基于軟件實(shí)現(xiàn),滿足細(xì)粒度的隔離保護(hù)要求,增強(qiáng)應(yīng)用系統(tǒng)的安全性,滿足汽車電子這一特殊應(yīng)用領(lǐng)域規(guī)范的要求以及系統(tǒng)的實(shí)時(shí)性要求。
多級隔離保護(hù)機(jī)制框架如圖2所示?;谝欢ǖ挠布A(chǔ),隔離保護(hù)機(jī)制主要涉及以下3個(gè)層次。
1) 第一級隔離保護(hù):操作系統(tǒng)保護(hù),主要基于處理器工作模式,對應(yīng)用的訪存操作進(jìn)行權(quán)限控制,從而實(shí)現(xiàn)操作系統(tǒng)分區(qū)與應(yīng)用分區(qū)的隔離;
2) 第二級隔離保護(hù):應(yīng)用隔離,對應(yīng)用的非操作系統(tǒng)訪問進(jìn)行頁編號匹配檢查,從而實(shí)現(xiàn)不同應(yīng)用分區(qū)之間的隔離;
3) 第三級隔離保護(hù):執(zhí)行體隔離,通過分離應(yīng)用中不同執(zhí)行體(任務(wù)、中斷服務(wù)程序即ISR)所使用的棧空間,實(shí)現(xiàn)應(yīng)用分區(qū)內(nèi)部的隔離。
這3個(gè)保護(hù)級別的實(shí)現(xiàn),貫穿在操作系統(tǒng)的系統(tǒng)初始化、異常處理及維護(hù)管理幾大功能模塊中。
第一、二級隔離保護(hù)基于MMU或MPU硬件所提供的分頁機(jī)制。MPC5634處理器的分頁地址轉(zhuǎn)換機(jī)制為:在指令的執(zhí)行過程中產(chǎn)生有效地址將與MMU的PID寄存器(用于維護(hù)系統(tǒng)當(dāng)前應(yīng)用分區(qū)號)、地址空間標(biāo)識相結(jié)合,產(chǎn)生的虛擬地址與TLB中的頁表項(xiàng)進(jìn)行比對,每一個(gè)頁表項(xiàng)則記錄了對應(yīng)物理分頁的TID號、實(shí)際頁地址及訪問權(quán)限信息。在匹配的情況下進(jìn)行正常的地址轉(zhuǎn)換,生成實(shí)際物理地址。而發(fā)生不匹配的情況有以下幾種:
圖2 多級隔離保護(hù)機(jī)制框架
1) 在TLB中未找到能夠匹配的有效頁地址:產(chǎn)生TLB未命中異常,需要在該異常處理程序中進(jìn)行頁面置換(即TLB表項(xiàng)替換);如頁面置換仍然未能找到匹配該有效頁地址的頁表項(xiàng),則說明被訪問的頁不存在,進(jìn)入保護(hù)錯(cuò)誤處理;
2) 有效頁地址匹配而PID與TLB表項(xiàng)中的TID不匹配:產(chǎn)生TLB未命中異常(實(shí)質(zhì)是權(quán)限違例),此異常被用于實(shí)現(xiàn)不同應(yīng)用分區(qū)之間的隔離,意味著出現(xiàn)了一個(gè)應(yīng)用訪問其他應(yīng)用私有頁面的情況;
3) TID為0時(shí)PID為任何值均不產(chǎn)生TLB未命中異常,此特性被用來實(shí)現(xiàn)操作系統(tǒng)分區(qū),以便操作系統(tǒng)向應(yīng)用提供各種共享服務(wù)。為防止處于用戶模式下的應(yīng)用代碼對操作系統(tǒng)代碼及數(shù)據(jù)空間的非法訪問,需要利用TLB表項(xiàng)中的權(quán)限位結(jié)合處理器當(dāng)前工作模式以及將要訪問空間的屬性(代碼或數(shù)據(jù))進(jìn)行控制。6個(gè)權(quán)限信息位是:特權(quán)模式下可讀(SR)、可寫(SW)、可執(zhí)行(SX);用戶模式下可讀(UR)、可寫(UW)、可執(zhí)行(UX)。若在地址轉(zhuǎn)換過程中發(fā)現(xiàn)權(quán)限不匹配,則產(chǎn)生TLB權(quán)限違例異常。
基于此,本文實(shí)現(xiàn)第一級和第二級的隔離保護(hù),將每一個(gè)不可信應(yīng)用分區(qū)均劃分為1個(gè)代碼段和1個(gè)數(shù)據(jù)段,可信的操作系統(tǒng)分區(qū)(包含可信應(yīng)用)分為2個(gè)代碼段(核心代碼段和系統(tǒng)調(diào)用接口段)和1個(gè)數(shù)據(jù)段。每個(gè)段被放置到分離的內(nèi)存頁面中(MPC5634允許不同大小的頁面共存),以便利用MMU硬件的分頁機(jī)制實(shí)現(xiàn)隔離保護(hù)。表1為某系統(tǒng)頁表項(xiàng)配置實(shí)例,其中應(yīng)用1和應(yīng)用2是可信的,應(yīng)用3和應(yīng)用4是不可信的。系統(tǒng)調(diào)用接口是可以被用戶程序訪問的,因此被劃分為一個(gè)單獨(dú)頁面且訪問權(quán)限為用戶和系統(tǒng)均可執(zhí)行。每個(gè)不可信應(yīng)用的TLB表項(xiàng)具有不同的TID,以控制它們之間的訪問。
表1 頁表項(xiàng)配置實(shí)例
基于分頁機(jī)制及處理器模式,僅僅能夠?qū)崿F(xiàn)操作系統(tǒng)與應(yīng)用分區(qū)、不同應(yīng)用分區(qū)之間的隔離。但是如果將分頁應(yīng)用于應(yīng)用內(nèi)部各執(zhí)行體之間數(shù)據(jù)訪問的隔離,則需要為每一個(gè)執(zhí)行體的數(shù)據(jù)或棧提供獨(dú)立的內(nèi)存頁,這樣會(huì)大大增加系統(tǒng)的負(fù)擔(dān),影響系統(tǒng)性能(增加TLB未命中率,增加任務(wù)切換的負(fù)擔(dān),降低單頁的利用效率)。因此,采用分離棧策略來滿足分區(qū)內(nèi)部細(xì)粒度隔離保護(hù)的需要,即為操作系統(tǒng)、不同的任務(wù)、不同的用戶ISR提供獨(dú)立的棧,但這些棧不占據(jù)獨(dú)立的內(nèi)存頁,而是在其所屬應(yīng)用或內(nèi)核的數(shù)據(jù)頁面進(jìn)行分配,并通過操作系統(tǒng)來維護(hù),以此實(shí)現(xiàn)第三級的隔離保護(hù)。
運(yùn)行于特權(quán)模式的可信應(yīng)用具有與操作系統(tǒng)內(nèi)核一樣的特權(quán)級,其執(zhí)行體在進(jìn)行系統(tǒng)調(diào)用或響應(yīng)中斷時(shí)都可使用同一個(gè)棧。而對于運(yùn)行于用戶模式的不可信應(yīng)用,當(dāng)其執(zhí)行體進(jìn)行系統(tǒng)調(diào)用或保存中斷上下文時(shí)需要從其當(dāng)前運(yùn)行棧切換到另外一個(gè)獨(dú)立的系統(tǒng)棧以保證數(shù)據(jù)的安全和一致性。然而由于ISR的執(zhí)行具有嚴(yán)格的LIFO特性,中斷棧的使用可以優(yōu)化:可以使用一個(gè)共享的中斷棧對所有嵌套中斷的上下文進(jìn)行保存,并且讓所有的可信ISR也運(yùn)行在這個(gè)棧上,而不會(huì)導(dǎo)致棧中內(nèi)容的破壞。因此系統(tǒng)中棧的安排策略如下:
圖3 中斷系統(tǒng)棧的共享機(jī)制
1) 為每個(gè)可信應(yīng)用任務(wù)和不可信應(yīng)用任務(wù)安排一個(gè)獨(dú)立的棧;
2) 對于每一個(gè)不可信應(yīng)用中的任務(wù),為其在可信區(qū)域中設(shè)置一個(gè)“任務(wù)系統(tǒng)棧”,以便該任務(wù)在進(jìn)行系統(tǒng)調(diào)用或保存中斷上下文時(shí)使用;
3) 對于每一個(gè)不可信應(yīng)用中的中斷服務(wù)程序,安排一個(gè)獨(dú)立的“中斷用戶?!保?/p>
4) 所有可信的中斷服務(wù)程序共享一個(gè)“中斷系統(tǒng)?!?,該棧也用于保存系統(tǒng)中所有嵌套中斷的上下文,以及ISR調(diào)用系統(tǒng)服務(wù)時(shí)使用。
系統(tǒng)控制流分析如圖4所示。在系統(tǒng)運(yùn)行過程中,由于應(yīng)用對操作系統(tǒng)的功能調(diào)用、發(fā)生中斷以及任務(wù)調(diào)度導(dǎo)致的任務(wù)切換等情況,系統(tǒng)的控制流會(huì)頻繁地在應(yīng)用的不同執(zhí)行體與操作系統(tǒng)之間轉(zhuǎn)換。在各種可能的轉(zhuǎn)換情況中,操作系統(tǒng)要能夠保證處理器工作模式、應(yīng)用分區(qū)以及棧轉(zhuǎn)換的正確性。為確保無遺漏,本文應(yīng)用面向方面編程思想[11]進(jìn)行程序分析與設(shè)計(jì),以這3方面的內(nèi)容為關(guān)注焦點(diǎn),完成相應(yīng)的系統(tǒng)調(diào)用處理、中斷派發(fā)處理以及任務(wù)切換。
中斷派發(fā)實(shí)現(xiàn)被中斷執(zhí)行體和目標(biāo)ISR之間的轉(zhuǎn)換。當(dāng)響應(yīng)中斷時(shí)處理器已自動(dòng)將系統(tǒng)置為特權(quán)模式,中斷派發(fā)程序需根據(jù)被中斷執(zhí)行體及目標(biāo)ISR的屬性進(jìn)行相應(yīng)處理。被中斷執(zhí)行體包括可信或不可信的任務(wù)、可信或不可信的ISR和系統(tǒng)服務(wù);目標(biāo)ISR包括可信或不可信的ISR。中斷派發(fā)程序的流程:
1) 中斷上下文保存:確保中斷上下文保存在可信棧上:可信任務(wù)和ISR及系統(tǒng)服務(wù)被中斷時(shí)不進(jìn)行棧切換,直接保存中斷上下文;不可信任務(wù)和ISR被中斷時(shí),切換到任務(wù)系統(tǒng)?;蛑袛嘞到y(tǒng)棧進(jìn)行保存。
2) 用戶ISR調(diào)用預(yù)處理:根據(jù)目標(biāo)ISR的可信屬性、所屬應(yīng)用分區(qū),決定是否進(jìn)行相應(yīng)的模式切換、應(yīng)用分區(qū)切換和棧切換。
①如果目標(biāo)ISR所屬應(yīng)用分區(qū)號與當(dāng)前PID寄存器中的應(yīng)用分區(qū)號不同,則保存PID到中斷上下文中,并設(shè)置PID為新的應(yīng)用分區(qū)號;
②如果目標(biāo)ISR為可信的,則不進(jìn)行模式切換和棧切換(直接在當(dāng)前中斷系統(tǒng)棧的位置開始執(zhí)行用戶ISR);
③如果目標(biāo)ISR不可信,則從特權(quán)模式切換為用戶模式由由中斷系統(tǒng)棧切換至目標(biāo)ISR的用戶棧;
3) 調(diào)用用戶ISR,并在其返回后做如下處理:
①如果是從可信ISR返回,則不進(jìn)行模式切換和棧切換,直接回到中斷派發(fā)程序中;
②如果是從不可信ISR返回,則需從用戶模式切換回特權(quán)模式,并從ISR的用戶棧切換回中斷系統(tǒng)棧;
圖4 系統(tǒng)控制流分析
4) 中斷派發(fā)程序的后處理:存在3種可能性:
①回到上級 ISR:如果還存在中斷嵌套,則恢復(fù)中斷上下文,返回上一級用戶ISR程序中;
②回到被中斷任務(wù):如果沒有中斷嵌套,則切換回到任務(wù)系統(tǒng)棧,在不需要重新調(diào)度任務(wù)或需要重新調(diào)度但調(diào)度結(jié)果仍然是原被中斷任務(wù)的情況下,則從任務(wù)系統(tǒng)棧中恢復(fù)最外層的中斷上下文,回到原任務(wù)被中斷的位置繼續(xù)執(zhí)行;
③切換到新的任務(wù):如果調(diào)度的結(jié)果是需要切換到其他任務(wù)執(zhí)行,則由任務(wù)切換函數(shù)完成相應(yīng)的模式轉(zhuǎn)換、應(yīng)用分區(qū)切換及棧切換。
系統(tǒng)調(diào)用接口實(shí)現(xiàn)調(diào)用者(任務(wù)或者ISR)與操作系統(tǒng)服務(wù)之間的轉(zhuǎn)換,調(diào)用者也分為可信和不可信兩類。在進(jìn)行系統(tǒng)調(diào)用以及系統(tǒng)服務(wù)執(zhí)行期間,均不需要切換應(yīng)用分區(qū),系統(tǒng)調(diào)用處理只關(guān)注處理器模式和??臻g的變化。
1) 對于可信的任務(wù)或ISR在進(jìn)行系統(tǒng)調(diào)用的時(shí)候,處理器已經(jīng)處于特權(quán)模式,不需要進(jìn)行模式切換和棧切換,系統(tǒng)服務(wù)可以C函數(shù)調(diào)用的方式,直接在調(diào)用者的棧上運(yùn)行;
2) 對于不可信的任務(wù)或 ISR在進(jìn)行系統(tǒng)調(diào)用時(shí),需要由用戶模式切換至特權(quán)模式,并從任務(wù)或ISR的用戶棧切換至其系統(tǒng)棧。模式切換需要利用處理器的系統(tǒng)調(diào)用指令或自陷指令完成,執(zhí)行該指令時(shí),處理器將自動(dòng)切換為特權(quán)模式,并進(jìn)入到相應(yīng)的異常處理程序。因此,本文可進(jìn)一步在此異常處理程序中完成棧的切換。當(dāng)系統(tǒng)服務(wù)函數(shù)完成后返回到該異常處理程序中時(shí),再將棧切換回原用戶棧,并利用異常返回指令自動(dòng)完成模式的切換。
任務(wù)調(diào)度的結(jié)果可能發(fā)生任務(wù)切換,也可能不發(fā)生切換。在發(fā)生任務(wù)切換的情況下,基本原則是要保存好即將離開的任務(wù)的上下文,并建立好新任務(wù)的運(yùn)行環(huán)境。在這兩個(gè)環(huán)節(jié)中均要考慮處理器模式、應(yīng)用分區(qū)以及任務(wù)棧指針的正確維護(hù)。
1) 首先對離去任務(wù)的上下文進(jìn)行保存,包括當(dāng)前指令執(zhí)行位置、棧指針、處理器模式以及其他需要保存的通用寄存器的內(nèi)容。
2) 然后根據(jù)新任務(wù)所屬應(yīng)用來對PID寄存器進(jìn)行更新,這樣在隨后任務(wù)的運(yùn)行過程中PID才能與對應(yīng)應(yīng)用頁面的TID號相匹配。
3) 根據(jù)新任務(wù)是否第一次運(yùn)行進(jìn)行處理;如果任務(wù)以前運(yùn)行過但因某種原因被搶占,則在該任務(wù)上一次被切換離開處理器時(shí),其棧指針、處理器模式已經(jīng)作為其上下文內(nèi)容的一部分被保存了下來,則此次它恢復(fù)執(zhí)行的時(shí)候,只需要恢復(fù)其上下文,即可實(shí)現(xiàn)其棧指針、處理器模式的恢復(fù)。如果任務(wù)是第一次運(yùn)行,則將棧寄存器設(shè)置為該任務(wù)的棧起始地址,并根據(jù)任務(wù)所屬應(yīng)用的可信屬性對處理器當(dāng)前的工作模式進(jìn)行設(shè)置:由于當(dāng)前程序還運(yùn)行在特權(quán)模式的操作系統(tǒng)內(nèi)核中,如果是可信應(yīng)用,則直接調(diào)用任務(wù)函數(shù)啟動(dòng)任務(wù)的運(yùn)行;如果是不可信應(yīng)用,則需要通過內(nèi)嵌匯編程序?qū)⑻幚砥鞴ぷ髂J皆O(shè)置為用戶模式后再調(diào)用任務(wù)函數(shù)。
保護(hù)錯(cuò)誤來自兩方面:在TLB未命中異常處理中發(fā)現(xiàn)應(yīng)用進(jìn)行非法訪問,或是應(yīng)用非法訪問操作系統(tǒng)產(chǎn)生的權(quán)限違例異常。當(dāng)OS檢測到上述錯(cuò)誤后:
1) OS調(diào)用保護(hù)HOOK函數(shù)并傳遞出錯(cuò)的類型;
2) 保護(hù) HOOK函數(shù)根據(jù)系統(tǒng)的配置反饋處理要求給OS,該處理要求與錯(cuò)誤的嚴(yán)重程度相匹配;
3) OS根據(jù)反饋選擇執(zhí)行具體的處理:①PRO_IGNORE:什么也不做;②PRO_TERM INATETASKISR:強(qiáng)行終止出錯(cuò)的任務(wù)或ISR;③PRO_TERM INATEAPPL:強(qiáng)行終止出錯(cuò)應(yīng)用;④PRO_TERM INATEAPPL_RESTART:強(qiáng)行終止出錯(cuò)應(yīng)用,并重新初始化該應(yīng)用;⑤PRO_SHUTDOWN:關(guān)閉OS自身。
圖5 應(yīng)用實(shí)例運(yùn)行流程
本文所述機(jī)制在基于MPC5634的ECU硬件平臺XPC563MADPT144S上實(shí)現(xiàn),并與作者團(tuán)隊(duì)所開發(fā)的AUTOSAR OS進(jìn)行了集成。為驗(yàn)證已實(shí)現(xiàn)的隔離保護(hù)機(jī)制能有效工作,設(shè)計(jì)一個(gè)具有4個(gè)應(yīng)用的系統(tǒng),包含可信應(yīng)用APP1和APP2及不可信應(yīng)用APP3和APP4,包含任務(wù)APP1_T1, APP2_T1, APP3_T1,APP3_T2, APP4_T1和APP4_T2,任務(wù)優(yōu)先級依次遞增,APP1能訪問所有任務(wù)。在不可信應(yīng)用執(zhí)行體中刻意增加非法訪存操作,以驗(yàn)證該機(jī)制是否能對訪存故障進(jìn)行隔離保護(hù)。為驗(yàn)證TLB缺頁置換功能,在系統(tǒng)初始化時(shí)未預(yù)置所有TLB項(xiàng)。保護(hù)錯(cuò)誤處理的配置為:APP3中任務(wù)非法訪存時(shí)強(qiáng)制終止故障任務(wù);APP4中任務(wù)非法訪存時(shí)強(qiáng)制終止故障應(yīng)用。
經(jīng)測試表明,系統(tǒng)在運(yùn)行過程中伴隨著任務(wù)的切換可以正確地完成應(yīng)用分區(qū)的轉(zhuǎn)換、模式切換以及棧的切換。當(dāng)發(fā)生TLB未命中異常時(shí),能夠正確完成頁的置換,使相應(yīng)任務(wù)能繼續(xù)執(zhí)行。而當(dāng)發(fā)生權(quán)限違例時(shí),能根據(jù)系統(tǒng)配置對發(fā)生錯(cuò)誤的任務(wù)或應(yīng)用進(jìn)行終止,因而能夠?qū)㈠e(cuò)誤或故障局限于一定的區(qū)域內(nèi),降低系統(tǒng)整體發(fā)生故障或失效的可能性。
假定某系統(tǒng)有n個(gè)應(yīng)用,其中不可信應(yīng)用n1個(gè)。每個(gè)應(yīng)用包含數(shù)量不等的任務(wù)和ISR,方便起見,假設(shè)平均每個(gè)應(yīng)用的任務(wù)及ISR總數(shù)為k個(gè)(k≥1)。如果為每個(gè)應(yīng)用分配1個(gè)代碼頁、1個(gè)被該應(yīng)用所有任務(wù)及ISR共享的數(shù)據(jù)頁、每個(gè)任務(wù)及ISR分配1個(gè)私有數(shù)據(jù)頁和1個(gè)棧頁,加上操作系統(tǒng)的核心代碼頁、數(shù)據(jù)頁和接口函數(shù)頁,總共需要?jiǎng)澐殖鰞?nèi)存頁共計(jì)個(gè),假設(shè)此為方案1。采用本文的方案2,只需為每個(gè)不可信應(yīng)用劃分1個(gè)代碼頁和1個(gè)數(shù)據(jù)頁,可信應(yīng)用代碼頁與數(shù)據(jù)頁分別與操作系統(tǒng)核心代碼頁及數(shù)據(jù)頁劃分到一起,所有的棧空間在相應(yīng)的數(shù)據(jù)頁內(nèi)進(jìn)行分配,則總共需要?jiǎng)澐謧€(gè)內(nèi)存頁。表2的數(shù)據(jù)對比說明了后者的優(yōu)勢。
顯然方案1對于應(yīng)用的數(shù)量以及應(yīng)用中任務(wù)及ISR的數(shù)量變化都比方案2更敏感,它會(huì)顯著增加頁的數(shù)量,帶來TLB命中率下降以及隨之的異常處理、TLB表項(xiàng)替換的系統(tǒng)時(shí)間開銷。而另一方面,嵌入式應(yīng)用中通常一個(gè)任務(wù)或ISR的規(guī)模都不是很大(可小到只需1 KB以內(nèi)的空間),如果為每個(gè)任務(wù)及ISR的數(shù)據(jù)和棧分配一個(gè)頁面,則對于頁內(nèi)空間的利用率是很低的,這有可能造成整個(gè)存儲(chǔ)空間不夠滿足應(yīng)用系統(tǒng)的需求。
表2 兩種方案的存儲(chǔ)頁數(shù)量對比
采用本文方法能夠大大降低分頁的數(shù)量,提升操作系統(tǒng)性能及存儲(chǔ)空間利用率,但對于同一個(gè)應(yīng)用區(qū)域內(nèi)的棧溢出不能夠很及時(shí)地進(jìn)行檢測。棧溢出有刻意或非刻意兩種情形。非刻意溢出緣于在系統(tǒng)設(shè)計(jì)中未能分配足夠的??臻g,尤其是突發(fā)情況(通常為出現(xiàn)了多個(gè)嵌套的中斷)下棧空間的超正常使用。不過由于系統(tǒng)只允許響應(yīng)比當(dāng)前中斷優(yōu)先級更高的中斷,中斷嵌套的最大層數(shù)是有限的。在本文所述方案中,用于嵌套中斷處理的棧已經(jīng)與系統(tǒng)中其他的棧分離,可單獨(dú)為這個(gè)棧劃分足夠大的空間。這樣既有效避免了非刻意性棧溢出的發(fā)生,又在最大程度上減少了??臻g的分配??桃獾臈R绯霾僮骺赡軄碜杂诤诳蛙浖?,其意在破壞系統(tǒng)的正常工作。由于本文至少在可信與不可信區(qū)域之間設(shè)置了基于物理頁的隔離機(jī)制,對于可能非法進(jìn)行棧操作的應(yīng)用是作為不可信的部分集成到系統(tǒng)中的,因此此類棧溢出可以被及時(shí)檢測出來。綜上,本文所用機(jī)制已較好地規(guī)避了該問題。
應(yīng)用具有隔離保護(hù)機(jī)制的嵌入式操作系統(tǒng),能夠在一個(gè)ECU系統(tǒng)中容納來自不同渠道、具有不同安全完整性級別的軟件部件,能夠降低整個(gè)軟件系統(tǒng)滿足高安全等級的難度,滿足日益增長的汽車電子控制系統(tǒng)的安全需求。對于硬件資源受限且有實(shí)時(shí)性需求的汽車電子嵌入式系統(tǒng),該機(jī)制的實(shí)現(xiàn)具有一定的挑戰(zhàn)性。本文工作通過有效結(jié)合硬件資源與軟件策略,降低了對硬件資源的需求,并提升了性能,以滿足在高安全完整性級別的汽車控制系統(tǒng)中應(yīng)用此操作系統(tǒng)的要求。
[1] ISO. ISO/IS 26262-6 road vehicles-functional safety-part 6:product development: software level[S/OL]. [2013-06-12].http://www.iso.org/iso/home/store/catalogue_tc/catalogue_tc_browse.htm?commid=46752.
[2] AUTOSAR GbR. Technical Safety Concept Status Report V1.1.0 R4.0 Rev 2[S/OL]. [2013-06-12]. http://www.autosav.org.
[3] AUTOSAR GbR. Specification of Operating System V4.1.0 R4.0 Rev 2[S/OL].[2013-06-12]. http://www.autosav.org.
[4] 張呂紅. 參照AUTOSAR標(biāo)準(zhǔn)的SmartOSEK OS4.0的設(shè)計(jì)與實(shí)現(xiàn)[D]. 杭州: 浙江大學(xué), 2010.
ZHANG Lü-hong. Design and implementation of smartOSEK OS 4.0 consulting AUTOSAR[D]. Hangzhou:Zhejiang University, 2010.
[5] 鄧俊, 李紅, 方正, 等. AUTOSAR OS存儲(chǔ)保護(hù)方案的改進(jìn)與實(shí)現(xiàn)[J]. 儀器儀表學(xué)報(bào), 2011, 32(9): 2146-2152.
DENG Jun, LI Hong, FANG Zheng, et al. Improvement and implementation of AUTOSAR OS memory protection mechanism[J]. Chinese Journal of Scientific Instrument,2011, 32(9): 2146-2152.
[6] STILKERICH M, LOHMANN D, SCHR?DERPREIKSCHAT W. Memory protection at option[C]//Proceedings of the 1st Workshop on Critical Automotive applications: Robustness & Safety. New York, USA: ACM,2010: 17-20.
[7] XI Chen. Requirements and concepts for future automotive electronic architectures from the view of integrated safety[D]. Germany: University Karlsruhe(TH), 2008.
[8] GUI S L, LUO L, TANG S S, et al. Optimal static partition configuration in ARINC653 system[J]. Journal of Electronic Science and Technology, 2011, 9(4): 373-378.
[9] Dinh-Duc A V, HO N. A run-time detector for violated memory access in embedded systems[C]//Mechatronics and Embedded Systems and Applications (MESA), 2010 IEEE/ASME International Conference on. [S.l.]: IEEE, 2010:217-223.
[10] YAMADA S, NAKAMOTO Y, AZUM I T, et al. Generic memory protection mechanism for embedded system and its application to embedded component systems[C]//Proceedings of the 8th International Conference on Computer and Information Technology Workshops. Los A lam itos, CA, USA: IEEE, 2008: 557-562.
[11] LOHMANN D, HOFER W, SCHR?DER-PREIKSCHAT W, et al. Aspect-aware operating system development[C]//Proceedings of the tenth international conference on Aspect-oriented software development. [S.l.]: ACM, 2011:69-80.
編 輯 稅 紅