<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 嵌入式操作系統中的關(guān)鍵技術(shù)

嵌入式操作系統中的關(guān)鍵技術(shù)

——
作者: 時(shí)間:2007-02-28 來(lái)源:中國工業(yè)設備網(wǎng) 收藏
采用嵌入操作系統 

    現在許多嵌入式系統要勝任的工作越來(lái)越復雜,需要采用32位的嵌入式處理器,這樣就成為嵌入式系統設計中必不可少的一個(gè)環(huán)節。眾所周知通用操作系統(如Microsoft Windows系列的操作系統)并不適合直接應用在上,為了適應嵌入式系統的需要,必須在整個(gè)系統的軟件架構中引入。

    在嵌入式系統應用中,早期的16位及16位以下的微處理器計算能力有限,要處理的任務(wù)一般比較簡(jiǎn)單,因而程序員可以在應用程序中自己管理微處理器的工作流程,很少需要用到嵌入式操作系統。當系統變得較為復雜后,對系統中斷的處理以及多個(gè)功能模塊之間的協(xié)調需要由程序員自己來(lái)控制和解決,這樣做的結果是,隨著(zhù)程序內部的邏輯關(guān)系變得越來(lái)越復雜,軟件開(kāi)發(fā)小組對于駕馭復雜的功能模塊逐漸顯得力不從心,為了保證中斷相關(guān)處理的正確性和完整性,為了保證不同模塊之間對硬件資源的共享和互斥,為了保證系統能定期執行各種任務(wù),軟件開(kāi)發(fā)小組不得不編寫(xiě)和維護一個(gè)復雜的專(zhuān)用操作系統和應用程序的結合體,這樣做使得系統的開(kāi)發(fā)和維護成本加大,也不利于系統的升級。所以在逐漸變得復雜的嵌入式系統中采用成熟的嵌入式操作系統成為更好的解決方案,如嵌入式Linux,VxWorks、pSOS、WinCE、DeltaOS、uCOS、TinyOS等等。

    為了實(shí)現一個(gè)支持各種硬件體系結構、運行穩定高效的嵌入式操作系統需要付出很多的心血,嵌入式操作系統本身包含大量的代碼,而且這些代碼非常精巧、相應的數據結構非常復雜,即使是讀懂這些代碼也要花費很多時(shí)間。比如最簡(jiǎn)單的μCOS-II嵌入式操作系統的最小實(shí)現也需近千行代碼,而普通的嵌入式Linux內核則有近百萬(wàn)行代碼。在嵌入式開(kāi)發(fā)中推薦采用一種通用的嵌入式操作系統,而不是自己從頭編寫(xiě)一個(gè)專(zhuān)用的嵌入式操作系統,因為通甩的嵌入式操作系統經(jīng)過(guò)多年的發(fā)展一般來(lái)說(shuō)穩定性,性能、功能等各方面都會(huì )比自己重寫(xiě)一個(gè)專(zhuān)用的操作系統要好,而且購買(mǎi)它們的成本也比自己從頭開(kāi)發(fā)要低得多;另外,通用嵌入式操作系統一般都遵循操作系統接口標準——POSIX,使用這些系統調用接口進(jìn)行開(kāi)發(fā)可以大大方便上層應用軟件在不同嵌入式操作系統、不同操作系統版本之間的移植,系統升級換代方便、成本低、速度快。  總結來(lái)說(shuō)采用嵌入式操作系統的原因是:解決多任務(wù)所帶來(lái)的復雜性;提高應用程序的可移植性;降低系統開(kāi)發(fā)和維護成本。

    
