CORBA在分布式嵌入式實(shí)時系統(tǒng)中的應(yīng)用
隨著嵌入式實(shí)時系統(tǒng)的飛速發(fā)展,它已被廣泛應(yīng)用到軍事、通信、工業(yè)控制等領(lǐng)域。近年來,嵌入式操作系統(tǒng)、嵌入式芯片都日漸成熟,嵌入式軟件開發(fā)方式也發(fā)生了很大改變。嵌入式實(shí)時系統(tǒng)的發(fā)展方向之一是建立分布式系統(tǒng)。在通信和軍事領(lǐng)域,各種嵌入式設(shè)備之間需要進(jìn)行實(shí)時通信,而且各種設(shè)備往往建立在異構(gòu)的軟硬件平臺上。CORBA實(shí)現(xiàn)了在分布式系統(tǒng)上的面向?qū)ο缶幊?,比較適合建立分布式異構(gòu)系統(tǒng)。但是由于傳統(tǒng)的CORBA對存儲容量要求較大,且不能滿足實(shí)時要求,因而在分布式實(shí)時嵌入式系統(tǒng)中的應(yīng)用受到限制。軟件技術(shù)和硬件設(shè)備的發(fā)展為建立分布式嵌入式實(shí)時系統(tǒng)鋪平了道路。CORBA技術(shù)和嵌入式系統(tǒng)的結(jié)合成為當(dāng)前的研究熱門之一。本文首先分析了分布式嵌入式實(shí)時系統(tǒng)的特點(diǎn)和要求,然后對實(shí)時CORBA處理器、內(nèi)存和網(wǎng)絡(luò)資源管理的主要技術(shù)進(jìn)行總結(jié),在此基礎(chǔ)上,提出了利用CORBA技術(shù)建立分布式嵌入式實(shí)時系統(tǒng)的三種方案。
1 分布式嵌入式實(shí)時系統(tǒng)的軟硬件要求
1.1 嵌入式系統(tǒng)的特點(diǎn)
嵌入式系統(tǒng)是指除了臺式機(jī)、筆記本電腦和主機(jī)的計算系統(tǒng)外的、嵌入到設(shè)備環(huán)境中、自治地執(zhí)行既定操作的專用計算機(jī)系統(tǒng),一般由處理器、感應(yīng)器和反應(yīng)器組成。越來越多的消費(fèi)類電子產(chǎn)品、辦公自動化設(shè)備、商務(wù)設(shè)備和汽車等應(yīng)用環(huán)境中都有嵌入式系統(tǒng)。
與普通臺式機(jī)相比,嵌入式系統(tǒng)具有以下特點(diǎn):
(1)功能單一。嵌入式系統(tǒng)一般應(yīng)用在各種專業(yè)領(lǐng)域,其軟硬件都針對最終功能進(jìn)行裁剪,不具備通用性。
(2)資源限制。為了降低成本,嵌入式系統(tǒng)的資源都受到嚴(yán)格限制,主要為處理器資源、存儲器資源和網(wǎng)絡(luò)資源。
(3)反應(yīng)性與實(shí)時性。嵌入式系統(tǒng)一般采用實(shí)時操作系統(tǒng),進(jìn)程調(diào)度采用搶占式調(diào)度策略。
1.2 分布式嵌入式實(shí)時系統(tǒng)的關(guān)鍵設(shè)計因素
所謂分布式系統(tǒng),是指各種嵌入式實(shí)時設(shè)備除了自治完成其特定功能之外,還必須通過網(wǎng)絡(luò)互聯(lián)實(shí)現(xiàn)相互之間的通信,以完成數(shù)據(jù)傳輸、遠(yuǎn)程控制等功能。分布式嵌入式實(shí)時系統(tǒng)的關(guān)鍵設(shè)計因素包括:
(1)分布適應(yīng)性(Distribution Flexibility)。分布式系統(tǒng)的底層結(jié)構(gòu)必須支持位置透明性,應(yīng)用程序不必處理目標(biāo)對象的物理位置。遠(yuǎn)程通信時,程序員不必關(guān)心發(fā)現(xiàn)對象、使用網(wǎng)絡(luò)進(jìn)行通信等細(xì)節(jié)。這樣既可以隔離網(wǎng)絡(luò)底層與應(yīng)用高層,支持異構(gòu)系統(tǒng),也有利于對系統(tǒng)進(jìn)行擴(kuò)展和維護(hù)。
(2)異構(gòu)系統(tǒng)(Heterogeneous Systems)。分布式系統(tǒng)必須無縫集成各種不同層次的異構(gòu)系統(tǒng),如網(wǎng)絡(luò)、操作系統(tǒng)、編程語言。要求用標(biāo)準(zhǔn)的分布式中間件來實(shí)現(xiàn)不同語言、數(shù)據(jù)格式和調(diào)用方法的對象之間的相互通信。
(3)分布實(shí)時限制(Distributed Real-Time Constrains)。在分布式嵌入式實(shí)時系統(tǒng)中,必須對遠(yuǎn)程過程調(diào)用的通信延遲進(jìn)行考慮,硬件和通信協(xié)議的選擇對延遲都有很大影響。
(4)內(nèi)存限制(Memory Limitation)。在每個嵌入式芯片上安裝的系統(tǒng)軟件、通信軟件和應(yīng)用軟件都受到嚴(yán)格的內(nèi)存限制。必須選擇合適的軟件并可以進(jìn)行特殊的裁剪以降低存儲容量的消耗和提高內(nèi)存使用和訪問效率。
2 CORBA在分布式系統(tǒng)上應(yīng)用的優(yōu)勢
CORBA(Common Object Request Broker Architecture,公共對象請求代理體系結(jié)構(gòu))是由OMG組織發(fā)布的開放的軟件標(biāo)準(zhǔn),是目前最流行的中間件平臺。CORBA 僅定義接口,不定義具體實(shí)現(xiàn)方式,各廠商或研究機(jī)構(gòu)都可以根據(jù)規(guī)范進(jìn)行具體實(shí)現(xiàn)。目前很多主流的軟件供應(yīng)商都提供對CORBA的支持。
分布式系統(tǒng)有多種實(shí)現(xiàn)方案,如:多計算機(jī)系統(tǒng)、網(wǎng)絡(luò)操作系統(tǒng)、基于中間件的操作系統(tǒng)。其不同點(diǎn)主要是透明度、異構(gòu)性和可擴(kuò)展性。基于中間件的操作系統(tǒng)透明度比較高,例如CORBA可以提供訪問透明性、位置透明性、復(fù)制透明性、安全透明性等。CORBA通過中間件的形式提供多種通用服務(wù),大大降低了開發(fā)分布式應(yīng)用程序的生命周期和成本,降低了程序出錯的可能性。
如圖1所示,客戶程序通過名稱服務(wù)等方法獲得遠(yuǎn)程對象的引用后就可以調(diào)用遠(yuǎn)程對象的方法。在客戶機(jī)上的樁(stub)模擬服務(wù)器上的實(shí)際對象,程序員只需要調(diào)用對象的方法而不必關(guān)心對象是在本地還是遠(yuǎn)程。方法調(diào)用通過底層的ORB(對象請求代理)進(jìn)行參數(shù)和返回值的包裝與解包,ORB可以屏蔽不同的網(wǎng)絡(luò)協(xié)議。同時ORB以中間件的形式提供多種通用服務(wù),可以大大降低程序員的編程代價。
CORBA支持各種面向?qū)ο蟮木幊陶Z言,如C++和JAVA。特別需要強(qiáng)調(diào)的是:CORBA將遠(yuǎn)程調(diào)用也封裝在對象中,對程序員隱藏了底層的通信細(xì)節(jié)。程序員對分布式對象的引用與集中式環(huán)境下的引用基本相同,因此可以大大提高軟件的生產(chǎn)效率。
3 實(shí)時CORBA的資源管理
通用的CORBA并不提供對實(shí)時系統(tǒng)的支持,這阻礙了CORBA在實(shí)時嵌入式系統(tǒng)中的應(yīng)用。為此,OMG對CORBA進(jìn)行了擴(kuò)展,于2002年提出了Real-time CORBA規(guī)范1.0版,但它僅支持靜態(tài)調(diào)度;2003年11月OMG推出了Real-time CORBA規(guī)范2.0版,以支持動態(tài)調(diào)度。Real-time CORBA的目標(biāo)是通過實(shí)施系統(tǒng)行為的端到端的可預(yù)測性(End-to-End Predictability)和提供對資源管理的支持來滿足實(shí)時要求。實(shí)時CORBA犧牲了CORBA的部分通用特性來支持實(shí)時系統(tǒng)的開發(fā)。應(yīng)用程序開發(fā)過程中,必須進(jìn)行顯式的資源請求,資源的分配可以靜態(tài)處理。
在優(yōu)先級固定的CORBA系統(tǒng)中,所謂“端到端的可預(yù)測性”是指:(1)在處理CORBA調(diào)用而發(fā)生資源競爭時遵守客戶機(jī)與服務(wù)器之間的線程優(yōu)先級;(2)端到端進(jìn)行處理時限定發(fā)生優(yōu)先級反轉(zhuǎn)的時間長度;(3)限定操作調(diào)用的延遲。
實(shí)時CORBA的接口和機(jī)制可以保證ORB和應(yīng)用程序成為可預(yù)測的組合。應(yīng)用程序通過使用實(shí)時CORBA的接口來管理資源;ORB機(jī)制協(xié)調(diào)組成應(yīng)用程序的行為;實(shí)時CORBA則通過實(shí)時操作系統(tǒng)來調(diào)度線程和處理資源競爭。
Real-time CORBA規(guī)范中抽象的“活動”被具體化為三種處于不同階段的實(shí)體,即傳輸協(xié)議中的消息、內(nèi)存中的請求以及被調(diào)度到處理器上運(yùn)行的線程。這三個階段分別被稱為“傳輸中”、“靜態(tài)的”和“活動的”。實(shí)時CORBA可以對這三種狀態(tài)中的活動進(jìn)行作用。應(yīng)用程序開發(fā)人員必須通過實(shí)時CORBA提供的界面對“活動”的狀態(tài)進(jìn)行界定。
如圖2所示,實(shí)時CORBA規(guī)范對CORBA體系結(jié)構(gòu)的主要擴(kuò)展是調(diào)度服務(wù)和優(yōu)先級映射。
CORBA實(shí)時嵌入式系統(tǒng)包括4個主要的組成部分:操作系統(tǒng)、實(shí)時ORB、通信傳輸、應(yīng)用程序。為了保證整個嵌入式系統(tǒng)滿足實(shí)時要求,系統(tǒng)的各組成部分及其相互之間的結(jié)合都應(yīng)具有時間上的確定性。
Real-time CORBA必須建立在嵌入式設(shè)備的本機(jī)實(shí)時操作系統(tǒng)基礎(chǔ)上,利用本地的實(shí)時操作系統(tǒng)進(jìn)行處理器資源、存儲資源和網(wǎng)絡(luò)資源的管理,以實(shí)現(xiàn)整個系統(tǒng)上端到端的可預(yù)測性。
(1)處理器資源管理
CORBA進(jìn)行處理器資源管理的策略是將網(wǎng)絡(luò)任務(wù)的優(yōu)先級映射到實(shí)時操作系統(tǒng)的優(yōu)先級隊(duì)列中。有二種映射方法:一種是將網(wǎng)絡(luò)ORB請求映射到整個實(shí)時操作系統(tǒng)的優(yōu)先級范圍;另一種是映射到本地實(shí)時操作系統(tǒng)優(yōu)先級的一個子集上。
優(yōu)先級繼承與傳播:在運(yùn)行過程中,進(jìn)程會創(chuàng)建子進(jìn)程,不同的進(jìn)程之間相互調(diào)用,如果不支持優(yōu)先級繼承和傳播,則無法保證正確的優(yōu)先級關(guān)系。被調(diào)用進(jìn)程的優(yōu)先級必須大于或等于調(diào)用進(jìn)程的優(yōu)先級。因此在調(diào)用時,必須動態(tài)改變被調(diào)用進(jìn)程的優(yōu)先級。
(2)存儲管理
Real-Time CORBA的存儲管理是通過進(jìn)程池來實(shí)現(xiàn)的。本地操作系統(tǒng)給CORBA子系統(tǒng)分配一定數(shù)量的進(jìn)程數(shù)目,并根據(jù)請求參數(shù)配置進(jìn)程可用的存儲資源。
CORBA進(jìn)程申請緩沖區(qū)時,操作系統(tǒng)會對系統(tǒng)空閑區(qū)加鎖,然后再根據(jù)請求分配存儲區(qū)域。當(dāng)系統(tǒng)空閑區(qū)不能滿足連續(xù)分配時,系統(tǒng)將對內(nèi)存區(qū)域進(jìn)行移動或合并,這一過程中進(jìn)程處于等待狀態(tài)。更嚴(yán)重的是,如果此時出現(xiàn)一個更高優(yōu)先級的內(nèi)存請求,則不管當(dāng)前是否能滿足,由于已經(jīng)加鎖,這一高優(yōu)先級的進(jìn)程只能等待低優(yōu)先級進(jìn)程結(jié)束并釋放資源。解決方法是預(yù)先分配不同的內(nèi)存池供不同進(jìn)程使用,這樣,進(jìn)程之間不再互斥共享存儲區(qū)域。
(3)網(wǎng)絡(luò)資源管理
在多任務(wù)嵌入式操作系統(tǒng)中,多個進(jìn)程可能并發(fā)要求網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)傳輸。傳統(tǒng)CORBA一般采用復(fù)用技術(shù)以降低硬件開銷,即只有一個端口和單線連接,程序與通信端口之間的綁定是隱式的,實(shí)際的綁定被延遲到有數(shù)據(jù)傳輸請求時。但是這種網(wǎng)絡(luò)復(fù)用無法保證實(shí)時性。一般情況下,網(wǎng)絡(luò)資源屬于不可搶奪資源,因此高優(yōu)先級的進(jìn)程必須等待低優(yōu)先級進(jìn)程完成后才能使用網(wǎng)絡(luò)。為了保證實(shí)時性,可以為多個任務(wù)申請不同的端口和專線連接,程序與通信端口之間的連接綁定進(jìn)行預(yù)先分配。由于嵌入式系統(tǒng)功能比較單一,在設(shè)計系統(tǒng)時事先可以確定所需要的最大連接數(shù)目,所以這種方案是可行的,只是網(wǎng)絡(luò)硬件資源的利用率可能比較低。一種改進(jìn)的方案是設(shè)立不同優(yōu)先級的端口和連接,ORB根據(jù)請求的優(yōu)先級動態(tài)確定使用的端口和連接。為了確保網(wǎng)絡(luò)連接的實(shí)時性,可以針對不同情況選擇以下的策略:
①選擇協(xié)議:除了TCP/IP協(xié)議,可以根據(jù)實(shí)際要求采用其他網(wǎng)絡(luò)協(xié)議以提高數(shù)據(jù)傳輸速度。
②私有連接:通過專線連接,線路沒有復(fù)用和共享。這種方法代價較大,但是對實(shí)時性的支持也最大。
③多路連接:可以支持線路復(fù)用,也可以提高容錯性能,連接的管理可以對應(yīng)用程序透明。這樣,ORB必須提供適當(dāng)?shù)臋C(jī)制以確保高優(yōu)先級任務(wù)優(yōu)先獲得連接,另外,也可以由程序員顯式綁定。
利用上述各種資源管理策略,實(shí)時CORBA可實(shí)現(xiàn)各種軟實(shí)時和硬實(shí)時系統(tǒng)的QoS要求。
4 用CORBA建立分布式嵌入式系統(tǒng)的方案
目前,針對不同的應(yīng)用場合,在內(nèi)存資源受到嚴(yán)格限制的嵌入式設(shè)備上建立分布式系統(tǒng)的方法大致分成三類。
(1)減少內(nèi)存使用
OMG于2002年8月推出了minimum CORBA規(guī)范1.0版以滿足一些內(nèi)存受到限制的系統(tǒng)的需求,包括軟實(shí)時嵌入式系統(tǒng)。minimum CORBA是CORBA的一個子集,它對CORBA的某些部分進(jìn)行了裁剪,去除了在嵌入式系統(tǒng)中不需要的部分,要求是去除這些部分后的minimal CORBA仍然能滿足可移植性和可互操作性等性能。由于嵌入式系統(tǒng)的專用性,通常,在編譯時刻都可以確定系統(tǒng)的功能,因此動態(tài)調(diào)用接口(DII)、動態(tài)框架接口(DSI)等部分都被省略。經(jīng)過裁剪的CORBA(如ORBexpress)的靜態(tài)內(nèi)存占用可以降低至100KB以下。minimum CORBA并不提供對硬實(shí)時系統(tǒng)的支持。如果需要實(shí)現(xiàn)硬實(shí)時系統(tǒng),則必須選擇滿足Real-Time CORBA規(guī)范的產(chǎn)品,如華盛頓大學(xué)開發(fā)的TAO。
(2)特殊配置
可針對各種設(shè)備專門設(shè)計ORB系統(tǒng),如應(yīng)用在手持設(shè)備上的PalmORB。各種設(shè)備對資源的需求是不一樣的,而且在系統(tǒng)設(shè)計時可以確定,因此可以對CORBA進(jìn)行更多的裁剪。這種方案往往由專業(yè)廠商來實(shí)現(xiàn),其特殊性比較強(qiáng),一般不具備通用性,可擴(kuò)展性能也比較差,這里不作詳細(xì)介紹。
(3)利用代理
UORB(Ubiquitous Object Request Broker)是Universidade Federal de Pernambuco大學(xué)的G N Rodrigues首先提出的,它類似于sun公司的Jini Surrogate Architecture。UORB不需要在嵌入式設(shè)備內(nèi)安裝ORB系統(tǒng),嵌入式設(shè)備通過線路與一臺安裝了ORB的計算機(jī)相連,相互之間通過私有協(xié)議進(jìn)行通信。ORB網(wǎng)關(guān)與其他計算機(jī)互連,用IIOP進(jìn)行通信,代理主機(jī)上用軟件實(shí)現(xiàn)對象代理,即構(gòu)造嵌入式系統(tǒng)的虛擬對象。對除代理主機(jī)以外的其他計算機(jī),可以把嵌入式設(shè)備當(dāng)成一般的設(shè)備進(jìn)行通信。
CORBA代理模型不需要在設(shè)備上安裝ORB庫就允許設(shè)備加入CORBA網(wǎng)絡(luò)環(huán)境。CORBA處理不是在嵌入式設(shè)備上而是位于代理主機(jī)上。這種方式是受到Jini Surrogate Architecture的啟發(fā)而提出的。嵌入式設(shè)備不能直接與網(wǎng)絡(luò)上的其他設(shè)備或主機(jī)進(jìn)行通信,而必須通過安裝了此設(shè)備代理的主機(jī)間接地與網(wǎng)絡(luò)上其他設(shè)備進(jìn)行通信。在嵌入式設(shè)備上的存儲資源要求很低,對設(shè)備的要求只是設(shè)備必須與代理主機(jī)進(jìn)行連接和通信。
以上三種方式對嵌入式設(shè)備的各種資源要求越來越少,每種方式都有其適用的范圍,分別被不同的系統(tǒng)所采用。
c++相關(guān)文章:c++教程
評論