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