1. 程式人生 > >幾種嵌入式實時作業系統的分析與比較

幾種嵌入式實時作業系統的分析與比較

由於嵌入式實時作業系統可以支援多工,使得程式開發更加容易,在便於維護的同時還能提高系統的穩定性和可靠性,所以逐步成為嵌入式系統的重要組成部分,對嵌入式作業系統的研究變得尤為重要。

     本文介紹4種嵌入式實時作業系統VxWorks、μClinux、μC/OS-II和eCos,詳細分析比較了這4種作業系統的主要效能,並根據分析結果指出了各自的適用領域。
  
  VxWorks、μClinux、μC/OS-II和eCos是4種性能優良並被廣泛應用的實時作業系統。本文通過對這4種作業系統的主要效能進行分析與比較,歸納出它們的選型依據和適用領域。

     1   四種作業系統的介紹 
 

       (1)VxWorks
  

        VxWorks是美國WindRiver公司的產品,是目前嵌入式系統領域中應用很廣泛,市場佔有率比較高的嵌入式作業系統。VxWorks實時作業系統由400多個相對獨立、短小精悍的目標模組組成,使用者可根據需要選擇適當的模組來裁剪和配置系統;提供基於優先順序的任務排程、任務間同步與通訊、中斷處理、定時器和記憶體管理等功能,內建符合POSIX(可移植作業系統介面)規範的記憶體管理,以及多處理器控制程式;並且具有簡明易懂的使用者介面,在核心方面甚至町以微縮到8 KB。
 

      (2) μC/OS-II
  

      μC/OS-II是在μC-OS的基礎上發展起來的,是美國嵌入式系統專家Jean J.Labrosse用C語言編寫的一個結構小巧、搶佔式的多工實時核心。μC/OS-II能管理64個任務,並提供任務排程與管理、記憶體管理、任務間同步與通訊、時間管理和中斷服務等功能,具有執行效率高、佔用空間小、實時效能優良和可擴充套件性強等特點。
 

       (3)μClinux
  

        μClinux是一種優秀的嵌入式Linux版本,其全稱為micro-control Linux,從字面意思看是指微控制Linux。同標準的Linux相比,μClinux的核心非常小,但是它仍然繼承了Linux作業系統的主要特性,包括良好的穩定性和移植性、強大的網路功能、出色的檔案系統支援、標準豐富的API,以及TCP/IP網路協議等。因為沒有MMU記憶體管理單元,所以其多工的實現需要一定技巧。
 

        (4)eCos
  

         eCos(embedded Configurable operating system),即嵌入式可配置作業系統。它是一個原始碼開放的可配置、可移植、面向深度嵌入式應用的實時作業系統。最大特點是配置靈活,採用模組化設計,核心部分由小同的元件構成,包括核心、C語言庫和底層執行包等。每個元件可提供大量的配置選項(實時核心也可作為可選配置),使用eCos提供的配置工具可以很方便地配置,並通過不同的配置使得eCos能夠滿足不同的嵌入式應用要求。

      2 效能分析與比較
  

       任務管理、任務及中斷間的同步與通訊機制、記憶體管理、中斷管理、檔案系統、對硬體的支援和系統移植這幾方面是實時作業系統的主要效能。下面就從這幾個方面著手對上述4種作業系統進行分析與比較。
 

         2.1 任務管理
  

       任務管理是嵌入式實時作業系統的核心和靈魂,決定了作業系統的實時效能。它通常包含優先順序設定、多工排程機制和時間確定性等部分。
 

       2.1.1 優先順序設定
  

      嵌入式作業系統支援多工,每個任務都具有優先順序,任務越重要,賦予的優先順序應越高。優先順序的設定分為靜態優先順序和動態優先順序兩種。靜態優先順序指的是每個任務在執行前都被賦予一個優先順序,而且這個優先順序在系統執行期間是不能改變的;動態優先順序則是指每個任務的優先順序(特別是應用程式的優先順序)在系統執行時可以動態地改變。
 

       2.1.2 多工排程機制
  

        任務排程主要是協調任務對計算機系統資源的爭奪使用。對系統資源非常匱乏的嵌入式系統來說,任務排程尤為重要,它直接影響到系統的實時效能。通常,多工排程機制分為基於優先順序搶佔式排程和時間片輪轉排程。
  

        基於優先順序搶佔式排程:系統中每個任務都有一個優先順序,核心總是將CPU分配給處於就緒態的優先順序最高的任務執行。如果系統發現就緒佇列中有比當前執行任務更高的優先順序任務,就把當前執行任務置於就緒佇列中,調入高優先順序任務執行。系統採用優先順序搶佔方式進行排程,可以保證重要的突發事件及時得到處理。
  

      時間片輪轉排程:讓優先順序相同的處於就緒狀態的任務按時間片使用CPU,以防止同優先順序的某一任務長時間獨佔CPU。
  

      在一般情況下,嵌入式實時作業系統採用基於優先順序搶佔式排程與時間片輪轉排程相結合的排程機制。
 

       2.1.3 時間的可確定性
  

       嵌入式實時作業系統甬數呼叫與服務的執行時間應具有可確定性。系統服務的執行時間不依賴於應用程式任務的多少。基於此特徵,系統完成某個確定任務的時間是可預測的。表1具體列出了4種作業系統的排程機制。
  

        4種嵌入式實時作業系統都支援多工,只是在支援任務數量上和任務排程機制上有所不同。VxWorks具有高效的任務管理功能,它支援多工,可分配256個優先順序,支援優先順序搶佔式除錯和時間片輪轉排程,實時性最好。μC/OS-II核心是針對實時系統的要求設計實現的,只支援基於固定優先順序搶佔式排程;排程方法簡單,可以滿足較高的實時性要求。μClinux在結構上繼承了標準Linux的多工實現方式,分為實時程序和普通程序,分別採用先來先服務和時間片輪轉排程;僅針對中低檔嵌入式CPU特點進行改良,且不支援核心搶佔。eCos排程方法豐富,提供了兩種基於優先順序的排程器(即點陣圖排程器和多級佇列排程器),允許使用者在進行配置時選擇其中一個凋度器,適應性好。
 

       2.2 任務及中斷間的同步與通訊機制
  

       實時作業系統的功能一般要通過若干任務和中斷服務程式共同完成。任務與任務之間、任務與中斷間任務及中斷服務程式之間必須協調動作,互相配合,這就涉及任務間的同步與通訊問題。嵌入式實時作業系統通常是通過訊號量、互斥訊號量、事件標誌和非同步訊號來實現同步,通過訊息郵箱、訊息佇列、管道和共享記憶體來提供通訊服務。由於互斥訊號量的使用,帶來了實時作業系統中常見的優先順序反轉問題。優先順序反轉是一種不確定的延遲形式,當高優先順序任務企圖訪問已被低優先順序佔有的共享資源時,必須等待低優先順序任務釋放共享資源;如果這時低優先順序任務被一個或多箇中優先順序任務搶佔,那麼高優先順序任務被延遲的時間將更進一步延長,實時性難以保證。因此,應採取相關措施以盡鼉避免出現優先順序反轉問題。實時系統通常採用優先順序繼承和優先順序置頂機制。
  

        優先順序繼承足指擁有互斥量的任務被提升到與下一個在等待該互斥最的最高優先順序任務相同的優先順序;優先順序置頂是指獲得互斥量的任務將其優先順序提升到一個事先規定好的值。表2為4種作業系統的同步與通訊機制的比較。
 

         4種系統都具有靈話的任務間同步與通訊機制,都可以通過訊號量、訊息佇列來實現同步與通訊,但是VxWorks與μClinux都不支援郵箱和事件標誌,而且除了μClinux和eCos中的點陣圖排程器,其他作業系統都採取了措施抑制優先順序反轉。
 

      2.3 記憶體管理
  

       記憶體管理主要包括:記憶體分配原則,儲存保護和記憶體分配方式。
 

      2.3.1 記憶體分配原則
  

        記憶體分配原則包括快速性、可靠性和高效性。其中,快速性要求記憶體分配過程要儘可能快,所以一般採用簡單、快速的分配演算法;可靠性指的是記憶體分配的請求必須得到滿足;系統強調高效性的要求,不僅僅是對系統成本的要求,而且由於系統本身可配置的記憶體容量也是很有限的,所以要儘可能地避免浪費。
 

        2.3.2 儲存保護
  

       通常在作業系統的記憶體中既有系統程式也有使用者程式,為了使兩者都能正常執行,避免程式間相互干擾,需要對記憶體中的程式和資料進行保護。儲存保護通常需要硬體支援,在很多系統中都採用MMU,並結合軟體實現;但由於嵌入式系統的成本限制核心和使用者程式通常都在相同的記憶體空間中。
 

       2.3.3 記憶體分配方式
  

        記憶體分配方式可分為靜態分配和動態分配。靜態分配是在程式執行前一次性分配給相應記憶體,並且在程式執行期間中不允許再申請或在記憶體中移動;動態分配則允許在程式執行整個過程中進行記憶體分配。靜態分配使系統失去了靈活性,但對於實時性要求比較高的系統是必需的;而動態分配賦予了系統設計者更多自主性,可以靈活地調整系統的功能。
  

        VxWorks對記憶體的使用採用的是Flat Mode,可被靜態或動態連結。VxWorks為使用者提供了兩種記憶體區域Region和Partition。Region是變長的記憶體區,使用者可以從建立的Region中分配Segment,其特點是容易產生碎片,但靈活並且不浪費;Partition是定長的記憶體區,使用者可以從刨建的Partition中分配Buffer,其特點是不會產生碎片,技率高但是易浪費。  VxWorks採用最先演算法分配記憶體。μC/OS-II把連續的大塊記憶體按分割槽來管理,每個分割槽中都包含整數個大小相同的記憶體塊,但不同分割槽之間記憶體的太小可以不同。使用者動態分配記憶體時,只須選擇一個適當的分割槽,按塊來分配記憶體,釋放時將該塊放回到以前所屬的分割槽,這樣就消除了因多次動態分配和釋放記憶體所引起的碎片問題。μClinux是針對沒有MMU的處理器設計的,不能使用處理器的虛擬記憶體管理技術,只能採用實儲存器管理策略。系統使用分頁記憶體分配方式,在啟動時對實際儲存器進行分頁。系統對記憶體的訪問是直接的作業系統對記憶體空間沒有保護,多個程序可共享一個執行空間,所以,即使是一個無特權程序呼叫一個無效指標也會觸發一個地址錯誤,並有可能引起程式崩潰甚至系統崩潰。eCos對記憶體分配既不分段也不分頁,而是採用一種基於記憶體池的動態記憶體分配機制。通過兩種記憶體池類來實現兩種記憶體管理方法:一種是變長的記憶體池;另一種是定長的記憶體池,類似於VxWorb的管理方案。表3為4種作業系統記憶體管理的比較。
 

       2.4 中斷管理
 

       中斷管理是實時系統中一個很重要的部分,系統經常通過中斷與外部事件互動。主要考慮是否支援中斷巢狀、中斷處理機制、中斷延時等。
 

      (1)VxWorks的中斷管理
  

           VxWorks作業系統中斷管理採用中斷處理與普通任務分別在不同棧中處理的中斷處理機制,使得中斷只會引發一些關鍵暫存器的儲存,而不會導致任務的上下文切換,從而極大地縮短了中斷延時。同時,VxWorks的中斷處理程式只能在最短時間內通告中斷的發生,而將其他的非實時處理儘量放入被引發的中斷服務程式中來完成,這也縮短了中斷延時。但是凼為中斷服務程式不在一個固定的仟務上下文中執行,而目沒有任務控制塊,所以所有中斷服務程式使用相同的中斷堆疊。為了能處理最壞情況下的中斷巢狀,必須分配足夠大的中斷堆疊空間。
 

      (2)μC/OS-II的中斷管理
  

       μC/OS-II中斷處理比較簡單。一箇中斷向量上只能掛一箇中斷服務子程式ISR,而且使用者程式碼必須都在ISR中完成。ISR需要做的事情越多,中斷延時也就越長。核心所能支援的最大巢狀深度為255。
 

       (3) μClinux的中斷管理
  

         μClinux作業系統將中斷處理分為兩部分:頂半處理和底半處理。在頂半處理中,必須關中斷執行,且僅進行必要的、非常少、速度快的處理,其他處理交給底半處理;底半處理執行那些複雜、耗時的處理,而且接受中斷。因為系統中存在有許多中斷的底半處理,所以會引起系統中斷處理的延時。
