歡迎您光臨本站 註冊首頁

嵌入式Linux分時操作系統的實時性分析

←手機掃碼閱讀     火星人 @ 2014-03-12 , reply:0
  

 一、引言

  Linux本身為分時操作系統,其系統目標為較好的平均響應時間和較高的吞吐量,而實時系統則主要考慮任務的按時完成、盡量減少進程運行的不可預測性等。但與商業嵌入式操作系統相比Linux遵循GPL,具有源代碼開放、定製方便、支持廣泛的計算機硬體等優點,所以,近年來嵌入式Linux成為嵌入式系統方向上的一個研究熱點。

  本文首先分析了實時系統的特點和Linux內核在實時應用方面的不足,然後針對影響操作系統實時性能的若干方面進行研究,提出解決方案,最後總結全文。

  二、實時系統的分類

  實時系統最重要的特點就是實時性,即系統的正確性不僅僅依賴於計算的邏輯結果的正確性,還取決於輸出結果時間的及時性。從這個角度看,實時系統是“一個能夠在指定或者確定的時間內完成系統功能和對外部環境做出響應的系統”。按對實時性能要求的程度,實時系統可分為兩類:

  (1) 硬實時系統:要求可確定性強,具有明確的實時約束,在某個限定的時刻之前不能完成任務將造成災難性的後果。

  (2) 軟實時系統:也對時間敏感,但偶爾發生不能滿足嚴格實時要求的情況也是允許的。

  三、Linux在實時方面存在的不足

  Linux雖然符合POSIX1003.1b關於實時擴展部分的標準,例如:支持SCHED_FIFO和SCHED_RR實時調度策略,鎖內存機制(memorylocking),實時信號等功能,但是由於其最初的設計目標為通用分時操作系統,因此作為一個實時操作系統,Linux仍然存在如下缺陷:

  (1) Linux的內核本身是非搶佔的。Linux下分用戶態和核心態兩種模式,當進程運行在用戶態時,可被優先順序更高的進程搶佔,但當它進入核心態時,其他用戶態進程優先順序再高也不能搶佔它。

  (2) Linux雖然給實時進程提供了較高的優先順序,但是沒有加入時間限制。例如:完成的最後期限、應在多長時間內完成、執行周期等等。同時,其他大量的非實時進程也可能對實時進程造成阻塞,無法確保實時進程的響應時間。

  (3) 時鐘粒度粗糙。時鐘管理是操作系統的脈搏,任務的執行和中止在很多情況下都是由時鐘直接或間接喚起的,它還是進程調度的重要依據。Linux的周期模式定時器頻率僅為100Hz,遠不能滿足實時應用的要求。

  四、改進內核實時性的分析與研究

  從中斷軟體模擬、可搶佔式內核體系結構、實時任務的調度策略這三個方面對嵌入式Linux內核進行研究,並給出了相應的提高實時性的方法。

  1. 響應時間的分析及解決方法

  任務的響應時間被定義為一個事件的發生和任務響應這一事件開始執行之間的間隔時間,通常有以下幾個因素影響任務的響應時間。

  (1) 中斷分配時間IDT(interruptdispatchtime):當一個中斷產生時,在調用中斷處理程序佔用CPU以前,操作系統用來保存所有的寄存器中的內容和系統中其他的關於這一任務狀態的時間。

  (2) 中斷服務時間:IST(interruptservicetime):中斷服務程序用來從硬體設備讀取信息或從操作系統收集信息所用的時間。

  (3) 內核搶佔時間KPT(kernelpreemptiontime):在操作系統意欲搶佔當前進程與搶佔實際上發生之間的時間間隔。

  (4) 調度延遲SD(scheduledelay):調度程序用來調度另一個線程投入運行的時間。

  (5) 進程切換時間CST(contestswitchingtime):當前線程用來保存寄存器和系統狀態的時間與將要運行的線程恢復寄存器中的內容和系統狀態的時間總和。

  (6) 系統調用返回時間RST(returnfromsystemcall):處於內核態的線程在它返回用戶態之前檢查一些狀態所用的時間。

  以上這些時間中,SD、CST和RST總是固定不變的,如果Linux內核設計得當的話,IDT、IST和KPT可以有效的減少。在實時應用的環境中,若干個中斷同時發生的情況是完全可能存在的。這時任務的響應時間最多將包含N(IDT+IST),N為中斷數。

  中斷軟體模擬被用來解決多個中斷同時發生的情形。當一個硬體中斷髮生時,系統只是簡單的在時間表中報告這一時間的發生,然後立即將CPU的控制權返回給操作系統,完全略過了查中斷向量表並執行相應的中斷服務程序。系統在Linux內核之前截獲了所有應中斷信號,並根據當前實時任務的需要,由軟中斷模擬機制處理或掛起該中斷(例如:IBMPC中的8259中斷控制器)。

  採用這個方法,可以減少當多個中斷同時發生時任務的響應時間,最長的延遲時間為N*IST’,其中N為中斷數。在這裡之所以是IST’,而不是IST,是因為採用軟中斷軟體模擬的方法使得在IST時間段內只執行一些簡單的操作。

 2. 搶佔式內核體系結構的設計

  為了解決Linux實現硬實時的最大障礙,使Linux內核成為完全可被搶佔實時內核,典型的實現方案是雙核結構。使用實時核來運行實時任務,Linux內核來運行非實時任務。例如:對於實時數據採樣分析而言,利用實時內核運行一個實時任務來完成數據採集,另一個實時任務完成數據分析和控制輸出功能;同時利用Linux內核上運行的界面來進行數據顯示。如圖1所示。

