王惠玲
(蘭州資源環(huán)境職業(yè)技術學院,甘肅 蘭州 730021)
嵌入式Linux操作系統(tǒng)實時性的研究
王惠玲
(蘭州資源環(huán)境職業(yè)技術學院,甘肅 蘭州 730021)
通過分析嵌入式Linux在實時性方面的缺陷和不足,針對細化時鐘粒度、可搶占式內(nèi)核體系結構、中斷軟件模擬和實時調(diào)度策略等問題進行研究,提出了相應的實時性改進方法及宏觀調(diào)度結構,拓展了實時系統(tǒng)的應用范圍。
嵌入式系統(tǒng);Linux;實時性;搶占;調(diào)度策略
Linux以其功能強大、源代碼開放、支持多種硬件平臺、模塊化設計方案及豐富的開發(fā)工具支持等特點廣泛應用在嵌入式系統(tǒng)領域。作為嵌入式產(chǎn)品的操作系統(tǒng)平臺,Linux具有較好的實時性、系統(tǒng)可靠性、任務處理隨機性。但由于其在實時應用領域的技術障礙,要應用在嵌入式領域,還必須對Linux內(nèi)核作必要的改進。本文首先分析了實時系統(tǒng)的特點和Linux內(nèi)核在實時應用方面的不足,然后針對影響操作系統(tǒng)實時性能的若干方面進行研究,提出解決方案。
實時操作系統(tǒng)貴在實時,要求在規(guī)定的時間內(nèi)完成某種操作。因此實時系統(tǒng)最重要的特點就是實時性,即系統(tǒng)的正確性不僅僅依賴于計算的邏輯結果的正確性,還取決于輸出結果時間的及時性。從這個角度看,實時系統(tǒng)是“一個能夠在指定或者確定的時間內(nèi)完成系統(tǒng)功能和對外部環(huán)境做出響應的系統(tǒng)”。按對實時性能要求的程度,實時系統(tǒng)可分為兩類:
1.硬實時系統(tǒng):要求可確定性強,具有明確的實時約束,在某個限定的時刻之前不能完成任務將造成災難性的后果。因此,在這類系統(tǒng)的設計和實現(xiàn)過程中,應采用各種分析、模擬及形式化驗證方法對系統(tǒng)進行嚴格的檢驗,以保證在各種情況下應用的時間需求和功能需求都能夠得到滿足。
2.軟實時系統(tǒng):也對時間敏感,當某些應用雖然提出了時間要求,但偶爾發(fā)生不能滿足嚴格實時要求的情況也是允許的。因此,某些應用雖然提出了時間需求,但實時任務偶爾違反這種需求對系統(tǒng)的運行以及環(huán)境不會造成嚴重影響。
盡管Linux本身提供了一些支持實時性的機制,但是由于其最初的設計目標為通用分時操作系統(tǒng),并且Linux系統(tǒng)是以高的吞吐量和公平性為追求目標,基本上沒有考慮實時應用所要滿足的時間約束,它只是提供了一些相對簡單的任務調(diào)度策略。因此,實時性問題是將Linux應用于嵌入式系統(tǒng)開發(fā)的一大障礙,無法在硬實時系統(tǒng)中得到應用,作為一個實時操作系統(tǒng),Linux仍然存在如下缺陷:
1.Linux的內(nèi)核是不可搶占的。Linux分為用戶態(tài)和核心態(tài)兩種模式,當進程運行在用戶態(tài)時,可被優(yōu)先級更高的進程搶占,但當它進入核心態(tài)時,其他用戶態(tài)進程優(yōu)先級再高也不能搶占它,這將導致優(yōu)先級逆轉,實時任務執(zhí)行時間的不確定性,顯然不能滿足硬實時應用的要求。
2.Linux系統(tǒng)時鐘精度太過粗糙。時鐘管理是操作系統(tǒng)的脈搏,任務的執(zhí)行和中止在很多情況下都是由時鐘直接或間接喚起的,它是進程調(diào)度的重要依據(jù)。Linux的周期模式定時器頻率僅為100Hz,使得其時間粒度過大,加大了任務響應延遲,遠不能滿足實時應用的要求。
3.Linux采用對臨界區(qū)操作時屏蔽中斷的方式,在中斷處理中是不允許進行任務調(diào)度的,從而抑制了系統(tǒng)及時響應外部操作的能力。
4.缺乏有效的實時任務調(diào)度機制和調(diào)度算法。
5.Linux雖然給實時進程提供了較高的優(yōu)先級,但是沒有加入時間限制。例如:完成的最后期限、應在多長時間內(nèi)完成、執(zhí)行周期等等。同時,其他大量的非實時進程也可能對實時進程造成阻塞,無法確保實時進程的響應時間。
針對Linux在實時應用中的技術障礙,將Linux改造成為支持實時任務的嵌入式操作系統(tǒng),主要從細化時鐘粒度、可搶占式內(nèi)核體系結構、中斷軟件模擬和實時任務的調(diào)度策略這四個方面對嵌入式Linux內(nèi)核進行研究,并給出了相應的提高實時性的方法。
1.細化時鐘粒度
精確的計時是實時調(diào)度器正確操作所必須的,調(diào)度器通常要求在一個特定的時刻進行任務切換,計時的錯誤將導致背離計劃的調(diào)度,引起任務釋放抖動。標準Linux系統(tǒng)時鐘精度太過粗糙,時鐘中斷周期為10ms,不能滿足特定嵌入式應用領域中對于響應時間精度的要求。因此,在實時Linux應用中,需要細化其時鐘粒度,具體有兩種方式可以解決時鐘粒度問題:
(1)通過直接修改內(nèi)核定時參數(shù)Hz的初值來細化時鐘粒度,如將標準Linux中內(nèi)核定時參數(shù)Hz改為10000,則時鐘粒度可以達到100μs,這種方式雖然會增加一些系統(tǒng)開銷,但在強周期性環(huán)境下,對定時器的設置只需初始化一次,在一定程度上保證了處理效率。
(2)通過對可編程中斷定時器8254或先進的可編程中斷控制器進行編程來改進Linux時鐘機制,以提高其時鐘的分辨率,使毫秒級的粗粒度定時器變成微秒級的細粒度定時器。
2.增強Linux可搶占性內(nèi)核機制
標準Linux內(nèi)核是不可搶占的,導致較大的延遲,增強內(nèi)核的可搶占性能,可提高系統(tǒng)內(nèi)核對實時任務的響應能力。為了解決Linux實現(xiàn)硬實時的最大障礙,使Linux內(nèi)核成為完全可被搶占實時內(nèi)核,典型的實現(xiàn)方案是雙核結構。使用實時核來運行實時任務,Linux內(nèi)核來運行非實時任務。如圖1所示。
圖1 雙內(nèi)核結構
對于Linux內(nèi)核的修改主要集中在三方面:
(1)在Linux內(nèi)核中影響實時性的地方增加控制點,使內(nèi)核在控制點可以被搶占,減少內(nèi)核搶占延遲。
(2)將執(zhí)行時間較長的系統(tǒng)劃分為幾個甚至是十幾個較小的塊分別執(zhí)行,使實時任務隨時中斷非實時任務。
(3)根據(jù)實際需要,增加部分功能。
3.中斷軟件模擬
響應時間的分析及解決方法:任務的響應時間被定義為一個事件的發(fā)生和任務響應這一事件開始執(zhí)行之間的間隔時間,通常有以下幾個因素影響任務的響應時間。
(1)中斷分配時間IDT(interruptdispatchtime):當一個中斷產(chǎn)生時,在調(diào)用中斷處理程序占用CPU以前,操作系統(tǒng)用來保存所有的寄存器中的內(nèi)容和系統(tǒng)中其他的關于這一任務狀態(tài)的時間。
(2)中斷服務時間IST(interruptservicetime):中斷服務程序用來從硬件設備讀取信息或從操作系統(tǒng)收集信息所用的時間。
(3)內(nèi)核搶占時間KPT(kernelpreemptiontime):在操作系統(tǒng)意欲搶占當前進程與搶占實際上發(fā)生之間的時間間隔。
(4)調(diào)度延遲SD(scheduledelay):調(diào)度程序用來調(diào)度另一個線程投入運行的時間。
(5)進程切換時間CST(contestswitchingtime):當前線程用來保存寄存器和系統(tǒng)狀態(tài)的時間與將要運行的線程恢復寄存器中的內(nèi)容和系統(tǒng)狀態(tài)的時間總和。
(6)系統(tǒng)調(diào)用返回時間RST(returnfromsystemcall):處于內(nèi)核態(tài)的線程在它返回用戶態(tài)之前檢查一些狀態(tài)所用的時間。
其中,SD、CST和RST總是固定不變的,如果Linux內(nèi)核設計得當?shù)脑挘琁DT、IST和KPT可以有效的減少。在實時應用的環(huán)境中,若干個中斷同時發(fā)生的情況是完全可能存在的。這時任務的響應時間最多將包含N(IDT+IST),N為中斷數(shù)。
中斷軟件模擬被用來解決多個中斷同時發(fā)生的情形。當一個硬件中斷發(fā)生時,系統(tǒng)只是簡單的在時間表中報告這一時間的發(fā)生,然后立即將CPU的控制權返回給操作系統(tǒng),完全略過查中斷向量表并執(zhí)行相應的中斷服務程序。系統(tǒng)在Linux內(nèi)核之前截獲了所有硬中斷信號,并根據(jù)當前實時任務的需要,由軟中斷模擬機制處理或掛起該中斷。
采用這個方法,可以減少當多個中斷同時發(fā)生時任務的響應時間,最長的延遲時間為N*IST’。
4.改善Linux內(nèi)核實時任務的調(diào)度策略
常用的實時調(diào)度算法有:
(1)基于優(yōu)先級的調(diào)度算法?;趦?yōu)先級的調(diào)度算法調(diào)度器以優(yōu)先級作為尋求下一個任務執(zhí)行的依據(jù)??煞譃閮煞N類型:
① 靜態(tài)優(yōu)先級調(diào)度算法:該算法給系統(tǒng)中所有進程都靜態(tài)的分配一個優(yōu)先級。靜態(tài)優(yōu)先級的分配可以根據(jù)應用的屬性來進行。
② 動態(tài)優(yōu)先級調(diào)度算法:該算法根據(jù)任務的資源需求來動態(tài)的分配任務的優(yōu)先級。EDF算法是一種典型的動態(tài)優(yōu)先級調(diào)度算法,該算法根據(jù)就緒隊列中各個任務的截止期限來分配優(yōu)先級,具有最近截止期限的任務的優(yōu)先級最高。
(2)基于時間驅動的調(diào)度算法。該算法本質(zhì)上是一種設計時就確定下來的離線的靜態(tài)調(diào)度方法。在系統(tǒng)的設計階段,在明確系統(tǒng)中所有處理的情況下,對于各個任務的開始、切換以及結束時間等事先組出明確的安排和設計。
(3)基于比例共享的調(diào)度算法。這是一種越來越受到關注的實時調(diào)度模式,基于GPS的算法。其基本思想就是按照一定的權重(CPU使用的比例)對一組需要調(diào)度的任務進行調(diào)度,使其執(zhí)行時間與權重完全成正比??梢酝ㄟ^兩種方法實現(xiàn):
① 調(diào)節(jié)各個就緒進程出現(xiàn)在當前調(diào)度隊列隊首的頻率,并調(diào)度隊首的進程執(zhí)行。
② 逐次調(diào)度就緒隊列中的各個進程投入運行,但根據(jù)分配的權重調(diào)節(jié)分配給每個進程的運行時間片。
針對每一種調(diào)度策略都有自己的優(yōu)越性和不足。通過設計和構造多屬性和多調(diào)度器的選擇機制,使三種實時調(diào)度策略的應用都得到支持,相對于只對單種調(diào)度策略提供支持的方案,拓展了系統(tǒng)的可使用范圍,提出了一種宏觀調(diào)度結構。如圖2。
圖2 宏觀調(diào)度結構
其中給每一個實時任務定義了4個調(diào)度屬性:priority(優(yōu)先級:限制該任務比相關聯(lián)的其他任務的優(yōu)先權)、start time(起始時間:任務開始執(zhí)行時間)、finish time(截止時間:任務停止時間)和budget(預設值:任務允許執(zhí)行時間),不同屬性的數(shù)據(jù)對應不同的調(diào)度策略。宏觀調(diào)度結構分為兩個模塊:屬性分配模塊和調(diào)度器選擇模塊。屬性分配模塊給每一個實時任務分配多個屬性值,并通過其中的一兩個屬性值決定哪個屬性優(yōu)先,這樣調(diào)度器選擇模塊就可以根據(jù)屬性的優(yōu)先級別選擇不同的調(diào)度器。
嵌入式技術具有廣闊的應用前景,滲透于社會生活的諸多領域,把Linux應用于嵌入式系統(tǒng),將其自身固有的優(yōu)越性融入嵌入式技術,是嵌入式技術發(fā)展的一個重要方向。然而,由于Linux在實時應用領域的技術障礙,要將其應用在嵌入式領域還必須修改Linux 內(nèi)核中的各個模塊以達到滿足嵌入式實時應用的需求。Linux實時性能的逐步完善、應用的需要也會進一步督促我們應該及時跟蹤國內(nèi)外Linux發(fā)展動態(tài),同時積累此領域的開發(fā)經(jīng)驗,走出自己的路。
[1] 駱耀祖.Linux操作系統(tǒng)分析教程[M].清華大學出版社,2004.
[2] 董曉峰,顧新.關于Linux內(nèi)核可搶占性的研究[J].計算機工程,2005.
[3] 趙慧斌,李小群,孫玉芳.改善Linux核心可搶占性方法的研究與實現(xiàn)[J].計算機學報,2004,2.
[4] 李凡,盧杜階,邱鵬.在嵌入式應用中增強Linux實時性的方法研究[J].華中科技大學學報,2005,2.
[5] Robert love.Linux內(nèi)核設計與實現(xiàn)[M].機械工業(yè)出版社,2003.
TP30
A
1008-7427(2011)05-0157-02
2011-03-26
作者系蘭州資源環(huán)境職業(yè)技術學院信息管理系講師。