張 帆,求 偉,韓大鵬
ZHANG Fan1,QIU Wei1,HAN Da-peng2
(1.武警杭州指揮學(xué)院 信息技術(shù)教研室,杭州 310023;2.浙江省女子監(jiān)獄 信息技術(shù)科,杭州 310012)
實(shí)時(shí)系統(tǒng)是指系統(tǒng)能夠在限定的響應(yīng)時(shí)間內(nèi)提供所需水平的服務(wù)。一般的說,實(shí)時(shí)系統(tǒng)是能及時(shí)響應(yīng)外部發(fā)生的隨機(jī)事件,并以足夠快的速度完成對(duì)事件處理的計(jì)算機(jī)應(yīng)用系統(tǒng)。一個(gè)實(shí)時(shí)系統(tǒng)計(jì)算的正確性不僅取決于程序的邏輯正確性,也取決于結(jié)果產(chǎn)生的時(shí)間,如果系統(tǒng)的時(shí)間約束條件得不到滿足,將會(huì)發(fā)生系統(tǒng)出錯(cuò)。實(shí)時(shí)系統(tǒng)有反應(yīng)式和嵌入式兩種類型。反應(yīng)式實(shí)時(shí)系統(tǒng)會(huì)與環(huán)境發(fā)生連續(xù)的互作用,而嵌入式實(shí)時(shí)系統(tǒng)主要用于控制大型系統(tǒng)中安裝的特殊硬件。
一般來講,性能是一個(gè)軟件系統(tǒng)或組件對(duì)時(shí)間要求滿足程度的一種指示。這里的時(shí)間指標(biāo)可以用響應(yīng)時(shí)間和吞吐量來衡量,該時(shí)間值是指響應(yīng)某種要求所需的時(shí)間,而吞吐量用以指示系統(tǒng)在特定時(shí)間間隔內(nèi)能夠處理的請(qǐng)求數(shù)量。實(shí)時(shí)操作系統(tǒng)與一般商用多任務(wù)操作系統(tǒng)如Unix、Windows有共同的特點(diǎn),也有不同的特點(diǎn)。對(duì)于商用多任務(wù)操作系統(tǒng),其目的是方便用戶管理計(jì)算機(jī)資源,追求吞吐量;而實(shí)時(shí)操作系統(tǒng)要求在限定的響應(yīng)時(shí)間內(nèi)提供所需水平的服務(wù),追求實(shí)時(shí)性、可確定性、可靠性。
評(píng)價(jià)一個(gè)實(shí)時(shí)操作系統(tǒng)一般可以從任務(wù)調(diào)度、內(nèi)存管理、任務(wù)通訊、內(nèi)存開銷、任務(wù)切換時(shí)間、最大中斷禁止時(shí)間等幾個(gè)方面來衡量。其中最大中斷禁止時(shí)間和任務(wù)切換時(shí)間是評(píng)價(jià)一個(gè)實(shí)時(shí)操作系統(tǒng)實(shí)時(shí)性的最重要的兩個(gè)技術(shù)指標(biāo)。
由于Linux系統(tǒng)本身是一個(gè)面向桌面的系統(tǒng),其主要設(shè)計(jì)標(biāo)準(zhǔn)的是方便用戶管理計(jì)算機(jī)資源,追求系統(tǒng)資源最大利用率,而不是有確定可預(yù)測(cè)的實(shí)時(shí)性能。所以將它應(yīng)用于實(shí)時(shí)應(yīng)用中時(shí)存在響應(yīng)時(shí)間不可預(yù)測(cè)、時(shí)鐘粒度粗糙等問題。
2.1 響應(yīng)時(shí)間
響應(yīng)時(shí)間是指從系統(tǒng)接到即時(shí)處理程序的中斷(interrupt)請(qǐng)求,到開始執(zhí)行該處理程序間的時(shí)間差,如圖1所示。
圖1 響應(yīng)時(shí)間
影響系統(tǒng)響應(yīng)時(shí)間的因素包括:中斷延遲(interrupt Latency)、中斷服務(wù)例程運(yùn)行時(shí)間(Interrupt handler duration)、調(diào)度延遲(Scheduler Latency)和調(diào)度程序運(yùn)行時(shí)間(Scheduling duration)。
2.1.1 中斷延遲
中斷延遲即中斷響應(yīng)時(shí)間,是指從產(chǎn)生中斷請(qǐng)求到相應(yīng)中斷服務(wù)程序的第一條指令被執(zhí)行之間的這段時(shí)間。由于中斷具備有優(yōu)先級(jí)而且可以嵌套產(chǎn)生,因此可以測(cè)知優(yōu)先級(jí)最高的中斷在執(zhí)行時(shí)的延遲時(shí)間。然而產(chǎn)生中斷延遲的原因除了處理器響應(yīng)時(shí)間外,更重要的是操作系統(tǒng)往往會(huì)大大增加中斷被延遲的時(shí)間。在操作系統(tǒng)運(yùn)行過程中,存在著一些關(guān)鍵的操作,這些操作在執(zhí)行時(shí),操作系統(tǒng)會(huì)禁止在其間插入任何中斷。因此如果一個(gè)中斷請(qǐng)求在操作系統(tǒng)禁止中斷的這段時(shí)間里產(chǎn)生,那么對(duì)它的處理就會(huì)始終保持在掛起狀態(tài),直到操作系統(tǒng)重新允許中斷插入。最終,中斷延遲在最壞情況下的數(shù)值是和操作系統(tǒng)關(guān)鍵操作中的指令序列在中斷請(qǐng)求產(chǎn)生后繼續(xù)執(zhí)行的時(shí)間緊密相關(guān),實(shí)時(shí)系統(tǒng)就是要確保系統(tǒng)中的關(guān)鍵事件能夠在限定的時(shí)間段內(nèi)被處理。
2.1.2 調(diào)度延遲
較長(zhǎng)時(shí)間的調(diào)度延遲有許多原因。其一是驅(qū)動(dòng)在入口處或中斷服務(wù)例程進(jìn)行了許多操作;其二是由于缺乏調(diào)度點(diǎn),內(nèi)核長(zhǎng)時(shí)間執(zhí)行一部分代碼,這些都導(dǎo)致了內(nèi)核長(zhǎng)時(shí)間內(nèi)沒有得到機(jī)會(huì)去進(jìn)行調(diào)度運(yùn)算。簡(jiǎn)單的解決方法是使調(diào)度程序運(yùn)行得更加頻繁。但實(shí)際上這個(gè)問題并不那么簡(jiǎn)單。首先,如果調(diào)度程序運(yùn)行過于頻繁,將引發(fā)頻繁的進(jìn)程切換,導(dǎo)致過多的CPU和內(nèi)存資源的浪費(fèi);其次會(huì)影響中斷服務(wù)時(shí)機(jī)的選擇和服務(wù)的質(zhì)量,再次影響進(jìn)程IPC。引發(fā)過多的資源協(xié)調(diào)問題,從而導(dǎo)致系統(tǒng)性能的降低。因此讓調(diào)度器保持一個(gè)有規(guī)律的運(yùn)行節(jié)拍,但是又不能過于頻繁的運(yùn)行很重要。正確的解決方法是,讓調(diào)度器在需要的時(shí)候盡快運(yùn)行,例如:中斷發(fā)生以后,需要重新調(diào)度,從就緒隊(duì)列中選擇下一個(gè)進(jìn)程。
2.2 時(shí)鐘問題
操作系統(tǒng)環(huán)境建立之后,任務(wù)的執(zhí)行和中止在很多情況下都是由時(shí)鐘直接或間接喚起的,時(shí)鐘也是操作系統(tǒng)活動(dòng)的基準(zhǔn)。為了提高系統(tǒng)的平均吞吐率,Linux 2.6將時(shí)鐘中斷的最小間隔設(shè)置為1毫秒,雖然相比2.4內(nèi)核的10毫秒有了很大的提高,但是實(shí)時(shí)應(yīng)用一般都需要微秒級(jí)的響應(yīng)精度,1ms的時(shí)鐘粒度顯然不能滿足實(shí)時(shí)應(yīng)用的需求。如果要把時(shí)鐘的間隔縮小以滿足周期性的實(shí)時(shí)任務(wù)的需要,但是Linux的進(jìn)程切換比較費(fèi)時(shí),時(shí)鐘中斷越頻繁,而花在中斷處理上的時(shí)間就越多,系統(tǒng)的大部分時(shí)間是調(diào)用進(jìn)程調(diào)度程序進(jìn)行進(jìn)程調(diào)度而不能進(jìn)行正常的處理。
3.1 增加kernel可搶占性。
一般內(nèi)核的不可搶占性使實(shí)時(shí)任務(wù)無法提供任務(wù)的調(diào)度權(quán),可以通過修改源碼,將系統(tǒng)調(diào)用的過程細(xì)分,縮小禁止中斷、內(nèi)核加鎖的范圍。增加調(diào)度器運(yùn)行的時(shí)機(jī)。
3.2 對(duì)中斷進(jìn)行軟件模擬
采用軟件對(duì)中斷模擬,在Linux內(nèi)核下增加一個(gè)軟件層,來控制中斷和處理器關(guān)鍵操作。對(duì)cli(關(guān)中斷)和sti(開中斷)命令進(jìn)行封裝,在調(diào)用cli或者sti時(shí),只是更改中斷的標(biāo)記位,并不真正的去開、關(guān)中斷。例如:RT-Linux,由兩個(gè)子內(nèi)核構(gòu)成,一個(gè)用于Linux環(huán)境,一個(gè)用于實(shí)時(shí)環(huán)境,可以有效改善系統(tǒng)中斷延遲時(shí)間的問題。
3.3 采用高精度定時(shí)器
一般內(nèi)核無法提供高精度時(shí)鐘,也即無法高精度分辨實(shí)時(shí)任務(wù)的到來。采用高精度定時(shí)器,為系統(tǒng)提供更多的剝奪點(diǎn)。通過系統(tǒng)硬件提供的高精度時(shí)鐘,可以解決時(shí)鐘粒度過大的問題。
3.4 改進(jìn)調(diào)度算法
雖然Linux進(jìn)程調(diào)度也支持實(shí)時(shí)優(yōu)先級(jí),但缺乏有效的實(shí)時(shí)任務(wù)的調(diào)度機(jī)制和調(diào)度算法,無法滿足HRT、QoS等的任務(wù)需求,可以通過向調(diào)度器增加hook或改造調(diào)度器來改善。目前有很多新穎的操作系統(tǒng)調(diào)度框架和調(diào)度算法都有Linux實(shí)現(xiàn),比如RED-Linux所定義的一個(gè)通用的實(shí)時(shí)調(diào)度框架;QLinux所采用的分層式的CPU調(diào)度框架,及新穎的調(diào)度算法如H-SFQ,以及Cello磁盤調(diào)度算法等;SILK所使用的將對(duì)一個(gè)包的網(wǎng)絡(luò)處理抽象成PATH,然后在PATH之間進(jìn)行調(diào)度。
3.5 采用微內(nèi)核結(jié)構(gòu)
微內(nèi)核結(jié)構(gòu)的設(shè)計(jì)有很大的好處。調(diào)試用戶進(jìn)程要比調(diào)試內(nèi)核進(jìn)程要容易許多,用戶進(jìn)程在獨(dú)立的地址空間運(yùn)行,不同模塊間的內(nèi)存管理錯(cuò)誤不會(huì)互相影響,驅(qū)動(dòng)程序可以充分利用內(nèi)核提供的多線程機(jī)制。另一好處是系統(tǒng)的可擴(kuò)展性,既可以小到100K,可以放入ROM,也可以大到足以適應(yīng)多機(jī)系統(tǒng)的需要。移植及維護(hù)微內(nèi)核結(jié)構(gòu)的系統(tǒng)都很方便。切換上下文速度快,由于內(nèi)核很小,可以方便的計(jì)算出最差的時(shí)間參數(shù),如中斷響應(yīng)時(shí)間。微內(nèi)核的一個(gè)弱點(diǎn)是性能不好,因?yàn)閮?nèi)核需要大量的進(jìn)程通信和上下文切換。只能提供簡(jiǎn)單的服務(wù),相同的任務(wù)微內(nèi)核系統(tǒng)要調(diào)用較多的系統(tǒng)調(diào)用。
隨著應(yīng)用的復(fù)雜化和硬件的發(fā)展,一個(gè)嵌入式控制器系統(tǒng)可能要同時(shí)控制和監(jiān)視很多外設(shè),要求有實(shí)時(shí)響應(yīng),有很多處理任務(wù),各個(gè)任務(wù)之間有多種信息傳遞,因此嵌入式操作系統(tǒng)在嵌入式系統(tǒng)中將會(huì)發(fā)揮更大的作用,實(shí)時(shí)性是絕大多數(shù)嵌入式系統(tǒng)的需求,研究嵌入式操作系統(tǒng)內(nèi)核的實(shí)時(shí)化技術(shù)及其在典型嵌入式實(shí)時(shí)系統(tǒng)中的應(yīng)用技術(shù)具有重要的意義。Linux以其諸多的優(yōu)勢(shì)不但在桌面操作系統(tǒng)中獲得了巨大的成功,通過對(duì)其實(shí)時(shí)性能等方面的改造,必將在嵌入式領(lǐng)域發(fā)揮巨大的作用。
[1]鄒思軼.嵌入式Linux設(shè)計(jì)與應(yīng)用.清華大學(xué)出版社,2002.
[2]Daniel P.Bovet,Marco Cesati.深入理解LINUX內(nèi)核.第二版[M].中國電力出版社,2004.
[3]李小群,趙慧斌.Linux 實(shí)時(shí)調(diào)度方案的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)研究與發(fā)展,2003,5.
[4]趙慧斌,李小群.改善Linux 核心可搶占性方法的研究與實(shí)現(xiàn)[J].計(jì)算機(jī)學(xué)報(bào),2004,2.