Linux分時(shí)操作系統的實(shí)時(shí)性分析
一、引言
Linux本身為分時(shí)操作系統,其系統目標為較好的平均響應時(shí)間和較高的吞吐量,而實(shí)時(shí)系統則主要考慮任務(wù)的按時(shí)完成、盡量減少進(jìn)程運行的不可預測性等。但與商業(yè)嵌入式操作系統相比Linux遵循GPL,具有源代碼開(kāi)放、定制方便、支持廣泛的計算機硬件等優(yōu)點(diǎn),所以,近年來(lái)嵌入式Linux成為嵌入式系統方向上的一個(gè)研究熱點(diǎn)。
本文首先分析了實(shí)時(shí)系統的特點(diǎn)和Linux內核在實(shí)時(shí)應用方面的不足,然后針對影響操作系統實(shí)時(shí)性能的若干方面進(jìn)行研究,提出解決方案,最后總結全文。
二、實(shí)時(shí)系統的分類(lèi)
實(shí)時(shí)系統最重要的特點(diǎn)就是實(shí)時(shí)性,即系統的正確性不僅僅依賴(lài)于計算的邏輯結果的正確性,還取決于輸出結果時(shí)間的及時(shí)性。從這個(gè)角度看,實(shí)時(shí)系統是“一個(gè)能夠在指定或者確定的時(shí)間內完成系統功能和對外部環(huán)境做出響應的系統”。按對實(shí)時(shí)性能要求的程度,實(shí)時(shí)系統可分為兩類(lèi):
(1) 硬實(shí)時(shí)系統:要求可確定性強,具有明確的實(shí)時(shí)約束,在某個(gè)限定的時(shí)刻之前不能完成任務(wù)將造成災難性的后果。
(2) 軟實(shí)時(shí)系統:也對時(shí)間敏感,但偶爾發(fā)生不能滿(mǎn)足嚴格實(shí)時(shí)要求的情況也是允許的。
三、Linux在實(shí)時(shí)方面存在的不足
Linux雖然符合POSIX1003.1b關(guān)于實(shí)時(shí)擴展部分的標準,例如:支持SCHED_FIFO和SCHED_RR實(shí)時(shí)調度策略,鎖內存機制(memorylocking),實(shí)時(shí)信號等功能,但是由于其最初的設計目標為通用分時(shí)操作系統,因此作為一個(gè)實(shí)時(shí)操作系統,Linux仍然存在如下缺陷:
(1) Linux的內核本身是非搶占的。Linux下分用戶(hù)態(tài)和核心態(tài)兩種模式,當進(jìn)程運行在用戶(hù)態(tài)時(shí),可被優(yōu)先級更高的進(jìn)程搶占,但當它進(jìn)入核心態(tài)時(shí),其他用戶(hù)態(tài)進(jìn)程優(yōu)先級再高也不能搶占它。
(2) Linux雖然給實(shí)時(shí)進(jìn)程提供了較高的優(yōu)先級,但是沒(méi)有加入時(shí)間限制。例如:完成的最后期限、應在多長(cháng)時(shí)間內完成、執行周期等等。同時(shí),其他大量的非實(shí)時(shí)進(jìn)程也可能對實(shí)時(shí)進(jìn)程造成阻塞,無(wú)法確保實(shí)時(shí)進(jìn)程的響應時(shí)間。
(3) 時(shí)鐘粒度粗糙。時(shí)鐘管理是操作系統的脈搏,任務(wù)的執行和中止在很多情況下都是由時(shí)鐘直接或間接喚起的,它還是進(jìn)程調度的重要依據。Linux的周期模式定時(shí)器頻率僅為100Hz,遠不能滿(mǎn)足實(shí)時(shí)應用的要求。
四、改進(jìn)內核實(shí)時(shí)性的分析與研究
從中斷軟件模擬、可搶占式內核體系結構、實(shí)時(shí)任務(wù)的調度策略這三個(gè)方面對嵌入式Linux內核進(jìn)行研究,并給出了相應的提高實(shí)時(shí)性的方法。
1. 響應時(shí)間的分析及解決方法
任務(wù)的響應時(shí)間被定義為一個(gè)事件的發(fā)生和任務(wù)響應這一事件開(kāi)始執行之間的間隔時(shí)間,通常有以下幾個(gè)因素影響任務(wù)的響應時(shí)間。
(1) 中斷分配時(shí)間IDT(interruptdispatchtime):當一個(gè)中斷產(chǎn)生時(shí),在調用中斷處理程序占用CPU以前,操作系統用來(lái)保存所有的寄存器中的內容和系統中其他的關(guān)于這一任務(wù)狀態(tài)的時(shí)間。
(2) 中斷服務(wù)時(shí)間:IST(interruptservicetime):中斷服務(wù)程序用來(lái)從硬件設備讀取信息或從操作系統收集信息所用的時(shí)間。
(3) 內核搶占時(shí)間KPT(kernelpreemptiontime):在操作系統意欲搶占當前進(jìn)程與搶占實(shí)際上發(fā)生之間的時(shí)間間隔。
(4) 調度延遲SD(scheduledelay):調度程序用來(lái)調度另一個(gè)線(xiàn)程投入運行的時(shí)間。
(5) 進(jìn)程切換時(shí)間CST(contestswitchingtime):當前線(xiàn)程用來(lái)保存寄存器和系統狀態(tài)的時(shí)間與將要運行的線(xiàn)程恢復寄存器中的內容和系統狀態(tài)的時(shí)間總和。
(6) 系統調用返回時(shí)間RST(returnfromsystemcall):處于內核態(tài)的線(xiàn)程在它返回用戶(hù)態(tài)之前檢查一些狀態(tài)所用的時(shí)間。
以上這些時(shí)間中,SD、CST和RST總是固定不變的,如果Linux內核設計得當的話(huà),IDT、IST和KPT可以有效的減少。在實(shí)時(shí)應用的環(huán)境中,若干個(gè)中斷同時(shí)發(fā)生的情況是完全可能存在的。這時(shí)任務(wù)的響應時(shí)間最多將包含N(IDT+IST),N為中斷數。
中斷軟件模擬被用來(lái)解決多個(gè)中斷同時(shí)發(fā)生的情形。當一個(gè)硬件中斷發(fā)生時(shí),系統只是簡(jiǎn)單的在時(shí)間表中報告這一時(shí)間的發(fā)生,然后立即將CPU的控制權返回給操作系統,完全略過(guò)了查中斷向量表并執行相應的中斷服務(wù)程序。系統在Linux內核之前截獲了所有應中斷信號,并根據當前實(shí)時(shí)任務(wù)的需要,由軟中斷模擬機制處理或掛起該中斷(例如:IBMPC中的8259中斷控制器)。
采用這個(gè)方法,可以減少當多個(gè)中斷同時(shí)發(fā)生時(shí)任務(wù)的響應時(shí)間,最長(cháng)的延遲時(shí)間為N*IST’,其中N為中斷數。在這里之所以是IST’,而不是IST,是因為采用軟中斷軟件模擬的方法使得在IST時(shí)間段內只執行一些簡(jiǎn)單的操作。
評論