VxWorks操作系統及實時多任務程序設計
本系統運行于VME總線系統(MVME177)上,通過VME背板總線與各模件交換數據對各處理模件進行控制并顯示信號處理結果。MVME177模件運行于嵌入式實時操作系統VxWorks下,人機交互界面基于X窗口系統。
一、 嵌入式實時操作系統VxWorks簡介
由于聲納系統在探測到某些目標(如魚雷)后要迅速作出反應,所以要求控制及顯示系統必須是實時操作系統。實時操作系統要求能夠隨時打斷正在執行的任務, 對內部和外部發生的事件在確定的時間內作出響應。本系統采用的VxWorks 是由美國WindRiver開發的一種類UNIX的高性能嵌入式實時操作系統。它是目前世界上用戶數量最大的實時操作系統,具有優越的技術性能、豐富的應用軟件支持、良好的技術服務和可靠的系統穩定性。
VxWorks的主要性能特點有:
(1) 高度可剪裁的微內核結構。VxWorks所需要的存儲器空間大約為8KB~488KB(ROM)、620KB~29.3KB(RAM),具有極好的可伸縮性。
(2) 高效的多任務調度。VxWorks 支持中斷驅動的優先級搶占式調度和時間片輪轉調度,并具有確定的、快速的上下文切換能力。
(3) 靈活的任務間通信手段。支持信號燈、消息隊列、管道、信號和套接字等進程間通信和互斥手段。
(4) 支持諸如Ring buffer、Link list 等共享內存技術。
(5) 確定的μs級的中斷延遲時間。
(6) 適用于多種物理介質的TCP/IP協議族支持和幾乎所有常用的基于TCP/IP協議的應用層協議。
(7) 極其豐富的板級支持軟件包(BSP),支持多種處理器板。
(8) 支持POSIX 1003.1b (實時擴充)。
(9) 快速、靈活的I/O系統。
(10) 支持MS DOS、RT 11和RAW等文件系統和網絡文件系統(NFS)。
(11) 靈活的啟動方法。支持從ROM、本地磁盤以及網絡啟動。
二、 VxWorks的一些技術特點
VxWorks的特點主要在于嵌入式和實時性。由于嵌入式的特點,系統內核只有任務管理和簡單的內存管理,在此之上可以根據需要配置各種功能模塊,包括網絡管理、文件系統、虛擬存儲器等等。實時性則體現在實時調度算法和實時內核(高效的進程間通信、內存管理等)。
VxWorks支持POSIX標準,所以POSIX的概念和接口以及一些策略都被支持。但為了提高系統性能,VxWorks另有一套接口及實現策略稱為wind內核。下面的討論主要針對wind內核。POSIX標準可以參見相關資料。
(1) 任務在VxWorks中,最小的程序運行單位稱為任務(task)。每個任務包含一段固定的代碼和數據空間。操作系統內核通過任務控制塊(task control block)對它的執行、通信、資源等情況進行控制。任務具有就緒、阻塞、掛起和延遲等狀態。
與Linux和 WindowsNT下的進程不同的是:在VxWorks中,所有任務共同享有物理內存,存在于統一的線性空間中。每個任務沒有自己獨立的代碼段和堆,只有獨立的動態棧。任務中的地址即是真正的物理地址。由于不需要進行地址空間映射,在任務切換時的上下文切換(context switch)時間大為減少,符合實時操作系統要求快速響應的原則。從這個意義上來說,VxWorks的任務更接近Linux和WindowsNT下的線程(thread)。 VxWorks的代碼段與堆共享減少了上下文切換時間,卻帶來了共享代碼的可重入性(reentrancy)問題。如1個函數被2個任務所調用,當其中包含對全局、靜態變量等從堆中分配空間的數據進行訪問時,就有可能產生沖突,從而引發錯誤。在應用軟件開發時要加以注意。解決方法是使用局部變量(從棧中分配空間)或使用信號燈對臨界代碼進行監控。
(2) 任務調度 VxWorks有2種任務調度策略:優先級搶先調度和時間片輪轉調度。這2種調度策略都是系統級的,與POSIX進程級的調度策略不同,即整個系統里要么是優先級搶先調度,要么是時間片輪轉調度;而POSIX標準下可以每個進程使用自己的調度策略。系統共有256個優先級。
優先級搶先調度指的是一個優先級較低的任務正在執行中,另一個優先級高的任務進入就緒狀態,則馬上進行處理器搶先,執行高優先級任務,直到高優先級釋放處理器(完成、掛起、阻塞等)才繼續執行低優先級任務。
優先級搶先調度可以保證實時系統的迅速響應特性,但是也帶來1個問題:當系統中存在幾個相同優先級的任務時,就會使單一任務獨占處理器,直至完成。為此加入了基于優先級的時間片輪轉調度方式。在不同優先級的任務間以搶先方式調度,相同優先級的任務則以時間片進行輪轉。
評論