在最近的幾年中,嵌入式技術(shù)得到了飛速的發(fā)展。大到汽車、電梯、醫(yī)療儀器乃至工業(yè)設(shè)備,小到手機(jī)、MP4、照相機(jī)等消費(fèi)電子產(chǎn)品,甚至是人們生活中所熟知的電冰箱、微波爐、洗衣機(jī)等傳統(tǒng)電器,到處可以看到嵌入式系統(tǒng)的身影。根據(jù)BCC Research Group的分析結(jié)果,嵌入式行業(yè)在最近5年中保持著年均14%的增長,到2009年將會(huì)成為一個(gè)880億的巨大市場。 所謂嵌入式系統(tǒng)是指為特定應(yīng)用而設(shè)計(jì)的專用電腦系統(tǒng),通常執(zhí)行的是帶有特定要求的預(yù)先定義的任務(wù)。說到嵌入式系統(tǒng)上的操作系統(tǒng),人們首先想到的是各種經(jīng)過裁剪的Linux以及WinCE。但是Linux和WinCE本身作為單內(nèi)核(monolithic kernel)操作系統(tǒng),內(nèi)核部分過于復(fù)雜,并不適用于嵌入式平臺(tái)。而μC/Os-II和eCos等又過于簡單,不能提供完整的功能。而隨著微內(nèi)核(microkernel)操作系統(tǒng)的理論和實(shí)現(xiàn)越來越成熟,微內(nèi)核操作系統(tǒng)開始成為嵌入式平臺(tái)一個(gè)很好的選擇。 圖1 嵌入式平臺(tái)操作系統(tǒng)占有率比較圖 來源:www.linuxdevices.com 嵌入式平臺(tái)對操作系統(tǒng)的需求 嵌入式平臺(tái)上運(yùn)行的操作系統(tǒng)一方面會(huì)根據(jù)嵌入式平臺(tái)所執(zhí)行的功能對內(nèi)核組件進(jìn)行裁剪,在滿足系統(tǒng)的應(yīng)用功能的基礎(chǔ)上去除不必要的部分;另一方面,嵌入式平臺(tái)對操作系統(tǒng)的可靠性,實(shí)時(shí)性和安全性特性有很高的要求。 可靠性是指嵌入式設(shè)備特別是工業(yè)設(shè)備中的嵌入式系統(tǒng)經(jīng)常需要連續(xù)運(yùn)行數(shù)以年計(jì)的時(shí)間而不出差錯(cuò)。可以想像如果飛機(jī)中的嵌入式系統(tǒng)在飛機(jī)飛行時(shí)崩潰重啟,會(huì)造成多么大的危害。這就要求嵌入式系統(tǒng)上的操作系統(tǒng)的運(yùn)行完全沒有錯(cuò)誤,或者在錯(cuò)誤出現(xiàn)的時(shí)候可以快速自動(dòng)復(fù)位,并且避免在操作系統(tǒng)中使用不穩(wěn)定的模塊。 實(shí)時(shí)性是指系統(tǒng)能在確定的時(shí)間內(nèi)執(zhí)行操作并對外部的異步事件做出響應(yīng),比如汽車發(fā)生車禍時(shí)安全氣囊必須在極短的時(shí)間內(nèi)打開。一次正確的操作不僅要求邏輯功能上的正確,而且要求完成這些操作所花費(fèi)的時(shí)間在限定之內(nèi)。實(shí)時(shí)又分成硬實(shí)時(shí)和軟實(shí)時(shí),硬實(shí)時(shí)要求任務(wù)在規(guī)定時(shí)間內(nèi)必須完成,這由操作系統(tǒng)來保證;而軟實(shí)時(shí)要求事件響應(yīng)是實(shí)時(shí)的,并按照任務(wù)的優(yōu)先級(jí),盡可能在短時(shí)間內(nèi)完成任務(wù)。實(shí)時(shí)操作系統(tǒng)需要調(diào)度一切可利用的資源完成有實(shí)時(shí)性要求的任務(wù),其次才著考慮提高操作系統(tǒng)的整體效率。 隨著嵌入式系統(tǒng)越來越多得與外部連接,甚至是通過互聯(lián)網(wǎng)連接,其安全性也越來越受到關(guān)注。比如用掌上電腦進(jìn)行網(wǎng)上購物的時(shí)候,用戶的銀行帳號(hào)信息必須得到嚴(yán)格的保護(hù)。安全性具體是指要求嵌入式設(shè)備在與外部連接的過程中,其內(nèi)部的數(shù)據(jù)不會(huì)偶然或被惡意地破壞、更改或者泄露,維持嵌入式系統(tǒng)中信息的保密性和完整性。 微內(nèi)核操作系統(tǒng) 所謂微內(nèi)核是一種最小的的計(jì)算機(jī)操作系統(tǒng)內(nèi)核,其設(shè)計(jì)思想是內(nèi)核本身不提供操作系統(tǒng)的相關(guān)服務(wù),而是提供實(shí)現(xiàn)這些服務(wù)的機(jī)制,諸如底層的地址空間管理,線程調(diào)度以及進(jìn)程間通信。一般的硬件都有執(zhí)行權(quán)限級(jí)別,比如Intel IA32架構(gòu)有Ring0到Ring3的特權(quán)級(jí),而一般的操作系統(tǒng)至少會(huì)用到兩個(gè),稱之為內(nèi)核態(tài)和用戶態(tài)。而對于微內(nèi)核操作系統(tǒng)來說,并非操作系統(tǒng)服務(wù)都運(yùn)行于內(nèi)核態(tài),而是提供服務(wù)實(shí)現(xiàn)的機(jī)制部分運(yùn)行于內(nèi)核態(tài);而操作系統(tǒng)的服務(wù),包括設(shè)備驅(qū)動(dòng),文件系統(tǒng)和用戶界面等則作為用戶態(tài)的服務(wù)應(yīng)用程序運(yùn)行。 圖2 單內(nèi)核操作系統(tǒng)(左)和微內(nèi)核操作系統(tǒng)結(jié)構(gòu)比較圖 如圖2所示,左邊的是單內(nèi)核操作系統(tǒng)的結(jié)構(gòu)示意圖。我們常用的Windows操作系統(tǒng)和Linux操作系統(tǒng)都屬于這個(gè)類型。單內(nèi)核操作系統(tǒng)的內(nèi)核提供完整的操作系統(tǒng)服務(wù),比如圖中所示的文件系統(tǒng),進(jìn)程間通信,進(jìn)程調(diào)度器,內(nèi)存管理,設(shè)備驅(qū)動(dòng)程序等等。而應(yīng)用程序則運(yùn)行在用戶態(tài),應(yīng)用程序想要使用操作系統(tǒng)提供的服務(wù),需要通過內(nèi)核提供的接口,我們稱之為系統(tǒng)調(diào)用。當(dāng)應(yīng)用程序進(jìn)程執(zhí)行系統(tǒng)調(diào)用時(shí),會(huì)陷入到內(nèi)核的代碼去執(zhí)行,進(jìn)程此時(shí)運(yùn)行于內(nèi)核態(tài),處理器處于特權(quán)級(jí)最高的Ring0狀態(tài)執(zhí)行。當(dāng)應(yīng)用程序需要的操作系統(tǒng)服務(wù)調(diào)用完成,進(jìn)程回到原本的應(yīng)用程序代碼中繼續(xù)執(zhí)行,也同時(shí)回到了用戶態(tài),在Ring3的特權(quán)級(jí)上運(yùn)行。 而對于右邊的微內(nèi)核操作系統(tǒng),操作系統(tǒng)的內(nèi)核部分被大大簡化,只包括基本的IPC機(jī)制,虛擬內(nèi)存映射和調(diào)度機(jī)制,這些僅僅是用于實(shí)現(xiàn)操作系統(tǒng)服務(wù)的基本機(jī)制。真正的操作系統(tǒng)服務(wù),比如設(shè)備驅(qū)動(dòng),文件系統(tǒng),應(yīng)用程序間通信等,通過用戶態(tài)服務(wù)程序的方式實(shí)現(xiàn)。當(dāng)普通的應(yīng)用程序需要操作系統(tǒng)的相關(guān)服務(wù)時(shí),通過發(fā)送IPC消息給這個(gè)服務(wù)程序,這些服務(wù)程序進(jìn)行相關(guān)的操作,必要時(shí)也會(huì)通過內(nèi)核提供的系統(tǒng)調(diào)用陷入到內(nèi)核態(tài)去執(zhí)行基本的操作,并把結(jié)果再通過IPC返回給請求服務(wù)的應(yīng)用程序。 微內(nèi)核操作系統(tǒng)特點(diǎn) 微內(nèi)核操作系統(tǒng)特有的架構(gòu)帶來的很多優(yōu)點(diǎn),這些特點(diǎn)正好匹配了嵌入式平臺(tái)對操作系統(tǒng)的需求,非常適合于嵌入式環(huán)境的應(yīng)用。 首先是可靠性,按照單內(nèi)核操作系統(tǒng)的設(shè)計(jì),內(nèi)核包括所有的操作系統(tǒng)服務(wù),其中任何一個(gè)服務(wù)出錯(cuò),就會(huì)造成整個(gè)系統(tǒng)的崩潰。微內(nèi)核操作系統(tǒng)的設(shè)計(jì)思想是在內(nèi)核中留盡量少的東西,只保留實(shí)現(xiàn)操作系統(tǒng)服務(wù)的最基本機(jī)制,而把具體服務(wù)的實(shí)現(xiàn)放到用戶態(tài)的服務(wù)應(yīng)用程序中去。這就大大降低了內(nèi)核崩潰的幾率。特別是目前操作系統(tǒng)的許多錯(cuò)誤都是因?yàn)椴灰?guī)范,并且沒有經(jīng)過嚴(yán)格測試的驅(qū)動(dòng)程序造成的。圖3顯示了Linux內(nèi)核代碼不同目錄的錯(cuò)誤分布,顯然驅(qū)動(dòng)程序的錯(cuò)誤是主要原因。 圖3 操作系統(tǒng)中的錯(cuò)誤在各模塊中的分布(來源:文獻(xiàn)[4]) 然后是實(shí)時(shí)性。實(shí)時(shí)性是指操作系統(tǒng)對響應(yīng)時(shí)間有嚴(yán)格的要求,不僅要求成功執(zhí)行還要求在規(guī)定的時(shí)間內(nèi)完成所有操作。一般會(huì)要求操作系統(tǒng)內(nèi)核是搶占式的,并且內(nèi)核的代碼是可重入的。微內(nèi)核操作系統(tǒng)內(nèi)核較小也意味著需要實(shí)時(shí)化的部分較少。而且微內(nèi)核之上也可以很方便同時(shí)運(yùn)行實(shí)時(shí)的程序和一般的非實(shí)時(shí)的程序。 此外還不能忘了安全性。設(shè)計(jì)安全系統(tǒng)的準(zhǔn)則是最小權(quán)限準(zhǔn)則,也即所有的部件都只擁有執(zhí)行相關(guān)功能所必須的權(quán)限,而沒有額外的權(quán)限。最小權(quán)限準(zhǔn)則需要系統(tǒng)的可信計(jì)算基礎(chǔ)盡可能地小。可信計(jì)算基礎(chǔ)(Trusted Computing Base)是指整個(gè)系統(tǒng)中對安全性最關(guān)鍵的部分,在可信計(jì)算基礎(chǔ)內(nèi)的漏洞會(huì)危及整個(gè)系統(tǒng)的安全性。因?yàn)椴僮飨到y(tǒng)內(nèi)核是可信計(jì)算基礎(chǔ)中最重要的一部分,微內(nèi)核操作系統(tǒng)內(nèi)核較小的特點(diǎn)使之在安全性應(yīng)用方面很有優(yōu)勢。 上面說了很多微內(nèi)核操作系統(tǒng)的優(yōu)點(diǎn),但微內(nèi)核架構(gòu)也不是完美的,它有一個(gè)很大的缺點(diǎn)那就是性能。我們知道對于單內(nèi)核操作系統(tǒng),調(diào)用系統(tǒng)服務(wù)的方式是用過系統(tǒng)調(diào)用,需要的僅僅是用戶態(tài)和內(nèi)核態(tài)的兩次轉(zhuǎn)換,每個(gè)進(jìn)程都同時(shí)有用戶棧和內(nèi)核棧可以存放執(zhí)行過程中的信息。而對于微內(nèi)核操作系統(tǒng),調(diào)用系統(tǒng)服務(wù)需要通過發(fā)送IPC消息給服務(wù)應(yīng)用程序,服務(wù)應(yīng)用程序通過系統(tǒng)調(diào)用完成服務(wù)請求后再通過另一個(gè)IPC消息把結(jié)果返回給調(diào)用者。這涉及到了進(jìn)程的上下文切換,并且由于沒有內(nèi)核棧這樣簡單的機(jī)制,傳送消息需要額外的拷貝開銷。因此性能對于微內(nèi)核架構(gòu)操作系統(tǒng)成了一個(gè)很大的問題。事實(shí)上第一代微內(nèi)核操作系統(tǒng)諸如Mach之上運(yùn)行的系統(tǒng)的性能讓人難以接受。然而以L4為首的第二代微內(nèi)核操作系統(tǒng)通過合理的架構(gòu)設(shè)計(jì),將IPC的開銷相對Mach成數(shù)量級(jí)級(jí)別得減少。有分析表明在L4微內(nèi)核操作系統(tǒng)之上運(yùn)行的L4Linux的性能相對原本的Linux只有幾個(gè)百分點(diǎn)的損失。[5] 結(jié)語 綜上文所述,微內(nèi)核操作系統(tǒng)的可靠性、實(shí)時(shí)性和安全性特點(diǎn)很好得匹配了嵌入式平臺(tái)對操作系統(tǒng)的需求。隨著對微內(nèi)核操作系統(tǒng)研究的深入,其相應(yīng)技術(shù)將會(huì)不斷地成熟,性能也會(huì)不斷地提高,可以預(yù)見不久的將來,我們將會(huì)見到越來越多的微內(nèi)核操作系統(tǒng)被應(yīng)用到嵌入式平臺(tái)上。 |