2.3當前的實時作業系統
在這一節我們來看看一些作業系統的設計者是怎樣來處理前一節所提到的問題的。
最簡單的解決方案是改變分時的排程程式。乙個例子是文獻
[12]
介紹的系統。
minix
的round-robin
排程器換為基於優先順序的排程器。由於在
minix
中不使用頁面排程和頁面交換技術,假如對時間的響應不過分要求的話,這種方法是可以接受的。
一些在unix
系統中採用
posix.1b-1993
實時標準規定的方式。這個標準規定了優先順序排程,鎖定使用者程式頁面,實時訊號,改進的
ipc和計時器,和別的一些特性。依從這些標準使
unix
更適合實時應用。
linux
是部分支援
posix.1b
標準的作業系統
[12]
。從2023年5
月1日起,在
linux
中完全實現了適合用於控制的排程器和記憶體鎖定技術,定時器也部分實現。核心的不可佔先,低的定時精度,和高的中斷延遲仍然沒有解決。因此,
posix.1b
相容的linux
作業系統只適合一些軟實時的處理。
別的滿足
posix.1b
的作業系統是
qnx[26]
。qnx
作業系統是微核心的作業系統。核心只是實現
4種服務:程序排程,程序間通訊,低階的網路通訊,和中斷分派。別的一些服務,比如說裝置驅動程式和檔案系統,實現為與使用者程序協同操作的方式。這樣系統核心非常小(大約
7kb左右)而且非常快的。
qnx相容posix 1003.1
標準(程式設計介面)和
posix 1003.2
標準(外殼和應用程式)。對於熟悉
unix
的開發者來說,是非常方便的。
qnx提供標準的
unix
部件:編譯器,偵錯程式,
x-windows
,和tcp/ip。
微核心的設計比起傳統的單塊結構的設計有很多優勢。除錯使用者程式比起除錯核心模組更為簡單。假如使用者程序執行在單獨的位址空間(像
qnx那樣),記憶體管理錯誤在不同模組是相互隔離的。驅動程式可以更獲得多執行緒的好處。另外有良好的裁剪性。比如,
qnx可以減少到
100kb
以下以適合
rom的大小,或者擴充套件到全功能的多機開發環境。移植和維護微核心的系統也更簡單。缺點是微核心比起單塊結構的核心來說不那麼緊湊。
對於實時處理的微核心它提供了輕量級程序,快的上下文切換,和
ipc。乙個實時的使用者程序可以中斷裝置驅動程式,在單塊結構的核心是不可能的。由於微核心作業系統是非常小的,可以方便的計算最壞情況下的計時引數,比如中斷延遲時間。
大多數的微核心作業系統的弱點是它的效能要差。微核心結構的作業系統在程序間通訊和上下文交換有比較重的系統開銷。微核心作業系統只提供簡單的系統服務。因此,與單塊結構的作業系統相比,完成相同的任務微核心作業系統要進行更多的系統呼叫。雖然一些研究者認為上下文切換,訊息傳遞等可以高效地實現
[2],就效能而言,單塊結構的作業系統仍然更成功。
乙個單塊結構的作業系統的例子是
vxworks[27]
。vxworks
是專有的實時作業系統,採用主機
/目標機方式。乙個
unix
主機用來軟體的開發和執行程式的非實時部分。乙個叫
wind
的vxworks
核心在目標機上執行實時任務。機器間的通訊使用
tcp/ip
網路連線。 雖然
vxworks
不相容unix
系統,它提供了一些符合
posix
介面規範的函式,特別是
posix.1b
實時擴充套件部分。大多數的
vxworks api
是專有的。 在
vxworks
中,核心和任務執行在同乙個位址空間。這樣,任務間的切換非常快,和省去了必要的系統呼叫開銷。乙個實時聯結器允許動態的裝載任務和系統模組。這些特性使系統具有好的伸縮性。乙個互動式的類似
c語法的
shell
用來檢查和改變引數值,計算表示式,呼叫函式,和進行簡單的除錯。這個特性使得開發更為簡單方便。核心和任務執行在同乙個位址空間也使得系統更脆弱,乙個模組的錯誤更容易影響到別的模組。
real/ix
作業系統也是單塊結構。這是乙個有完全
unix
特性的作業系統,原自於
unix system v
,改造使它擁有實時處理能力。它的核心是完全可佔先的。它通過核心訊號量來實現,提供互斥方式訪問系統資源,比起傳統的
sleep/wakeup
函式和關中斷來說,這種方式更優秀。使用訊號量代替關中斷降低了中斷延遲時間,也使的移植到多處理器系統更為容易。
real/ix
是posix.1003
相容的作業系統。這個特性使得移植
unix
應用程式更為容易。除實時排程以外,實時能力還包括預先分配記憶體和檔案空間,同步與非同步
i/o,增強的
ipc和計時器,可連線的中斷。最後的特性允許使用者程序處理中斷。
現在有乙個趨向於使用
windows nt
來支援實時處理。只要原因是相容先前的
windows
,因此,可以使用先前的應用程式。也是指望用乙個作業系統來做任何事情:辦公應用,服務,和實時控制。用乙個作業系統可以減少人員培訓的開銷。程式設計師可以用到廣泛的
win32 api
。microsoft
對市場的壟斷也是乙個原因。
像文獻[25]
指出的那樣,
windows nt
的核心並不適合硬實時的處理:
win32 api
不是設計用來實時應用的,中斷處理的方式可能引起乙個不確定的延遲,而且對於嵌入式系統來說,
windows nt
對記憶體的要求也是乙個問題。
microsoft
為了處理上面提到的一些問題。開發了
windows ce
嵌入式實時作業系統,
windows ce
核心支援按優先順序搶占的方式排程多工。
windows ce
可以固化到
rom中,從
rom起動,使用時對記憶體
ram要求不高。
windows ce
將中斷分為兩個步驟:第一步是執行中斷服務子程式
isr(interrupt service routine)
;第二步為中斷服務執行緒
ist(interrupt service thread)
。核心使中斷處理程式執行盡可能短,大部分處理放在
ist中,可以把最高優先順序安排給中斷服務執行緒,以保證
ist盡快執行而不會被佔先。其與
win32 api
相容的程式設計介面方便熟悉
windows
的程式設計師開發和移植
windows
應用。
嵌入式 實時作業系統導論
排程任務和資料 訊號量和共享資料 可重入性和訊號量 多個訊號量 訊號量作為訊號裝置 使用訊號量的易出現問題 訊號量變數 所謂任務,是指在乙個rtos中所寫的軟體的基本構造塊,也就是通常所說的子程式。有關任務是如何呼叫 它與rots是如何配合工作的等問題稍後再討論。在rtos中乙個任務總是處在下列三種...
嵌入式系統 實時作業系統 RTOS
一 rtos中的基本概念 背景 rtos具有的功能 作業系統中的程序與執行緒 二 嵌入式作業系統的主要種類 1 uc os ii 2 linux 作業系統 3 vxworks 4 wince os 作業系統,operating system 是嵌入式系統中的靈魂,是其軟體系統中的重要組成部分,嵌入式...
嵌入式實時作業系統的移植 !
所謂移植,就是使選用的實時核心能在某個特定的微處理器上執行。為了方便移植,大部分的實時作業系統 是用c語言編寫的,但仍需要用c和組合語言編寫一些與微處理器相關的 這是因為有一些操作只能通過組合語言來實現。由於所有的實時作業系統在設計時就已經充分考慮了可移植性,所以移植相對來說是比較容易的。以ucos...