首先,“實時操作系統(tǒng)”可以說是一個“盜用”了“實時”這個概念的名詞,其真正原型是“實時系統(tǒng)”。我注意到上面很多人把實時系統(tǒng)當(dāng)作實時操作系統(tǒng),這是
一個很大的錯誤,真正的實時系統(tǒng)是指的一個由硬件、軟件所搭配起來的完整系統(tǒng),軟件既包括操作系統(tǒng),又包括應(yīng)用,也就是那些有實時特性的應(yīng)用。
對于一個有“任務(wù)”概念的實時系統(tǒng)而言,系統(tǒng)的任務(wù)調(diào)度策略就是“實時調(diào)度”。請注意,真正的實時調(diào)度是指關(guān)心任務(wù)的“時間特性”并去保證時間特性的調(diào)度。 實時調(diào)度通常按照實時任務(wù)調(diào)度的時間嚴(yán)格性劃分為硬實時(hard real-time)和軟實時(soft real-time)兩大類。所謂“實時任務(wù)”,是指擁有明確的完成時間期限(deadline)的任務(wù);所謂“時間嚴(yán)格性”,是指對于實時任務(wù) deadline監(jiān)督的嚴(yán)格程度,如果超過deadline就必定導(dǎo)致任務(wù)的失敗就是硬實時,而允許一定程度的越過dealine則通常稱為軟實時,因 此,兩者的關(guān)鍵區(qū)別也就是“guaranteed”和“best-effort”的區(qū)別。不同的硬實時系統(tǒng)中任務(wù)失敗的嚴(yán)重性是不一樣的,有的可能導(dǎo)致整 個系統(tǒng)運作的失?。ū热鐧C車自動控制系統(tǒng)),有的則可以通過錯誤恢復(fù)機制來作某些彌補,還有的就簡單的忽略掉這個任務(wù)(如媒體處理系統(tǒng)丟幀),因此,“硬 實時系統(tǒng)”并不嚴(yán)格是一個“可靠性系統(tǒng)”(當(dāng)然,實時系統(tǒng)本身的可靠性是相當(dāng)高的)。 我們再看看動態(tài)(Dynamic)調(diào)度與靜態(tài)(Static)調(diào)度,兩者關(guān)鍵區(qū)別在于任務(wù)的調(diào)度決定是否可以在運行期間動態(tài)的決定。靜態(tài)調(diào)度通常 是在系統(tǒng)配置過程中就決定了所有任務(wù)的執(zhí)行時間,而動態(tài)調(diào)度則在系統(tǒng)運行過程中可以根據(jù)實際情況靈活決定任務(wù)的執(zhí)行時間。在這里,需要說明的是,最佳化的 硬實時系統(tǒng)通常都是靜態(tài)調(diào)度的,也就是說,避免不可預(yù)知的任務(wù)(運行中也不會允許插入新任務(wù)),比如醫(yī)院的病員供氧系統(tǒng),靜態(tài)調(diào)度可以說就是安排一張日程 表,算法可以復(fù)雜,也可以手工排列完成。但是,諸如導(dǎo)彈預(yù)警這樣的系統(tǒng)就無法做到這一點,所以不得不使用動態(tài)調(diào)度。 實時系統(tǒng)內(nèi)容很廣泛,我只介紹一下實時調(diào)度策略(也就是“動態(tài)調(diào)度”)。實時系統(tǒng)中,一個任務(wù)通常用(相位,周期,執(zhí)行時間,完成期限)四元組來 描述,保證一個任務(wù)的實時性,就是要滿足上面四元組的一些自然約束。真正的實時調(diào)度器,必定是對上面的四元組進(jìn)行滿足的(這也正是不具備這樣的調(diào)度器的那 些“實時操作系統(tǒng)”盜用“實時”概念的原因)。 著名的實時調(diào)度算法有,RM算法(速率單調(diào)性算法)、EDF算法(最早完成期限優(yōu)先算法)、LLF算法(最小松弛度算法)等,每個算法本身十分簡單,但是對于這些算法及其變種的時間滿足特性的證明則非常復(fù)雜。 我們再看看“實時操作系統(tǒng)”,這里的“實時”,如上面所說,實際上大多情況下是失去其本色的(只有小部分實時操作系統(tǒng)允許使用上面說過的實時調(diào)度器)。 那么“實時操作系統(tǒng)”的“實時”是什么呢?其實一般就是對2個指標(biāo)的衡量,一是“最大中斷處理延遲”,二是“最大任務(wù)調(diào)度延遲”。一般來說,市面 上的實時操作系統(tǒng)把這兩個指標(biāo)列出來,當(dāng)它們都足夠小時(沒有確定的尺度,大致的尺度是最大中斷處理延遲在十微秒數(shù)量級,最大任務(wù)調(diào)度延遲在百微秒到毫秒 數(shù)量級內(nèi)),就可以說是一個“實時操作系統(tǒng)”。 這兩個指標(biāo)跟什么有關(guān)系呢?首先,處理器的速度(準(zhǔn)確的說是執(zhí)行代碼的計算機的速度)很重要,執(zhí)行代碼越快,這兩個延遲就越小,這是理所當(dāng)然的。然后我們分別考察這兩個指標(biāo): 先看最大中斷處理延遲,最影響這個指標(biāo)的是處理器關(guān)中斷以及中斷控制器mask掉中斷整個區(qū)域的代碼量,無論是操作系統(tǒng)內(nèi)核還是driver還是應(yīng)用程序 (某些實時操作系統(tǒng)允許應(yīng)用程序關(guān)中斷),都會影響整個這個指標(biāo)。軟件需要可能減小關(guān)中斷時間來保證這個指標(biāo)。另外影響這個指標(biāo)的是內(nèi)核代碼在正式調(diào)用中 斷處理代碼前的運行開銷,比如查找中斷號之類的動作,某些情況下這個開銷可能比較大。最后,很不幸,這個指標(biāo)實際上是跟應(yīng)用環(huán)境相關(guān)的,在真實的應(yīng)用環(huán)境 里,很可能存在突發(fā)密集中斷的情形,這種境況下,最大中斷延遲根本無法預(yù)料(當(dāng)然了,處理器速度越快就會越有改善)。 再看最大任務(wù)調(diào)度延遲,一般來說,可以用當(dāng)前運行低優(yōu)先級任務(wù)的系統(tǒng)中出現(xiàn)了高優(yōu)先級任務(wù)的時刻到高優(yōu)先級任務(wù)被調(diào)度后開始運行的這段時間來衡量。 linux2.4之所以“實時性”不好,很大程度上就是因為這個指標(biāo)與任務(wù)數(shù)量成正比,新的o(1)調(diào)度器就會好很多。另一個嚴(yán)重影響這個指標(biāo)的是“內(nèi)核 搶占性”,對于一個分開用戶級和內(nèi)核級的操作系統(tǒng)而言,如果內(nèi)核不可搶占,那就意味著最大任務(wù)調(diào)度延遲指標(biāo)會受到運行時間最長的那個系統(tǒng)調(diào)用時間的影響 (想想為什么吧),因此2.6內(nèi)核也對這個做了改進(jìn)。比上個指標(biāo)更加不幸的是,這個指標(biāo)在有虛存的操作系統(tǒng)上更加難以確定(你根本不好預(yù)料缺頁后的一系列 行為,萬一訪問硬盤就...),這也正是大多數(shù)時實操作系統(tǒng)不使用虛存的原因。 就說到這里了,差不多講清楚了吧 |
|