嵌入式操作系統(tǒng)中的關(guān)鍵技術(shù)
——
現(xiàn)在許多嵌入式系統(tǒng)要勝任的工作越來越復(fù)雜,需要采用32位的嵌入式處理器,這樣嵌入式操作系統(tǒng)就成為嵌入式系統(tǒng)設(shè)計中必不可少的一個環(huán)節(jié)。眾所周知通用操作系統(tǒng)(如Microsoft Windows系列的操作系統(tǒng))并不適合直接應(yīng)用在嵌入式操作系統(tǒng)上,為了適應(yīng)嵌入式系統(tǒng)的需要,必須在整個系統(tǒng)的軟件架構(gòu)中引入嵌入式操作系統(tǒng)。
在嵌入式系統(tǒng)應(yīng)用中,早期的16位及16位以下的微處理器計算能力有限,要處理的任務(wù)一般比較簡單,因而程序員可以在應(yīng)用程序中自己管理微處理器的工作流程,很少需要用到嵌入式操作系統(tǒng)。當系統(tǒng)變得較為復(fù)雜后,對系統(tǒng)中斷的處理以及多個功能模塊之間的協(xié)調(diào)需要由程序員自己來控制和解決,這樣做的結(jié)果是,隨著程序內(nèi)部的邏輯關(guān)系變得越來越復(fù)雜,軟件開發(fā)小組對于駕馭復(fù)雜的功能模塊逐漸顯得力不從心,為了保證中斷相關(guān)處理的正確性和完整性,為了保證不同模塊之間對硬件資源的共享和互斥,為了保證系統(tǒng)能定期執(zhí)行各種任務(wù),軟件開發(fā)小組不得不編寫和維護一個復(fù)雜的專用操作系統(tǒng)和應(yīng)用程序的結(jié)合體,這樣做使得系統(tǒng)的開發(fā)和維護成本加大,也不利于系統(tǒng)的升級。所以在逐漸變得復(fù)雜的嵌入式系統(tǒng)中采用成熟的嵌入式操作系統(tǒng)成為更好的解決方案,如嵌入式Linux,VxWorks、pSOS、WinCE、DeltaOS、uCOS、TinyOS等等。
為了實現(xiàn)一個支持各種硬件體系結(jié)構(gòu)、運行穩(wěn)定高效的嵌入式操作系統(tǒng)需要付出很多的心血,嵌入式操作系統(tǒng)本身包含大量的代碼,而且這些代碼非常精巧、相應(yīng)的數(shù)據(jù)結(jié)構(gòu)非常復(fù)雜,即使是讀懂這些代碼也要花費很多時間。比如最簡單的μCOS-II嵌入式操作系統(tǒng)的最小實現(xiàn)也需近千行代碼,而普通的嵌入式Linux內(nèi)核則有近百萬行代碼。在嵌入式開發(fā)中推薦采用一種通用的嵌入式操作系統(tǒng),而不是自己從頭編寫一個專用的嵌入式操作系統(tǒng),因為通甩的嵌入式操作系統(tǒng)經(jīng)過多年的發(fā)展一般來說穩(wěn)定性,性能、功能等各方面都會比自己重寫一個專用的操作系統(tǒng)要好,而且購買它們的成本也比自己從頭開發(fā)要低得多;另外,通用嵌入式操作系統(tǒng)一般都遵循操作系統(tǒng)接口標準——POSIX,使用這些系統(tǒng)調(diào)用接口進行開發(fā)可以大大方便上層應(yīng)用軟件在不同嵌入式操作系統(tǒng)、不同操作系統(tǒng)版本之間的移植,系統(tǒng)升級換代方便、成本低、速度快。 總結(jié)來說采用嵌入式操作系統(tǒng)的原因是:解決多任務(wù)所帶來的復(fù)雜性;提高應(yīng)用程序的可移植性;降低系統(tǒng)開發(fā)和維護成本。
嵌入式操作系統(tǒng)中的關(guān)鍵技術(shù)
在一個完整的嵌入式系統(tǒng)中,嵌入式操作系統(tǒng)介于底層硬件和上層應(yīng)用程序之間,如圖1所示,它是整個系統(tǒng)中不可缺少的重要組成部分。
嵌入式操作系統(tǒng)與傳統(tǒng)操作系統(tǒng)的基本功能是一致的,即:首先嵌入式操作系統(tǒng)必須能正確、高效地訪問和管理底層的各種硬件資源,很好地處理資源管理中的沖突;其次嵌入式操作系統(tǒng)要能為應(yīng)用程序提供功能完備、使用方便、與底層硬件細節(jié)無關(guān)的系統(tǒng)調(diào)用接口。
但嵌入式操作系統(tǒng)也有其獨特的需求和技術(shù)特點,主要區(qū)別是:
1)許多嵌入式系統(tǒng)應(yīng)用有實時性要求,因此多數(shù)嵌入式操作系統(tǒng)都具備實時性的技術(shù)指標,能保障系統(tǒng)的實時響應(yīng)速度;
2)為適應(yīng)嵌入式系統(tǒng)計算資源的限制,嵌入式操作系統(tǒng)核心部分的體積必須盡可能的小;
3)為了適應(yīng)各種應(yīng)用需求的變化,嵌入式操作系統(tǒng)還應(yīng)該具有可裁減性、可伸縮性、易移植性的特點,讓開發(fā)人員可以根據(jù)需要對嵌入式操作系統(tǒng)進行剪裁和移植;
4)嵌入式操作系統(tǒng)往往是長期連續(xù)運行的,因此要求要有很高的可靠性,不能“死機”;
5)針對特定的應(yīng)用需求,嵌入式操作系統(tǒng)往往還要對某些模塊做特別的性能優(yōu)化和功能增強。
實時性
許多應(yīng)用場合對嵌入式系統(tǒng)有實時性的要求,比如汽車的安全氣囊要求能在一個極短的時間內(nèi)偵測到汽車碰撞事件的發(fā)生并控制打開安全氣囊。為了實現(xiàn)上述目標,一方面硬件的傳感器和安全氣囊要有足夠快的響應(yīng)速度,另一方面就是微處理器、嵌入式操作系統(tǒng)和相應(yīng)的事件響應(yīng)程序要能處理得足夠快。
普通操作系統(tǒng)為了實現(xiàn)在多進程并發(fā)執(zhí)行時進行正確的資源管理,往往會對某段代碼通過關(guān)中斷的方式進行保護,而且由于多個進程并發(fā)執(zhí)行后情況變得異常復(fù)雜,關(guān)中斷的時間可能被拖得很長且不確定,中斷的關(guān)閉就會使得實時請求不能通過中斷信號迅速告知CPU,因此系統(tǒng)可能出現(xiàn)的最長關(guān)中斷時間決定著操作系統(tǒng)的實時性的指標。嵌入式操作系統(tǒng)為了提高實時性能,就必須盡量縮短操作系統(tǒng)代碼中的關(guān)閉中斷過程,并通過精心的設(shè)計確定關(guān)中斷的時間長短。這些設(shè)計包括:
1)操作系統(tǒng)中的進程必須是具有嚴格優(yōu)先級差異的,而且應(yīng)該是搶占式的操作系統(tǒng)內(nèi)核,即最高優(yōu)先級的進程即使是最后出現(xiàn),也應(yīng)該最先獲得運行,而且是無條件立即停止當前進程的運行來切換到具有最高優(yōu)先級的進程。如圖2所示。
2)與實時處理相關(guān)的函數(shù)應(yīng)盡量都是可重入的,即函數(shù)中均使用局部變量。如果使用全局變量,為保證程序的正確性必須對全局變量的訪問加鎖,而這樣的保護措施有可能導(dǎo)致進程堵塞,從而影響操作系統(tǒng)的實時性。
3)高效的克服優(yōu)先級反轉(zhuǎn)問題,防止高優(yōu)先級的進程由于等待某些被低優(yōu)先級進程已占用的資源,從而被其他低優(yōu)先級的進程搶先運行,影響系統(tǒng)的實時性能。
4)其他實時操作系統(tǒng)內(nèi)核的設(shè)計,如解決周期性任務(wù)的調(diào)度和時間抖動問題等。
在實時性方面,VxWorks、uC/OS-II,QNX,國內(nèi)的DeltaOS等操作系統(tǒng)都具有較好的實時性能,其中VxWorks是性能穩(wěn)定的商用實時操作系統(tǒng),有較長的使用歷史和廣泛的用戶群;uC/OS-II操作系統(tǒng)是開放源碼的小型實驗性操作系統(tǒng),實時性很強,而且代碼簡單,便于分析、學(xué)習(xí)與改造,應(yīng)用范圍也很廣;DeltaOS是國內(nèi)自主研發(fā)的實時操作系統(tǒng),廣泛地應(yīng)用于工業(yè)、軍事等領(lǐng)域;普通的Linux操作系統(tǒng)在經(jīng)過實時性改造后也可以具有較強的實時性而成為實時操作系統(tǒng),如RTAI-Linux等。
當然,需要說明的是并不是所有的嵌入式系統(tǒng)都有實時性的要求,因此也并不是所有的嵌入式操作系統(tǒng)都必需是實時操作系統(tǒng),在智能手機、PDA等嵌入式應(yīng)用中就廣泛地采用了嵌入式Linux, WinCE等非實時的操作系統(tǒng)。
小內(nèi)核、可配置與易移植
嵌入式系統(tǒng)往往只具備較小的存儲資源,而且存儲器的大小往往與嵌入式系統(tǒng)的制造成本緊密相關(guān),因此必須采用盡量小的操作系統(tǒng)基本內(nèi)核,同時讓其他各種非必須的部分通過開發(fā)人員需要進行配置并加入到操作系統(tǒng)的基本內(nèi)核中,這樣可以使得嵌入式操作系統(tǒng)內(nèi)核的尺寸保持得較小。嵌入式操作系統(tǒng)的尺寸包括靜態(tài)的尺寸(內(nèi)核二進制文件占用非易失存儲器的大?。┖蛣討B(tài)的尺寸(系統(tǒng)運行起來后占用內(nèi)存的大?。?。這兩者都很重要,靜態(tài)尺寸反映了對Fla-sh等非易失存儲器的占用情況,動態(tài)尺寸反映了對SDRAM等系統(tǒng)內(nèi)存的消耗情況。
可配置性是嵌入式操作系統(tǒng)的又一個重要特征,也是區(qū)別于通用操作系統(tǒng)的一個重要特點。在嵌入式領(lǐng)域,底層硬件和應(yīng)用需求往往變化多端,有的系統(tǒng)需要存儲管理單元來在虛擬地址空間上運行程序;有的嵌入式系統(tǒng)希望具有優(yōu)先級搶先調(diào)度機制;有的嵌入式系統(tǒng)希望實時時鐘的周期為20ms,有的希望是1ms;有的嵌入式系統(tǒng)的底層硬件有多級中斷,有的只有一級中斷等等。所有這些變化使一個嵌入式操作系統(tǒng)要想占據(jù)更大的市場份額,就必須自身具備可配置性,并且配置功能方便易用,使得同一個嵌入式操作系統(tǒng)的代碼在經(jīng)過較為方便的配置后,可以在特定的石更件平臺和應(yīng)用需求下獲得最佳的性能。eCos嵌入式操作系統(tǒng)是可配置性的典型代表,它在操作系統(tǒng)內(nèi)部設(shè)計了大量可以調(diào)節(jié)操作系統(tǒng)特性和性能的參數(shù),并為配置這些參數(shù)設(shè)計了專門的配置工具,該工具具有Windows和Linux等多種版本,可以在開發(fā)主機(Host機)上方便地進行配置,如圖3所示。除eCos操作系統(tǒng)外,其他嵌入式操作系統(tǒng)如OSKit、Lin-ux, VxWorks、WinCE等操作系統(tǒng)也具備不同程度的可配置性。
可移植性是指同一個嵌入式操作系統(tǒng)在進行適當修改后可以在不同的硬件平臺上成功運行。由于移植的目的是希望在不同的底層硬件平臺(或者說是不同的嵌入式處理器)上運行,因此嵌入式操作系統(tǒng)為了獲得良好的可移植性,一般都將移植時一需要修改的代碼集中在少數(shù)幾個與硬件操作相關(guān)的C程序或匯編程序中,或者將相關(guān)代碼獨立成外設(shè)驅(qū)動程序,以方便系統(tǒng)開發(fā)人員的移植工作,比如嵌入式操作系統(tǒng)中提到的硬-件抽象層(HAL、板級支持包(BSP)等概念都是為加快移植工作效率而提出的;同時為方便移植,嵌入式操作系統(tǒng)的開發(fā)和維護團隊還應(yīng)該提供完整的文檔來詳細說明移植的過程和步驟,幫助系統(tǒng)設(shè)計人員完成移植工作;此外雖然嵌入式處理器多種多樣,但同一系列的處理器還是非常相近的,通過提供盡可能多的已有硬件平臺上的移植結(jié)果,或者由系統(tǒng)開發(fā)人員在Internet上搜索盡可能多的已有工作成果,也是加快移植速度、提高嵌入式操作系統(tǒng)可移植性的有效途徑。
可靠性
任何軟件都有可能存在錯誤,嵌入式操作系統(tǒng)也不例外。運行在桌面上的操作系統(tǒng)有時會“死機”,使用者還可以通過手工重啟計算機來予以容忍,但是嵌入式系統(tǒng)往往要長期在無人值守的環(huán)境下運行,甚至是常年運行,因此對可靠性的要求就成為嵌入式操作系統(tǒng)的一個重要特點?,F(xiàn)在已有的一些嵌入式操作系統(tǒng),如嵌入式Linux, VxWorks、uC/OS等等都已經(jīng)經(jīng)過了多年應(yīng)用的考驗,也有無數(shù)的工程師對它們的代碼進行了檢查,一般來說這些操作系統(tǒng)都是較為穩(wěn)定和安全的,以Linux內(nèi)核為例,有研究估計570萬行的Linux內(nèi)核源碼中約包含不到1000個程序設(shè)計錯誤,錯誤率為不到萬分之二。但是沒有任何方法可以證明它們是絕對安全可靠的,也許在普通應(yīng)用(如手機等消費類電子產(chǎn)品)中這些系統(tǒng)還可以接受,但是在一些特殊應(yīng)用場合下,如軍用、醫(yī)用、核電站、航空航天、工業(yè)控制、汽車制動等,系統(tǒng)的一個錯誤就可能造成很大的損失,因此針對這些領(lǐng)域的需求,在嵌入式系統(tǒng)的設(shè)計中還應(yīng)該對操作系統(tǒng)內(nèi)核的代碼進行詳細的檢查,并進行大量的測試,保證嵌入式操作系統(tǒng)的可靠性。為實現(xiàn)這一目標,迄今為止還沒有行之有效的方法,而主要依靠設(shè)計人員的豐富經(jīng)驗、認真仔細的作風(fēng)、大量時間和人力成本的投入、廣泛實際應(yīng)用的檢驗來實現(xiàn)。
結(jié)語
本文探討了嵌入式操作系統(tǒng)與通用的臺式計算機操作系統(tǒng)的異同,介紹了嵌入式操作系統(tǒng)所具備的特點。未來隨著嵌入式系統(tǒng)的應(yīng)用需求越來越多樣化、越來越復(fù)雜,嵌入式操作系統(tǒng)必將在上述這些特點上(如實時性、可配置性、可移植性等)越來越具有特色,分別適用于不同的嵌入式應(yīng)用需求,不斷加快嵌入式系統(tǒng)的開發(fā)周期,同時又能降低嵌入式系統(tǒng)的研發(fā)和生產(chǎn)成本。
評論