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