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