目前,無論是在日常生活,還是在工業(yè)控制,航空航天,軍事等方面,嵌入式系統(tǒng)都有著非常廣泛的應用。嵌入式系統(tǒng)目前主要有:windows ce、vxworks、qnx等,它們都具有較好的實時性、系統(tǒng)可靠性、任務處理隨機性等優(yōu)點,但是它們的價格普遍偏高。而嵌入式 linux以其非常低廉的價格,可以大大的降低成本,逐漸成為嵌入式操作系統(tǒng)的首選。但是,作為通用操作系統(tǒng)的linux,由于其在實時應用領域的技術障礙,要應用在嵌入式領域,還必須對linux內(nèi)核作必要的改進。許多嵌入式設備都要求與外部環(huán)境有硬實時的交互能力,將最初按照分時系統(tǒng)目標設計的 linux 改造成能支持硬實時性的操作系統(tǒng)顯得十分重要。幸運的是, linux 及其相關項目的開放源碼特征為深入研究其內(nèi)核并加以改造提供了可行性, 可以修改linux 內(nèi)核中的各個模塊以達到滿足嵌入式應用的需求,提高軟件方面的開發(fā)速度。目前,改善linux內(nèi)核的設計與實現(xiàn),使其適用于實時領域吸引了許多研究和開發(fā)人員的注意力[1-4]。常用的實時性改造方法是采用雙核方法,這種方法的弊端在于實時任務的開發(fā)是直接面向提供精確實時服務的小實時核心的,而不是功能強大的常規(guī)linux核心?;诖耍陙硇薷暮说姆椒ㄔ絹碓绞艿娇蒲腥藛T的重視,這種方法是基于已有l(wèi)inux系統(tǒng)對于軟件開發(fā)的支持,進行源代碼級修改而使linux變成一個真正的實時操作系統(tǒng)。本文分析了標準linux在實時應用中的技術障礙,參考了修改核方法的思想,從內(nèi)核時鐘管理、內(nèi)核的搶占性、內(nèi)核調(diào)度算法三方面論述了改善標準linux實時性能的方法。
2 linux 在實時應用中的技術障礙 2.1 linux的實時性分析 linux作為一個通用操作系統(tǒng),主要考慮的是調(diào)度的公平性和吞吐量等指標。然而,在實時方面它還不能很好地滿足實時系統(tǒng)方面的需要,其本身僅僅提供了一些實時處理的支持,這包括支持大部分posix標準中的實時功能,支持多任務、多線程,具有豐富的通信機制等;同時也提供了符合posix標準的調(diào)度策略,包括fifo調(diào)度策略、時間片輪轉調(diào)度策略和靜態(tài)優(yōu)先級搶占式調(diào)度策略。linux區(qū)分實時進程和普通進程,并采用不同的調(diào)度策略?! 榱送瑫r支持實時和非實時兩種進程,linux的調(diào)度策略簡單講就是優(yōu)先級加上時間片。當系統(tǒng)中有實時進程到來時,系統(tǒng)賦予它最高的優(yōu)先級。體現(xiàn)在實時性上,linux采用了兩種簡單的調(diào)度策略,即先來先服務調(diào)度(sched-fifo)和時間片輪轉調(diào)度(sched-rr)。具體是將所有處于運行狀態(tài)的任務掛接在一個run-queue 隊列中,并將任務分成實時和非實時任務,對不同的任務,在其任務控制塊task-struct中用一個policy屬性來確定其調(diào)度策略。對實時性要求較嚴的硬實時任務采用sched-fifo調(diào)度,使之在一次調(diào)度后運行完畢。對普通非實時進程,linux采用基于優(yōu)先級的輪轉策略。
2.2 linux在實時應用中的技術障礙 盡管linux本身提供了一些支持實時性的機制,然而,由于linux系統(tǒng)是以高的吞吐量和公平性為追求目標,基本上沒有考慮實時應用所要滿足的時間約束,它只是提供了一些相對簡單的任務調(diào)度策略。因此,實時性問題是將linux應用于嵌入式系統(tǒng)開發(fā)的一大障礙,無法在硬實時系統(tǒng)中得到應用。 linux在實時應用中的技術障礙具體表現(xiàn)在: ?。?)linux系統(tǒng)時鐘精度太過粗糙,時鐘中斷周期為10ms,使得其時間粒度過大,加大了任務響應延遲。 (2) linux的內(nèi)核是不可搶占的, 當一個任務通過系統(tǒng)調(diào)用進入內(nèi)核態(tài)運行時,一個具有更高優(yōu)先級的進程,只有等待處于核心態(tài)的系統(tǒng)調(diào)用返回后方能執(zhí)行,這將導致優(yōu)先級逆轉。實時任務執(zhí)行時間的不確定性,顯然不能滿足硬實時應用的要求?! 。?) linux采用對臨界區(qū)操作時屏蔽中斷的方式,在中斷處理中是不允許進行任務調(diào)度的,從而抑制了系統(tǒng)及時響應外部操作的能力?! 。?) 缺乏有效的實時任務調(diào)度機制和調(diào)度算法?! ♂槍@些問題,利用linux作為底層操作系統(tǒng),必須增強其內(nèi)核的實時性能,從而構建出一個具有實時處理能力的嵌入式系統(tǒng),適應嵌入式領域應用的需要?! ?.3 當前增強linux內(nèi)核實時性的主流技術 近年來,人們對于linux內(nèi)核實時性改造提出了一些方法和設想,它們采用了不同的思路和技術方案。歸納總結,支持linux的硬實時性一般有兩種策略[5]:一種是直接修改linux內(nèi)核,重新編寫一個由優(yōu)先級驅動的實時調(diào)度器(real-time scheduler),替換原有內(nèi)核中的進程調(diào)度器sched.c,kurt是采用這一方案較為成功的實時linux操作系統(tǒng);另外一種是在linux內(nèi)核之外, 以可加載內(nèi)核模塊(loadable kernel module)的形式添加實時內(nèi)核,確保其高響應特性,實時內(nèi)核接管來自硬件的所有中斷,并依據(jù)是否是實時任務決定是否直接響應。新墨西哥科技大學的 rt-linux,就是基于這種策略而開發(fā)的。以上兩種策略有其借鑒之處,但如果綜合考慮任務響應、內(nèi)核搶占性、實時調(diào)度策略等幾個影響操作