什麼是實時作業系統(RTOS)

2021-10-24 06:30:56 字數 3251 閱讀 3233

實時作業系統(real-time operating system, rtos),又稱即時作業系統,它會按照排序執行、管理系統資源,並為開發應用程式提供一致的基礎。

實時作業系統與一般的作業系統相比,最大的特色就是「實時性」,如果有乙個任務需要執行,實時作業系統會馬上(在較短時間內)執行該任務,不會有較長的延時。這種特性保證了各個任務的及時執行。

經常跟實時作業系統一起講的,還有嵌入式作業系統這個概念,但實際上這是完全不同的兩種東西,雖然大多數實時作業系統都是嵌入式作業系統,但嵌入式作業系統並不全都是實時的。

對於實時作業系統有一些常見的誤區,比如:速度快,吞吐量大,**精簡,**規模小等等。其實這些都不算是實時作業系統的特性,別的作業系統也可以做到。

只有「實時性」才是rtos的最大特徵,其它的都不算是。

維基百科上關於實時性的定義:

實時運算(real-time computing)是電腦科學中對受到「實時約束」的計算機硬體和計算機軟體系統的研究,實時約束像是從事件發生到系統回應之間的最長時間限制。實時程式必須保證在嚴格的時間限制內響應。
實時作業系統中都要包含乙個實時任務排程器,這個任務排程器與其它作業系統的最大不同是強調:嚴格按照優先順序來分配cpu時間,並且時間片輪轉不是實時排程器的乙個必選項。

提出實時作業系統的概念,可以至少解決兩個問題:

早期的cpu任務切換的開銷太大,實時排程器可以避免任務頻繁切換導致cpu時間的浪費。

在一些特殊的應用場景中,必須要保證重要的任務優先被執行。

在這樣的背景下,實時作業系統就被設計出來了,典型的實時作業系統有vxworks,rt-thread,ucos,qnx,wince等。

實時任務排程器是實時作業系統的乙個必選項,但不代表只要設計出來乙個實時排程器就足夠了。事實上設計乙個實時排程核心並不是乙個多麼複雜的任務,實時作業系統的特性是在整個作業系統的設計思路上都要時刻關注實時性。

這些設計思路包括:

1. 實時的訊息、事件處理機制。

常規的作業系統中,訊息佇列都是按照fifo(先進先出)的方式進行排程,如果有多個接受者,那麼接受者也是按照fifo的原則接受訊息(資料),但實時作業系統會提供基於優先順序的處理方式:兩個任務優先順序是分別是10和20,同時等待乙個訊號量,如果按照優先順序方式處理,則優先順序為10的任務會優先收到訊號量。

2. 提供核心級的優先順序翻轉處理方式

實時作業系統排程器最經常遇到的問題就是優先順序翻轉,因此對於類似訊號量一類的api,都能提供抑止優先順序翻轉的機制,防止作業系統死鎖。

3. 減少粗粒度的鎖和長期關中斷的使用

這裡的鎖主要是指自旋鎖(spinlock)一類會影響中斷的鎖,也包括任何關中斷的操作。在windows和linux的驅動中,為了同步的需要,可能會長期關閉中斷,這裡的長期可能是毫秒到百微秒級。但實時作業系統通常不允許長期關中斷。

對於非實時作業系統來說,如果收到乙個外部中斷,那麼作業系統在處理中斷的整個過程中可能會一直關中斷。但實時作業系統的通常做法是把中斷作為乙個事件通告給另外乙個任務,interrupt handler在處理完關鍵資料以後,立即開啟中斷,驅動的中斷處理程式以乙個高優先順序任務的方式繼續執行。

4. 系統級的服務也要保證實時性

對於一些系統級的服務,比如檔案系統操作:

這種設計實際上會犧牲效能,但實時系統強調的是整個系統層面的實時性,而不是某乙個點(比如核心)的實時性,所以系統服務也要實時。

由於應用場景的差異,會出現有些使用者需要實時性的驅動,有些使用者需要高效能的驅動,因此實時作業系統實際上要提供多種形式的配置以滿足不同實時性需求的使用者。

5. 避免提供實時性不確定的api

