天天看點

【實時作業系統】實時作業系統和非實時作業系統

VxWorks就是實時系統

實時作業系統的特征:

    實時作業系統是搶占式作業系統,如果你的程序優先級高,則肯定第一個得到執行,直至結束執行,中間的時間通過CPU頻率等可以推算出來。

   其實就是要求你對他的請求,他得在一定時限内給你結果,而不能因為系統忙或排程算法的原因拖沓,

也就是隻要指定了時間或發生了高優先級時間,無論任何操作,必須立刻中斷,即使核心也是如此。

Windows的核心是不可搶占的,是以它不是實時作業系統。Linux是軟實時的,核心中仍然有大量不可搶占區域。

時限要求高的是硬實時,時限要求低的是軟實時

非實時作業系統:

   通常的通用作業系統Windows和Linux都叫分時作業系統,一般采用公平排程算法,線程/程序一多就得分享CPU時間,Linux下有針對“實時程序”的排程,排程算法和普通程序不一樣,但也隻是相對的響應時間降低而已,類似的Windows下的“實時”優先級,也隻不過是最高優先級,而不是真正的實時

    真正的實時作業系統核心是可中斷可搶占的。而非實時的作業系統通常在執行核心功能時是不可中斷的,Linux是軟實時的,它在核心中加入了若幹可中斷點,而不是任何時候都允許中斷。

這樣對核心的設計就要求很高。

有的第三方的硬實時基于Linux的實作一般都是将Linux核心作為一個任務,由另外的實時OS核心進行排程

​​

【實時作業系統】實時作業系統和非實時作業系統

通用作業系統(如Windows、Unix、Linux等),通用作業系統是由

分時作業系統發展而來,大部分都支援多使用者和多程序,負責管理衆多的程序并為它們配置設定系統資源。分時作業系統的基本設計原則是:盡量縮短系統的平均響應時間并提高系統的吞吐率,在機關時間内為盡可能多的使用者請求提供服務。由此可以看出,分時作業系統

注重平均表現性能,不注重個體表現性能。

實時作業系統的資源調配政策都能為争奪資源(包括CPU、記憶體、網絡帶寬等)的多個實時任務合理地配置設定資源,使每個實時任務的實時性要求都能得到滿足。與通用作業系統不同,實時作業系統注重的不是系統的平均表現,而是

要求每個實時任務在最壞情況下都要滿足其實時性要求,也就是說,實時作業系統

注重的是個體表現,更準确地講是個體最壞情況表現。

    由于實時作業系統與通用作業系統的基本設計原則差别很大,是以在很多資源排程政策的選擇上以及作業系統實作的方法上兩者都具有較大的差異,這些差異主要展現在以下幾點:  

