嵌入式RTOS

嵌入式RTOS

基本信息


嵌入式應用領域,很多場合對系統的實時性要求嚴格,因此操作系統的選擇要基於實時系統。實時多任務操作系統(Real Time Operating System,簡稱RTOS)是根據操作系統的工作特性而言的,實時是指物理進程的真實時間。實時操作系統是指具有實時性,能支持實時控制系統工作的操作系統。其首要任務是調度一切可利用的資源完成實時控制任務,其次才著眼於提高計算機系統的使用效率,重要特點是要滿足對時間的限制和要求。
通常對於分時操作系統,軟體的執行在時間上的要求並不嚴格,時間上的錯誤一般不會造成災難性的後果。但對於實時操作系統,主要任務是要求對事件進行實時的處理,雖然事件可能在無法預知的時刻到達.但是軟體上必須在事件發生時能夠在嚴格的時限內做出響應(系統響應時間),即使能夠響應,但是如果超出了時限,系統時間響應的超時就意味著致命的失敗。實時操作系統的重要特點是具有系統的可確定性,即系統能對運行情況的最好和最壞等情況能做出精確的估計。
實時多任務操作系統(RTOS)是嵌入式應用軟體的基礎和開發平台。目前大多數嵌入式開發還是在單片機上直接進行,沒有RTOS,但仍要有一個主程序負責調度各個任務。RTOS是一段嵌入在目標代碼中的程序,系統複位后首先執行,相當於用戶的主程序,用戶的其他應用程序都建立在RTOS之上。不僅如此,RTOS還是一個標準的內核,將CPU時間、中斷、I/O、定時器等資源都包裝起來,留給用戶一個標準的API(系統調用),並根據各個任務的優先順序,合理地在不同任務之間分配CPU時間。
RTOS是針對不同處理器優化設計的高效率實時多任務內核,RTOS可以面對幾十個系列的嵌入式處理器MPU、MCU、DSP、SOC等提供類同的API介面,這是RTOS基於設備獨立的應用程序開發基礎。因此,基於RTOS的C語言程序具有極大的可移植性。據專家測算,優秀RTOS上跨處理器平台的程序移植只需要修改1%~4%的內容。在RTOS基礎上可以編寫出各種硬體驅動程序、專家庫函數、行業庫函數、產品庫函數,和通用性的應用程序一起,可以作為產品銷售,促進行業的知識產權交流。因此,RTOS又是一個軟體開發平台。

發展過程


實時操作系統(RTOS)的研究是從20世紀60年代開始的。從系統結構上看,RTOS到現在已經歷了如下三個階段:
早期的實時操作系統
早期的實時操作系統,還不能稱為真正的RTOS,它只是小而簡單的、帶有一定專用性的軟體,功能較弱,可以認為是一種實時監控程序。它一般為用戶提供對系統的初始化管理以及簡單的實時時鐘管理,有的實時監控程序也引入了任務調度及簡單的任務間協調等功能,屬於這類實時監控程序的有RTMX等。這個時期,實時應用較簡單,實時性要求也不高。應用程序、實時監控程序和硬體運行平台往往是緊密聯繫在一起的。
專用實時操作系統
專用實時操作系統,隨著應用的發展,早期的RTOS已越來越顯示出明顯的不足了。有些實時系統的開發者為了滿足實時應用的需要,自己研製與特定硬體相匹配的實時操作系統。這類專用實時操作系統在國外稱為Real—Time Operating System Developed in House。它是在早期用戶為滿足自身開發需要而研製的。一般只能適用於特定的硬體環境,且缺乏嚴格的評測,移植性也不太好。屬於這類實時操作系統的有Intel公司的iMAX86等。
通用實時操作系統
在各種專用RTOS中,一些多任務的機制如基於優先順序的調度、實時時鐘管理、任務間的通信、同步互斥機構等基本上是相同的,不同的只是面向各自的硬體環境與應用目標。實際上,相同的多任務機制是能夠共享的,因而可以把這部分很好地組織起來,形成一個通用的實時操作相同內核。這類實時操作系統大多採用軟組件結構,以一個個軟體“標準組件”構成通用的實時操作系統,一方面,在RTOS內核的最底層將不同的硬體特性屏蔽掉;另一方面.對不同的應用環境提供了標準的、可剪裁的系統服務軟組件。這使得用戶可根據不同的實時應用要求及硬體環境選擇不同的軟組件,也使得實時操作系統開發商在開發過程中減少了重複性工作。這類通用實時操作系統,有Integrated System公司的psosystem,Intel公司的iRMX386,Ready System公司(后與MicrotecResearch合併)的VRTX32,WindRiver SystomS公司(位於美國加州Almeda市)的VxworkS,Accelerated Technology Inc公司的NuclouS PLUS等。它們一般都提供了實時性較好的內核、多種任務通信機制、基於TCP/IP的網路組件、文件管理及I/O服務,提供了集編輯、編譯、調試、模擬為一體的集成開發環境,支持用戶使用C、C++進行應用程序的開發。

