利用安全分割確保車載通信和信息娛樂系統(tǒng)的性能
有越來越多的新技術被集中用于車載通信服務和信息娛樂系統(tǒng),從而使車輛變得更安全、更舒適,最終令消費者更加滿意。事實上,“更多、更好”恰當?shù)乇磉_了該市場中的流行趨勢。汽車制造商其實早已推出集眾多功能于一身的整合系統(tǒng),這些功能包括了GPS導航、衛(wèi)星電臺、實時交通流量報告、三維接口、DVD播放、語音控制操作、自動緊急呼叫、MP3播放器連接、硬盤音頻存儲、用戶定義音樂播放列表等。
為了提供如此豐富的功能,這些系統(tǒng)采用了大量軟件組件,代碼規(guī)模達10、20甚至30MB。軟件的這種復雜性給系統(tǒng)可靠性和性能帶來了極大的挑戰(zhàn),原因很簡單,系統(tǒng)包含代碼越多,編程錯誤、安全漏洞或軟件組件之間發(fā)生資源沖突的機會就越大。
由于軟件負責控制對CPU、存儲器和其它系統(tǒng)資源的訪問,因此實時操作系統(tǒng)(RTOS)將在診斷和防止這類問題方面發(fā)揮重要的作用。特別是它能加強軟件進程之間的安全界限,阻止任何進程不經(jīng)意或有意影響其它進程的性能。為了實現(xiàn)這一目標,一些RTOS引入了資源劃分這一概念。
簡單地講,這一概念允許系統(tǒng)設計師將軟件進程分組成多個獨立的塊或區(qū),并給每個區(qū)分配一部分有保證的存儲器和CPU時間等系統(tǒng)資源。這樣,一個區(qū)內(nèi)的進程不會占用其它區(qū)內(nèi)進程所需要的資源。
另外,劃分還能提供存儲器保護,因為RTOS可以使用存儲器管理單元(MMU)控制所有對存儲器的訪問。例如,Microkernel RTOS就允許開發(fā)人員將應用程序、設備驅動程序、協(xié)議堆棧和文件系統(tǒng)劃分為有存儲器保護的獨立進程。如果有任何進程(如設備驅動程序)試圖訪問自身進程范圍以外的存儲器,MMU就會通知OS,讓OS中斷和重啟該進程。
這種方法包括:
·可以防止任何進程中的代碼錯誤影響其它進程或RTOS內(nèi)核;
·允許開發(fā)人員快速識別和糾正其它方法可能要花幾周時間才能隔離的存儲器訪問違例;
·顯著減少故障恢復時間,因為不必在故障發(fā)生時進行重啟(重啟過程可能會花幾秒到數(shù)分鐘的時間),系統(tǒng)可以只重啟有問題的進程(這個過程可能只要幾個毫秒)。
CPU保證
誠然,建立一個可靠的信息娛樂或車載通信服務系統(tǒng)遠不止將功能劃分為多個存儲器域。在許多情況下,保證對CPU的訪問同樣重要。如果任何一個子系統(tǒng)(如HMI)被剝奪了CPU周期,那么該系統(tǒng)對用戶來說就變得不可用了。
對CPU訪問的保證要求源自大多數(shù)RTOS采用的優(yōu)選級搶占調(diào)度機制。簡單地說,這種調(diào)度模型可以確保進程和線程按它們分配到的優(yōu)選級順序執(zhí)行:較高優(yōu)先級的線程通??梢該屨驾^低優(yōu)先級的線程,而較低優(yōu)先級線程不能阻止較高優(yōu)先級線程的運行。
優(yōu)先級調(diào)度有許多優(yōu)點,包括:
可預測的延遲。通過將時間緊迫的功能分配為高優(yōu)先級線程,開發(fā)人員可以控制系統(tǒng)要花多少時間響應外部事件,即使在系統(tǒng)非常繁忙的時候。
并發(fā)性和靈活性。在優(yōu)先級調(diào)度機制下,嵌入式系統(tǒng)可以處理多種任務,包括具有硬性時間限制的周期性運行任務、高優(yōu)先級的事件驅動任務以及后臺處理任務。
成熟性和熟知性。優(yōu)先級調(diào)度已被廣泛用于汽車應用,嵌入式開發(fā)人員對此有較深的理解。
盡管有這些優(yōu)點,但優(yōu)先級調(diào)度也會導致任務饑餓這樣一種狀態(tài)。比方說一個系統(tǒng)共有兩個線程,分別是A和B,A的優(yōu)選級要比B稍高一些。如果A變得很忙,B(以及其它所有較低優(yōu)先級的線程)將無法訪問CPU。
在汽車應用中,線程A可能控制導航顯示和進程為B的MP3播放器。如果導航系統(tǒng)在執(zhí)行路由計算時占用了太多的CPU周期,就會使MP3播放器挨餓而停放。同樣,在免提車載通信系統(tǒng)中,負責回波抵消的較高優(yōu)先級線程可能會使負責噪聲抑制的較低優(yōu)先級線程挨餓,這個問題將影響噪聲抑制模塊和輸出音頻鏈下游的其它各個進程。
總之,優(yōu)先級調(diào)度機制不能保證較低優(yōu)先級線程訪問即使是一小部分的CPU。較低優(yōu)先級線程提供的服務,包括使系統(tǒng)免受軟件錯誤影響的診斷服務,可能長時間處于CPU周期饑餓狀態(tài),從而影響系統(tǒng)的可用性。隨著軟件復雜性(和線程數(shù)量)的增加,這些問題將變得越來越頻繁。
這種無法提供資源保證的情況將導致組成現(xiàn)代車載通信或信息娛樂設備的許多子系統(tǒng)之間產(chǎn)生嚴重的沖突,這種問題只有等到最終集成和驗證測試時才會變得非常明顯。那些在獨立使用時即使工作得很好的子系統(tǒng)一旦開始與其它子系統(tǒng)競爭CPU時間和其它資源時響應速度也會慢下來。
這種資源沖突本身很難進行診斷和解決。系統(tǒng)設計師必須修改任務優(yōu)先級,甚至可能改變系統(tǒng)的行為,然后重新測試和調(diào)整他們的修改方案。這些工作通常要花上幾個星期的時間,從而增加了成本,拖延了產(chǎn)品上市時間。
有保證的資源預算
劃分有助于避免這些問題。例如在圖1中,設計師將軟件子系統(tǒng)分組為4個區(qū),并給每個區(qū)分配CPU預算:20%用于用戶接口,20%用于MP3播放,30%用于免提音頻,剩下30%用于導航和路由計算。設計師還可以給每個區(qū)分配單獨的存儲器預算,比如導航區(qū)可以分配40%的存儲器。
采用這種方法后,每個開發(fā)小組就能從一開始就知道有多少存儲器和CPU時間可用于他們的軟件子系統(tǒng)。而且每個小組可以輕松測試他們的子系統(tǒng)以確保子系統(tǒng)工作在這些定義好的預算范圍內(nèi)。在集成時,RTOS將強制執(zhí)行資源預算,防止任何子系統(tǒng)占用其它子系統(tǒng)需要的資源。這樣每個系統(tǒng)就能象以前測試時那樣正常工作。
從效果上看,劃分使得開發(fā)小組能夠更方便地并行工作。比如作為一個開發(fā)人員,你不再需要擔心子系統(tǒng)外的線程優(yōu)先級:這些線程不會影響你的吞吐量,即使它們的優(yōu)選級比你的高。
另外,通過控制分區(qū)預算,設計師可以充分權衡各種子系統(tǒng)的響應時間,以便快速調(diào)整系統(tǒng)性能。理想情況下,劃分調(diào)度程序可以讓設計師在運行時間動態(tài)執(zhí)行這種CPU調(diào)整,不需要強迫他們重建程序或系統(tǒng)映像。圖2給出了可用于動態(tài)調(diào)整分區(qū)預算的一種工具。
自適應劃分
劃分調(diào)度程序有很多種。一些程序會一直執(zhí)行CPU預算,即使分區(qū)沒有任務也強迫它占用全部預算。有些實現(xiàn)程序則會把這些未用的CPU周期動態(tài)分配給其它分區(qū),從而最大化整個CPU的利用率,允許系統(tǒng)處理峰值需求。這種方法是最佳的:它能在系統(tǒng)過多使用CPU周期時提供CPU保證(確保較低優(yōu)先級服務的可用性),當空閑CPU周期可用時將它分配出去(最大化性能)。例如,當圖3中的導航區(qū)繁忙時,它可以使用任何其它分區(qū)目前不在使用的CPU周期。
正確實現(xiàn)的劃分調(diào)度程序不要求修改設計代碼,也不要求改變設計師早已熟悉的調(diào)試技術。它還能使用標準的POSIX編程模型,允許嵌入式開發(fā)人員使用他們熟知的相同工業(yè)標準API和任務優(yōu)先機制。為了引入劃分機制,開發(fā)人員只需定義好分區(qū)預算,并確定每個分區(qū)分給哪些進程或線程。進程本身可以保持不變。在每個分區(qū)中,RTOS可以繼續(xù)根據(jù)傳統(tǒng)的搶占優(yōu)先級調(diào)度機制執(zhí)行線程調(diào)度。
良好集成、良好保護
隨著復雜性和代碼規(guī)模的增加,在最終產(chǎn)品中發(fā)生任務饑餓和其它軟件問題的概率也將隨之增加。在系統(tǒng)完成部署后再去解決這些問題的成本將有顯著的提高,更不用說對供應商信譽和凈收益造成的傷害了。正確實現(xiàn)的劃分方案提供了高效易用機制來避免這些問題。另外,它還能阻止惡意軟件或服務拒絕(DoS)攻擊占用存儲器和CPU,從而極大地提高安全性和系統(tǒng)可用性??傊?,劃分方案可以幫助嵌入式開發(fā)人員建立良好集成并受到良好保護的信息娛樂系統(tǒng)。