(1)         任務排程政策:    

  通用作業系統中的任務排程政策一般采用基于優先級的搶先式排程政策,對于優先級相同的程序則采用時間片輪轉排程方式,使用者程序可以通過系統調用動态地調整自己的優先級,作業系統也可根據情況調整某些程序的優先級。    

  實時作業系統中的任務排程政策目前使用最廣泛的主要可分為兩種,一種是靜态表驅動方式,另一種是固定優先級搶先式排程方式。    

  靜态表驅動方式是指在系統運作前工程師根據各任務的實時要求用手工的方式或在輔助工具的幫助下生成一張任務的運作時間表,這張時間表與列車的運作時刻表類似,指明了各任務的起始運作時間以及運作長度,運作時間表一旦生成就不再變化了,在運作時排程器隻需根據這張表在指定的時刻啟動相應的任務即可。靜态表驅動方式的主要優點是:    

  ?                   運作時間表是在系統運作前生成的,是以可以采用較複雜的搜尋算法找到較優的排程方案;    

  ?                   運作時排程器開銷較小;    

  ?                   系統具有非常好的可預測性,實時性驗證也比較友善;    

  這種方式主要缺點是不靈活,需求一旦發生變化,就要重新生成整個運作時間表。    

  由于具有非常好的可預測性,這種方式主要用于航空航天、軍事等對系統的實時性要求十分嚴格的領域。    

  固定優先級搶先式排程方式則與通用作業系統中采用的基于優先級的排程方式基本類似,但在固定優先級搶先式排程方式中,程序的優先級是固定不變的,并且該優先級是在運作前通過某種優先級配置設定政策(如Rate-Monotonic、Deadline-Monotonic等)來指定的。這種方式的優缺點與靜态表驅動方式的優缺點正好完全相反,它主要應用于一些較簡單、較獨立的嵌入式系統,但随着排程理論的不斷成熟和完善,這種方式也會逐漸在一些對實時性要求十分嚴格的領域中得到應用。目前市場上大部分的實時作業系統采用的都是這種排程方式。    

  (2)         記憶體管理:    

  關于虛存管理機制我們在上面已經進行了一些讨論。為解決虛存給系統帶來的不可預測性,實時作業系統一般采用如下兩種方式:      

  ?                   在原有虛存管理機制的基礎上增加頁面鎖功能,使用者可将關鍵頁面鎖定在記憶體中,進而不會被swap程式将該頁面交換出記憶體。這種方式的優點是既得到了虛存管理機制為軟體開發帶來的好處,又提高了系統的可預測性。缺點是由于TLB等機制的設計也是按照注重平均表現的原則進行的,是以系統的可預測性并不能完全得到保障;    

  ?                   采用靜态記憶體劃分的方式,為每個實時任務劃分固定的記憶體區域。這種方式的優點是系統具有較好的可預測性,缺點是靈活性不夠好,任務對存儲器的需求一旦有變化就需要重新對記憶體進行劃分,此外虛存管理機制所帶來的好處也喪失了。    

  目前市場上的實時作業系統一般都采用第一種管理方式。    

  (3)         中斷處理:    

  在通用作業系統中,大部分外部中斷都是開啟的,中斷處理一般由裝置驅動程式來完成。由于通用作業系統中的使用者程序一般都沒有實時性要求,而中斷處理程式直接跟硬體裝置互動,可能有實時性要求,是以中斷處理程式的優先級被設定為高于任何使用者程序。    

  但對于實時作業系統采用上述的中斷處理機制是不合适的。首先,外部中斷是環境向實時作業系統進行的輸入,它的頻度是與環境變化的速率相關的,而與實時作業系統無關。如果外部中斷産生的頻度不可預測,則一個實時任務在運作時被中斷處理程式阻塞的時間開銷也是不可預測的,進而使任務的實時性得不到保證;如果外部中斷産生的頻度是可預測的,一旦某外部中斷産生的頻度超出其預測值(如硬體故障産生的虛假中斷信号或預測值本身有誤)就可能會破壞整個系統的可預測性。其次,實時作業系統中的各使用者程序一般都有實時性要求,是以中斷處理程式優先級高于所有使用者程序的優先級配置設定方式是不合适的。    

  一種較适合實時作業系統的中斷處理方式為:除時鐘中斷外,屏蔽所有其它中斷,中斷處理程式變為周期性的輪詢操作,這些操作由核心态的裝置驅動程式或由使用者态的裝置支援庫來完成。采用這種方式的主要好處是充分保證了系統的可預測性,主要缺點是對環境變化的響應可能不如上述中斷處理方式快,另外輪詢操作在一定程度上降低了CPU的有效使用率。另一種可行的方式是:對于采用輪詢方式無法滿足需求的外部事件,采用中斷方式,其它時間仍然采用輪詢方式。但此時中斷處理程式與是以其它任務一樣擁有優先級,排程器根據優先級對處于就緒态的任務和中斷處理程式統一進行處理器排程。這種方式使外部事件的響應速度加快,并避免了上述中斷方式帶來第二個問題,但第一個問題仍然存在。    

  此外為提高時鐘中斷響應時間的可預測性,實時作業系統應盡可能少地屏蔽中斷。    

  (4)         共享資源的互斥通路:    

  通用作業系統一般采用信号量機制來解決共享資源的互斥通路問題。    

  對于實時作業系統,如果任務排程采用靜态表驅動方式,共享資源的互斥通路問題在生成運作時間表時已經考慮到了,在運作時無需再考慮。如果任務排程采用基于優先級的方式,則傳統的信号量機制在系統運作時很容易造成優先級倒置問題(Priority   Inversion),即當一個高優先級任務通過信号量機制通路共享資源時,該信号量已被一低優先級任務占有,而這個低優先級任務在通路共享資源時可能又被其它一些中等優先級的任務搶先,是以造成高優先級任務被許多具有較低優先級的任務阻塞,實時性難以得到保證。是以在實時作業系統中,往往對傳統的信号量機制進行了一些擴充,引入了如優先級繼承協定(Priority   Inheritance   Protocol)、優先級頂置協定(Priority   Ceiling   Protocol)以及Stack   Resource   Policy等機制,較好地解決了優先級倒置的問題。    

  (5)         系統調用以及系統内部操作的時間開銷:    

  程序通過系統調用得到作業系統提供的服務,作業系統通過内部操作(如上下文切換等)來完成一些内部管理工作。為保證系統的可預測性,實時作業系統中的所有系統調用以及系統内部操作的時間開銷都應是有界的,并且該界限是一個具體的量化數值。而在通用作業系統中對這些時間開銷則未做如此限制。    

  (6)         系統的可重入性:    

  在通用作業系統中,核心态系統調用往往是不可重入的,當一低優先級任務調用核心态系統調用時,在該時間段内到達的高優先級任務必須等到低優先級的系統調用完成才能獲得CPU,這就降低了系統的可預測性。是以,實時作業系統中的核心态系統調用往往設計為可重入的。    

  (7)         輔助工具:    

  實時作業系統額外提供了一些輔助工具,如實時任務在最壞情況下