時間:2015-06-28 00:00:00 來源:IT貓撲網(wǎng) 作者:網(wǎng)管聯(lián)盟 我要評論(0)
1 引言
嵌入式Linux(Embedded Linux)是指對桌面型 Linux經(jīng)過小型化裁剪后,能夠固化在容量只有幾百K 字節(jié)或幾兆字節(jié)的存儲器芯片或單片機(jī)中,應(yīng)用于特定嵌入式場合、為嵌入式應(yīng)用程序提供操作系統(tǒng)服務(wù)的專用Linux 操作系統(tǒng)。
"實(shí)時性"是指計算機(jī)系統(tǒng)在確定的時間內(nèi)完成規(guī)定的功能,并能夠?qū)ν獠康漠惒绞录龀稣_響應(yīng)的能力。實(shí)時性又可分為軟實(shí)時(Soft Real-time)和硬實(shí)時(Hard Real-time)兩種。軟實(shí)時是指統(tǒng)計意義上的實(shí)時,一般整體吞吐量大或整體響應(yīng)速度快,但不能保證特定的任務(wù)在指定的時間內(nèi)完成。硬實(shí)時則是指時間要求必須被嚴(yán)格保證的實(shí)時,對任務(wù)的執(zhí)行時限的要求非常嚴(yán)格,無論在什么情況下,任務(wù)的執(zhí)行實(shí)現(xiàn)必須得到絕對保證,否則將產(chǎn)生災(zāi)難性后果。這才是真正意義上的實(shí)時 [1]。Linux有很好的"平均"性能,具有一定的軟實(shí)時性,但不是硬實(shí)時的操作系統(tǒng),因此要使Linux成為真正的實(shí)時操作系統(tǒng)必須對其作一些相關(guān)的改造。
2 標(biāo)準(zhǔn)Linux內(nèi)核制約實(shí)時性的因素[2]
實(shí)時系統(tǒng)主要考慮任務(wù)的按時完成、盡量減少進(jìn)程運(yùn)行時的不可預(yù)測性等,而Linux 一開始并不是針對要求實(shí)時性非常強(qiáng)的嵌入式領(lǐng)域開發(fā)的,因此其實(shí)時性比較弱。過長的中斷禁止時間、非搶占式的內(nèi)核以及耗盡式的、機(jī)會均等的進(jìn)程調(diào)度策略是Linux 實(shí)時性不強(qiáng)的幾個主要原因。
2.1 不確定的任務(wù)切換時間
確定的任務(wù)切換時間和中斷延遲時間是實(shí)時操作系統(tǒng)區(qū)別于普通操作系統(tǒng)的一個重要標(biāo)志,是衡量實(shí)時操作系統(tǒng)的實(shí)時性的重要標(biāo)準(zhǔn)。
任務(wù)切換時間包括保存目前任務(wù)的時間,新任務(wù)調(diào)入系統(tǒng)的時間和操作系統(tǒng)選擇下一個任務(wù)的調(diào)度時間,其中任務(wù)調(diào)度時間是決定任務(wù)切換時間長短的主要因素。而影響這一時間的因素主要是任務(wù)調(diào)度策略和被調(diào)度的任務(wù)數(shù)。調(diào)度策略越簡單,被調(diào)度的任務(wù)總數(shù)越少,調(diào)度時間就越短。對一個實(shí)時性能較強(qiáng)的操作系統(tǒng)而言,系統(tǒng)必須規(guī)定不同進(jìn)程的優(yōu)先級,把不同類型的進(jìn)程分成不同的隊(duì)列,并把優(yōu)先級作為唯一的進(jìn)程調(diào)度標(biāo)準(zhǔn),盡量縮短任務(wù)調(diào)度時間。
Linux 在內(nèi)核1.3 版本之后加進(jìn)了POSIX 實(shí)時擴(kuò)展部分,引進(jìn)了實(shí)時進(jìn)程概念,允許將一個進(jìn)程的屬性確定為實(shí)時進(jìn)程。Linux 從調(diào)度策略上區(qū)分實(shí)時進(jìn)程和普通進(jìn)程,實(shí)時進(jìn)程先于普通進(jìn)程運(yùn)行,并采用不同的調(diào)度策略。對實(shí)時進(jìn)程,Linux 采用兩種調(diào)度策略,即先來先服務(wù)調(diào)度(SCHED_FIFO)和時間片輪轉(zhuǎn)調(diào)度(SCHED_RR)。SCHED_RR 任務(wù)最先被調(diào)度并擁有時間片,一旦時間片用完就被移動到優(yōu)先級隊(duì)列的隊(duì)尾,并允許同一優(yōu)先級的其他任務(wù)運(yùn)行。如果同一優(yōu)先級沒有其他任務(wù),該任務(wù)將繼續(xù)運(yùn)行下一個時間片。SCHED_FIFO 是運(yùn)行直至阻塞的策略。其任務(wù)按優(yōu)先級調(diào)度,一旦開始就一直運(yùn)行到結(jié)束或者阻塞在某種資源上。它們不像SCHED_RR 任務(wù)那樣共享處理器。
2.2 中斷延遲時間
上面我們提到,中斷延遲時間也是實(shí)時操作系統(tǒng)區(qū)別于普通操作系統(tǒng)的一個重要標(biāo)志。
中斷延遲時間是指系統(tǒng)確認(rèn)中斷開始直到執(zhí)行中斷服務(wù)程序的第一條指令為止整個處理過程所需要的時間。操作系統(tǒng)的中斷延遲時間由下列三個因素決定:
?。?)處理器硬件電路的延遲時間,通常這個時間可以忽略。
?。?)操作系統(tǒng)處理中斷并將控制權(quán)轉(zhuǎn)移給相關(guān)處理程序所需要的時間。
?。?)操作系統(tǒng)的中斷禁止時間。
測試表明,產(chǎn)生中斷延遲的原因除了處理器響應(yīng)時間外,更重要的是操作系統(tǒng)的一些操作會大大增加中斷被延遲的時間。在操作系統(tǒng)運(yùn)行過程中,存在著一些關(guān)鍵的操作。這些操作在執(zhí)行時,操作系統(tǒng)會禁止在其間插入任何中斷。例如:ISR在執(zhí)行時候,外部中斷是被禁止的。因此如果一個中斷請求在操作系統(tǒng)禁止中斷的這段時間里產(chǎn)生,那么對它的處理就會始終保持在掛起狀態(tài),直到操作系統(tǒng)重新允許中斷插入。會有這樣的一種情況出現(xiàn),即使Linux本身的中斷響應(yīng)時間非常短,如果在一個ISR執(zhí)行期間某個外設(shè)也產(chǎn)生了一個中斷信號,因?yàn)檎趫?zhí)行的ISR運(yùn)行時間的不確定性和不可搶占性,也會產(chǎn)生Linux的中斷延時的不可預(yù)測性。
2.3 共享資源的互斥訪問
Linux操作系統(tǒng)一般采用信號量機(jī)制來解決共享資源的互斥訪問問題。如果任務(wù)調(diào)度采用基于優(yōu)先級的方式,則傳統(tǒng)的信號量機(jī)制在系統(tǒng)運(yùn)行時很容易造成優(yōu)先級倒置問題,即當(dāng)一個高優(yōu)先級任務(wù)通過信號量機(jī)制訪問共享資源時,該信號量已被一低優(yōu)先級任務(wù)占有,而這個低優(yōu)先級任務(wù)在訪問共享資源時可能又被其它一些中等優(yōu)先級的任務(wù)搶先,因此造成高優(yōu)先級任務(wù)被許多具有較低優(yōu)先級的任務(wù)阻塞,實(shí)時性難以得到保證。
3 嵌入式Linux的實(shí)時化方案[3] [5] [6]3.1 實(shí)時進(jìn)程的調(diào)度
為實(shí)現(xiàn)Linux 的實(shí)時性,可以將內(nèi)核中的進(jìn)程調(diào)度遵循POSIX 標(biāo)準(zhǔn)進(jìn)行改寫,在Linux 內(nèi)核限定的范圍內(nèi),通過對源代碼的修改,盡可能地擴(kuò)充其實(shí)時性,使Linux 變成一個真正的實(shí)時操作系統(tǒng)。
這需要精心選擇改動部分,一般要完全重新編寫一個由優(yōu)先級驅(qū)動的實(shí)時調(diào)度器,替換原有內(nèi)核中的進(jìn)程調(diào)度器。對于不同的進(jìn)程,采用不同的調(diào)度策略,例如對實(shí)時進(jìn)程實(shí)現(xiàn)搶占式的調(diào)度。我們可以找出Linux 所有系統(tǒng)調(diào)用中的關(guān)鍵代碼段,在執(zhí)行關(guān)鍵代碼段時,設(shè)置標(biāo)志位來決定是否允許進(jìn)行任務(wù)切換,并且可以在內(nèi)核函數(shù)中增加搶占點(diǎn)的個數(shù),在保證其操作互斥性的同時,增強(qiáng)內(nèi)核的可搶占性,實(shí)現(xiàn)一種可搶占的內(nèi)核。對于采用搶占式核心程序設(shè)計,系統(tǒng)可能出現(xiàn)的優(yōu)先級反轉(zhuǎn)問題,可以采用優(yōu)先級繼承或優(yōu)先級天花板的方式來解決。這種方案的最大優(yōu)點(diǎn)在于系統(tǒng)執(zhí)行效率高,可以獲得更好的性能。但是,它要求開發(fā)人員精通Linux 內(nèi)核,并且開發(fā)難度大、開發(fā)周期長。
3.2 時鐘粒度的細(xì)化
通過將周期性的時鐘中斷改為非周期性的時鐘中斷這種簡單而且代價較小的方式,從而達(dá)到細(xì)化時鐘粒度的目標(biāo)。提供與標(biāo)準(zhǔn)Linux核心時鐘并行運(yùn)行的一個具有精密刻度的實(shí)時核心時鐘處理系統(tǒng),與原Linux 核心時鐘區(qū)別開來。不但提高了系統(tǒng)的穩(wěn)定性和效率,而且獨(dú)立的實(shí)時核心時鐘易于維護(hù)改進(jìn)。所有實(shí)時定時器都是由堆的數(shù)據(jù)結(jié)構(gòu)組織和管理的。在時鐘中斷的處理函數(shù)do_timer_interupt()(arch/386/kernel/Time.c)中,調(diào)用相應(yīng)的函數(shù)處理實(shí)時定時器隊(duì)列。具體過程為判斷堆頂定時器是否到期,如果到期,則調(diào)用其服務(wù)函數(shù)。
3.3 中斷的實(shí)時性改進(jìn)[4]
軟中斷運(yùn)行的時機(jī)之一就是在中斷服務(wù)的末尾。Linux中斷服務(wù)函數(shù)中進(jìn)行軟中斷處理的代碼如下[4] :
asmlinkage unsigned int do_IRQ(struct pt_regs regs)
{
……
if (softirq_active(cpu) &softirq_mask(cpu))
do_softirq();
return 1;
}
其中do_IRQ()是Linux中斷服務(wù)函數(shù),此函數(shù)針對特定的中斷運(yùn)行相應(yīng)的上半部分。函數(shù)do_softirq()是軟中斷處理函數(shù)。在do_IRQ()處理完上半部分時,如果有等待的軟中斷需要處理,那么就會調(diào)用do_softirq(),處理待運(yùn)行的軟中斷。如果中斷上半部分需要下半部分被處理,那么下半部分也會在do_softirq()中被運(yùn)行。我們知道,Linux之所以將中斷分為兩個部分,就是為了將不著急的事務(wù)推遲處理從而減少中斷服務(wù)時間?,F(xiàn)在,如果do_IRQ()中軟中斷的處理時間過長,那么do_IRQ()的處理時間也會相應(yīng)變長,從而增加了中斷服務(wù)時間。為了進(jìn)一步減少中斷服務(wù)時間,我們可以考慮在中斷處理函數(shù)中對中斷進(jìn)行區(qū)別對待。對于不頻繁的外部中斷,如鍵盤、時鐘等,保留軟中斷處理。而當(dāng)系統(tǒng)需要處理某些頻率較高的外部中斷時,我們可以考慮繞過軟中斷的處理,只處理上半部分。由于軟中斷本身不是急需處理的,并且還可以在進(jìn)程調(diào)度之前和系統(tǒng)調(diào)用結(jié)束時運(yùn)行,因此,這里將它去掉對系統(tǒng)性能的影響不大。
4 結(jié)論
由于Linux本身基于通用目的操作系統(tǒng)的設(shè)計,其實(shí)時性能并不是很強(qiáng)。但通過一定的改進(jìn)增強(qiáng)其實(shí)時性能,就可以用于實(shí)時的應(yīng)用場合。本文在分析了標(biāo)準(zhǔn)Linux實(shí)時性的基礎(chǔ)上,并就實(shí)時進(jìn)程的調(diào)度、中斷、時鐘三個方面提出了一些改進(jìn)的方法,以進(jìn)一步提高Linux操作系統(tǒng)的實(shí)時性能。
關(guān)鍵詞標(biāo)簽:Linux
相關(guān)閱讀
熱門文章 安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程 Tomcat9.0如何安裝_Tomcat9.0環(huán)境變量配置方法 多種操作系統(tǒng)NTP客戶端配置 Linux操作系統(tǒng)修改IP
人氣排行 Linux下獲取CPUID、硬盤序列號與MAC地址 dmidecode命令查看內(nèi)存型號 linux tc實(shí)現(xiàn)ip流量限制 安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程 linux下解壓rar文件 lcx.exe、nc.exe、sc.exe入侵中的使用方法 Ubuntu linux 關(guān)機(jī)、重啟、注銷 命令 查看linux服務(wù)器硬盤IO讀寫負(fù)載