圖1 雙內核結構

  在Linux內核和硬體之間加個小的實時核,由它管理中斷,提供一些必要的功能,如底層任務創建、中斷服務程序,並且為底層任務、ISR和Linux進程之間進行通信排隊;而Linux內核本身則成為優先順序最低的Idletask。

  對實時性要求強的應用編寫成實時任務,在實時內核上直接運行。Linux內核可以被優先順序更高的實時任務搶佔。對於Linux內核的修改主要集中在三方面:(1) 在Linux內核中影響實時性的地方增加控制點,使內核在控制點可以被搶佔,減少內核搶佔延遲;(2) 將執行時間較長的系統劃分為幾個甚至是十幾個較小的塊分別執行,使實時任務隨時中斷非實時任務;(3) 根據實際需要,增加部分功能。

  隨著嵌入式應用的深入,特別是在數字通信和網路中的應用,多核結構的處理器也陸續上市。如:Motorola公司研發的MPC8260PowerQUICC||融合了兩個CPU-嵌入式PowerPC內核和通信處理模塊(CPM);Infineon公司推出的TC10GP和增強型TC1130都是三核(TriCore)結構的微處理器,這些處理器的產生對於Linux應用中的實時性都大有幫助。 3. 實時調度的演算法研究

  常用的實時調度演算法有:基於優先順序的調度演算法(priority-drivenscheduling,PD);基於時間驅動的調度演算法(time-drivenscheduling,TD);基於比例共享的調度演算法(share-drivensched2uling,SD)。基於優先順序的調度演算法 調度器以優先順序作為尋求下一個任務執行的依據。可分為如下兩種類型:

  (1) 靜態優先順序調度演算法:該演算法給系統中所有進程都靜態的分配一個優先順序。靜態優先順序的分配可以根據應用的屬性來進行,例如任務的周期、用戶優先順序或者其他預先確定的策略。RM(RateMonotonic)是一種典型的靜態優先順序調度演算法,它根據任務執行周期的長短來決定調度優先順序,執行周期小的任務具有較高的優先順序。

  (2) 動態優先順序調度演算法:這種演算法根據任務的資源需求來動態的分配任務的優先順序。EDF(earliestdeadlinefirst)演算法是一種典型的動態優先順序調度演算法,該演算法根據就緒隊列中各個任務的截止期限來分配優先順序,具有最近截止期限的任的優先順序最高。

