當前嵌入式系統已無(wú)所不在,應用于各行各業(yè)。在嵌入式系統中,有一類(lèi)很重要的成員,即實(shí)時(shí)嵌入式系統,其中,WindRiver公司的VxWorks是目前軟件工程師采用最多的,用于開(kāi)發(fā)實(shí)時(shí)嵌入式系統的商用實(shí)時(shí)嵌入式操作系統,以其可靠性及強大的工具支持著(zhù)稱(chēng)。很多程序開(kāi)發(fā)人員由Windows編程轉向嵌入式編程時(shí)感到困難,因為在Windows的API函數中有不少操作系統內核機制都進(jìn)行了封裝(如信號量、消息等),往往不必了解這些概念,而優(yōu)秀的VxWorks編程者則需要更加了解與內核相關(guān)的概念。下面通過(guò)現實(shí)生活中的一些事例進(jìn)行類(lèi)比來(lái)說(shuō)明這些概念,即使是初學(xué)者也能輕松領(lǐng)悟。 1 實(shí)時(shí)性與非實(shí)時(shí)性 VxWorks作為實(shí)時(shí)操作系統,實(shí)時(shí)性指的是對外部事件的響應在規定的時(shí)間內完成。舉個(gè)工作中的例子,有一解決,因而當接到投訴時(shí),你馬上去往客戶(hù)處交涉并解決問(wèn)題。另一種情況:公司在收到客戶(hù)投訴后,并不馬上解決,而是在一段時(shí)間后匯總并根據客戶(hù)所在地集中解決。第一種情況就好比實(shí)時(shí)系統,在規定時(shí)間內對外部事件進(jìn)行響應;第二種情況好比非實(shí)時(shí)系統。很可能出現的一種情形就是,剛解決好一個(gè)客戶(hù)的問(wèn)題后回公司,得知又一位同一地點(diǎn)的客戶(hù)要求你去,因此懊悔不已,接到投訴后不如不馬上行動(dòng)。同樣,非實(shí)時(shí)系統也需要付出額外的代價(jià),因此不能簡(jiǎn)單地說(shuō)哪種系統效率更高或性能更好。第一種公司制度更讓客戶(hù)滿(mǎn)意,因為它能在規定時(shí)間內給客戶(hù)反饋,雖然效率不一定最高。具體選用哪一種管理制度應該結合實(shí)際經(jīng)營(yíng)情況而定,同理,實(shí)時(shí)系統也有它適合的應用。比如汽車(chē)控制設備、國防系統中,不在預定時(shí)間內對外部隨機事件作出響應是很不合理的;而在Windows系統中,鼠標點(diǎn)擊在系統繁忙時(shí)可能好幾秒才響應過(guò)來(lái)。 2 多任務(wù)與單任務(wù) 多任務(wù)好比一個(gè)團隊的多個(gè)人分工合作完成一項工作,而單任務(wù)則是一個(gè)人獨立完成一項工作。假如這項工作就是去郵局郵寄一份文件,那么一個(gè)人足以勝任,多個(gè)人反而顯得多余。假如這項工作包括去郵局郵寄文件,收取客戶(hù)Email并及時(shí)回復,接聽(tīng)電話(huà),那么一個(gè)人就顯得雜亂無(wú)章,不能及時(shí)回復郵件,或錯過(guò)電話(huà)。如果安排兩個(gè)人完成此項工作就容易得多,一人去郵寄文件,一人留單位接聽(tīng)電話(huà)并收取Email。從程序設計角度來(lái)說(shuō),單任務(wù)或多任務(wù)都沒(méi)有絕對優(yōu)勢,因此應用程序是采用何種任務(wù)劃分,需根據具體應用而定。 還有一個(gè)問(wèn)題,畢竟CPU資源是固定的,如果同時(shí)運行多個(gè)任務(wù),那么每個(gè)任務(wù)的處理能力都降低了,整體性能是否提高了呢?假如需要將兩個(gè)文件從A地分別送往B地和C地,如圖1所示。一個(gè)行走速度極快的運動(dòng)員從A地到B地需要10min,交接文件需10min,從B地返回A地需10min,再從A地到C地需15min,交接文件需10min,總共花費55min。而兩個(gè)行走較慢的人共同完成該任務(wù),一人從A地到B地需20min,交接文件10min,30min完成;另一人從A地往C地需30min,交接文件需10min,總共也就40min。交接文件時(shí)間越長(cháng),兩個(gè)人的優(yōu)勢越明顯。在程序中等待慢設備的應答信號就是這種情況,不能將整個(gè)CPU的時(shí)間花費在等待中。但假如任務(wù)就是將文件從A送到B,那么多個(gè)行走慢的人就不如一個(gè)速度快的人了。 3 信號量(semaphore) VxWorks系統中,信號量包括可斥信號量、二進(jìn)制信號量和計數信號量,其他操作系統基本上也是如此。按作用劃分為同步和互斥機制。通過(guò)信號量的同步和互斥機制可以方便、高斂地協(xié)調任務(wù);コ夥绞降墓δ苁遣煌蝿(wù)可以利用信號量互斥地訪(fǎng)問(wèn)臨界資源,F實(shí)生活中也是如此,比如單位會(huì )議室只有一個(gè),可能有多個(gè)部門(mén)使用會(huì )議室,單位采取如下管理方式:使用前向負責人申請,若會(huì )議室空閑就可以使用,會(huì )議結束后通知負責人;否則,等待負責人通知。這里的會(huì )議室就好比臨界資源,申請和通知這種方式就好比信號量的互斥機制,如圖2所示。 信號量的同步機制有所不同,提供的任務(wù)同步功能是指一個(gè)任務(wù)可以利用信號量控制自己的執行進(jìn)度,使自己同步于一組外部事件。好比甲等待乙的電話(huà)再一起吃飯。甲接電話(huà)之前沒(méi)有任何行動(dòng),好比這個(gè)任務(wù)阻塞;接到電話(huà)好比獲取信號量(乙打電話(huà)好比釋放信號量);去吃飯就好比繼續執行任務(wù)。 計數信號量與二進(jìn)制信號量都可以用于任務(wù)之間的同步與互斥,不同之處在于,計數信號量能夠記錄信號量釋放的次數,可以用來(lái)監視某一資源的使用狀況。好比存錢(qián)與消費:存入的金額計數累加(釋放信號量計數),消費時(shí)金額減少(獲取信號量計數減少),只要金額不為零就還有消費能力(信號量可用),金額為零就只能等待存入(獲取信號量但無(wú)信號量可用只能等待其他任務(wù)釋放信號量)。 4 消息機制 僅通過(guò)信號量的同步、互斥是無(wú)法提供完善的響應式交互信息的。消息(message)機制通過(guò)消息隊列保存多個(gè)消息,一般來(lái)說(shuō),消息是按照FIFO的順序通過(guò)消息隊列的。信號量好比是兩人相互約定,電話(huà)鈴響,不用接聽(tīng),直接出門(mén)迎接;而消息機制發(fā)送就是,接聽(tīng)電話(huà)并根據電話(huà)內容執行相應操作。接聽(tīng)電話(huà)并根據電話(huà)內容辦理相應事情,比電話(huà)鈴響就按約定辦理事情多花費時(shí)間,同樣,消息機制比信號量更耗費時(shí)間;但接聽(tīng)電話(huà)后根據電話(huà)內容辦事比前者更加靈活,適應更多的場(chǎng)合,同樣,消息機制的使用比信號量更加靈活,并且電話(huà)內容可以是臨時(shí)增加的,類(lèi)似消息內容的可擴展性。 5 信 號 信號(signal)與信號量聽(tīng)起來(lái)很相似,其實(shí)是完全不同的兩種機制,一定需要明確區分。信號是一種由事件觸發(fā)的軟件中斷,它可以異步地改變信號接收任務(wù)的執行流程,使其轉向對應的信號處理程序執行。即使該任務(wù)當前處于阻塞狀態(tài),一旦接收信號后就會(huì )處于準備執行狀態(tài),但是當信號處理程序執行之后繼續處于阻塞狀態(tài)。舉個(gè)例子,上班時(shí)你可以隨意安排你的工作,就好比任務(wù)中程序的順序執行;單位出現突發(fā)事件需要你立刻解決,當前工作被打斷,就好比該任務(wù)接收到信號,當前程序被打斷;處理完突發(fā)事件后繼續工作,就好比信號處理程序執行完返回原來(lái)被打斷的地方繼續執行。這個(gè)突發(fā)事件就好比一個(gè)信號,該信號影響的任務(wù)立刻跳轉到指定的程序;這個(gè)突發(fā)事件是隨機、不可預料的,就好比信號接收的不可預料性,在程序中信號機制常用于異常處理。不同于信號量用顯式語(yǔ)句表示何時(shí)需要獲取或釋放信號量,信號機制允許程序在任何地方被信號中斷而轉向相應的處理程序。 以上是對VxWorks操作系統一些相關(guān)概念的理解和總結,在技術(shù)交流中很容易被接受,希望能分享給更多的朋友。 |