嵌入式實(shí)時(shí)系統中采用的操作系統我們稱(chēng)為嵌入式實(shí)時(shí)操作系統,它既是嵌入式操作系統,又是實(shí)時(shí)操作系統。作為一種嵌入式操作系統,它具有嵌入式軟件共有的可裁剪、低資源占用、低功耗等特點(diǎn);而作為一種實(shí)時(shí)操作系統(本文對實(shí)時(shí)操作系統特性的討論僅限于強實(shí)時(shí)操作系統,下面提到的實(shí)時(shí)操作系統也均指強實(shí)時(shí)操作系統),它與通用操作系統(如Windows、Unix、Linux等)相比有很大的差別,下面我們將通過(guò)比較這兩種操作系統之間的差別來(lái)逐步描述實(shí)時(shí)操作系統的主要特點(diǎn)。 我們在日常工作學(xué)習環(huán)境中接觸最多的是通用操作系統,通用操作系統是由分時(shí)操作系統發(fā)展而來(lái),大部分都支持多用戶(hù)和多進(jìn)程,負責管理眾多的進(jìn)程并為它們分配系統資源。分時(shí)操作系統的基本設計原則是: 盡量縮短系統的平均響應時(shí)間并提高系統的吞吐率,在單位時(shí)間內為盡可能多的用戶(hù)請求提供服務(wù)。 由此可以看出,分時(shí)操作系統注重平均表現性能,不注重個(gè)體表現性能。如對于整個(gè)系統來(lái)說(shuō),注重所有任務(wù)的平均響應時(shí)間而不關(guān)心單個(gè)任務(wù)的響應時(shí)間,對于某個(gè)單個(gè)任務(wù)來(lái)說(shuō),注重每次執行的平均響應時(shí)間而不關(guān)心某次特定執行的響應時(shí)間。通用操作系統中采用的很多策略和技巧都體現出了這種設計原則,如虛存管理機制中由于采用了LRU等頁(yè)替換算法,使得大部分的訪(fǎng)存需求能夠快速地通過(guò)物理內存完成,只有很小一部分的訪(fǎng)存需求需要通過(guò)調頁(yè)完成,但從總體上來(lái)看,平均訪(fǎng)存時(shí)間與不采用虛存技術(shù)相比沒(méi)有很大的提高,同時(shí)又獲得了虛空間可以遠大于物理內存容量等好處,因此虛存技術(shù)在通用操作系統中得到了十分廣泛的應用。類(lèi)似的例子還有很多,如Unix文件系統中文件存放位置的間接索引查詢(xún)機制等,甚至硬件設計中的Cache技術(shù)以及CPU的動(dòng)態(tài)分支預測技術(shù)等也都體現出了這種設計原則。由此可見(jiàn),這種注重平均表現,即統計型表現特性的設計原則的影響是十分深遠的。 而對于實(shí)時(shí)操作系統,前面我們已經(jīng)提到,它除了要滿(mǎn)足應用的功能需求以外,更重要的是還要滿(mǎn)足應用提出的實(shí)時(shí)性要求,而組成一個(gè)應用的眾多實(shí)時(shí)任務(wù)對于實(shí)時(shí)性的要求是各不相同的,此外實(shí)時(shí)任務(wù)之間可能還會(huì )有一些復雜的關(guān)聯(lián)和同步關(guān)系,如執行順序限制、共享資源的互斥訪(fǎng)問(wèn)要求等,這就為系統實(shí)時(shí)性的保證帶來(lái)了很大的困難。因此,實(shí)時(shí)操作系統所遵循的最重要的設計原則是:采用各種算法和策略,始終保證系統行為的可預測性(predictability)??深A測性是指在系統運行的任何時(shí)刻,在任何情況下,實(shí)時(shí)操作系統的資源調配策略都能為爭奪資源(包括CPU、內存、網(wǎng)絡(luò )帶寬等)的多個(gè)實(shí)時(shí)任務(wù)合理地分配資源,使每個(gè)實(shí)時(shí)任務(wù)的實(shí)時(shí)性要求都能得到滿(mǎn)足。與通用操作系統不同,實(shí)時(shí)操作系統注重的不是系統的平均表現,而是要求每個(gè)實(shí)時(shí)任務(wù)在最壞情況下都要滿(mǎn)足其實(shí)時(shí)性要求,也就是說(shuō),實(shí)時(shí)操作系統注重的是個(gè)體表現,更準確地講是個(gè)體最壞情況表現。舉例來(lái)說(shuō),如果實(shí)時(shí)操作系統采用標準的虛存技術(shù),則一個(gè)實(shí)時(shí)任務(wù)執行的最壞情況是每次訪(fǎng)存都需要調頁(yè),如此累計起來(lái)的該任務(wù)在最壞情況下的運行時(shí)間是不可預測的,因此該任務(wù)的實(shí)時(shí)性無(wú)法得到保證。從而可以看出在通用操作系統中廣泛采用的虛存技術(shù)在實(shí)時(shí)操作系統中不宜直接采用。 由于實(shí)時(shí)操作系統與通用操作系統的基本設計原則差別很大,因此在很多資源調度策略的選擇上以及操作系統實(shí)現的方法上兩者都具有較大的差異,這些差異主要體現在以下幾點(diǎn): (1) 任務(wù)調度策略: 通用操作系統中的任務(wù)調度策略一般采用基于優(yōu)先級的搶先式調度策略,對于優(yōu)先級相同的進(jìn)程則采用時(shí)間片輪轉調度方式,用戶(hù)進(jìn)程可以通過(guò)系統調用動(dòng)態(tài)地調整自己的優(yōu)先級,操作系統也可根據情況調整某些進(jìn)程的優(yōu)先級。 實(shí)時(shí)操作系統中的任務(wù)調度策略目前使用最廣泛的主要可分為兩種,一種是靜態(tài)表驅動(dòng)方式,另一種是固定優(yōu)先級搶先式調度方式。 靜態(tài)表驅動(dòng)方式是指在系統運行前工程師根據各任務(wù)的實(shí)時(shí)要求用手工的方式或在輔助工具的幫助下生成一張任務(wù)的運行時(shí)間表,這張時(shí)間表與列車(chē)的運行時(shí)刻表類(lèi)似,指明了各任務(wù)的起始運行時(shí)間以及運行長(cháng)度,運行時(shí)間表一旦生成就不再變化了,在運行時(shí)調度器只需根據這張表在指定的時(shí)刻啟動(dòng)相應的任務(wù)即可。靜態(tài)表驅動(dòng)方式的主要優(yōu)點(diǎn)是: 運行時(shí)間表是在系統運行前生成的,因此可以采用較復雜的搜索算法找到較優(yōu)的調度方案; 運行時(shí)調度器開(kāi)銷(xiāo)較??; 系統具有非常好的可預測性,實(shí)時(shí)性驗證也比較方便; 這種方式主要缺點(diǎn)是不靈活,需求一旦發(fā)生變化,就要重新生成整個(gè)運行時(shí)間表。 由于具有非常好的可預測性,這種方式主要用于航空航天、軍事等對系統的實(shí)時(shí)性要求十分嚴格的領(lǐng)域。 固定優(yōu)先級搶先式調度方式則與通用操作系統中采用的基于優(yōu)先級的調度方式基本類(lèi)似,但在固定優(yōu)先級搶先式調度方式中,進(jìn)程的優(yōu)先級是固定不變的,并且該優(yōu)先級是在運行前通過(guò)某種優(yōu)先級分配策略(如Rate-Monotonic、Deadline-Monotonic等)來(lái)指定的。這種方式的優(yōu)缺點(diǎn)與靜態(tài)表驅動(dòng)方式的優(yōu)缺點(diǎn)正好完全相反,它主要應用于一些較簡(jiǎn)單、較獨立的嵌入式系統,但隨著(zhù)調度理論的不斷成熟和完善,這種方式也會(huì )逐漸在一些對實(shí)時(shí)性要求十分嚴格的領(lǐng)域中得到應用。目前市場(chǎng)上大部分的實(shí)時(shí)操作系統采用的都是這種調度方式。 (2) 內存管理: 關(guān)于虛存管理機制我們在上面已經(jīng)進(jìn)行了一些討論。為解決虛存給系統帶來(lái)的不可預測性,實(shí)時(shí)操作系統一般采用如下兩種方式: Ø 在原有虛存管理機制的基礎上增加頁(yè)面鎖功能,用戶(hù)可將關(guān)鍵頁(yè)面鎖定在內存中,從而不會(huì )被swap程序將該頁(yè)面交換出內存。這種方式的優(yōu)點(diǎn)是既得到了虛存管理機制為軟件開(kāi)發(fā)帶來(lái)的好處,又提高了系統的可預測性。缺點(diǎn)是由于TLB等機制的設計也是按照注重平均表現的原則進(jìn)行的,因此系統的可預測性并不能完全得到保障; Ø 采用靜態(tài)內存劃分的方式,為每個(gè)實(shí)時(shí)任務(wù)劃分固定的內存區域。這種方式的優(yōu)點(diǎn)是系統具有較好的可預測性,缺點(diǎn)是靈活性不夠好,任務(wù)對存儲器的需求一旦有變化就需要重新對內存進(jìn)行劃分,此外虛存管理機制所帶來(lái)的好處也喪失了。 目前市場(chǎng)上的實(shí)時(shí)操作系統一般都采用第一種管理方式。 (3) 中斷處理: 在通用操作系統中,大部分外部中斷都是開(kāi)啟的,中斷處理一般由設備驅動(dòng)程序來(lái)完成。由于通用操作系統中的用戶(hù)進(jìn)程一般都沒(méi)有實(shí)時(shí)性要求,而中斷處理程序直接跟硬件設備交互,可能有實(shí)時(shí)性要求,因此中斷處理程序的優(yōu)先級被設定為高于任何用戶(hù)進(jìn)程。 但對于實(shí)時(shí)操作系統采用上述的中斷處理機制是不合適的。首先,外部中斷是環(huán)境向實(shí)時(shí)操作系統進(jìn)行的輸入,它的頻度是與環(huán)境變化的速率相關(guān)的,而與實(shí)時(shí)操作系統無(wú)關(guān)。如果外部中斷產(chǎn)生的頻度不可預測,則一個(gè)實(shí)時(shí)任務(wù)在運行時(shí)被中斷處理程序阻塞的時(shí)間開(kāi)銷(xiāo)也是不可預測的,從而使任務(wù)的實(shí)時(shí)性得不到保證;如果外部中斷產(chǎn)生的頻度是可預測的,一旦某外部中斷產(chǎn)生的頻度超出其預測值(如硬件故障產(chǎn)生的虛假中斷信號或預測值本身有誤)就可能會(huì )破壞整個(gè)系統的可預測性。其次,實(shí)時(shí)操作系統中的各用戶(hù)進(jìn)程一般都有實(shí)時(shí)性要求,因此中斷處理程序優(yōu)先級高于所有用戶(hù)進(jìn)程的優(yōu)先級分配方式是不合適的。 一種較適合實(shí)時(shí)操作系統的中斷處理方式為:除時(shí)鐘中斷外,屏蔽所有其它中斷,中斷處理程序變?yōu)橹芷谛缘妮喸?xún)操作,這些操作由核心態(tài)的設備驅動(dòng)程序或由用戶(hù)態(tài)的設備支持庫來(lái)完成。采用這種方式的主要好處是充分保證了系統的可預測性,主要缺點(diǎn)是對環(huán)境變化的響應可能不如上述中斷處理方式快,另外輪詢(xún)操作在一定程度上降低了CPU的有效利用率。另一種可行的方式是:對于采用輪詢(xún)方式無(wú)法滿(mǎn)足需求的外部事件,采用中斷方式,其它時(shí)間仍然采用輪詢(xún)方式。但此時(shí)中斷處理程序與所以其它任務(wù)一樣擁有優(yōu)先級,調度器根據優(yōu)先級對處于就緒態(tài)的任務(wù)和中斷處理程序統一進(jìn)行處理器調度。這種方式使外部事件的響應速度加快,并避免了上述中斷方式帶來(lái)第二個(gè)問(wèn)題,但第一個(gè)問(wèn)題仍然存在。 此外為提高時(shí)鐘中斷響應時(shí)間的可預測性,實(shí)時(shí)操作系統應盡可能少地屏蔽中斷。 (4) 共享資源的互斥訪(fǎng)問(wèn): 通用操作系統一般采用信號量機制來(lái)解決共享資源的互斥訪(fǎng)問(wèn)問(wèn)題。 對于實(shí)時(shí)操作系統,如果任務(wù)調度采用靜態(tài)表驅動(dòng)方式,共享資源的互斥訪(fǎng)問(wèn)問(wèn)題在生成運行時(shí)間表時(shí)已經(jīng)考慮到了,在運行時(shí)無(wú)需再考慮。如果任務(wù)調度采用基于優(yōu)先級的方式,則傳統的信號量機制在系統運行時(shí)很容易造成優(yōu)先級倒置問(wèn)題(Priority Inversion),即當一個(gè)高優(yōu)先級任務(wù)通過(guò)信號量機制訪(fǎng)問(wèn)共享資源時(shí),該信號量已被一低優(yōu)先級任務(wù)占有,而這個(gè)低優(yōu)先級任務(wù)在訪(fǎng)問(wèn)共享資源時(shí)可能又被其它一些中等優(yōu)先級的任務(wù)搶先,因此造成高優(yōu)先級任務(wù)被許多具有較低優(yōu)先級的任務(wù)阻塞,實(shí)時(shí)性難以得到保證。因此在實(shí)時(shí)操作系統中,往往對傳統的信號量機制進(jìn)行了一些擴展,引入了如優(yōu)先級繼承協(xié)議(Priority Inheritance Protocol)、優(yōu)先級頂置協(xié)議(Priority Ceiling Protocol)以及Stack Resource Policy等機制,較好地解決了優(yōu)先級倒置的問(wèn)題。 (5) 系統調用以及系統內部操作的時(shí)間開(kāi)銷(xiāo): 進(jìn)程通過(guò)系統調用得到操作系統提供的服務(wù),操作系統通過(guò)內部操作(如上下文切換等)來(lái)完成一些內部管理工作。為保證系統的可預測性,實(shí)時(shí)操作系統中的所有系統調用以及系統內部操作的時(shí)間開(kāi)銷(xiāo)都應是有界的,并且該界限是一個(gè)具體的量化數值。而在通用操作系統中對這些時(shí)間開(kāi)銷(xiāo)則未做如此限制。 (6) 系統的可重入性: 在通用操作系統中,核心態(tài)系統調用往往是不可重入的,當一低優(yōu)先級任務(wù)調用核心態(tài)系統調用時(shí),在該時(shí)間段內到達的高優(yōu)先級任務(wù)必須等到低優(yōu)先級的系統調用完成才能獲得CPU,這就降低了系統的可預測性。因此,實(shí)時(shí)操作系統中的核心態(tài)系統調用往往設計為可重入的。 (7) 輔助工具: 實(shí)時(shí)操作系統額外提供了一些輔助工具,如實(shí)時(shí)任務(wù)在最壞情況下的執行時(shí)間估算工具、系統的實(shí)時(shí)性驗證工具等,可幫助工程師進(jìn)行系統的實(shí)時(shí)性驗證工作。 此外,實(shí)時(shí)操作系統對系統硬件設計也提出了一些要求,其中一些要求為: (1) DMA DMA是一種數據交換協(xié)議,主要作用是在無(wú)需CPU參與的情況下將數據在內存與其它外部設備間進(jìn)行交換。DMA最常用的一種實(shí)現方式被稱(chēng)為周期竊取(Cycle Stealing)方式,即首先通過(guò)總線(xiàn)仲裁協(xié)議與CPU競爭總線(xiàn)控制權,在獲得控制權后再根據用戶(hù)預設的操作指令進(jìn)行數據交換。由于這種周期竊取方式會(huì )給用戶(hù)任務(wù)帶來(lái)不可預測的額外阻塞開(kāi)銷(xiāo),所以實(shí)時(shí)操作系統往往要求系統設計時(shí)不采用DMA或采取一些可預測性更好的DMA實(shí)現方式,如Time-slice method等。 (2) Cache Cache的主要作用是采用容量相對較小的快速存儲部件來(lái)彌補高性能CPU與相對來(lái)說(shuō)性能較低的存儲器之間的性能差異,由于它可以使系統的平均表現性能得到大幅提高,因此在硬件設計中得到了極為廣泛的應用。 但實(shí)時(shí)操作系統注重的不是平均表現性能,而是個(gè)體最壞情況表現,因此在對系統進(jìn)行實(shí)時(shí)性驗證時(shí)必須考慮實(shí)時(shí)任務(wù)運行的最壞情況,即每次訪(fǎng)存都沒(méi)有命中Cache情況下的運行時(shí)間,所以在利用輔助工具估算實(shí)時(shí)任務(wù)在最壞情況下的執行時(shí)間時(shí),應將系統中所有的Cache功能暫時(shí)關(guān)閉,在系統實(shí)際運行時(shí)再將Cache功能激活。除此以外,另一種較極端的做法則是在硬件設計中完全不采用Cache技術(shù)。
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請
點(diǎn)擊舉報。