基於時間驅動的調度演算法

  該演算法本質上是一種設計時就確定下來的離線的靜態調度方法。在系統的設計階段,在明確系統中所有處理的情況下,對於各個任務的開始、切換以及結束時間等事先組出明確的安排和設計。

  基於比例共享的調度演算法

  這是一種越來越受到關注的實時調度模式,基於GPS(generalprocessorscheduling)的演算法,其基本思想就是按照一定的權重(CPU使用的比例)對一組需要調度的任務進行調度,使其執行時間與權重完全成正比。可以通過兩種方法來實現比例共享調度演算法:(1)是調節各個就緒進程出現在當前調度隊列隊首的頻率,並調度隊首的進程執行;(2)是逐次調度就緒隊列中的各個進程投入運行,但根據分配的權重調節分配給每個進程的運行時間片。比例共享演算法包括輪轉法、公平共享法、公平隊列法和彩票調度法等幾類。

  每一種調度策略都有自己的優越性和不足。在這裡我們提出了一種宏觀調度結構,通過設計和構造多屬性和多調度器的選擇機制,使三種實時調度策略的應用都得到支持,相對於只對單種調度策略提供支持的方案,拓展了系統的可使用範圍。宏觀調度結構如圖2所示。

  我們給每一個實時任務定義了4個調度屬性:priority(優先順序:限制該任務比相關聯的其他任務的優先權)、starttime(起始時間:任務開始執行時間)、finishtime(截止時間:任務停止時間)和budget(預設值:任務允許執行時間),不同屬性的數據對應不同的調度策略。宏觀調度結構分為兩個模塊:屬性分配模塊和調度器選擇模塊。屬性分配模塊給每一個實時任務分配多個屬性值,並通過其中的一兩個屬性值決定哪個屬性優先,這樣調度器選擇模塊就可以根據屬性的優先順序別選擇不同的調度器。例如:如果優先順序屬性優先,則調度器就變成了一個純粹的PD調度器;如果截止時間優先,那麼調度器就作為EDF調度器來工作。

  實驗時採用Pentium-||400處理器,128MB內存,運行環境Linux2.0.35(以RED-Linux0.5為補丁),以RM調度策略為例,分別測量每一次系統請求消耗的時間。數據整理如下:宏觀調度結構下屬性分配模塊消耗的時間大部分不到40Ls,平均約35Ls,調度器選擇模塊平均消耗時間約85Ls,消耗時間總計為118Ls,約佔0.118%的CPU時間;單一調度策略的情況平均消耗時間約為25Ls,約佔0.025%的CPU時間。宏觀調度結構的延遲時間為傳統調度方式的5倍,對於大多數的嵌入式系統來講內核的靈活性和可配置性比調度的延時更為重要,而宏觀結構和單一調度結構的CPU可用時間分別為99.88%和99.97%,差別極小,符合嵌入式系統實時性要求。

  五、結論與展望

  Linux雖然為分時操作系統,但由於其功能強大、源代碼開放以及可移植性強等優勢,已成為日益流行的嵌入式實時操作系統的解決方案。本文從軟中斷模擬技術、可搶佔式內核和實時調度策略三個方面給出了改善系統實時性能的方法,並提出了通過採用宏觀調度結構實現的混合調度,拓展了實時系統的應用範圍。Linux實時性能的逐步完善,必將大大促進嵌入式Linux在工業控制、后PC時代信息電器等領域的廣泛應用,應用的需要也會進一步促進大量新型控制演算法的出現。



[火星人 ] 嵌入式Linux分時操作系統的實時性分析已經有599次圍觀

http://coctec.com/docs/program/show-post-71266.html