王惠玲
(蘭州資源環(huán)境職業(yè)技術(shù)學(xué)院,甘肅 蘭州 730021)
嵌入式Linux操作系統(tǒng)實時性的研究
王惠玲
(蘭州資源環(huán)境職業(yè)技術(shù)學(xué)院,甘肅 蘭州 730021)
通過分析嵌入式Linux在實時性方面的缺陷和不足,針對細(xì)化時鐘粒度、可搶占式內(nèi)核體系結(jié)構(gòu)、中斷軟件模擬和實時調(diào)度策略等問題進(jìn)行研究,提出了相應(yīng)的實時性改進(jìn)方法及宏觀調(diào)度結(jié)構(gòu),拓展了實時系統(tǒng)的應(yīng)用范圍。
嵌入式系統(tǒng);Linux;實時性;搶占;調(diào)度策略
Linux以其功能強大、源代碼開放、支持多種硬件平臺、模塊化設(shè)計方案及豐富的開發(fā)工具支持等特點廣泛應(yīng)用在嵌入式系統(tǒng)領(lǐng)域。作為嵌入式產(chǎn)品的操作系統(tǒng)平臺,Linux具有較好的實時性、系統(tǒng)可靠性、任務(wù)處理隨機性。但由于其在實時應(yīng)用領(lǐng)域的技術(shù)障礙,要應(yīng)用在嵌入式領(lǐng)域,還必須對Linux內(nèi)核作必要的改進(jìn)。本文首先分析了實時系統(tǒng)的特點和Linux內(nèi)核在實時應(yīng)用方面的不足,然后針對影響操作系統(tǒng)實時性能的若干方面進(jìn)行研究,提出解決方案。
實時操作系統(tǒng)貴在實時,要求在規(guī)定的時間內(nèi)完成某種操作。因此實時系統(tǒng)最重要的特點就是實時性,即系統(tǒng)的正確性不僅僅依賴于計算的邏輯結(jié)果的正確性,還取決于輸出結(jié)果時間的及時性。從這個角度看,實時系統(tǒng)是“一個能夠在指定或者確定的時間內(nèi)完成系統(tǒng)功能和對外部環(huán)境做出響應(yīng)的系統(tǒng)”。按對實時性能要求的程度,實時系統(tǒng)可分為兩類:
1.硬實時系統(tǒng):要求可確定性強,具有明確的實時約束,在某個限定的時刻之前不能完成任務(wù)將造成災(zāi)難性的后果。因此,在這類系統(tǒng)的設(shè)計和實現(xiàn)過程中,應(yīng)采用各種分析、模擬及形式化驗證方法對系統(tǒng)進(jìn)行嚴(yán)格的檢驗,以保證在各種情況下應(yīng)用的時間需求和功能需求都能夠得到滿足。
2.軟實時系統(tǒng):也對時間敏感,當(dāng)某些應(yīng)用雖然提出了時間要求,但偶爾發(fā)生不能滿足嚴(yán)格實時要求的情況也是允許的。因此,某些應(yīng)用雖然提出了時間需求,但實時任務(wù)偶爾違反這種需求對系統(tǒng)的運行以及環(huán)境不會造成嚴(yán)重影響。
盡管Linux本身提供了一些支持實時性的機制,但是由于其最初的設(shè)計目標(biāo)為通用分時操作系統(tǒng),并且Linux系統(tǒng)是以高的吞吐量和公平性為追求目標(biāo),基本上沒有考慮實時應(yīng)用所要滿足的時間約束,它只是提供了一些相對簡單的任務(wù)調(diào)度策略。因此,實時性問題是將Linux應(yīng)用于嵌入式系統(tǒng)開發(fā)的一大障礙,無法在硬實時系統(tǒng)中得到應(yīng)用,作為一個實時操作系統(tǒng),Linux仍然存在如下缺陷:
1.Linux的內(nèi)核是不可搶占的。Linux分為用戶態(tài)和核心態(tài)兩種模式,當(dāng)進(jìn)程運行在用戶態(tài)時,可被優(yōu)先級更高的進(jìn)程搶占,但當(dāng)它進(jìn)入核心態(tài)時,其他用戶態(tài)進(jìn)程優(yōu)先級再高也不能搶占它,這將導(dǎo)致優(yōu)先級逆轉(zhuǎn),實時任務(wù)執(zhí)行時間的不確定性,顯然不能滿足硬實時應(yīng)用的要求。
2.Linux系統(tǒng)時鐘精度太過粗糙。時鐘管理是操作系統(tǒng)的脈搏,任務(wù)的執(zhí)行和中止在很多情況下都是由時鐘直接或間接喚起的,它是進(jìn)程調(diào)度的重要依據(jù)。Linux的周期模式定時器頻率僅為100Hz,使得其時間粒度過大,加大了任務(wù)響應(yīng)延遲,遠(yuǎn)不能滿足實時應(yīng)用的要求。
3.Linux采用對臨界區(qū)操作時屏蔽中斷的方式,在中斷處理中是不允許進(jìn)行任務(wù)調(diào)度的,從而抑制了系統(tǒng)及時響應(yīng)外部操作的能力。
4.缺乏有效的實時任務(wù)調(diào)度機制和調(diào)度算法。
5.Linux雖然給實時進(jìn)程提供了較高的優(yōu)先級,但是沒有加入時間限制。例如:完成的最后期限、應(yīng)在多長時間內(nèi)完成、執(zhí)行周期等等。同時,其他大量的非實時進(jìn)程也可能對實時進(jìn)程造成阻塞,無法確保實時進(jìn)程的響應(yīng)時間。
針對Linux在實時應(yīng)用中的技術(shù)障礙,將Linux改造成為支持實時任務(wù)的嵌入式操作系統(tǒng),主要從細(xì)化時鐘粒度、可搶占式內(nèi)核體系結(jié)構(gòu)、中斷軟件模擬和實時任務(wù)的調(diào)度策略這四個方面對嵌入式Linux內(nèi)核進(jìn)行研究,并給出了相應(yīng)的提高實時性的方法。
1.細(xì)化時鐘粒度
精確的計時是實時調(diào)度器正確操作所必須的,調(diào)度器通常要求在一個特定的時刻進(jìn)行任務(wù)切換,計時的錯誤將導(dǎo)致背離計劃的調(diào)度,引起任務(wù)釋放抖動。標(biāo)準(zhǔn)Linux系統(tǒng)時鐘精度太過粗糙,時鐘中斷周期為10ms,不能滿足特定嵌入式應(yīng)用領(lǐng)域中對于響應(yīng)時間精度的要求。因此,在實時Linux應(yīng)用中,需要細(xì)化其時鐘粒度,具體有兩種方式可以解決時鐘粒度問題:
(1)通過直接修改內(nèi)核定時參數(shù)Hz的初值來細(xì)化時鐘粒度,如將標(biāo)準(zhǔn)Linux中內(nèi)核定時參數(shù)Hz改為10000,則時鐘粒度可以達(dá)到100μs,這種方式雖然會增加一些系統(tǒng)開銷,但在強周期性環(huán)境下,對定時器的設(shè)置只需初始化一次,在一定程度上保證了處理效率。
(2)通過對可編程中斷定時器8254或先進(jìn)的可編程中斷控制器進(jìn)行編程來改進(jìn)Linux時鐘機制,以提高其時鐘的分辨率,使毫秒級的粗粒度定時器變成微秒級的細(xì)粒度定時器。
2.增強Linux可搶占性內(nèi)核機制
標(biāo)準(zhǔn)Linux內(nèi)核是不可搶占的,導(dǎo)致較大的延遲,增強內(nèi)核的可搶占性能,可提高系統(tǒng)內(nèi)核對實時任務(wù)的響應(yīng)能力。為了解決Linux實現(xiàn)硬實時的最大障礙,使Linux內(nèi)核成為完全可被搶占實時內(nèi)核,典型的實現(xiàn)方案是雙核結(jié)構(gòu)。使用實時核來運行實時任務(wù),Linux內(nèi)核來運行非實時任務(wù)。如圖1所示。

