這種方法在同一硬件平臺(tái)上采用了兩個(gè)相互配合,共同工作的系統(tǒng)核心,一個(gè)核心提供精確的實(shí)時(shí)多任務(wù)管理,另一個(gè)核心提供復(fù)雜的非實(shí)時(shí)通用功能。
這種方法是通過在Linux操作系統(tǒng)的最底層增加一層實(shí)時(shí)核心層來實(shí)現(xiàn)的。實(shí)時(shí)核心負(fù)責(zé)硬件管理并提供實(shí)時(shí)任務(wù)管理。實(shí)時(shí)核心還用軟件“模擬”常規(guī)Linux系統(tǒng)對(duì)底層硬件的使用/禁止中斷,而不是真正的操作中斷控制寄存器。Linux核心被看做實(shí)時(shí)核心中優(yōu)先級(jí)最低的任務(wù)來調(diào)度,只有當(dāng)沒有可運(yùn)行的實(shí)時(shí)任務(wù)時(shí)Linux核心才被調(diào)度。
這種方法的一個(gè)關(guān)鍵所在是運(yùn)行在常規(guī)Linux核心上的所有非實(shí)時(shí)任務(wù)必須是支持可搶占式調(diào)度的。這樣才能做到對(duì)實(shí)時(shí)核心提供精確實(shí)時(shí)保證沒有任何影響。由于實(shí)時(shí)核心非常小,并不會(huì)增加整個(gè)系統(tǒng)的負(fù)載,所有這些對(duì)開發(fā)實(shí)時(shí)性要求嚴(yán)格的實(shí)時(shí)軟件都提供了有力保障。
這種方法的弊端在于實(shí)時(shí)任務(wù)的開發(fā)是直接面向提供精確實(shí)時(shí)服務(wù)的小實(shí)時(shí)核心的,而不是功能強(qiáng)大的常規(guī)Linux核心。因此,實(shí)時(shí)任務(wù)是運(yùn)行在系統(tǒng)核心層的,這就意味著這些實(shí)時(shí)任務(wù)可以運(yùn)行在沒有內(nèi)存保護(hù)的級(jí)別之上。所以,一個(gè)實(shí)時(shí)任務(wù)的錯(cuò)誤可能會(huì)導(dǎo)致整個(gè)系統(tǒng)的癱瘓!更要命的是,這些實(shí)時(shí)任務(wù)的開發(fā)由于面對(duì)的是小的實(shí)時(shí)核心,而不能直接利用Linux API和第三方軟件及運(yùn)行庫(kù)。
這種開發(fā)模式暗示我們必須要對(duì)應(yīng)用進(jìn)行靜態(tài)分解。把它分解成實(shí)時(shí)部分和非實(shí)時(shí)部分。在大多情況下,這是件好事情。它迫使開發(fā)人員將應(yīng)用系統(tǒng)分解成實(shí)時(shí)子系統(tǒng)和非實(shí)時(shí)子系統(tǒng)兩部分。但很顯然,使用這種開發(fā)模式也限制了應(yīng)用的類型!因?yàn)?,這種用二元論觀點(diǎn)看待實(shí)時(shí)系統(tǒng)的方法并不適合所有的應(yīng)用。在一些應(yīng)用中,實(shí)時(shí)部分和非實(shí)時(shí)部分的界線并不是十分分明,期間可能存在著不同程度的軟實(shí)時(shí)部分。
這種方法的另一個(gè)不足之處是,開發(fā)模式混合了實(shí)時(shí)應(yīng)用的兩個(gè)不相干維度――功能需求和實(shí)時(shí)需求。它要求應(yīng)用的實(shí)時(shí)需求必須限制于由實(shí)時(shí)核心提供的功能需求限度以內(nèi)。而實(shí)時(shí)核心提供的功能支持非常有限。當(dāng)然我們也可以擴(kuò)展實(shí)時(shí)核心的功能,比如增加實(shí)時(shí)網(wǎng)絡(luò)功能等。然而,新增加的部分很有可能會(huì)重疊Linux核心已有功能,而導(dǎo)致了不必要的系統(tǒng)“膨脹”,并折損這種方法的價(jià)值。 修改核方法
這種方法是基于已有Linux系統(tǒng)對(duì)實(shí)時(shí)軟件開發(fā)的支持,進(jìn)行源代碼級(jí)修改而使Linux變成一個(gè)真正的實(shí)時(shí)操作系統(tǒng)。這種方法也是和Linux哲學(xué)相吻合的。任何基于Linux核心源代碼修改的產(chǎn)品,都要遵循GPL 協(xié)議,對(duì)所有軟件人員開放源代碼。一旦很多人認(rèn)為它是有用的,就會(huì)有人對(duì)它進(jìn)行維護(hù),或者是混合在通用Linux核心中,或者是單獨(dú)分出一個(gè)實(shí)時(shí)Linux分支。
這種方法的中心原則是精心選擇部分改動(dòng),就可以滿足一系列相關(guān)Linux實(shí)時(shí)開發(fā)。此外,由于這些改動(dòng)都是相對(duì)局部的,不會(huì)從根本上改變Linux的核心。而且一些改動(dòng)還可以通過常規(guī)Linux的可加載模塊方式完成。在需要時(shí)系統(tǒng)可以動(dòng)態(tài)加載該功能模塊,在不需要時(shí)還可以動(dòng)態(tài)卸載該模塊。
比如,修改之一是核心搶占式調(diào)度。把核心從非搶占式變成搶占式是結(jié)構(gòu)上的大變動(dòng),并可能引起很多問題,但很多問題已經(jīng)在Linux支持SMP 的時(shí)候解決了。因此,核心的搶占式修改就可以簡(jiǎn)單地利用SMP 掛鉤。另一個(gè)修改點(diǎn)是前面提到過的使中斷處理句柄可調(diào)度。還有一些修改是全局的,例如修改系統(tǒng)時(shí)鐘服務(wù)來提供更高精度的“心跳”,而不增加不必要的系統(tǒng)負(fù)載,或者是提供在核心實(shí)現(xiàn)互斥機(jī)制來支持優(yōu)先級(jí)繼承。
資源核方法
這種方法是為解決傳統(tǒng)實(shí)時(shí)操作系統(tǒng)中固定優(yōu)先級(jí)搶占式調(diào)度策略的局限性而產(chǎn)生的。固定優(yōu)先級(jí)搶占式調(diào)度算法沒有任務(wù)間的臨時(shí)保護(hù)。因此,可預(yù)見的任務(wù)響應(yīng)時(shí)間依賴于對(duì)所有更高優(yōu)先級(jí)任務(wù)執(zhí)行時(shí)間的預(yù)測(cè)。在這樣的系統(tǒng)中,可預(yù)見性是與全局相關(guān)的,并且可能被一個(gè)糟糕任務(wù)而影響的。此外,這種用靜態(tài)觀點(diǎn)看待實(shí)時(shí)系統(tǒng)也是不妥的。在很多實(shí)時(shí)應(yīng)用中,更希望實(shí)時(shí)系統(tǒng)可以根據(jù)應(yīng)用程序獲得資源動(dòng)態(tài)地調(diào)整任務(wù)屬性,以求得到最優(yōu)效果。
資源核方法是一種以資源為中心來指導(dǎo)實(shí)時(shí)核心提供精確的、有保證的、可搶占的獲取系統(tǒng)資源的方法。只要實(shí)時(shí)應(yīng)用所需資源可以由核心后臺(tái)資源管理程序調(diào)配滿足,實(shí)時(shí)核心是允許實(shí)時(shí)應(yīng)用可配置的。因此,實(shí)時(shí)核心其實(shí)是提供了實(shí)時(shí)應(yīng)用可構(gòu)建的基礎(chǔ)――從配置簡(jiǎn)單的實(shí)時(shí)系統(tǒng)到復(fù)雜的實(shí)時(shí)系統(tǒng),都可以通過動(dòng)態(tài)地改變實(shí)時(shí)任務(wù)屬性和它們?cè)谡麄€(gè)系統(tǒng)中的優(yōu)先級(jí)來滿足。
這種方法的最大優(yōu)點(diǎn)是系統(tǒng)具有很好的健壯性、可精確預(yù)見的實(shí)時(shí)性。另一個(gè)優(yōu)點(diǎn)是允許應(yīng)用程序根據(jù)實(shí)際情況動(dòng)態(tài)調(diào)整自身屬性。此外,這種方法非常適合嵌入式系統(tǒng)的開發(fā)。
評(píng)論
查看更多