點(diǎn)擊打開(kāi)新窗口



    嵌入式操作系統中的關(guān)鍵技術(shù)

    在一個(gè)完整的嵌入式系統中,嵌入式操作系統介于底層硬件和上層應用程序之間,如圖1所示,它是整個(gè)系統中不可缺少的重要組成部分。

    嵌入式操作系統與傳統操作系統的基本功能是一致的,即:首先嵌入式操作系統必須能正確、高效地訪(fǎng)問(wèn)和管理底層的各種硬件資源,很好地處理資源管理中的沖突;其次嵌入式操作系統要能為應用程序提供功能完備、使用方便、與底層硬件細節無(wú)關(guān)的系統調用接口。

    但嵌入式操作系統也有其獨特的需求和技術(shù)特點(diǎn),主要區別是:

    1)許多嵌入式系統應用有實(shí)時(shí)性要求,因此多數嵌入式操作系統都具備實(shí)時(shí)性的技術(shù)指標,能保障系統的實(shí)時(shí)響應速度; 

    2)為適應嵌入式系統計算資源的限制,嵌入式操作系統核心部分的體積必須盡可能的??;

    3)為了適應各種應用需求的變化,嵌入式操作系統還應該具有可裁減性、可伸縮性、易移植性的特點(diǎn),讓開(kāi)發(fā)人員可以根據需要對嵌入式操作系統進(jìn)行剪裁和移植;

    4)嵌入式操作系統往往是長(cháng)期連續運行的,因此要求要有很高的可靠性,不能“死機”;

    5)針對特定的應用需求,嵌入式操作系統往往還要對某些模塊做特別的性能優(yōu)化和功能增強。

    實(shí)時(shí)性

    許多應用場(chǎng)合對嵌入式系統有實(shí)時(shí)性的要求,比如汽車(chē)的安全氣囊要求能在一個(gè)極短的時(shí)間內偵測到汽車(chē)碰撞事件的發(fā)生并控制打開(kāi)安全氣囊。為了實(shí)現上述目標,一方面硬件的傳感器和安全氣囊要有足夠快的響應速度,另一方面就是微處理器、嵌入式操作系統和相應的事件響應程序要能處理得足夠快。

    普通操作系統為了實(shí)現在多進(jìn)程并發(fā)執行時(shí)進(jìn)行正確的資源管理,往往會(huì )對某段代碼通過(guò)關(guān)中斷的方式進(jìn)行保護,而且由于多個(gè)進(jìn)程并發(fā)執行后情況變得異常復雜,關(guān)中斷的時(shí)間可能被拖得很長(cháng)且不確定,中斷的關(guān)閉就會(huì )使得實(shí)時(shí)請求不能通過(guò)中斷信號迅速告知CPU,因此系統可能出現的最長(cháng)關(guān)中斷時(shí)間決定著(zhù)操作系統的實(shí)時(shí)性的指標。嵌入式操作系統為了提高實(shí)時(shí)性能,就必須盡量縮短操作系統代碼中的關(guān)閉中斷過(guò)程,并通過(guò)精心的設計確定關(guān)中斷的時(shí)間長(cháng)短。這些設計包括:

    1)操作系統中的進(jìn)程必須是具有嚴格優(yōu)先級差異的,而且應該是搶占式的操作系統內核,即最高優(yōu)先級的進(jìn)程即使是最后出現,也應該最先獲得運行,而且是無(wú)條件立即停止當前進(jìn)程的運行來(lái)切換到具有最高優(yōu)先級的進(jìn)程。如圖2所示。

    
