張 帆,求 偉,韓大鵬
ZHANG Fan1,QIU Wei1,HAN Da-peng2
(1.武警杭州指揮學院 信息技術教研室,杭州 310023;2.浙江省女子監獄 信息技術科,杭州 310012)
實時系統是指系統能夠在限定的響應時間內提供所需水平的服務。一般的說,實時系統是能及時響應外部發生的隨機事件,并以足夠快的速度完成對事件處理的計算機應用系統。一個實時系統計算的正確性不僅取決于程序的邏輯正確性,也取決于結果產生的時間,如果系統的時間約束條件得不到滿足,將會發生系統出錯。實時系統有反應式和嵌入式兩種類型。反應式實時系統會與環境發生連續的互作用,而嵌入式實時系統主要用于控制大型系統中安裝的特殊硬件。
一般來講,性能是一個軟件系統或組件對時間要求滿足程度的一種指示。這里的時間指標可以用響應時間和吞吐量來衡量,該時間值是指響應某種要求所需的時間,而吞吐量用以指示系統在特定時間間隔內能夠處理的請求數量。實時操作系統與一般商用多任務操作系統如Unix、Windows有共同的特點,也有不同的特點。對于商用多任務操作系統,其目的是方便用戶管理計算機資源,追求吞吐量;而實時操作系統要求在限定的響應時間內提供所需水平的服務,追求實時性、可確定性、可靠性。
評價一個實時操作系統一般可以從任務調度、內存管理、任務通訊、內存開銷、任務切換時間、最大中斷禁止時間等幾個方面來衡量。其中最大中斷禁止時間和任務切換時間是評價一個實時操作系統實時性的最重要的兩個技術指標。
由于Linux系統本身是一個面向桌面的系統,其主要設計標準的是方便用戶管理計算機資源,追求系統資源最大利用率,而不是有確定可預測的實時性能。所以將它應用于實時應用中時存在響應時間不可預測、時鐘粒度粗糙等問題。
2.1 響應時間
響應時間是指從系統接到即時處理程序的中斷(interrupt)請求,到開始執行該處理程序間的時間差,如圖1所示。

