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