(4)eCos的中斷管理
  eCos使用了分層式中斷處理機制,把中斷處理分為傳統的ISR和滯後中斷服務程式DSR。類似於μClinux的處理機制,這種機制可以在中斷允許時執行DSR,因此在處理較低優先順序中斷時允許高優先順序的中斷和處理。為了極大地縮短中斷延時,ISR應當可以快速執行。如果中斷引起的服務量少,則ISR可以單獨處理中斷;如果中斷服務複雜,則ISR只遮蔽中斷源,然後交由DSR處理。
        2.5 檔案系統
  

          所謂“檔案系統”是指負責存取和管理檔案資訊的機構,也可以說是負貴檔案的建立、撤銷、組織、讀寫、修改、複製,以及對檔案管理所需的其他資源實施管理的軟體部分。VxWorks作業系統在檔案系統與裝置驅動程式之間使用一種標準的I/O口操作介面,且支援MS-DOS、RT-11、RFS、CD-ROM、RAW等檔案系統。這樣,在單個VxWorks作業系統中可以執行多個相同或不同種類的檔案系統。μC/OS-II是面向中小型嵌入式系統的,即使包含全部功能,編譯後核心也不到10 KB,所以系統本身並沒有提供對檔案系統的支援。但是μC/OS-II具有良好的擴充套件效能,如果需要也可自行加入檔案系統的內容。μClinux繼承了Linux完善的檔案系統性能,它支援ROMFS、NFS、ext2、MS-DOS、JFFS等檔案系統。但一般採用ROMFS檔案系統,這種檔案系統相對於一般的檔案系統(如ext2)佔用更少的空間。但是ROMFS檔案系統不支援動態擦寫儲存,對於系統需要動態儲存的資料須採用虛擬RAM盤/JFFS的方法進行處理。eCos作業系統的可配置性非常強大,使用者可以自己加入所需的檔案系統。
 

       2.6 對硬體的支援
  

         VxWorks、μC/OS-II、μClinux和eCos這4種作業系統都支援當前流行的大部分嵌入式CPU。μC/OS-II支援從8位到32位的CPU,VxWorks、μClinux和eCos可以在16位、32位和64位等不同體系結構之間移植。由於μClinux繼承了Linux的大部分效能,所以至少需要512KB的RAM空間,lMB的ROM/Flash空間;而μC/OSII和eCos由於本身核心就很小,經過裁剪後的程式碼最小可以分別為2 KB和10 KB,所需的最小資料RAM空間分別為4 KB和10 KB。總的來說,4種系統對硬體的要求比較低,比較經濟。具體比較如表4所列。

       2.7 系統移植
  

         嵌入式作業系統移植的目的是使嵌入式作業系統能在某個微處理器或微控制器上執行。4種系統中VxWorks是商用作業系統的有很多API函式及相關技術支援,所以移植和二次開發比較容易,但是移植成本較高。其他3種系統的結構化設計便於把與處理器相關的部分分離出來,所以被移植到新的處理器上也是可能的。μC/OS-II的移植相對比較簡單,只需要修改與處理器相關的程式碼就可以了。μClinux是Linux針對嵌入式系統的一種改良,其結構比較複雜。移植μClinux,目標處理器除了應滿足μC/OS-II移植所需的條件外,還需要足夠容量的外部ROM和RAM。eCos系統的可移植性明顯比μC/OS-II和μClinux好。在eCos系統中,每個硬體平臺都有一個單獨的目錄,用於存放引對這一硬體平臺的硬體抽象層的程式碼和配置資訊;而μClinux的硬體抽象層的程式碼則分佈在好幾個目錄中,通過命令來選擇不同硬體平臺的程式碼。所以,修改eCos程式碼相對簡單,移植也相對容易。


       結論
  

        這4種嵌入式實時作業系統在嵌入式系統的應用非常廣泛,但是又具有各自的特點。根據上述比較,歸納出各自的適用領域。


  ①VxWorks是一套婁似於Unix的實時作業系統,它內建了符合POSIX規範的記憶體管理,以及多處理器控制程式,並且具有簡明易懂的使用者介面,在核心方面甚至可以微縮到8 KB。它由400多個相對獨立的、短小精悍的目標模組組成,使用者可根據需要選擇適當模組來裁剪和配置系統,有效地保證了系統的安全性和可靠性。它被廣泛地應用在通訊、軍事、航空、航天等高尖技術及實時性要求極高的領域,尤其是在許多關鍵應用方面,VxWorks還是一枝獨秀。例如,美國波音公司就在其最新的787客機中採用了此作業系統;而在外層空間探索領域,VxWorks則一直是美國太空總署NASA的最愛。
  ②μC/OS-II是一個結構簡單、功能完備和實時性很強的嵌入式作業系統核心,適合於廣大的嵌入式系統開發人員和愛好者入門學習,以及高校教學和科研。μC/OSII很適合開發那些對系統要求不是很苛刻,且RAM和ROM有限的各種小型嵌入式系統裝置。
  ③μClinux最大特點在於針對無MMU處理器設計,可以利用功能強大的Linux資源,因此適合開發對事件要求不高的小容量、低成本的各類產品,特別適用於開發與網路應用密切相關的嵌入式裝置或者PDA裝置。例如,CISCO公司的2500/3000/4000路由器就是基於μClinux作業系統開發的。
  ④eCos最大特點是配置靈活,而月是面向深度嵌入 式應用的,很適合用於一些商業級或工業級對成本敏感的 嵌入式系統,例如消費電子類領域中的一些應用。