多數實時作業系統都不支援虛擬記憶體(page file/swap area),主要原因是缺頁中斷(page fault)會導致任務排程的不確定性增加。

實時作業系統很多都支援分頁,但很少會使用虛擬記憶體,因為一次缺頁中斷的開銷十分巨大(通常都是毫秒級),波及的**很多,導致使用者程式執行的不確定性增加。

實時作業系統的確定性是乙個很重要的指標,在某些極端場景下,甚至會禁用動態記憶體分配(malloc/free),來保證系統不受到動態的任務變化的干擾。

6. 提供針對實時系統排程的專用api

比如arinc 653標準中就針對任務排程等作出了一系列的規定,同時定義了特定的api介面和api行為,這些api不同於posix api,如果實時系統要在航空裝置上使用,就可能需要滿足arinc 653的規範。

7. 降低系統抖動

由於關中斷等原因,通常情況下,作業系統的排程器不會太精確的產生週期性的排程,比如x86早期的預設60的時鐘週期(clock rate),抖動範圍可能在15-17ms之間。但乙個設計優秀的實時作業系統能把排程器的抖動降低到微秒甚至百納秒一級,在像x86這種天生抖動就很大的架構上,降低系統抖動尤其重要。

8. 針對實時性設計的smp和虛擬化技術

smp(多核)場景的實時排程是很困難的,這裡還涉及到任務核間遷移的開銷。針對smp場景,多數實時作業系統的設計都不算十分優秀,但比起普通作業系統來說,其實時性已經好很多了。

同時實時作業系統的虛擬化能從hypervisor層面上提供虛擬機器級別的實時排程,虛擬機器上可以是另外乙個實時系統,也可以是乙個非實時系統。

從以上的特點上看,前面提到的常見的錯誤認識:速度快,吞吐量大,**精簡,**規模小,都不是實時作業系統的特徵:

非實時作業系統也可以很快,實時作業系統也可能很慢;

通常來說實時作業系統的吞吐量會大一些,但非實時系統也可以做到吞吐量更大;

實時作業系統一般都比非實時作業系統要小,但規模大的實時作業系統也是存在的;

而且由於可能需要針對不同使用者提供不同等級的實時服務,實時作業系統可能並不是那麼精簡的……

由於裝置效能的發展,原來很多實時性要求高的場景,已經切換到普通的作業系統了。linux在嵌入式裝置上的推廣,使用實時作業系統的很多裝置已經改用linux了,因為硬體效能的提公升會讓系統延遲降低到乙個使用者可以接受的程度。

但在某些特定的場景下,比如工業自動化、機械人、航空航天、軍工領域等,仍然對實時作業系統有需求,並且應該會長期存在。

同時,由於實時作業系統的特性,它並不是乙個應用場景廣泛的系統,一些人認為學嵌入式就是學實時作業系統,這種認識其實是不正確的,現在嵌入式開發,不一定需要在實時作業系統下完成。

實時作業系統 RTOS 和非實時作業系統

對於實時作業系統 rtos 和非實時作業系統,你能分別列舉出來多少?實時作業系統 ucos vxworks rtlinux 非實時作業系統 linux windows osx 我也只能列舉出來這麼多了。重點不在這裡,重點在於他們之間的區別,詳見下圖 在上面的圖中右邊的任務優先順序高於左邊的任務,先看...

RTOS實時作業系統的認識

rtos 實時作業系統是事件驅動的,能對來自外界的訊號在有限的時間內做出響應,實時性,可靠性,靈活性 分為一般實時作業系統,嵌入式實時作業系統 1 非同步的事件響應 2 切換時間和中斷延遲時間確定 3優先順序中斷和排程 4 搶占式排程 5 記憶體鎖定 6 連續檔案 7 同步 rtos是一段在嵌入式系...

嵌入式系統 實時作業系統 RTOS

一 rtos中的基本概念 背景 rtos具有的功能 作業系統中的程序與執行緒 二 嵌入式作業系統的主要種類 1 uc os ii 2 linux 作業系統 3 vxworks 4 wince os 作業系統,operating system 是嵌入式系統中的靈魂,是其軟體系統中的重要組成部分,嵌入式...