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