點(diǎn)擊打開(kāi)新窗口


    2)與實(shí)時(shí)處理相關(guān)的函數應盡量都是可重入的,即函數中均使用局部變量。如果使用全局變量,為保證程序的正確性必須對全局變量的訪(fǎng)問(wèn)加鎖,而這樣的保護措施有可能導致進(jìn)程堵塞,從而影響操作系統的實(shí)時(shí)性。

    3)高效的克服優(yōu)先級反轉問(wèn)題,防止高優(yōu)先級的進(jìn)程由于等待某些被低優(yōu)先級進(jìn)程已占用的資源,從而被其他低優(yōu)先級的進(jìn)程搶先運行,影響系統的實(shí)時(shí)性能。

    4)其他實(shí)時(shí)操作系統內核的設計,如解決周期性任務(wù)的調度和時(shí)間抖動(dòng)問(wèn)題等。

    在實(shí)時(shí)性方面,VxWorks、uC/OS-II,QNX,國內的DeltaOS等操作系統都具有較好的實(shí)時(shí)性能,其中VxWorks是性能穩定的商用實(shí)時(shí)操作系統,有較長(cháng)的使用歷史和廣泛的用戶(hù)群;uC/OS-II操作系統是開(kāi)放源碼的小型實(shí)驗性操作系統,實(shí)時(shí)性很強,而且代碼簡(jiǎn)單,便于分析、學(xué)習與改造,應用范圍也很廣;DeltaOS是國內自主研發(fā)的實(shí)時(shí)操作系統,廣泛地應用于工業(yè)、軍事等領(lǐng)域;普通的Linux操作系統在經(jīng)過(guò)實(shí)時(shí)性改造后也可以具有較強的實(shí)時(shí)性而成為實(shí)時(shí)操作系統,如RTAI-Linux等。

    當然,需要說(shuō)明的是并不是所有的嵌入式系統都有實(shí)時(shí)性的要求,因此也并不是所有的嵌入式操作系統都必需是實(shí)時(shí)操作系統,在智能手機、PDA等嵌入式應用中就廣泛地采用了嵌入式Linux, WinCE等非實(shí)時(shí)的操作系統。

    小內核、可配置與易移植

    嵌入式系統往往只具備較小的存儲資源,而且存儲器的大小往往與嵌入式系統的制造成本緊密相關(guān),因此必須采用盡量小的操作系統基本內核,同時(shí)讓其他各種非必須的部分通過(guò)開(kāi)發(fā)人員需要進(jìn)行配置并加入到操作系統的基本內核中,這樣可以使得嵌入式操作系統內核的尺寸保持得較小。嵌入式操作系統的尺寸包括靜態(tài)的尺寸(內核二進(jìn)制文件占用非易失存儲器的大?。┖蛣?dòng)態(tài)的尺寸(系統運行起來(lái)后占用內存的大?。?。這兩者都很重要,靜態(tài)尺寸反映了對Fla-sh等非易失存儲器的占用情況,動(dòng)態(tài)尺寸反映了對SDRAM等系統內存的消耗情況。

    可配置性是嵌入式操作系統的又一個(gè)重要特征,也是區別于通用操作系統的一個(gè)重要特點(diǎn)。在嵌入式領(lǐng)域,底層硬件和應用需求往往變化多端,有的系統需要存儲管理單元來(lái)在虛擬地址空間上運行程序;有的嵌入式系統希望具有優(yōu)先級搶先調度機制;有的嵌入式系統希望實(shí)時(shí)時(shí)鐘的周期為20ms,有的希望是1ms;有的嵌入式系統的底層硬件有多級中斷,有的只有一級中斷等等。所有這些變化使一個(gè)嵌入式操作系統要想占據更大的市場(chǎng)份額,就必須自身具備可配置性,并且配置功能方便易用,使得同一個(gè)嵌入式操作系統的代碼在經(jīng)過(guò)較為方便的配置后,可以在特定的石更件平臺和應用需求下獲得最佳的性能。eCos嵌入式操作系統是可配置性的典型代表,它在操作系統內部設計了大量可以調節操作系統特性和性能的參數,并為配置這些參數設計了專(zhuān)門(mén)的配置工具,該工具具有Windows和Linux等多種版本,可以在開(kāi)發(fā)主機(Host機)上方便地進(jìn)行配置,如圖3所示。除eCos操作系統外,其他嵌入式操作系統如OSKit、Lin-ux, VxWorks、WinCE等操作系統也具備不同程度的可配置性。

    可移植性是指同一個(gè)嵌入式操作系統在進(jìn)行適當修改后可以在不同的硬件平臺上成功運行。由于移植的目的是希望在不同的底層硬件平臺(或者說(shuō)是不同的嵌入式處理器)上運行,因此嵌入式操作系統為了獲得良好的可移植性,一般都將移植時(shí)一需要修改的代碼集中在少數幾個(gè)與硬件操作相關(guān)的C程序或匯編程序中,或者將相關(guān)代碼獨立成外設驅動(dòng)程序,以方便系統開(kāi)發(fā)人員的移植工作,比如嵌入式操作系統中提到的硬-件抽象層(HAL、板級支持包(BSP)等概念都是為加快移植工作效率而提出的;同時(shí)為方便移植,嵌入式操作系統的開(kāi)發(fā)和維護團隊還應該提供完整的文檔來(lái)詳細說(shuō)明移植的過(guò)程和步驟,幫助系統設計人員完成移植工作;此外雖然嵌入式處理器多種多樣,但同一系列的處理器還是非常相近的,通過(guò)提供盡可能多的已有硬件平臺上的移植結果,或者由系統開(kāi)發(fā)人員在Internet上搜索盡可能多的已有工作成果,也是加快移植速度、提高嵌入式操作系統可移植性的有效途徑。

    可靠性

    任何軟件都有可能存在錯誤,嵌入式操作系統也不例外。運行在桌面上的操作系統有時(shí)會(huì )“死機”,使用者還可以通過(guò)手工重啟計算機來(lái)予以容忍,但是嵌入式系統往往要長(cháng)期在無(wú)人值守的環(huán)境下運行,甚至是常年運行,因此對可靠性的要求就成為嵌入式操作系統的一個(gè)重要特點(diǎn)?,F在已有的一些嵌入式操作系統,如嵌入式Linux, VxWorks、uC/OS等等都已經(jīng)經(jīng)過(guò)了多年應用的考驗,也有無(wú)數的工程師對它們的代碼進(jìn)行了檢查,一般來(lái)說(shuō)這些操作系統都是較為穩定和安全的,以L(fǎng)inux內核為例,有研究估計570萬(wàn)行的Linux內核源碼中約包含不到1000個(gè)程序設計錯誤,錯誤率為不到萬(wàn)分之二。但是沒(méi)有任何方法可以證明它們是絕對安全可靠的,也許在普通應用(如手機等消費類(lèi)電子產(chǎn)品)中這些系統還可以接受,但是在一些特殊應用場(chǎng)合下,如軍用、醫用、核電站、航空航天、工業(yè)控制、汽車(chē)制動(dòng)等,系統的一個(gè)錯誤就可能造成很大的損失,因此針對這些領(lǐng)域的需求,在嵌入式系統的設計中還應該對操作系統內核的代碼進(jìn)行詳細的檢查,并進(jìn)行大量的測試,保證嵌入式操作系統的可靠性。為實(shí)現這一目標,迄今為止還沒(méi)有行之有效的方法,而主要依靠設計人員的豐富經(jīng)驗、認真仔細的作風(fēng)、大量時(shí)間和人力成本的投入、廣泛實(shí)際應用的檢驗來(lái)實(shí)現。

    
點(diǎn)擊打開(kāi)新窗口


    結語(yǔ)

    本文探討了嵌入式操作系統與通用的臺式計算機操作系統的異同,介紹了嵌入式操作系統所具備的特點(diǎn)。未來(lái)隨著(zhù)嵌入式系統的應用需求越來(lái)越多樣化、越來(lái)越復雜,嵌入式操作系統必將在上述這些特點(diǎn)上(如實(shí)時(shí)性、可配置性、可移植性等)越來(lái)越具有特色,分別適用于不同的嵌入式應用需求,不斷加快嵌入式系統的開(kāi)發(fā)周期,同時(shí)又能降低嵌入式系統的研發(fā)和生產(chǎn)成本。


評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>