嵌入式操作系統(tǒng)在高速實(shí)時(shí)信號(hào)處理系統(tǒng)中的應(yīng)用
2 嵌入式實(shí)時(shí)操作系統(tǒng)VxWorks
本文引用地址:http://www.ex-cimer.com/article/84776.htmVxWorks是實(shí)時(shí)多任務(wù)操作系統(tǒng),它能在確定的時(shí)間內(nèi)執(zhí)行其功能,并對(duì)外部異步事件作出響應(yīng)。多任務(wù)環(huán)境允許一個(gè)實(shí)時(shí)應(yīng)用劃分為多個(gè)獨(dú)立任務(wù)運(yùn)行,各任務(wù)有各自的線程和系統(tǒng)資源。VxWorks實(shí)時(shí)操作系統(tǒng)由多個(gè)相對(duì)獨(dú)立的目標(biāo)模塊組成,用戶可根據(jù)需要選擇適當(dāng)模塊來(lái)裁剪及配置系統(tǒng),從而有效地保證系統(tǒng)的安全性和可靠性。這樣,通過(guò)目標(biāo)模塊之間的按需組合,可得到許多滿足功能需求的應(yīng)用。
下面介紹VxWorks的技術(shù)特征。
(1)任務(wù)
在VxWorks中,最小的程序運(yùn)行單位稱為任務(wù)(Task)。建立任務(wù)時(shí),要對(duì)其分配一段固定的代碼和數(shù)據(jù)空間。操作系統(tǒng)內(nèi)核通過(guò)任務(wù)控制塊對(duì)它的執(zhí)行、通信、資源等情況進(jìn)行控制。任務(wù)具有就緒、阻塞、掛起和延遲等狀態(tài)。與大多數(shù)嵌入式系統(tǒng)一樣,在VxWorks中,所有任務(wù)存在于統(tǒng)一的線性空間中共享物理內(nèi)存,每個(gè)任務(wù)沒(méi)有自己獨(dú)立的代碼段和堆,只有獨(dú)立的動(dòng)態(tài)棧,任務(wù)中的地址即是真正的物理地址。由于不需要進(jìn)行地址空間映射,所以任務(wù)切換時(shí)的上下文切換(Context Switch)時(shí)間大為減少,從而符合實(shí)時(shí)操作系統(tǒng)快速響應(yīng)的原則。VxWorks的代碼段與堆共享減少了上下文切換時(shí)間,卻帶來(lái)了共享代碼的可重入性問(wèn)題。如一個(gè)函數(shù)被兩個(gè)任務(wù)調(diào)用,當(dāng)其中包含對(duì)全局、靜態(tài)變量等從堆中分配空間的數(shù)據(jù)進(jìn)行訪問(wèn)時(shí),就有可能產(chǎn)生沖突,從而引發(fā)錯(cuò)誤。這個(gè)問(wèn)題在應(yīng)用軟件開(kāi)發(fā)時(shí)要加以注意,其解決方法是使用局部變量(從棧中分配空間)或使用互斥信號(hào)量對(duì)臨界代碼進(jìn)行保護(hù)。
(2)任務(wù)調(diào)度
VxWorks有優(yōu)先級(jí)搶占調(diào)度和時(shí)間片輪轉(zhuǎn)調(diào)度兩種任務(wù)調(diào)度策略。系統(tǒng)共有256 個(gè)優(yōu)先級(jí)。優(yōu)先級(jí)搶占調(diào)度指一個(gè)優(yōu)先級(jí)較低的任務(wù)正在執(zhí)行中,另一個(gè)優(yōu)先級(jí)高的任務(wù)進(jìn)入就緒狀態(tài),則馬上搶占處理器資源,執(zhí)行高優(yōu)先級(jí)任務(wù),直到高優(yōu)先級(jí)任務(wù)釋放處理器(完成、掛起、阻塞等)才繼續(xù)執(zhí)行被中斷的低優(yōu)先級(jí)任務(wù)。優(yōu)先級(jí)搶占調(diào)度可以保證實(shí)時(shí)系統(tǒng)的迅速響應(yīng)特性,但也存在問(wèn)題。當(dāng)系統(tǒng)中存在幾個(gè)相同優(yōu)先級(jí)的任務(wù)時(shí),就會(huì)使單一任務(wù)獨(dú)占處理器直至完成。如果這個(gè)任務(wù)占用太多時(shí)間,則會(huì)影響其他同優(yōu)先級(jí)任務(wù)的運(yùn)行。當(dāng)加入時(shí)間片輪轉(zhuǎn)調(diào)度時(shí),系統(tǒng)給相同優(yōu)先級(jí)的任務(wù)分配相同的一段時(shí)間片,以輪轉(zhuǎn)方式占用CPU。加入了基于優(yōu)先級(jí)的時(shí)間片輪轉(zhuǎn)調(diào)度方式,使不同優(yōu)先級(jí)的任務(wù)間以搶占方式調(diào)度,相同優(yōu)先級(jí)的任務(wù)以時(shí)間片進(jìn)行輪轉(zhuǎn)。
(3)存儲(chǔ)管理
在基本的內(nèi)核中,任務(wù)直接操作線性物理內(nèi)存,不存在虛擬存儲(chǔ)等復(fù)雜的存儲(chǔ)管理策略,這主要是針對(duì)實(shí)時(shí)性考慮的。對(duì)于存在MMU的處理器中,VxWorks也提供支持標(biāo)準(zhǔn)的虛擬存儲(chǔ)區(qū)和共享內(nèi)存(多處理器間共享)組件。這樣任務(wù)是操作虛擬存儲(chǔ),代碼更加安全。
(4)任務(wù)間通信
任務(wù)間存在多種通信形式,內(nèi)核支持各種UNIX的通用手段:信號(hào)量(Semaphore)、消息隊(duì)列(Message Queue)、管道(Pipe)、信號(hào)(Signal)、套接字(Socket)。信號(hào)量主要用于對(duì)臨界資源進(jìn)行互斥保護(hù)及任務(wù)間或中斷與任務(wù)間的同步;消息隊(duì)列多用于消息驅(qū)動(dòng)機(jī)制;管道是基于文件系統(tǒng)實(shí)現(xiàn)的任務(wù)間按先進(jìn)先出方式傳送數(shù)據(jù)的通信方式;信號(hào)相當(dāng)于軟中斷,用于顯示錯(cuò)誤信息;套接字機(jī)制主要用于網(wǎng)絡(luò)通信。當(dāng)任務(wù)間需要大量交換數(shù)據(jù)時(shí),由于VxWorks直接操作物理內(nèi)存,可以直接訪問(wèn)全局存儲(chǔ)區(qū),不需要特別的手段。這與Linux下的共享存儲(chǔ)段申請(qǐng)和Windows中的存儲(chǔ)映射文件方式不同。
(5)中斷
在VxWorks中,所有中斷服務(wù)程序都不屬于任何一個(gè)任務(wù),并且使用同一個(gè)棧進(jìn)行數(shù)據(jù)存儲(chǔ),中斷將不會(huì)引起上下文切換,以實(shí)現(xiàn)高效的中斷響應(yīng)。中斷與各任務(wù)之間可以通過(guò)前面所述的各種手段通信,但是對(duì)中斷服務(wù)程序有一些限制。因?yàn)橹袛嗖淮嬖谏舷挛那袚Q,所以不能調(diào)用可能導(dǎo)致阻塞的資源。例如動(dòng)態(tài)分配內(nèi)存(malloc)、獲取信號(hào)量(semTake)和打印程序(printf)等。中斷資源寶貴,所以中斷服務(wù)程序應(yīng)盡量短小,把運(yùn)算量大和耗時(shí)的工作放在服務(wù)程序外處理。
(6)文件系統(tǒng)
VxWorks支持網(wǎng)絡(luò)文件系統(tǒng)NFS及多種本地文件系統(tǒng),如MS_DosFS、RawFS和RT-11FS,用戶可根據(jù)具體配置選擇。
(7)網(wǎng)絡(luò)支持
Vxworks支持多種物理介質(zhì)的TCP/IP協(xié)議族和幾乎所有常用的基于TCP/IP協(xié)議的應(yīng)用層協(xié)議,如ARP、BOOTP、SLIP和FTP,甚至其啟動(dòng)就是通過(guò)BOOTP或FTP方式取得系統(tǒng)映象文件。
以上簡(jiǎn)單介紹了VxWorks的一些技術(shù)特征,充分反映了實(shí)時(shí)性與嵌入式的密切相關(guān)性。
3 系統(tǒng)軟件設(shè)計(jì)與實(shí)現(xiàn)
VG4軟件開(kāi)發(fā)主要分為操作系統(tǒng)的配置生成和應(yīng)用程序的開(kāi)發(fā)兩部分。操作系統(tǒng)的生成主要是對(duì)BSP的配置和對(duì)VxWorks組件進(jìn)行裁剪。在應(yīng)用程序的開(kāi)發(fā)中,為了滿足實(shí)時(shí)性要求,應(yīng)對(duì)任務(wù)進(jìn)行合理劃分,使程序達(dá)到多任務(wù)并行操作。
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
評(píng)論