嵌入式即時系統中採用的作業系統我們稱為嵌入式即時作業系統,它既是嵌入式作業系統,又是即時作業系統。作為一種嵌入式作業系統,它具有嵌入式軟體共有的可裁剪、低資源佔用、低功耗等特點;而作為一種即時作業系統(本文對即時作業系統特性的討論僅限於強即時作業系統,下面提到的即時作業系統也均指強即時作業系統),它與通用作業系統(如Windows、Unix、Linux等)相比有很大的差別,下面我們將通過比較這兩種作業系統之間的差別來逐步描述即時作業系統的主要特點。
我們在日常工作學習環境中接觸最多的是通用作業系統,通用作業系統是由分時作業系統發展而來,大部分都支援多使用者和多進程,負責管理眾多的進程並為它們分配系統資源。分時作業系統的基本設計原則是:盡量縮短系統的平均回應時間並提高系統的吞吐率,在單位時間內為儘可能多的使用者請求提供服務。由此可以看出,分時作業系統注重平均表現效能,不注重個體表現效能。如對於整個系統來說,注重所有任務的平均回應時間而不關心單個任務的回應時間,對於某個單個任務來說,注重每次執行的平均回應時間而不關心某次特定執行的回應時間。通用作業系統中採用的很多策略和技巧都體現出了這種設計原則,如虛存管理機制中由於採用了LRU等頁替換演算法,使得大部分的訪存需求能夠快速地通過實體記憶體完成,只有很小一部分的訪存需求需要通過調頁完成,但從總體上來看,平均訪存時間與不採用虛存技術相比沒有很大的提高,同時又獲得了虛空間可以遠大於實體記憶體容量等好處,因此虛存技術在通用作業系統中得到了十分廣泛的應用。類似的例子還有很多,如Unix檔案系統中檔案存放位置的間接索引查詢機制等,甚至硬體設計中的Cache技術以及CPU的動態分支預測技術等也都體現出了這種設計原則。由此可見,這種注重平均表現,即統計型表現特性的設計原則的影響是十分深遠的。
即時作業系統,即RTOS(Real-TIme operating system),是指當外界事件或資料產生時,能夠接受並以足夠快的速度予以處理,其處理的結果又能在規定的時間之內來控制生產過程或對處理系統作出快速響應,並控制所有即時任務協調一致啟動並執行作業系統。對於即時作業系統,前面我們已經提到,它除了要滿足應用的功能需求以外,更重要的是還要滿足應用提出的即時性要求,而組成一個應用的眾多即時任務對於即時性的要求是各不相同的,此外即時任務之間可能還會有一些複雜的關聯和同步關係,如執行順序限制、共用資源的互斥訪問要求等,這就為系統即時性的保證帶來了很大的困難。因此,即時作業系統所遵循的最重要的設計原則是:採用各種演算法和策略,始終保證系統行為的可預測性(predictability)。可預測性是指在系統啟動並執行任何時刻,在任何情況下,即時作業系統的資源撫平策略都能為爭奪資源(包括CPU、記憶體、網路頻寬等)的多個即時任務合理地分配資源,使每個即時任務的即時性要求都能得到滿足。與通用作業系統不同,即時作業系統注重的不是系統的平均表現,而是要求每個即時任務在最壞情況下都要滿足其即時性要求,也就是說,即時作業系統注重的是個體表現,更準確地講是個體最壞情況表現。舉例來說,如果即時作業系統採用標準的虛存技術,則一個即時任務執行的最壞情況是每次訪存都需要調頁,如此累計起來的該任務在最壞情況下的已耗用時間是不可預測的,因此該任務的即時性無法得到保證。從而可以看出在通用作業系統中廣泛採用的虛存技術在即時作業系統中不宜直接採用。
由於即時作業系統與通用作業系統的基本設計原則差別很大,因此在很多資源調度策略的選擇上以及作業系統實現的方法上兩者都具有較大的差異,這些差異主要體現在以下幾點:
(1)任務調度策略:
通用作業系統中的任務調度策略一般採用基於優先順序的搶先式調度策略,對於優先順序相同的進程則採用時間片輪轉調度方式,使用者進程可以通過系統調用動態地調整自己的優先順序,作業系統也可根據情況調整某些進程的優先順序。
即時作業系統中的任務調度策略目前使用最廣泛的主要可分為兩種,一種是靜態表驅動方式,另一種是固定優先順序搶先式調度方式。
靜態表驅動方式是指在系統運行前工程師根據各任務的即時要求用手工的方式或在協助工具輔助的協助下產生一張任務的已耗用時間表,這張時間表與列車的運行時刻表類似,指明了各任務的起始已耗用時間以及運行長度,已耗用時間表一旦產生就不再變化了,在運行時調度器只需根據這張表在指定的時刻啟動相應的任務即可。靜態表驅動方式的主要優點是:
一、已耗用時間表是在系統運行前產生的,因此可以採用較複雜的搜尋演算法找到較優的調度方案;
二、運行時調度器開銷較小;
三、系統具有非常好的可預測性,即時性驗證也比較方便;
這種方式主要缺點是不靈活,需求一旦發生變化,就要重建整個已耗用時間表。
由於具有非常好的可預測性,這種方式主要用於航空航天、軍事等對系統的即時性要求十分嚴格的領域。
固定優先順序搶先式調度方式則與通用作業系統中採用的基於優先順序的調度方式基本類似,但在固定優先順序搶先式調度方式中,進程的優先順序是固定不變的,並且該優先順序是在運行前通過某種優先順序分配策略(如Rate-Monotonic、Deadline-Monotonic等)來指定的。這種方式的優缺點與靜態表驅動方式的優缺點正好完全相反,它主要應用於一些較簡單、較獨立的嵌入式系統,但隨著調度理論的不斷成熟和完善,這種方式也會逐漸在一些對即時性要求十分嚴格的領域中得到應用。目前市場上大部分的即時作業系統採用的都是這種調度方式。
(2)記憶體管理:
關於虛存管理機制我們在上面已經進行了一些討論。為解決虛存給系統帶來的不可預測性,即時作業系統一般採用如下兩種方式:
一、在原有虛存管理機制的基礎上增加頁面鎖功能,使用者可將關鍵頁面鎖定在記憶體中,從而不會被swap程式將該頁面交換出記憶體。這種方式的優點是既得到了虛存管理機製為軟體開發帶來的好處,又提高了系統的可預測性。缺點是由於TLB等機制的設計也是按照注重平均表現的原則進行的,因此系統的可預測性並不能完全得到保障;
二、採用靜態記憶體劃分的方式,為每個即時任務劃分固定的記憶體地區。這種方式的優點是系統具有較好的可預測性,缺點是靈活性不夠好,任務對儲存空間的需求一旦有變化就需要重新對記憶體進行劃分,此外虛存管理機制所帶來的好處也喪失了。
目前市場上的即時作業系統一般都採用第一種管理方式。
(3) 中斷處理:
在通用作業系統中,大部分外部中斷都是開啟的,中斷處理一般由裝置驅動程式來完成。由於通用作業系統中的使用者進程一般都沒有即時性要求,而中斷處理常式直接跟硬體裝置互動,可能有即時性要求,因此中斷處理常式的優先順序被設定為高於任何使用者進程。
但對於即時作業系統採用上述的中斷處理機制是不合適的。首先,外部中斷是環境向即時作業系統進行的輸入,它的頻度是與環境變化的速率相關的,而與即時作業系統無關。如果外部中斷產生的頻度不可預測,則一個即時任務在運行時被中斷處理常式阻塞的時間開銷也是不可預測的,從而使任務的即時性得不到保證;如果外部中斷產生的頻度是可預測的,一旦某外部中斷產生的頻度超出其預測值(如硬體故障產生的虛假中斷訊號或預測值本身有誤)就可能會破壞整個系統的可預測性。其次,即時作業系統中的各使用者進程一般都有即時性要求,因此中斷處理常式優先順序高於所有使用者進程的優先順序分配方式是不合適的。
一種較適合即時作業系統的中斷處理方式為:除時鐘中斷外,屏蔽所有其它中斷,中斷處理常式變為周期性的輪詢操作,這些操作由核心態的裝置驅動程式或由使用者態的裝置支援庫來完成。採用這種方式的主要好處是充分保證了系統的可預測性,主要缺點是對環境變化的響應可能不如上述中斷處理方式快,另外輪詢操作在一定程度上降低了CPU的有效利用率。另一種可行的方式是:對於採用輪詢方式無法滿足需求的外來事件,採用中斷方式,其它時間仍然採用輪詢方式。但此時中斷處理常式與所以其它任務一樣擁有優先順序,調度器根據優先順序對處於就緒態的任務和中斷處理常式統一進行處理器調度。這種方式使外來事件的響應速度加快,並避免了上述中斷方式帶來第二個問題,但第一個問題仍然存在。
此外為提高時鐘中斷回應時間的可預測性,即時作業系統應儘可能少地屏蔽中斷。
(4)共用資源的互斥訪問:
通用作業系統一般採用訊號量機制來解決共用資源的互斥訪問問題。
對於即時作業系統,如果任務調度採用靜態表驅動方式,共用資源的互斥訪問問題在產生已耗用時間表時已經考慮到了,在運行時無需再考慮。如果任務調度採用基於優先順序的方式,則傳統的訊號量機制在系統運行時很容易造成優先順序倒置問題(Priority Inversion),即當一個高優先順序任務通過訊號量機制訪問共用資源時,該訊號量已被一低優先順序任務佔有,而這個低優先順序任務在訪問共用資源時可能又被其它一些中等優先順序的任務搶先,因此造成高優先順序任務被許多具有較低優先順序的任務阻塞,即時性難以得到保證。因此在即時作業系統中,往往對傳統的訊號量機制進行了一些擴充,引入了如優先順序繼承協議(Priority
Inheritance Protocol)、優先順序頂置協議(Priority Ceiling Protocol)以及Stack Resource Policy等機制,較好地解決了優先順序倒置的問題。
(5)系統調用以及系統內部操作的時間開銷:
進程通過系統調用得到作業系統提供的服務,作業系統通過內部操作(如環境切換等)來完成一些內部管理工作。為保證系統的可預測性,即時作業系統中的所有系統調用以及系統內部操作的時間開銷都應是有界的,並且該界限是一個具體的量化數值。而在通用作業系統中對這些時間開銷則未做如此限制。
(6)系統的可重新進入性:
在通用作業系統中,核心態系統調用往往是不可重新進入的,當一低優先順序任務調用核心態系統調用時,在該時間段內到達的高優先順序任務必須等到低優先順序的系統調用完成才能獲得CPU,這就降低了系統的可預測性。因此,即時作業系統中的核心態系統調用往往設計為可重新進入的。
(7)協助工具輔助:
即時作業系統額外提供了一些協助工具輔助,如即時任務在最壞情況下的執行時間估算工具、系統的即時性驗證工具等,可協助工程師進行系統的即時性驗證工作。
此外,即時作業系統對系統硬體設計也提出了一些要求,如:
DMA
DMA是一種資料交換協議,主要作用是在無需CPU參與的情況下將資料在記憶體與其它外部裝置間進行交換。 DMA最常用的一種實現方式被稱為周期竊取(Cycle Stealing)方式,即首先遇過匯流排仲裁協議與CPU競爭匯流排控制權,在獲得控制權後再根據使用者預設的操作指令進行資料交換。由於這種周期竊取方式會給使用者任務帶來不可預測的額外阻塞開銷,所以即時作業系統往往要求系統設計時不採用DMA或採取一些可預測性更好DMA實現方式,如Time-slice method等。
Cache
Cache的主要作用是採用容量相對較小的快速儲存組件來彌補高效能CPU與相對來說效能較低的儲存空間之間的效能差異,由於它可以使系統的平均表現效能得到大幅提高,因此在硬體設計中得到了極為廣泛的應用。
但即時作業系統注重的不是平均表現效能,而是個體最壞情況表現,因此在對系統進行即時性驗證時必須考慮即時任務啟動並執行最壞情況,即每次訪存都沒有命中 Cache情況下的已耗用時間,所以在利用協助工具輔助估算即時任務在最壞情況下的執行時間,應將系統中所有的Cache功能暫時關閉,在系統實際運行時再將 Cache功能啟用。除此以外,另一種較極端的做法則是在硬體設計中完全不採用Cache技術。
注1:何為嵌入式系統嵌入式系統是指將應用程式和作業系統與電腦硬體整合在一起的系統。簡單的說就是系統的應用軟體與系統的硬體一體化,類似與BIOS的工作萬式。這種系統具育軟體代碼小,高度自動化,響應速度快等特點,特別適合於要求即時的和多任務的體系。
注2:即時多任務作業系統即時多任務作業系統(Real Time Operating System〉是根據作業系統的工作特性而言的。即時是指物理進程的真即時間。即時作業系統是指其即時性,能支援即時系統工作的作業系統。其首要任務是調度一切可利用的資源完成即時控制任務,其次才著眼於提高電腦系統的使用率,這種系統的重要特點是要滿足對時間的限制和要求。