圖1 雙內(nèi)核結(jié)構(gòu)
對于Linux內(nèi)核的修改主要集中在三方面:
(1)在Linux內(nèi)核中影響實時性的地方增加控制點,使內(nèi)核在控制點可以被搶占,減少內(nèi)核搶占延遲。
(2)將執(zhí)行時間較長的系統(tǒng)劃分為幾個甚至是十幾個較小的塊分別執(zhí)行,使實時任務(wù)隨時中斷非實時任務(wù)。
(3)根據(jù)實際需要,增加部分功能。
3.中斷軟件模擬
響應(yīng)時間的分析及解決方法:任務(wù)的響應(yīng)時間被定義為一個事件的發(fā)生和任務(wù)響應(yīng)這一事件開始執(zhí)行之間的間隔時間,通常有以下幾個因素影響任務(wù)的響應(yīng)時間。
(1)中斷分配時間IDT(interruptdispatchtime):當(dāng)一個中斷產(chǎn)生時,在調(diào)用中斷處理程序占用CPU以前,操作系統(tǒng)用來保存所有的寄存器中的內(nèi)容和系統(tǒng)中其他的關(guān)于這一任務(wù)狀態(tài)的時間。
(2)中斷服務(wù)時間IST(interruptservicetime):中斷服務(wù)程序用來從硬件設(shè)備讀取信息或從操作系統(tǒng)收集信息所用的時間。
(3)內(nèi)核搶占時間KPT(kernelpreemptiontime):在操作系統(tǒng)意欲搶占當(dāng)前進(jìn)程與搶占實際上發(fā)生之間的時間間隔。
(4)調(diào)度延遲SD(scheduledelay):調(diào)度程序用來調(diào)度另一個線程投入運行的時間。
(5)進(jìn)程切換時間CST(contestswitchingtime):當(dāng)前線程用來保存寄存器和系統(tǒng)狀態(tài)的時間與將要運行的線程恢復(fù)寄存器中的內(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è)計得當(dāng)?shù)脑挘琁DT、IST和KPT可以有效的減少。在實時應(yīng)用的環(huán)境中,若干個中斷同時發(fā)生的情況是完全可能存在的。這時任務(wù)的響應(yīng)時間最多將包含N(IDT+IST),N為中斷數(shù)。
中斷軟件模擬被用來解決多個中斷同時發(fā)生的情形。當(dāng)一個硬件中斷發(fā)生時,系統(tǒng)只是簡單的在時間表中報告這一時間的發(fā)生,然后立即將CPU的控制權(quán)返回給操作系統(tǒng),完全略過查中斷向量表并執(zhí)行相應(yīng)的中斷服務(wù)程序。系統(tǒng)在Linux內(nèi)核之前截獲了所有硬中斷信號,并根據(jù)當(dāng)前實時任務(wù)的需要,由軟中斷模擬機制處理或掛起該中斷。
采用這個方法,可以減少當(dāng)多個中斷同時發(fā)生時任務(wù)的響應(yīng)時間,最長的延遲時間為N*IST’。
4.改善Linux內(nèi)核實時任務(wù)的調(diào)度策略
常用的實時調(diào)度算法有:
(1)基于優(yōu)先級的調(diào)度算法。基于優(yōu)先級的調(diào)度算法調(diào)度器以優(yōu)先級作為尋求下一個任務(wù)執(zhí)行的依據(jù)。可分為兩種類型:
① 靜態(tài)優(yōu)先級調(diào)度算法:該算法給系統(tǒng)中所有進(jìn)程都靜態(tài)的分配一個優(yōu)先級。靜態(tài)優(yōu)先級的分配可以根據(jù)應(yīng)用的屬性來進(jìn)行。
② 動態(tài)優(yōu)先級調(diào)度算法:該算法根據(jù)任務(wù)的資源需求來動態(tài)的分配任務(wù)的優(yōu)先級。EDF算法是一種典型的動態(tài)優(yōu)先級調(diào)度算法,該算法根據(jù)就緒隊列中各個任務(wù)的截止期限來分配優(yōu)先級,具有最近截止期限的任務(wù)的優(yōu)先級最高。
(2)基于時間驅(qū)動的調(diào)度算法。該算法本質(zhì)上是一種設(shè)計時就確定下來的離線的靜態(tài)調(diào)度方法。在系統(tǒng)的設(shè)計階段,在明確系統(tǒng)中所有處理的情況下,對于各個任務(wù)的開始、切換以及結(jié)束時間等事先組出明確的安排和設(shè)計。
(3)基于比例共享的調(diào)度算法。這是一種越來越受到關(guān)注的實時調(diào)度模式,基于GPS的算法。其基本思想就是按照一定的權(quán)重(CPU使用的比例)對一組需要調(diào)度的任務(wù)進(jìn)行調(diào)度,使其執(zhí)行時間與權(quán)重完全成正比。可以通過兩種方法實現(xiàn):
① 調(diào)節(jié)各個就緒進(jìn)程出現(xiàn)在當(dāng)前調(diào)度隊列隊首的頻率,并調(diào)度隊首的進(jìn)程執(zhí)行。
② 逐次調(diào)度就緒隊列中的各個進(jìn)程投入運行,但根據(jù)分配的權(quán)重調(diào)節(jié)分配給每個進(jìn)程的運行時間片。
針對每一種調(diào)度策略都有自己的優(yōu)越性和不足。通過設(shè)計和構(gòu)造多屬性和多調(diào)度器的選擇機制,使三種實時調(diào)度策略的應(yīng)用都得到支持,相對于只對單種調(diào)度策略提供支持的方案,拓展了系統(tǒng)的可使用范圍,提出了一種宏觀調(diào)度結(jié)構(gòu)。如圖2。

