摘要為了理解RTOS如何通過系統調度策略實現實時性要求,本文介紹了搶占式調度、可搶占的內核等概念。
關鍵詞操作系統實時性能策略
中圖分類號:TP3文獻標識碼:A
一個好的RTOS支持開發人員控制系統執行任何任務或對任何重要事件做出反應的時間,并且能夠以一種可以預測并且完全一致的形式滿足任務執行的最終期限要求。但是,如果RTOS崩潰,這些最終期限就不能被滿足。因此,RTOS必須提供高度的可靠性。特別是它必須提供在不需要重啟的情況下,從軟件故障中快速并智能恢復的機制。
1 搶占式調度
在像Linux這樣的通用操作系統中,在對線程和進程的CPU占用上采用了“公平”調度策略。這樣的策略能夠提供良好的整體表現,但是不能保證高優先級、對時間要求嚴格的線程將優先于低優先級的線程執行。事實上,操作系統有時甚至會中斷高優先級的線程來為低優先級線程提供CPU時間。其結果可能造成對時間要求嚴格的線程很容易地錯過它們的最終期限,甚至在一個高速的高端處理器上運行時也會出現這種情況。優先級控制能夠使很多應用受益,包括像前面提到的媒體播放器(MP3、WAV、MPEG2等格式)。媒體播放器需要實現正常播放所要求的速率(例如44kHz的音頻、30fps的視頻)。在這種限制之下,一個讀線程和一個顯示線程可以被設計成依靠一個可編程的定時器來喚醒,緩沖或顯示一幀后進入睡眠狀態,直到下一個定時觸發。這提供了一種調整機制,支持高于正常用戶活動而又低于關鍵系統功能的優先級設置。換句話說,如果沒有更重要的任務準備運行,媒體播放將始終以給定的媒體速率執行。
2 最壞情形
搶占式調度僅在高優先級的線程在一個短的、有限時間段內搶占低優先級線程的情況下有效。否則,系統將不可能預測要花費多長時間來執行一個給定的操作。因此,任何銷售進程模式的RTOS的供應商都必須提供針對下面兩種時間間隔提供最壞情形:線程切換時間,即當兩個線程處于同一進程的情況下,從執行一個線程的最后一條指令到執行下一個被調度線程的第一條指令所經過的時間;前后關系切換(contextswitch)時間,其定義同上,但僅針對兩個線程處于不同進程的情況。將所有的線程放在幾個大的進程中將是錯誤的,因為線程提供的切換速度更快。雖然線程能實現并行處理優勢因而適合于某些設計,但將一個應用分成多個內存保護的進程使得代碼更容易調試,提供
了更好的錯誤隔離和恢復能力,并允許系統進行新功能的動態升級。
3 可搶占的內核
在大部分通用操作系統中,操作系統的內核是不可搶占的。其結果是,一個高優先級的進程不可能搶占一個內核調用,而是必須等待整個調用完成,即使這個調用是由系統中的低優先級進程發起的。另外,當經常在內核調用中執行的驅動程序或其它系統服務代表一個客戶線程執行的時候,所有的優先級信息常常會丟失,這導致了不可預測的延遲并阻止了關鍵活動的準時完成。為了實現這個目標,操作系統內核必須盡可能簡潔,只有具有較短執行路徑的服務才被包含在內核中,任何需要大量工作(如進程加載)的操作必須被安排到外部進程或線程。這種方法有助于通過內核確保最長的不可搶占代碼路徑具有一個時間上限。
4 如何提高可靠性
我們已經明白怎樣使RTOS具有可以預測性,但是如何實現其可靠性呢?答案在很大程度上取決于RTOS的架構。采用微內核(mricokernel)架構來提供更精確的故障隔離,像QNXNeutrino這樣的操作系統都基于微內核架構。微內核有兩個明確的特征:(1)在操作系統內核中只實現了一個包含了基本OS服務的小內核(如信號量、定時器、任務調度等)。包括驅動程序、文件系統、協議棧和用戶應用程序在內的所有其它的組件在內核外部分離的、保護內存的進程中運行。有問題的系統服務不再作為孤立的故障點,而是在它破壞其它服務或操作系統內核之前被終止并重啟。(2)所有的組件能夠通過消息傳遞進行通信,一個定義良好的通信機制保障了程序在保持彼此安全隔離的前提下進行數據交換。適當實現的消息傳遞也可以作為一個虛擬的“軟件總線”,允許幾乎任何的軟件組件,甚至是一個設備驅動程序被動態地加入或替換,對于必須提供連續服務的系統而言這是一項關鍵要求。
和傳統的操作系統架構相比,微內核支持嵌入式設備贏得明顯更快的平均修復時間(MTTR)。例如,如果一個設備驅動程序失敗將可能出現以下情況:操作系統可以終止該驅動程序,回收其正在使用的資源,并對其進行重新啟動,這個過程通常這只需要幾個毫秒時間。盡管和傳統的操作系統相比,基于消息傳遞的微內核RTOS通常提供了更好的容錯性和動態升級能力,也有一些觀點認為消息傳遞增加了開銷。在實際應用中,如果實現正確,消息傳遞的性能可以接近底層硬件的內存帶寬。例如,一個微內核RTOS可以采用多段式(multipart)消息和線程到線程的消息數據直接拷貝等各種技術,來確保系統性能可以達到傳統的進程間通信(IPC)方法的水平。由一些組織如DedicatedSystems等進行的獨立測試證實,和傳統的RTOS相比,微內核RTOS在一系列的實時指標方面表現良好,在很多情況下甚至有更好的表現。