![《基于VxWorks嵌入式系統(tǒng)的數(shù)據(jù)通信》課件第6章_第1頁(yè)](http://file4.renrendoc.com/view12/M08/26/09/wKhkGWbNxjuAVClcAADlluoHGxk032.jpg)
![《基于VxWorks嵌入式系統(tǒng)的數(shù)據(jù)通信》課件第6章_第2頁(yè)](http://file4.renrendoc.com/view12/M08/26/09/wKhkGWbNxjuAVClcAADlluoHGxk0322.jpg)
![《基于VxWorks嵌入式系統(tǒng)的數(shù)據(jù)通信》課件第6章_第3頁(yè)](http://file4.renrendoc.com/view12/M08/26/09/wKhkGWbNxjuAVClcAADlluoHGxk0323.jpg)
![《基于VxWorks嵌入式系統(tǒng)的數(shù)據(jù)通信》課件第6章_第4頁(yè)](http://file4.renrendoc.com/view12/M08/26/09/wKhkGWbNxjuAVClcAADlluoHGxk0324.jpg)
![《基于VxWorks嵌入式系統(tǒng)的數(shù)據(jù)通信》課件第6章_第5頁(yè)](http://file4.renrendoc.com/view12/M08/26/09/wKhkGWbNxjuAVClcAADlluoHGxk0325.jpg)
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第6章VxWorks實(shí)時(shí)操作系統(tǒng)與應(yīng)用6.1VxWorks概述6.2VxWorks系統(tǒng)的應(yīng)用機(jī)制6.3VxWorks系統(tǒng)開(kāi)發(fā)方法6.4本章小結(jié)6.1VxWorks概述
VxWorks嵌入式實(shí)時(shí)操作系統(tǒng)自1987年由美國(guó)WindRiver公司成功推出以來(lái),得到了非常廣泛的應(yīng)用。隨著信息技術(shù)的迅猛發(fā)展,嵌入式應(yīng)用滲透到了人們生活的各個(gè)領(lǐng)域。VxWorks以其良好的持續(xù)發(fā)展能力、高性能的內(nèi)核及友好的用戶(hù)開(kāi)發(fā)環(huán)境,在嵌入式實(shí)時(shí)操作系統(tǒng)領(lǐng)域占據(jù)一席之地。同時(shí),VxWorks也是目前軟件工程師采用最多的用于開(kāi)發(fā)實(shí)時(shí)嵌入式系統(tǒng)的商用實(shí)時(shí)操作系統(tǒng),它為程序員提供了高效的實(shí)時(shí)多任務(wù)調(diào)度、中斷管理、實(shí)時(shí)的系統(tǒng)資源及實(shí)時(shí)的任務(wù)間通信。
VxWorks操作系統(tǒng)自1996年進(jìn)入中國(guó)以來(lái),已被廣泛地應(yīng)用于通信、軍事、航空、航天等高精尖及實(shí)時(shí)性要求極高的領(lǐng)域中,是研究嵌入式實(shí)時(shí)操作系統(tǒng)的一個(gè)極好工具。6.1.1VxWorks的特點(diǎn)
VxWorks是一款功能強(qiáng)大、獨(dú)具特色的嵌入式操作系統(tǒng),因此備受開(kāi)發(fā)商的青睞。其主要特點(diǎn)如下:
(1)高性能的微內(nèi)核。VxWorks具有一個(gè)高性能的、標(biāo)準(zhǔn)的嵌入式實(shí)時(shí)操作系統(tǒng)微內(nèi)核Wind。該微微內(nèi)核Wind具有高效的任務(wù)管理功能、任務(wù)之間切換時(shí)間短、中斷延遲小、網(wǎng)絡(luò)流量大的特點(diǎn),能實(shí)現(xiàn)快速多任務(wù)切換、搶占式任務(wù)調(diào)度、多樣化任務(wù)間通信手段等功能。
(2)強(qiáng)實(shí)時(shí)性。VxWorks系統(tǒng)本身的開(kāi)銷(xiāo)很小,進(jìn)程調(diào)度、進(jìn)程間通信、中斷處理等系統(tǒng)公用程序精練而有效,它們?cè)斐傻难舆t很短。VxWorks提供的多任務(wù)機(jī)制中對(duì)任務(wù)的控制采用了優(yōu)先級(jí)搶占和輪轉(zhuǎn)調(diào)度機(jī)制,充分保證了可靠的實(shí)時(shí)性,使同樣的硬件配置能滿(mǎn)足更強(qiáng)的實(shí)時(shí)性要求,為應(yīng)用的開(kāi)發(fā)留下了更大的余地。
(3)可伸縮性。VxWorks利用C/C++語(yǔ)言支持ANSIC標(biāo)準(zhǔn),提供多達(dá)1800個(gè)應(yīng)用程序接口(API),很容易在系統(tǒng)中實(shí)現(xiàn)各種復(fù)雜的數(shù)學(xué)運(yùn)算。
(4)可移植性。VxWorks操作系統(tǒng)在各種CPU平臺(tái)上提供了統(tǒng)一的編程接口和一致的運(yùn)行特性,盡可能地屏蔽了不同CPU之間的底層差異。應(yīng)用程序員可以將盡可能多的精力放在應(yīng)用程序本身,而不必再去關(guān)心系統(tǒng)資源的管理?;赩xWorks操作系統(tǒng)的應(yīng)用程序可以在不同CPU平臺(tái)上輕松移植。
(5)可裁剪性。VxWorks中可裁剪的組件超過(guò)80個(gè),用戶(hù)可以根據(jù)自己的應(yīng)用需求對(duì)VxWorks進(jìn)行配置,產(chǎn)生具有各種不同功能集的操作系統(tǒng)映像。
(6)可靠性。VxWorks經(jīng)過(guò)將近20年市場(chǎng)應(yīng)用的驗(yàn)證,操作系統(tǒng)本身是高度可靠的,而另外構(gòu)造一個(gè)高可靠性的系統(tǒng)也是要由整個(gè)系統(tǒng)設(shè)計(jì)來(lái)保證的,VxWorks操作系統(tǒng)為了支持軟件可靠性設(shè)計(jì),還提供了分布式消息隊(duì)列和異常處理等機(jī)制支持系統(tǒng)的冗余設(shè)計(jì)和容錯(cuò)設(shè)計(jì),因此能夠勝任一些諸如飛行控制這樣的關(guān)鍵性任務(wù)。
(7)具有友好的開(kāi)發(fā)調(diào)試環(huán)境。VxWorks具有一個(gè)友好的集成開(kāi)發(fā)環(huán)境Tornado,它可運(yùn)行在多種主機(jī)上,便于操作、配置和應(yīng)用程序的開(kāi)發(fā)調(diào)試。
(8)較好的兼容性。VxWorks是最早兼容POSIX1003.1b標(biāo)準(zhǔn)的嵌入式實(shí)時(shí)操作系統(tǒng)之一。其良好的兼容性,使它在不同運(yùn)行環(huán)境間可以方便地移植,從而使用戶(hù)在開(kāi)發(fā)和培訓(xùn)方面所做的工作得到保護(hù),減少了開(kāi)發(fā)時(shí)間和費(fèi)用。
(9)支持多種開(kāi)發(fā)和運(yùn)行環(huán)境,幾乎適用于所有的流行目標(biāo)CPU平臺(tái)。6.1.2VxWorks系統(tǒng)的組成及功能
VxWorks操作系統(tǒng)是一個(gè)32位的實(shí)時(shí)操作系統(tǒng),支持32位以上的嵌入式微處理器,包括進(jìn)程管理、存儲(chǔ)管理、設(shè)備管理、文件系統(tǒng)管理、網(wǎng)絡(luò)協(xié)議及系統(tǒng)應(yīng)用等部分。VxWorks實(shí)時(shí)操作系統(tǒng)構(gòu)成如圖6.1中虛線框內(nèi)所示。VxWorks只占用了很小的存儲(chǔ)空間,并可高度裁剪,保證了系統(tǒng)能以較高的效率運(yùn)行。圖6.1VxWorks結(jié)構(gòu)框圖
VxWorks系統(tǒng)主要由以下幾部分組成。
1.高性能的實(shí)時(shí)微內(nèi)核Wind
VxWorks的實(shí)時(shí)微內(nèi)核Wind主要包括多任務(wù)調(diào)度(采用優(yōu)先級(jí)搶占方式)、任務(wù)間的同步和通信機(jī)制及中斷處理、定時(shí)器和內(nèi)存管理機(jī)制。
2.I/O系統(tǒng)
VxWorks提供了一個(gè)快速靈活的I/O系統(tǒng),包括UNIX標(biāo)準(zhǔn)的緩沖I/O和POSIX標(biāo)準(zhǔn)的異步I/O。VxWorks的I/O系統(tǒng)主要包括字符設(shè)備、塊設(shè)備、虛擬設(shè)備(管道、Socket)、監(jiān)控設(shè)備和網(wǎng)絡(luò)設(shè)備等。
3.文件系統(tǒng)
VxWorks針對(duì)不同的設(shè)備提供了多種文件系統(tǒng),支持外存儲(chǔ)介質(zhì)(磁盤(pán)、磁帶、光盤(pán)等)的訪問(wèn)。在內(nèi)部實(shí)現(xiàn)上,VxWorks的文件系統(tǒng)通過(guò)標(biāo)準(zhǔn)接口來(lái)連接,使其能夠方便地在同類(lèi)設(shè)備間移植。
4.板級(jí)支持包BSP
BSP為VxWorks提供了硬件環(huán)境的接口,使應(yīng)用程序編碼在很大程度上與目標(biāo)板的硬件和結(jié)構(gòu)無(wú)關(guān)。它包括硬件初始化、中斷處理、定時(shí)器、內(nèi)存地址映射、內(nèi)存分配等。
5.網(wǎng)絡(luò)系統(tǒng)
VxWorks的網(wǎng)絡(luò)系統(tǒng)由標(biāo)準(zhǔn)的網(wǎng)絡(luò)協(xié)議部分組成,即物理層、數(shù)據(jù)鏈路層、IP層、TCP層、應(yīng)用層,基本上是移植了BSD4.4Unix的TCP/IP協(xié)議棧,僅在實(shí)時(shí)性上進(jìn)行了較大的修改。為了增強(qiáng)系統(tǒng)的應(yīng)用性和可移植性,在新版的VxWorks中增加了一個(gè)稱(chēng)為MUX層的接口層。VxWorks的網(wǎng)絡(luò)系統(tǒng)結(jié)構(gòu)如圖6.2所示。
6.虛擬內(nèi)存(VxVMI)與共享內(nèi)存(VxMP)
VxVMI為帶有MMU(內(nèi)存管理單元)的目標(biāo)板提供了虛擬內(nèi)存機(jī)制,主要用于對(duì)指定內(nèi)存區(qū)的保護(hù)。VxMP主要用于多處理器上運(yùn)行的任務(wù)之間的信號(hào)量共享、消息隊(duì)列和內(nèi)存塊管理。圖6.2VxWorks的網(wǎng)絡(luò)系統(tǒng)結(jié)構(gòu)
7.目標(biāo)代理目標(biāo)代理遵循WDB(WindDebug)協(xié)議,允許目標(biāo)機(jī)與主機(jī)上的Tornado開(kāi)發(fā)工具相連,使用戶(hù)可以遠(yuǎn)程調(diào)試應(yīng)用程序。
8.工具庫(kù)
VxWorks向用戶(hù)提供了豐富的系統(tǒng)調(diào)用,包括中斷處理、定時(shí)器、消息注冊(cè)、內(nèi)存分配、字符掃描、線緩沖和環(huán)緩沖管理及ANSIC標(biāo)準(zhǔn)。
9.VxWorks仿真器(VxSim)
VxSim可模擬VxWorks目標(biāo)機(jī)的運(yùn)行,用于應(yīng)用系統(tǒng)的分析。6.2VxWorks系統(tǒng)的應(yīng)用機(jī)制6.2.1任務(wù)管理機(jī)制
1.VxWorks任務(wù)任務(wù)是代碼運(yùn)行的一個(gè)映像,從系統(tǒng)的角度看,任務(wù)是競(jìng)爭(zhēng)系統(tǒng)資源的最小運(yùn)行單位。任務(wù)可以使用或者等待CPU、I/O設(shè)備及內(nèi)存空間等系統(tǒng)資源,并獨(dú)立于其他的任務(wù),與它們一起并發(fā)運(yùn)行。在VxWorks操作系統(tǒng)中,各功能模塊均以任務(wù)的方式被系統(tǒng)調(diào)用。任務(wù)是指能夠獨(dú)立執(zhí)行的一個(gè)功能或處理過(guò)程,是操作系統(tǒng)調(diào)度的基本單位。任務(wù)狀態(tài)反映任務(wù)當(dāng)前在系統(tǒng)所處的情形,一般包括五種狀態(tài):就緒、運(yùn)行、睡眠、掛起和堵塞。系統(tǒng)根據(jù)任務(wù)的優(yōu)先級(jí)別安排CPU時(shí)間,對(duì)不同優(yōu)先級(jí)任務(wù)采用搶占式任務(wù)調(diào)度算法,對(duì)相同優(yōu)先級(jí)任務(wù)采用輪詢(xún)式調(diào)度算法。在對(duì)任務(wù)進(jìn)行切換時(shí),通過(guò)任務(wù)上下文保存任務(wù)的當(dāng)前狀態(tài)。任務(wù)創(chuàng)建的時(shí)候,一般要指定一個(gè)名字,也就是任務(wù)名。VxWorks操作系統(tǒng)返回一個(gè)長(zhǎng)度為4字節(jié)并指向任務(wù)數(shù)據(jù)結(jié)構(gòu)的任務(wù)ID號(hào),大多數(shù)VxWorks操作系統(tǒng)程序使用任務(wù)ID號(hào)來(lái)定位某個(gè)任務(wù),其中約定任務(wù)ID號(hào)為0值時(shí)表示任務(wù)調(diào)用。
VxWorks操作系統(tǒng)不需要唯一的任務(wù)名,但為了避免混亂,建議使用惟一的任務(wù)名。為了應(yīng)用好開(kāi)發(fā)工具Tornado,任務(wù)名不應(yīng)與全局函數(shù)名和程序名沖突。對(duì)任務(wù)的操作使用taskLib中的庫(kù)函數(shù)。taskLib中的庫(kù)函數(shù)見(jiàn)表6.1。表6.1VxWorks常用的任務(wù)處理庫(kù)函數(shù)
2.任務(wù)調(diào)度多任務(wù)系統(tǒng)需采用一種調(diào)度算法來(lái)為就緒態(tài)隊(duì)列中的任務(wù)分配CPU。Wind內(nèi)核采用基于優(yōu)先級(jí)的搶占式任務(wù)調(diào)度算法作為它的默認(rèn)調(diào)度策略,同時(shí)也提供了輪詢(xún)式調(diào)度算法。
1)基于優(yōu)先級(jí)的搶占式任務(wù)調(diào)度使用基于優(yōu)先級(jí)的搶占式任務(wù)調(diào)度算法即當(dāng)一個(gè)新任務(wù)優(yōu)先級(jí)高于系統(tǒng)當(dāng)前執(zhí)行任務(wù)的優(yōu)先級(jí)時(shí),它將搶占CPU而執(zhí)行。這種調(diào)度方法為每個(gè)任務(wù)指定不同的優(yōu)先級(jí)。沒(méi)有處于掛起或休眠態(tài)的最高優(yōu)先級(jí)任務(wù)將一直運(yùn)行下去。當(dāng)更高優(yōu)先級(jí)的任務(wù)由就緒態(tài)進(jìn)入運(yùn)行態(tài)時(shí),系統(tǒng)內(nèi)核立即保存當(dāng)前任務(wù)的上下文,切換到更高優(yōu)先級(jí)的任務(wù)。
Wind內(nèi)核優(yōu)先級(jí)劃分為256級(jí)(0~255)。優(yōu)先級(jí)0為最高優(yōu)先級(jí),優(yōu)先級(jí)255為最低優(yōu)先級(jí)。當(dāng)任務(wù)被創(chuàng)建時(shí),系統(tǒng)根據(jù)給定值分配任務(wù)優(yōu)先級(jí)。然而,優(yōu)先級(jí)也可以是動(dòng)態(tài)的,能在系統(tǒng)運(yùn)行時(shí)由用戶(hù)通過(guò)系統(tǒng)調(diào)用taskPrioritySet()來(lái)加以改變。在圖6.3中,Task1、Task2、Task3三個(gè)任務(wù)的優(yōu)先級(jí)依次從低到高,任務(wù)Task?1最先運(yùn)行,但它被Task?2和Task?3打斷,因此最后運(yùn)行完畢。圖6.3搶占式任務(wù)調(diào)度算法
2)輪詢(xún)式調(diào)度當(dāng)所有相同優(yōu)先級(jí)的任務(wù)處于就緒狀態(tài)時(shí),輪詢(xún)式調(diào)度算法傾向于平均使用CPU。輪詢(xún)式調(diào)度算法對(duì)于所有相同優(yōu)先級(jí)的任務(wù),通過(guò)時(shí)間片獲得相同的CPU處理時(shí)間。在一組相同優(yōu)先級(jí)的任務(wù)里,每個(gè)任務(wù)將在一個(gè)規(guī)定的時(shí)間間隔或時(shí)間片內(nèi)執(zhí)行。在任務(wù)的執(zhí)行時(shí)間片內(nèi),如果該任務(wù)被阻塞或被更高優(yōu)先級(jí)的任務(wù)搶占,那么其時(shí)間片數(shù)值將被保存,并且在其重新執(zhí)行時(shí)恢復(fù)計(jì)數(shù)。對(duì)于搶占情況,當(dāng)搶占的高優(yōu)先級(jí)任務(wù)完成執(zhí)行后,只要沒(méi)有其他更高優(yōu)先級(jí)任務(wù)搶占執(zhí)行,那么原任務(wù)將繼續(xù)執(zhí)行。而對(duì)于任務(wù)阻塞情況,將根據(jù)任務(wù)優(yōu)先級(jí)將其放在隊(duì)列尾部。圖6.4為三個(gè)相同優(yōu)先級(jí)任務(wù)Task1、Task2、Task3的輪詢(xún)式調(diào)度。任務(wù)Task2被一個(gè)更高優(yōu)先級(jí)的任務(wù)Task4搶占。當(dāng)Task4執(zhí)行結(jié)束后,Task2將在其中止處繼續(xù)執(zhí)行。圖6.4輪詢(xún)式調(diào)度算法6.2.2中斷處理中斷處理過(guò)程是軟件和硬件的綜合。當(dāng)CPU接收到來(lái)自外設(shè)的中斷信號(hào)時(shí),便立即停止當(dāng)前正在執(zhí)行的命令,保存現(xiàn)場(chǎng),并轉(zhuǎn)而執(zhí)行指定的中斷服務(wù)程序(ISR)。在中斷服務(wù)程序執(zhí)行結(jié)束后,CPU再次恢復(fù)現(xiàn)場(chǎng),繼續(xù)執(zhí)行剛才被打斷的工作。CPU對(duì)于中斷的響應(yīng)和處理過(guò)程基本上是一致的。在指令執(zhí)行過(guò)程中,CPU會(huì)適時(shí)掃描、查詢(xún)有無(wú)中斷請(qǐng)求。在VxWorks中,將信號(hào)機(jī)制(Signal)稱(chēng)為“軟中斷”,而將硬件外設(shè)產(chǎn)生的中斷稱(chēng)為“硬中斷”。為了獲得盡可能快的響應(yīng)時(shí)間,VxWorks的中斷處理程序運(yùn)行在特定的上下文中不涉及任何任務(wù)上下文的切換。中斷服務(wù)程序不是在規(guī)則的任務(wù)上下文中運(yùn)行,這種處理方式給VxWorks帶來(lái)了快速響應(yīng)時(shí)間,同時(shí)也給中斷服務(wù)程序帶來(lái)如下約束:
(1)不能調(diào)用可能引起調(diào)用阻塞的函數(shù)。例如,ISR不能取信號(hào)量,因?yàn)橐坏┬盘?hào)量不能獲得,內(nèi)核就會(huì)試圖將當(dāng)前調(diào)用任務(wù)掛起,而這是沒(méi)法做到的。
(2)不能通過(guò)VxWorks驅(qū)動(dòng)執(zhí)行I/O口。除管道驅(qū)動(dòng)程序(因?yàn)槠湓O(shè)計(jì)允許由ISR進(jìn)行寫(xiě)操作)外,大部分的驅(qū)動(dòng)程序的實(shí)現(xiàn)都要求有任務(wù)上下文,因?yàn)樗鼈兛赡芤枞{(diào)用任務(wù)以等待設(shè)備完成傳輸。
(3)不能調(diào)用使用浮動(dòng)協(xié)處理器的函數(shù)。表6.2中列出了所有ISR可以調(diào)用的函數(shù)。表6.2ISR可以調(diào)用的函數(shù)
VxWorks系統(tǒng)為中斷處理提供了API,主要集中在庫(kù)intLib和intArchLib()中,部分常用的設(shè)置中斷函數(shù)如表6.3所示。中斷事件不是孤立存在的,通常涉及到任務(wù)級(jí)代碼,因此必須提供中斷服務(wù)程序與一般任務(wù)的通信機(jī)制。VxWorks提供的中斷服務(wù)程序與任務(wù)的通信機(jī)制有信號(hào)量、消息列隊(duì)、管道及網(wǎng)絡(luò)套接字等。信號(hào)量是諸多通信機(jī)制中常用的方法,通過(guò)中斷服務(wù)程序釋放某一信號(hào)量,相應(yīng)的任務(wù)等待該信號(hào)量,從而完成一次通信,如圖6.5所示。表6.3設(shè)置中斷函數(shù)列表圖6.5中斷處理示意圖6.2.3內(nèi)存管理嵌入式系統(tǒng)中,將程序代碼、數(shù)據(jù)和系統(tǒng)信息等所占用的內(nèi)存之外的部分用于內(nèi)存的動(dòng)態(tài)分配,這個(gè)區(qū)域稱(chēng)為堆。內(nèi)存管理主要是管理堆內(nèi)存的動(dòng)態(tài)分配和回收。通常,內(nèi)存管理需要保存一些堆的信息,包括堆的起始地址、大小及分配表。在嵌入式VxWorks系統(tǒng)中,內(nèi)存管理是由操作系統(tǒng)來(lái)完成的。內(nèi)存管理的工作主要是監(jiān)控哪些內(nèi)存區(qū)域已被使用,哪些是空閑區(qū)域,在任務(wù)需要時(shí)為其分配內(nèi)存空間,使用完畢之后釋放空間。對(duì)于實(shí)時(shí)操作系統(tǒng)來(lái)說(shuō),內(nèi)存管理必須是高效的,開(kāi)銷(xiāo)必須是可預(yù)見(jiàn)的。一種解決方法是預(yù)先分配內(nèi)存,即在系統(tǒng)構(gòu)造或編譯時(shí)為每個(gè)任務(wù)指定其使用的內(nèi)存空間。
VxWorks系統(tǒng)的基本內(nèi)存管理是采用平板模式,所有進(jìn)程直接尋址絕對(duì)物理地址,在進(jìn)程間可以共享代碼段、數(shù)據(jù)段和BSS段。VxWorks系統(tǒng)中的內(nèi)存布局如圖6.6所示。在VxWorks系統(tǒng)中由特定的宏定義和系統(tǒng)函數(shù)獲得標(biāo)準(zhǔn)的系統(tǒng)內(nèi)存地址,分別標(biāo)志系統(tǒng)物理內(nèi)存的起始地址、VxWorks的加載地址、系統(tǒng)內(nèi)存區(qū)的起始地址、用戶(hù)保留內(nèi)存的起始地址以及物理內(nèi)存的容量。可以看出,在系統(tǒng)內(nèi)存區(qū)中有一段是分配給調(diào)試代理的,專(zhuān)門(mén)用于Host與Target間調(diào)試信息的傳遞和處理,而用戶(hù)任務(wù)的任務(wù)堆棧、動(dòng)態(tài)內(nèi)存分配則都來(lái)自于剩余的系統(tǒng)內(nèi)存區(qū)。內(nèi)存管理模塊運(yùn)行在用戶(hù)態(tài)。圖6.6VxWorks系統(tǒng)中的內(nèi)存布局對(duì)信號(hào)量的操作是原子級(jí)的,不可打斷,分配時(shí)大量的時(shí)間花費(fèi)在查找鏈表的過(guò)程中,但這不會(huì)影響到系統(tǒng)效率,因?yàn)檫@個(gè)過(guò)程是發(fā)生在任務(wù)的上下文中,是可以被其他高優(yōu)先級(jí)的任務(wù)所搶占的。整個(gè)內(nèi)存分配發(fā)生在內(nèi)核級(jí),此時(shí)任務(wù)搶占被禁止,如果高優(yōu)先級(jí)的任務(wù)在此時(shí)變?yōu)榫途w態(tài),它就必須等待直到內(nèi)核為低優(yōu)先級(jí)的任務(wù)完成內(nèi)存分配。有些操作系統(tǒng)甚至在這段時(shí)間禁止中斷。這必定影響系統(tǒng)的實(shí)時(shí)性和效率。內(nèi)存分配采用First-Fit(最先匹配)法,在空閑鏈表中查找內(nèi)存塊,從高地址開(kāi)始,當(dāng)找到第一個(gè)滿(mǎn)足分配請(qǐng)求的空閑塊時(shí)就分配所需的內(nèi)存,并修改該空閑塊的大小??臻e塊的剩余部分仍然保留在空閑鏈表中。但在實(shí)時(shí)系統(tǒng)任務(wù)執(zhí)行中,有時(shí)在內(nèi)存分配時(shí)對(duì)鏈表查詢(xún)的時(shí)間也是不可忍受的。一般情況下,我們采用MessageQueue來(lái)代替malloc(),在系統(tǒng)啟動(dòng)之初就分配好可能用到的內(nèi)存塊,并將它們放入消息隊(duì)列,那么,在以后對(duì)實(shí)時(shí)要求很高的場(chǎng)合中,可以直接從消息隊(duì)列中獲得空閑內(nèi)存塊的指針,避免了查找時(shí)間的耗費(fèi)。內(nèi)存RAM包括動(dòng)態(tài)存儲(chǔ)器DRAW和靜態(tài)存儲(chǔ)器SRAW,SRAM主要用作高速緩存Cache。Cache是一種小容量的高速緩沖存儲(chǔ)器,設(shè)置在CPU和主存間,存放主存最近被CPU訪問(wèn)的內(nèi)容,從而提高了CPU存取的速度。6.2.4I/O與文件系統(tǒng)
VxWorks操作系統(tǒng)提供的I/O系統(tǒng)和文件系統(tǒng),為應(yīng)用層提供了標(biāo)準(zhǔn)的設(shè)備操作接口,并以最大程度屏蔽了應(yīng)用層軟件對(duì)硬件的相關(guān)性。
1.I/O系統(tǒng)
VxWorks的I/O系統(tǒng)適用于實(shí)時(shí)應(yīng)用,具有高度可裁剪性。VxWorks的I/O系統(tǒng)自上而下分為三層:I/O子系統(tǒng)、驅(qū)動(dòng)和設(shè)備,如圖6.7所示。
I/O子系統(tǒng)是VxWorksI/O系統(tǒng)的一個(gè)子層,它為應(yīng)用程序的I/O操作定義一組標(biāo)準(zhǔn)函數(shù),同時(shí)要求下層的設(shè)備驅(qū)動(dòng)支持這個(gè)函數(shù)集。圖6.7I/O系統(tǒng)層次圖在許多系統(tǒng)中,設(shè)備驅(qū)動(dòng)只提供讀/寫(xiě)等函數(shù),如果要實(shí)現(xiàn)某種協(xié)議,如字符設(shè)備的通信協(xié)議,則是在I/O子系統(tǒng)中完成的。這種結(jié)構(gòu)雖然簡(jiǎn)化了驅(qū)動(dòng)程序的實(shí)現(xiàn),但可裁剪性不好,不適于實(shí)時(shí)系統(tǒng)。在VxWorks中,I/O子系統(tǒng)通過(guò)查找文件描述符表、驅(qū)動(dòng)表和設(shè)備鏈,將用戶(hù)請(qǐng)求轉(zhuǎn)發(fā)給設(shè)備驅(qū)動(dòng),由設(shè)備驅(qū)動(dòng)完成I/O請(qǐng)求的所有相關(guān)操作。這樣,所有I/O操作在驅(qū)動(dòng)中完成,如果需要使用某個(gè)協(xié)議,也是在驅(qū)動(dòng)中實(shí)現(xiàn)。同時(shí),VxWorks提供標(biāo)準(zhǔn)協(xié)議的庫(kù)函數(shù)以便設(shè)備驅(qū)動(dòng)的開(kāi)發(fā)者實(shí)現(xiàn)高層協(xié)議。
VxWorks的I/O系統(tǒng)提供了簡(jiǎn)單、統(tǒng)一、與設(shè)備無(wú)關(guān)的接口,其內(nèi)部的獨(dú)特設(shè)計(jì)使它比大多數(shù)其他I/O系統(tǒng)更快捷、更靈活。它支持以下設(shè)備:
(1)面向字符的設(shè)備,如UART。
(2)隨機(jī)訪問(wèn)的塊設(shè)備,如磁盤(pán)。
(3)虛擬設(shè)備,如管道、Socket。
(4)監(jiān)控和控制設(shè)備,如數(shù)字/模擬I/O設(shè)備。
(5)網(wǎng)絡(luò)設(shè)備。
2.文件系統(tǒng)文件系統(tǒng)是一種塊I/O操作設(shè)備。VxWorks中的I/O系統(tǒng)可以包含多個(gè)不同類(lèi)型的文件系統(tǒng),用來(lái)協(xié)助完成非字符設(shè)備的I/O操作。實(shí)現(xiàn)文件系統(tǒng)要添加一些該文件系統(tǒng)特有的設(shè)備訪問(wèn)例程,還要有塊I/O的驅(qū)動(dòng)程序。通過(guò)文件系統(tǒng)訪問(wèn)設(shè)備具有抽象性好的優(yōu)點(diǎn)。
VxWorks提供兩個(gè)本地文件系統(tǒng):dosFs和rt11Fs,它們分別與MS-DOS和RT-11文件系統(tǒng)相兼容,適用于塊設(shè)備的實(shí)時(shí)應(yīng)用。VxWorks提供相應(yīng)的庫(kù)dosFsLib和rt11FsLib,此外還為其他類(lèi)型的設(shè)備提供了相應(yīng)的文件系統(tǒng),見(jiàn)表6.4。表6.4VxWorks文件系統(tǒng)6.3VxWorks系統(tǒng)開(kāi)發(fā)方法
VxWorks系統(tǒng)是專(zhuān)門(mén)為嵌入式實(shí)時(shí)應(yīng)用開(kāi)發(fā)設(shè)計(jì)的模塊化實(shí)時(shí)操作系統(tǒng)?;赩xWorks系統(tǒng)的特性,在開(kāi)發(fā)設(shè)計(jì)實(shí)時(shí)多任務(wù)軟件時(shí)要特別注重以下問(wèn)題。6.3.1通信機(jī)制的選擇本機(jī)之間的通信機(jī)制比較適用的是信號(hào)量和消息隊(duì)列。在以下情況下可以考慮使用信號(hào)量:
(1)任務(wù)之間的同步。
(2)?ISR與任務(wù)之間的同步,要求任務(wù)很快響應(yīng)。
(3)互斥臨界區(qū)的操作。
(4)兩任務(wù)之間傳遞較大的數(shù)據(jù)塊,使用信號(hào)量來(lái)保護(hù)全局共享結(jié)構(gòu)。在以下情況下可以考慮使用消息隊(duì)列:
(1)兩個(gè)任務(wù)之間通信比較頻繁,并且每一次的數(shù)據(jù)量較小。
(2)多個(gè)任務(wù)寫(xiě),一個(gè)任務(wù)讀。
(3)一個(gè)任務(wù)不僅與ISR進(jìn)行通信,而且還與其他任務(wù)進(jìn)行通信。
(4)強(qiáng)調(diào)優(yōu)先級(jí),必要時(shí)需要緊急傳送數(shù)據(jù)。一般而言,可以用消息隊(duì)列來(lái)代替管道。管道中的消息按FIFO排列,無(wú)法實(shí)現(xiàn)緊急數(shù)據(jù)傳輸;另外,管道對(duì)于高優(yōu)先級(jí)的任務(wù)和低優(yōu)先級(jí)的任務(wù)同等對(duì)待,無(wú)法減少高優(yōu)先級(jí)任務(wù)的響應(yīng)時(shí)間。當(dāng)一個(gè)任務(wù)需要同時(shí)接收來(lái)自其他任務(wù)、網(wǎng)絡(luò)接口、串行口的數(shù)據(jù)時(shí),可以使用管道來(lái)簡(jiǎn)化編程。
Socket主要用于網(wǎng)際通信和本機(jī)任務(wù)之間通信效率比較低的場(chǎng)合。多個(gè)任務(wù)存取共享的數(shù)據(jù)時(shí),一般使用信號(hào)量機(jī)制。
VxWorks下的Signal主要用于錯(cuò)誤和異常處理,一般不用于任務(wù)之間的通信,這主要是因?yàn)樾盘?hào)的開(kāi)銷(xiāo)太大,以及帶寬和信息量非常有限。Signal可用于事件的通知,不適用于復(fù)雜的交互。6.3.2正確劃分任務(wù)程序在CPU中以任務(wù)的方式運(yùn)行,故要將系統(tǒng)的處理框圖轉(zhuǎn)化為多任務(wù)流程圖,對(duì)處理進(jìn)行任務(wù)劃分。如果任務(wù)太多,必然增加系統(tǒng)任務(wù)切換的開(kāi)銷(xiāo);如果任務(wù)太少,系統(tǒng)的并行度就降低了,實(shí)時(shí)性就比較差。因此要對(duì)任務(wù)進(jìn)行正確合理的任務(wù)劃分。
1.合理的任務(wù)劃分考慮系統(tǒng)內(nèi)功能的異步性,在將一個(gè)軟件系統(tǒng)分解成并行任務(wù)時(shí),可遵循以下原則:
(1)在系統(tǒng)中創(chuàng)建多個(gè)與I/O設(shè)備相當(dāng)數(shù)目的I/O任務(wù)。
(2)將在相同周期內(nèi)執(zhí)行的各功能組成一個(gè)任務(wù)。
(3)將緊密相關(guān)的功能組組成一個(gè)任務(wù),使各功能共享資源或相同時(shí)間的驅(qū)動(dòng),減少了系統(tǒng)的開(kāi)銷(xiāo)。
(4)將有最后時(shí)間期限(Deadline)的功能分離出來(lái),組成獨(dú)立運(yùn)行的任務(wù)。
(5)當(dāng)計(jì)算功能占用CPU的時(shí)間較多時(shí),捆綁計(jì)算功能任務(wù),賦予它們較低優(yōu)先級(jí),運(yùn)行時(shí)能被高優(yōu)先級(jí)的任務(wù)搶占,消耗CPU的剩余時(shí)間。
2.錯(cuò)誤的任務(wù)劃分和改進(jìn)方法
(1)任務(wù)的掛起和恢復(fù)太頻繁,這是由于任務(wù)劃分過(guò)細(xì)造成的。改進(jìn)的方法是將任務(wù)變成子程序使用。
(2)事件發(fā)生時(shí)調(diào)用子程序,這是由于任務(wù)劃分太粗造成的。改進(jìn)的方法是將子程序劃分為任務(wù)。
(3)得到消息后,又立即檢查另外的信息。改進(jìn)的方法是不要使用輪詢(xún)的方式,直接使用時(shí)間驅(qū)動(dòng)方式。6.3.3合理分配動(dòng)態(tài)內(nèi)存
VxWorks為用戶(hù)提供了兩種內(nèi)存區(qū)域,即Region、Partition。Region是變長(zhǎng)的內(nèi)存區(qū),用戶(hù)可以從創(chuàng)建的Region中分配Segment,其特點(diǎn)是容易產(chǎn)生碎片,但靈活、不浪費(fèi)。?Partition是定長(zhǎng)的內(nèi)存區(qū),用戶(hù)可以從創(chuàng)建的Partition中分配Buffer,其特點(diǎn)是無(wú)碎片、效率高,但浪費(fèi)。衡量算法的指標(biāo)是碎片和速度問(wèn)題。所謂碎片是指內(nèi)存中的空間大于被申請(qǐng)的空間,但是沒(méi)有一塊單獨(dú)的內(nèi)存空間大于被申請(qǐng)的空間。我們要求內(nèi)存分配算法使碎片盡量少,執(zhí)行速度盡量快。表6.5中比較了三種內(nèi)存分配算法,其中最大算法的執(zhí)行速度最快、碎片最少。但VxWorks采用的是最先算法。表6.5三種內(nèi)存分配算法的比較
VxWorks沒(méi)有清除碎片的功能,因?yàn)榍度胧綄?shí)時(shí)系統(tǒng)找不到一個(gè)合適的時(shí)間把正在運(yùn)行的程序暫停下來(lái)清理內(nèi)存,所以在實(shí)時(shí)系統(tǒng)的設(shè)計(jì)中只能是避免碎片。影響碎片的因素有:Region的大小,Region越大則碎片越少;任務(wù)占用Segment的時(shí)間,占用的時(shí)間越短則碎片越少;Segment之間的準(zhǔn)方差,Segment越規(guī)則則碎片越少。6.3.4防止任務(wù)異常操作系統(tǒng)發(fā)生死鎖、饑餓或者優(yōu)先級(jí)反轉(zhuǎn)都會(huì)讓任務(wù)處于異常狀態(tài)。
1.死鎖死鎖是指多個(gè)任務(wù)因?yàn)榈却M(jìn)入對(duì)方占據(jù)的臨界區(qū)而導(dǎo)致不可自行恢復(fù)的運(yùn)行終止。在程序設(shè)計(jì)過(guò)程中要注意對(duì)死鎖的預(yù)防,一個(gè)是盡量使互斥資源在相同優(yōu)先級(jí)任務(wù)中
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 部編版八年級(jí)道德與法治上冊(cè)聽(tīng)課評(píng)課記錄《7.2服務(wù)社會(huì)》
- 2024-2025學(xué)年八年級(jí)物理全冊(cè)1.3站在巨人的肩膀上練習(xí)含解析新版滬科版
- 技術(shù)員年度工作規(guī)劃
- 公司行政部門(mén)個(gè)人工作計(jì)劃
- 年度幼兒教師個(gè)人工作計(jì)劃
- 物業(yè)客服部工作計(jì)劃范本
- 可調(diào)單價(jià)合同范本
- 知識(shí)產(chǎn)權(quán)授權(quán)協(xié)議書(shū)范本
- 商業(yè)店鋪?zhàn)赓U合同范本
- 紅河衛(wèi)生職業(yè)學(xué)院《物理化學(xué)(II)》2023-2024學(xué)年第二學(xué)期期末試卷
- 客戶(hù)服務(wù)中心操作手冊(cè)
- 家庭火災(zāi)疏散逃生預(yù)案
- 蘇教版2023年小學(xué)四年級(jí)數(shù)學(xué)下冊(cè)教學(xué)計(jì)劃+教學(xué)進(jìn)度表
- 小學(xué)作文指導(dǎo)《難忘的一件事》課件
- 量子力學(xué)課件1-2章-波函數(shù)-定態(tài)薛定諤方程
- 最新變態(tài)心理學(xué)課件
- 《民航飛機(jī)自動(dòng)飛行控制系統(tǒng)》課件合集
- 工程洽商記錄表格
- 2021最新版三年級(jí)下冊(cè)生命-生態(tài)-安全教案
- 【自考練習(xí)題】石家莊學(xué)院概率論與數(shù)理統(tǒng)計(jì)真題匯總(附答案解析)
- 市政管道頂管施工技術(shù)的發(fā)展歷史(45頁(yè))
評(píng)論
0/150
提交評(píng)論