圖1 響應時間
影響系統響應時間的因素包括:中斷延遲(interrupt Latency)、中斷服務例程運行時間(Interrupt handler duration)、調度延遲(Scheduler Latency)和調度程序運行時間(Scheduling duration)。
2.1.1 中斷延遲
中斷延遲即中斷響應時間,是指從產生中斷請求到相應中斷服務程序的第一條指令被執行之間的這段時間。由于中斷具備有優先級而且可以嵌套產生,因此可以測知優先級最高的中斷在執行時的延遲時間。然而產生中斷延遲的原因除了處理器響應時間外,更重要的是操作系統往往會大大增加中斷被延遲的時間。在操作系統運行過程中,存在著一些關鍵的操作,這些操作在執行時,操作系統會禁止在其間插入任何中斷。因此如果一個中斷請求在操作系統禁止中斷的這段時間里產生,那么對它的處理就會始終保持在掛起狀態,直到操作系統重新允許中斷插入。最終,中斷延遲在最壞情況下的數值是和操作系統關鍵操作中的指令序列在中斷請求產生后繼續執行的時間緊密相關,實時系統就是要確保系統中的關鍵事件能夠在限定的時間段內被處理。
2.1.2 調度延遲
較長時間的調度延遲有許多原因。其一是驅動在入口處或中斷服務例程進行了許多操作;其二是由于缺乏調度點,內核長時間執行一部分代碼,這些都導致了內核長時間內沒有得到機會去進行調度運算。簡單的解決方法是使調度程序運行得更加頻繁。但實際上這個問題并不那么簡單。首先,如果調度程序運行過于頻繁,將引發頻繁的進程切換,導致過多的CPU和內存資源的浪費;其次會影響中斷服務時機的選擇和服務的質量,再次影響進程IPC。引發過多的資源協調問題,從而導致系統性能的降低。因此讓調度器保持一個有規律的運行節拍,但是又不能過于頻繁的運行很重要。正確的解決方法是,讓調度器在需要的時候盡快運行,例如:中斷發生以后,需要重新調度,從就緒隊列中選擇下一個進程。
2.2 時鐘問題
操作系統環境建立之后,任務的執行和中止在很多情況下都是由時鐘直接或間接喚起的,時鐘也是操作系統活動的基準。為了提高系統的平均吞吐率,Linux 2.6將時鐘中斷的最小間隔設置為1毫秒,雖然相比2.4內核的10毫秒有了很大的提高,但是實時應用一般都需要微秒級的響應精度,1ms的時鐘粒度顯然不能滿足實時應用的需求。如果要把時鐘的間隔縮小以滿足周期性的實時任務的需要,但是Linux的進程切換比較費時,時鐘中斷越頻繁,而花在中斷處理上的時間就越多,系統的大部分時間是調用進程調度程序進行進程調度而不能進行正常的處理。
3.1 增加kernel可搶占性。
一般內核的不可搶占性使實時任務無法提供任務的調度權,可以通過修改源碼,將系統調用的過程細分,縮小禁止中斷、內核加鎖的范圍。增加調度器運行的時機。
3.2 對中斷進行軟件模擬
采用軟件對中斷模擬,在Linux內核下增加一個軟件層,來控制中斷和處理器關鍵操作。對cli(關中斷)和sti(開中斷)命令進行封裝,在調用cli或者sti時,只是更改中斷的標記位,并不真正的去開、關中斷。例如:RT-Linux,由兩個子內核構成,一個用于Linux環境,一個用于實時環境,可以有效改善系統中斷延遲時間的問題。
3.3 采用高精度定時器
一般內核無法提供高精度時鐘,也即無法高精度分辨實時任務的到來。采用高精度定時器,為系統提供更多的剝奪點。通過系統硬件提供的高精度時鐘,可以解決時鐘粒度過大的問題。
3.4 改進調度算法
雖然Linux進程調度也支持實時優先級,但缺乏有效的實時任務的調度機制和調度算法,無法滿足HRT、QoS等的任務需求,可以通過向調度器增加hook或改造調度器來改善。目前有很多新穎的操作系統調度框架和調度算法都有Linux實現,比如RED-Linux所定義的一個通用的實時調度框架;QLinux所采用的分層式的CPU調度框架,及新穎的調度算法如H-SFQ,以及Cello磁盤調度算法等;SILK所使用的將對一個包的網絡處理抽象成PATH,然后在PATH之間進行調度。
3.5 采用微內核結構
微內核結構的設計有很大的好處。調試用戶進程要比調試內核進程要容易許多,用戶進程在獨立的地址空間運行,不同模塊間的內存管理錯誤不會互相影響,驅動程序可以充分利用內核提供的多線程機制。另一好處是系統的可擴展性,既可以小到100K,可以放入ROM,也可以大到足以適應多機系統的需要。移植及維護微內核結構的系統都很方便。切換上下文速度快,由于內核很小,可以方便的計算出最差的時間參數,如中斷響應時間。微內核的一個弱點是性能不好,因為內核需要大量的進程通信和上下文切換。只能提供簡單的服務,相同的任務微內核系統要調用較多的系統調用。
隨著應用的復雜化和硬件的發展,一個嵌入式控制器系統可能要同時控制和監視很多外設,要求有實時響應,有很多處理任務,各個任務之間有多種信息傳遞,因此嵌入式操作系統在嵌入式系統中將會發揮更大的作用,實時性是絕大多數嵌入式系統的需求,研究嵌入式操作系統內核的實時化技術及其在典型嵌入式實時系統中的應用技術具有重要的意義。Linux以其諸多的優勢不但在桌面操作系統中獲得了巨大的成功,通過對其實時性能等方面的改造,必將在嵌入式領域發揮巨大的作用。
[1]鄒思軼.嵌入式Linux設計與應用.清華大學出版社,2002.
[2]Daniel P.Bovet,Marco Cesati.深入理解LINUX內核.第二版[M].中國電力出版社,2004.
[3]李小群,趙慧斌.Linux 實時調度方案的設計與實現[J].計算機研究與發展,2003,5.
[4]趙慧斌,李小群.改善Linux 核心可搶占性方法的研究與實現[J].計算機學報,2004,2.