功能


任務管理
分時操作系統中的基本調度單位一般是進程(或者線程),而對於實時操作系統,操作系統內核調度的基本單位就是任務。任務一般由任務控制塊、程序區、數據區、堆棧區組成,對於多數實時操作系統來說,堆棧一般又分為系統堆棧和用戶堆棧。系統堆棧用於任務做系統調用訪問系統核心時用到的堆棧,把它從用戶堆棧中獨立出來,是為了保證系統核心的安全性。任務的驅動一般是基於消息或者事件的.即任務的設計是按照依次處理可能接收到的消息和事件,周而復始輪詢循環的。實時操作系統中的任務有四種狀態:運行(Executing),就緒(Ready),掛起(Suspended),冬眠(Dormant)。
1)運行:獲得CPU控制權。
2)就緒:進入任務等待隊列,通過調度轉為運行狀態。
3)掛起:任務發生阻塞,移出任務等待隊列,等待系統實時事件的發生而喚醒,從而轉為就緒或運行。
4)冬眠:任務完成或錯誤等原因被清除的任務,也可以認為是系統中不存在了的任務。
系統中只能有一個任務在運行狀態,各任務按級別通過時間片分別獲得對CPU的訪問權。實時操作系統一個最主要的功能就是多任務管理和基於優先順序的任務調度。
任務間同步和通信
目前,主要的實時操作系統的任務間同步和通信的機制有:消息、事件、信號量.而部分實時操作系統仍然在沿用郵箱機制,另外一些實時操作系統提供了共享內存的任務間通信機制。
1)消息機制的概念和分時操作系統沒有差別,其基本思想是任務通過系統公用的數據交換區(包括私有消息緩衝區和共用消息緩衝池)來交互任務間需要通信的信息。消息機制的系統調用一般包括消息隊列的創建(q—create)、刪除(q—delete)、接收消息(q—receive)、發送消息(q—send)、廣播消息(q-broadcast)、緊急消息(q—urgency)。目前,大多數實時操作系統支持的消息隊列既可以是定長的,也可以是變長的。
2)事件機制適用於任務間需要同步並且通信的數據量不大的情況。一般說來,任務之間的事件通信機制是可以覆蓋的,即任務A先後發送二次事件給任務B,如果任務B還沒有來得及處理的話,任務B只需要處理一次事件就行了。事件機制的系統調用一般包括發送事件(ev—send)、接收事件(ev—receive)。目前大多數實時操作系統支持16~32個事件。
3)如同分時操作系統中的信號量一樣,實時操作系統提供的信號量機制也是為了解決對於臨界資源共享的加鎖機制。信號量機制提供了信號量的創建(sm—create)、信號量的刪除(sm—delete)、信號量的P操作(sm—p)、信號量的V操作(sm—v)。實時操作系統與分時操作系統在信號量機制上有一個明顯的區別,那就是優秀的商用實時操作系統要解決信號量機制的優先順序倒置的問題。
和分時操作系統一樣,實時操作系統會借用CPU的內存管理單元(MMU)來完成內存管理,實時操作系統內存管理模式可以分為實模式與保護模式。目前主流的實時操作系統一般都可以提供兩種模式,讓用戶根據應用自己選擇。一般來說,實時操作系統的內存管理,含有對於內存的優化分配,以盡量減少整個系統的內存佔有量的要求。
實時時鐘服務
目前,商用的實時操作系統在硬體的硬時鐘中斷的基礎上,提供了實時時鐘服務。實時時鐘是系統調度的基礎,也是系統定時伺服器的基礎。實時時鐘服務一般包括定時喚醒(tm—wkafter或者tm—wkwhen)、定時事件(tm—wevafter或者tm—evwhen)機制。另外,部分優秀的實時操作系統提供了定時消息機制,即應用任務(比如說任務A)向系統定時伺服器申請定時器,當定時時間到后,定時伺服器返回任務A一條消息。相應的系統調用一般有定時器申請(tm—start)、定時器刪除(tm—delete)、定時器重置(tm—restart),定時消息的接收一般採用消息隊列的接收機制(q-receive)。是否提供靈活的、高精確度的定時器服務,是衡量實時操作系統功能完整性的一個重要指標。
中斷管理服務
如同分時操作系統一樣,中斷管理服務是操作系統的核心和基本功能。實時操作系統的中斷管理有自己的特殊的要求,那就是中斷處理程序要更加短小、精悍,以減少中斷禁止時間和中斷延遲時間。