該樓層疑似違規已被系統折疊?隱藏此樓查看此樓
圖?1?RT-Linux結構
RT?-Linux的關鍵技術是通過軟件來模擬硬件的中斷控制器。當Linux系統要封鎖CPU的中斷時時,RT-Linux中的實時子系統會截取到這個請求,把它記錄下來,而實際上并不真正封鎖硬件中斷,這樣就避免了由于封中斷所造成的系統在一段時間沒有響應的情況,從而提高了實時性。當有硬件中斷到來時,?RT-Linux截取該中斷,并判斷是否有實時子系統中的中斷例程來處理還是傳遞給普通的Linux內核進行處理。另外,普通Linux系統中的最小定時精度由系統中的實時時鐘的頻率決定,一般Linux系統將該時鐘設置為每秒來100個時鐘中斷,所以Linux系統中一般的定時精度為?10ms,即時鐘周期是10ms,而RT-Linux通過將系統的實時時鐘設置為單次觸發狀態,可以提供十幾個微秒級的調度粒度。
RT-Linux實時子系統中的任務調度可以采用RM、EDF等優先級驅動的算法,也可以采用其他調度算法。
RT?-Linux對于那些在重負荷下工作的專有系統來說,確實是一個不錯的選擇,但他僅僅提供了對于CPU資源的調度;并且實時系統和普通Linux系統關系不是十分密切,這樣的話,開發人員不能充分利用Linux系統中已經實現的功能,如協議棧等。所以RT-Linux適合與工業控制等實時任務功能簡單,并且有硬實時要求的環境中,但如果要應用與多媒體處理中還需要做大量的工作。
意大利的RTAI(?Real-Time?Application?Interface?)源于RT-Linux,它在設計思想上和RT-Linux完全相同。它當初設計目的是為了解決RT-Linux難于在不同Linux版本之間難于移植的問題,為此,RTAI在?Linux?上定義了一個實時硬件抽象層,實時任務通過這個抽象層提供的接口和Linux系統進行交互,這樣在給Linux內核中增加實時支持時可以盡可能少地修改?Linux的內核源代碼。
3.2.?Kurt-Linux
Kurt?-Linux由Kansas大學開發,它可以提供微秒級的實時精度[KurtWeb]?[Srinivasan]。不同于RT-Linux單獨實現一個實時內核的做法,Kurt?-Linux是在通用Linux系統的基礎上實現的,它也是第一個可以使用普通Linux系統調用的基于Linux的實時系統。
Kurt-Linux將系統分為三種狀態:正常態、實時態和混合態,在正常態時它采用普通的Linux的調度策略,在實時態只運行實時任務,在混合態實時和非實時任務都可以執行;實時態可以用于對于實時性要求比較嚴格的情況。
為了提高Linux系統的實時特性,必須提高系統所支持的時鐘精度。但如果僅僅簡單地提高時鐘頻率,會引起調度負載的增加,從而嚴重降低系統的性能。為了解決這個矛盾,?Kurt-Linux采用UTIME所使用的提高Linux系統中的時鐘精度的方法[UTIMEWeb]:它將時鐘芯片設置為單次觸發狀態(One?shot?mode),即每次給時鐘芯片設置一個超時時間,然后到該超時事件發生時在時鐘中斷處理程序中再次根據需要給時鐘芯片設置一個超時時間。它的基本思想是一個精確的定時意味著我們需要時鐘中斷在我們需要的一個比較精確的時間發生,但并非一定需要系統時鐘頻率達到此精度。它利用CPU的時鐘計數器TSC?(Time?Stamp?Counter)來提供精度可達CPU主頻的時間精度。
對于實時任務的調度,Kurt-Linux采用基于時間(TD)的靜態的實時CPU調度算法。實時任務在設計階段就需要明確地說明它們實時事件要發生的時間。這種調度算法對于那些循環執行的任務能夠取得較好的調度效果。
Kurt?-Linux相對于RT-Linux的一個優點就是可以使用Linux系統自身的系統調用,它本來被設計用于提供對硬實時的支持,但由于它在實現上只是簡單的將Linux調度器用一個簡單的時間驅動的調度器所取代,所以它的實時進程的調度很容易受到其它非實時任務的影響,從而在有的情況下會發生實時任務的截止期限不能滿足的情況,所以也被稱作嚴格實時系統(Firm?Real-time)。目前基于Kurt-Linux的應用有:ARTS(ATM?Reference?Traffic?System)、多媒體播放軟件等。另外Kurt-Linux所采用的這種方法需要頻繁地對時鐘芯片進行編程設置。
3.3.?RED-Linux
RED?-Linux是加州大學Irvine分校開發的實時Linux系統[REDWeb][?Wang99],它將對實時調度的支持和Linux很好地實現在同一個操作系統內核中。它同時支持三種類型的調度算法,即:Time-Driven、?Priority-Dirven、Share-Driven。
為了提高系統的調度粒度,RED-Linux從RT-Linux那兒借鑒了軟件模擬中斷管理器的機制,并且提高了時鐘中斷頻率。當有硬件中斷到來時,RED-Linux的中斷模擬程序僅僅是簡單地將到來的中斷放到一個隊列中進行排隊,并不執行真正的中斷處理程序。
另外為了解決Linux進程在內核態不能被搶占的問題,?RED-Linux在Linux內核的很多函數中插入了搶占點原語,使得進程在內核態時,也可以在一定程度上被搶占。通過這種方法提高了內核的實時特性。
RED-Linux的設計目標就是提供一個可以支持各種調度算法的通用的調度框架,該系統給每個任務增加了如下幾項屬性,并將它們作為進程調度的依據:
Priority:作業的優先級;
Start-Time:作業的開始時間;
Finish-Time:作業的結束時間;
Budget:作業在運行期間所要使用的資源的多少;
通過調整這些屬性的取值及調度程序按照什么樣的優先順序來使用這些屬性值,幾乎可以實現所有的調度算法。這樣的話,可以將三種不同的調度算法無縫、統一地結合到了一起