圖2 宏觀調(diào)度結(jié)構(gòu)
其中給每一個實時任務(wù)定義了4個調(diào)度屬性:priority(優(yōu)先級:限制該任務(wù)比相關(guān)聯(lián)的其他任務(wù)的優(yōu)先權(quán))、start time(起始時間:任務(wù)開始執(zhí)行時間)、finish time(截止時間:任務(wù)停止時間)和budget(預(yù)設(shè)值:任務(wù)允許執(zhí)行時間),不同屬性的數(shù)據(jù)對應(yīng)不同的調(diào)度策略。宏觀調(diào)度結(jié)構(gòu)分為兩個模塊:屬性分配模塊和調(diào)度器選擇模塊。屬性分配模塊給每一個實時任務(wù)分配多個屬性值,并通過其中的一兩個屬性值決定哪個屬性優(yōu)先,這樣調(diào)度器選擇模塊就可以根據(jù)屬性的優(yōu)先級別選擇不同的調(diào)度器。
嵌入式技術(shù)具有廣闊的應(yīng)用前景,滲透于社會生活的諸多領(lǐng)域,把Linux應(yīng)用于嵌入式系統(tǒng),將其自身固有的優(yōu)越性融入嵌入式技術(shù),是嵌入式技術(shù)發(fā)展的一個重要方向。然而,由于Linux在實時應(yīng)用領(lǐng)域的技術(shù)障礙,要將其應(yīng)用在嵌入式領(lǐng)域還必須修改Linux 內(nèi)核中的各個模塊以達(dá)到滿足嵌入式實時應(yīng)用的需求。Linux實時性能的逐步完善、應(yīng)用的需要也會進(jìn)一步督促我們應(yīng)該及時跟蹤國內(nèi)外Linux發(fā)展動態(tài),同時積累此領(lǐng)域的開發(fā)經(jīng)驗,走出自己的路。
[1] 駱耀祖.Linux操作系統(tǒng)分析教程[M].清華大學(xué)出版社,2004.
[2] 董曉峰,顧新.關(guān)于Linux內(nèi)核可搶占性的研究[J].計算機工程,2005.
[3] 趙慧斌,李小群,孫玉芳.改善Linux核心可搶占性方法的研究與實現(xiàn)[J].計算機學(xué)報,2004,2.
[4] 李凡,盧杜階,邱鵬.在嵌入式應(yīng)用中增強Linux實時性的方法研究[J].華中科技大學(xué)學(xué)報,2005,2.
[5] Robert love.Linux內(nèi)核設(shè)計與實現(xiàn)[M].機械工業(yè)出版社,2003.
TP30
A
1008-7427(2011)05-0157-02
2011-03-26
作者系蘭州資源環(huán)境職業(yè)技術(shù)學(xué)院信息管理系講師。