Jini在分布式嵌入式系統(tǒng)中的應(yīng)用
關(guān)鍵詞:Jini 分布式嵌入式系統(tǒng) Jini代理體系結(jié)構(gòu) EIB
引 言
嵌入式系統(tǒng)是指以應(yīng)用為中心、以計(jì)算機(jī)技術(shù)為基礎(chǔ)、軟件硬件可裁剪,適用于對功能、可靠性、成本、體積、功耗嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)。隨著計(jì)算機(jī)技術(shù)和相關(guān)電子技術(shù)的發(fā)展,嵌入式系統(tǒng)的應(yīng)用已經(jīng)深入到社會中的各個(gè)領(lǐng)域,如家用電器、移動(dòng)通信、航空、航天、醫(yī)療、工業(yè)控制和軍事等。在嵌入式系統(tǒng)的某些應(yīng)用中,通常采用分布式體系結(jié)構(gòu),不同的嵌入式設(shè)備之間以某種方式相互連接、彼此協(xié)作,這就要求整個(gè)系統(tǒng)具有很好的靈活性和可靠性。
Jini是一種全新的構(gòu)建分布式系統(tǒng)的技術(shù),具有動(dòng)態(tài)的、自形成的和自管理的特性,它是一種真正的基于服務(wù)的分布式體系結(jié)構(gòu)。另外,基于Java的Jini技術(shù)提高了分布式系統(tǒng)編程的抽象級別,簡化了分布式系統(tǒng)的開發(fā)。在構(gòu)建分布式嵌入式系統(tǒng)的過程中利用Jini互聯(lián)技術(shù),不但可以降低系統(tǒng)開發(fā)難度,實(shí)現(xiàn)嵌入式環(huán)境中基于服務(wù)級的互操作,而且還可提高整個(gè)系統(tǒng)的靈活性和可靠性。因此Jini技術(shù)推出后,人們很快就開始關(guān)注如何將Jini應(yīng)用于分布式嵌入式系統(tǒng)的開發(fā)[1~3]。
1 Jini技術(shù)概述
1.1 Jini的體系結(jié)構(gòu)
Jini是1999年1月Sun公司發(fā)布的一種基于Java的全新的用于構(gòu)建分布式系統(tǒng)的技術(shù),利用Jini可以使得軟件和硬件自發(fā)地結(jié)合起來,形成一個(gè)Jini服務(wù)聯(lián)盟。
一個(gè)Jini系統(tǒng)由下列組件組成[4]:
◇基礎(chǔ)設(shè)施組件――提供一個(gè)在分布式系統(tǒng)中建立起服務(wù)聯(lián)盟的框架;
◇編程模型組件――支持建立可靠的分布式服務(wù);
◇服務(wù)組件――可以成為Jini服務(wù)聯(lián)盟中的一部分并且向聯(lián)盟中的其它成員提供服務(wù)。
盡管Jini系統(tǒng)由三部分組件組成,但是它們之間的界限是模糊的,組件之間緊密相連、彼此協(xié)作。Jini是建立在分布式系統(tǒng)、經(jīng)常動(dòng)態(tài)變化這一原則之上的。它的體系結(jié)構(gòu)如圖1所示。
服務(wù)是Jini體系結(jié)構(gòu)中最重要的概念。它可以指任何實(shí)體提供的功能。其中實(shí)體可以是任何硬件設(shè)備、軟件或是硬件和軟件的結(jié)合體。服務(wù)通過查找服務(wù)注冊后就可以通過實(shí)現(xiàn)了Java遠(yuǎn)程接口的一個(gè)接口來調(diào)用。用戶通過向查找服務(wù)請求并且下載服務(wù)的代理對象來和服務(wù)之間通信。查找服務(wù)自身也是一個(gè)服務(wù),能夠跟蹤每個(gè)服務(wù)并且向用戶提供服務(wù)的代理對象。
Jini的體系結(jié)構(gòu)建立在以下環(huán)境假設(shè)的基礎(chǔ)上[5]:
◇有一個(gè)網(wǎng)絡(luò)并且具有合理的網(wǎng)絡(luò)延遲,以不影響Jini系統(tǒng)的性能(要求網(wǎng)絡(luò)底層使用的通信協(xié)議是TCP和UDP[3]);
◇每個(gè)支持Jini的設(shè)備具有一定內(nèi)存和處理能力;
◇每個(gè)設(shè)備都需要裝備一個(gè)Java虛擬機(jī)。
任何實(shí)體都可以成為服務(wù)提供者(即服務(wù))或服務(wù)請求者(即用戶)。當(dāng)一個(gè)實(shí)體作為一個(gè)服務(wù)的提供者時(shí),對它具有如下的要求:
◇為實(shí)現(xiàn)發(fā)現(xiàn)和加入查找服務(wù)的功能,服務(wù)提供者必須擁有網(wǎng)絡(luò)功能;
◇為了能夠下載一個(gè)查找服務(wù)的代理,需要一個(gè)Java虛擬機(jī),并且虛擬機(jī)支持標(biāo)準(zhǔn)的Java和RMI;
◇為保存與注冊相關(guān)的信息,需要有存儲功能;
◇為了實(shí)現(xiàn)以上的各種計(jì)算,需要有一個(gè)處理器。
同樣,一個(gè)服務(wù)請求者的實(shí)體具有如下要求:
◇為實(shí)現(xiàn)發(fā)現(xiàn)查找服務(wù)的功能,服務(wù)請求者必須支持網(wǎng)絡(luò);
◇為了下載并且服務(wù)對象代理,需要一個(gè)Java虛擬機(jī)和存儲功能;
◇需要實(shí)現(xiàn)計(jì)算的處理器。
因此,一個(gè)實(shí)體要接入Jini網(wǎng)絡(luò)成為服務(wù)提供者或是服務(wù)請求者,它自身需要具備一定的內(nèi)存和處理能力,以及網(wǎng)絡(luò)和Java功能,稱滿足這些要求的實(shí)體是支持Jini的。
1.2 Jini技術(shù)的特點(diǎn)
Jini的核心功能是提供一種基于網(wǎng)絡(luò)動(dòng)態(tài)的、自形成的和自管理的服務(wù)聯(lián)盟,具有如下特點(diǎn)。
?、?Jini是即插即用的:服務(wù)提供者加入Jini網(wǎng)絡(luò)后,通過查找服務(wù)注冊后即可向使用者提供服務(wù);服務(wù)的使用者加入Jini網(wǎng)絡(luò)后即可通過查找服務(wù)使用相應(yīng)的服務(wù),之后離開。
?、?使用戶可以很容易地訪問網(wǎng)絡(luò)中任何位置的資源,即使是用戶在網(wǎng)絡(luò)中的位置經(jīng)常變化。
?、?Jini以自發(fā)的方式實(shí)現(xiàn)實(shí)體間的互聯(lián):任何實(shí)體之間可以相互發(fā)現(xiàn)和加入Jini網(wǎng)絡(luò)來組成一個(gè)Jini聯(lián)盟。
?、?Jini消除了硬件和軟件之間的差別:Jini把硬件和軟件都抽象為服務(wù),是一種真正的基于服務(wù)的體系結(jié)構(gòu)。
?、?Jini是一種分布式計(jì)算框架,使得分布式編程變得容易:Jini將Java應(yīng)用環(huán)境由單獨(dú)的Java虛擬機(jī)擴(kuò)展到一個(gè)Java虛擬機(jī)網(wǎng)絡(luò);Java虛擬機(jī)屏蔽了不同機(jī)器平臺和操作系統(tǒng)的異構(gòu)性,降低了分布式編程的難度。
1.3 利用Jini開發(fā)分布式嵌入式系統(tǒng)
近些年來隨著計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)的不斷發(fā)展,分布式系統(tǒng)已經(jīng)得到了越來越廣泛的研究和應(yīng)用,分布式計(jì)算成為實(shí)現(xiàn)高性能和高可靠性計(jì)算的一種新的計(jì)算模型[5]。在嵌入式應(yīng)用領(lǐng)域中采用分布式體系結(jié)構(gòu),一方面可以實(shí)現(xiàn)嵌入式環(huán)境中的分布式計(jì)算(例如一個(gè)系統(tǒng)本身可能是由分布在不同位置的多個(gè)嵌入式系統(tǒng)相互連接構(gòu)成的,如電梯、汽車等);另一方面可以在可靠性要求較高的嵌入式應(yīng)用中實(shí)現(xiàn)容錯(cuò)計(jì)算。
Jini可以把分布式嵌入式系統(tǒng)變成動(dòng)態(tài)的、靈活的和易管理的系統(tǒng)。Jini的自形成特性提供了一種自動(dòng)相互發(fā)現(xiàn)和加入Jini網(wǎng)絡(luò)來組成服務(wù)聯(lián)盟的能力,可以使各種嵌入式設(shè)備以一種簡捷的方式實(shí)現(xiàn)集成和互操作。Jini的動(dòng)態(tài)性使得每個(gè)嵌入式設(shè)備可以靈活地加入和離開Jini服務(wù)聯(lián)盟。這樣,當(dāng)一些嵌入式設(shè)備(如移動(dòng)設(shè)備、PDA等)在需要使用服務(wù)時(shí),可以建立暫時(shí)性的連接加入Jini聯(lián)盟;服務(wù)完成時(shí),離開。在不需要人為參與管理的情況下,整個(gè)系統(tǒng)仍具有良好的可伸縮性。
另外,Jini是基于Java的。Java虛擬機(jī)屏蔽了不同機(jī)器平臺和操作系統(tǒng)的異構(gòu)性,簡化了嵌入式系統(tǒng)的編程;而且Jini將Java的應(yīng)用環(huán)境由單獨(dú)的Java虛擬機(jī)擴(kuò)展到一個(gè)Java虛擬機(jī)網(wǎng)絡(luò),為實(shí)現(xiàn)分布式計(jì)算提供了一個(gè)良好的計(jì)算平臺。它提高了分布式系統(tǒng)編程的抽象級別,使得用戶只需在高層的對象接口上進(jìn)行編程,而不必處理底層的通信協(xié)議,簡化了分布式系統(tǒng)的開發(fā)。
因此,Jini為開發(fā)分布式嵌入式系統(tǒng)提供了一種新的解決方案。但是,要把Jini應(yīng)用到嵌入式領(lǐng)域中也存在一些需要解決的問題,下面將進(jìn)行說明。
2 嵌入式系統(tǒng)接入Jini網(wǎng)絡(luò)的方法
Jini并不是專門為開發(fā)嵌入式應(yīng)用而設(shè)計(jì)的。由上面的分析可知,一個(gè)支持Jini的設(shè)備必須具備一定的處理能力、內(nèi)存、網(wǎng)絡(luò)功能和Java功能;而通常嵌入式系統(tǒng)對資源是嚴(yán)格限制的,完全支持Jini的嵌入式設(shè)備實(shí)際上并不多。另外,一些分布式嵌入式應(yīng)用中底層的通信協(xié)議也不支持Jini。
如何使嵌入式系統(tǒng)能夠加入到Jini網(wǎng)絡(luò),成為在分布式嵌入式應(yīng)用領(lǐng)域中應(yīng)用Jini技術(shù)的難點(diǎn)。結(jié)合現(xiàn)有的技術(shù),目前主要有三種解決方法:一種是提高嵌入式設(shè)備的資源,如采用32位的處理器、2MB以上的存儲空間和支持網(wǎng)絡(luò)連接,這樣的嵌入式系統(tǒng)可以完全支持Jini;另外一種方法是采用Jini代理體系結(jié)構(gòu),不要求設(shè)備自身支持Java和Jini技術(shù);第三種方法是將Jini進(jìn)行移植。
2.1 J2ME與Jini技術(shù)相結(jié)合
繼Java技術(shù)在桌面系統(tǒng)和后端服務(wù)器領(lǐng)域取得巨大成功后,為了將Java的應(yīng)用擴(kuò)展到消費(fèi)類電子設(shè)備和嵌入式設(shè)備,Sun推出了Java 2 平臺Micro Edition(J2ME)。它包括兩個(gè)基本的配置集:連接設(shè)備配置集(CDC ,Connected Device Configuration)和連接有限設(shè)備配置集(CLDC ,Connected Limited Device Configuration)。CDC面向的是具有更強(qiáng)計(jì)算能力的嵌入式設(shè)備;CLDC面向的是資源有限的消費(fèi)類電子設(shè)備。對應(yīng)于CDC和CLDC兩個(gè)不同的配置集,可以將J2ME設(shè)備分為兩類:低端信息設(shè)備和高端信息設(shè)備。J2ME設(shè)備分類如表1所列。
表1 J2ME設(shè)備分類表
低端信息設(shè)備 | 高端信息設(shè)備 | |
典型設(shè)備 | 尋呼機(jī)、蜂窩式電話、移動(dòng)式收款機(jī)終端 | 電視機(jī)頂盒、汽車導(dǎo)航系統(tǒng)、Web電話、網(wǎng)絡(luò)路由器 |
處理器/位 | 16/32 | 32 |
存儲特性/B | 256K~512K | 2M~16M |
網(wǎng)絡(luò)連接特性 | 帶寬較窄,且不一定是基于TCP/TP協(xié)議的 | 通常具有持續(xù)的TCP/IP連接 |
這兩種不同設(shè)備要求的J2ME的運(yùn)行環(huán)境也不同。低端信息設(shè)備比較適合使用CLDC中定義的KVM,這是一款專用的Java虛擬機(jī),是以小型的資源有限的消費(fèi)類設(shè)備為目標(biāo)平臺的;而高端信息設(shè)備適合使用CDC中定義的CVM,它與常規(guī)的JVM是完全兼容的。
J2ME CDC可以使嵌入式設(shè)備具備Java 2的功能。基于J2ME CDC的RMI可選包完全滿足實(shí)現(xiàn)Jini的技術(shù)需求,因此可以直接加入Jini網(wǎng)絡(luò)。
對于那些J2ME CLDC的設(shè)備或是根本不支持Java和Jini的嵌入式設(shè)備來說,Jini代理體系結(jié)構(gòu)(Jini Surrogate Architecture)使其接入Jini網(wǎng)絡(luò)成為可能。
2.2 Jini代理體系結(jié)構(gòu)
Jini代理體系結(jié)構(gòu)是由Sun公司的工程師Jim Waldo提出的,現(xiàn)在已成為www.jini.org站點(diǎn)中一個(gè)開放源代碼的項(xiàng)目。開發(fā)Jini代理的主要目標(biāo)是使那些資源有限的設(shè)備能夠完全參與到Jini網(wǎng)絡(luò)中。
Jini代理體系結(jié)構(gòu)由下列組件構(gòu)成:可宿主機(jī)(host-capable machine)、代理宿主(Surrogate Host)、宿主資源(Host Resources)和相互連接(Interconnect)。組件之間的關(guān)系如圖2所示[6]。
設(shè)備是指那些不能夠加入Jini網(wǎng)絡(luò)的任何硬件設(shè)備或者軟件;可宿主機(jī)具備執(zhí)行Java語言編寫的,用于代表設(shè)備的代碼,并且能夠?yàn)閳?zhí)行這些Java代碼提供所需的資源;代理宿主是駐留在可宿主機(jī)上,為執(zhí)行代理體系結(jié)構(gòu)的組件提供Java運(yùn)行環(huán)境的框架,除了提供計(jì)算資源、運(yùn)行環(huán)境和生命周期管理外,它還提供宿主的其它資源來幫助體系結(jié)構(gòu)中的組件。
可宿主機(jī)在Jini網(wǎng)絡(luò)和設(shè)備兩者之間建立連接,在Jini網(wǎng)絡(luò)中充當(dāng)這個(gè)設(shè)備的代言人。設(shè)備和代理宿主之間可以用有線或無線的方式相互連接。連接也可以采用任何的協(xié)議,有線連接如TCP/IP、RS-232、USB和IEEE1394等;無線連接可以采用藍(lán)牙協(xié)議。
這樣,Jini代理體系結(jié)構(gòu)通過降低對設(shè)備資源的要求,實(shí)現(xiàn)了小型設(shè)備完全參與到Jini網(wǎng)絡(luò)中的目標(biāo),使得那些資源有限的小型設(shè)備可以充分利用Jini技術(shù)的優(yōu)勢。代理通過一個(gè)運(yùn)行Java 2虛擬機(jī)支持Jini技術(shù)的宿主代理系統(tǒng),使得本來需要運(yùn)行在用戶中的服務(wù)代理對象可以在代理的環(huán)境中運(yùn)行。任何小型設(shè)備與代理宿主通過相互連接進(jìn)行對話,從而成為一個(gè)完全的支持Jini的用戶或服務(wù),且仍保持Jini即插即用的特性。
2.3 移植Jini
Jini體系結(jié)構(gòu)假設(shè)網(wǎng)絡(luò)底層使用的通信協(xié)議是TCP和UDP,而一些分布式嵌入式系統(tǒng)中通常采用的是實(shí)時(shí)、可靠的數(shù)據(jù)傳輸協(xié)議,如CAN、TTP等。為了在這樣的應(yīng)用領(lǐng)域中使用Jini技術(shù),可以考慮將Jini進(jìn)行移植。RoSES(Robust Self-Configuring Embedded Systems)[3]是卡耐基梅隆大學(xué)通用發(fā)動(dòng)機(jī)協(xié)作實(shí)驗(yàn)室的一個(gè)研究項(xiàng)目。目的是尋找一種建立靈活的、健壯的和可維護(hù)的分布式嵌入式系統(tǒng)的通用方法,在研究過程中嘗試把Jini移植到CAN上。移植Jini的方法也可以解決嵌入式系統(tǒng)接入Jini網(wǎng)絡(luò)的問題,但其中的工作量相對較大。
3 應(yīng)用實(shí)例
Jini在開發(fā)分布式嵌入式系統(tǒng)方面已經(jīng)做了很多的工作[1~3]。下面介紹一下Jini在EIB(European Installation Bus)中的應(yīng)用[1,2]。
現(xiàn)場總線分為多種,不同廠商的現(xiàn)場總線產(chǎn)品是不兼容的。為了解決這一問題,EIBA(European Installation Bus Association)提出了EIB。EIB代表了最新的現(xiàn)場總線技術(shù),主要應(yīng)用領(lǐng)域是家庭和建筑物的自動(dòng)化。EIB網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu)可以是線形、星形和樹形。
EIB網(wǎng)絡(luò)中每個(gè)節(jié)點(diǎn)是一個(gè)EIB設(shè)備。一個(gè)EIB系統(tǒng)中最大可以安裝60 000個(gè)設(shè)備。每個(gè)EIB設(shè)備中有一個(gè)嵌入式微控制器用來運(yùn)行通信協(xié)議。它從總線上接收數(shù)據(jù)后傳送給應(yīng)用程序,或是把應(yīng)用程序數(shù)據(jù)傳給其它設(shè)備。每個(gè)EIB設(shè)備通過LC(Line Connector,具有路由功能)連接到主線(Main Line)上,BC(Bus Coupling)向特定應(yīng)用的硬件(如傳感器和作動(dòng)器)提供了定義良好的接口。
EIB中的設(shè)備(例如傳感器)都是資源非常有限的設(shè)備,很難直接支持Jini,而且EIB系統(tǒng)使用的底層通信協(xié)議也不支持Jini。因此在實(shí)現(xiàn)中,采用Jini代理體系結(jié)構(gòu)來使EIB設(shè)備接入Jini網(wǎng)絡(luò)。系統(tǒng)結(jié)構(gòu)如圖3所示[2]。
EIB代理(EIB Agent)是EIB設(shè)備在Jini網(wǎng)絡(luò)中映射的服務(wù)代理。它向服務(wù)的使用者(Service User)提供EIB設(shè)備的功能;EIB服務(wù)器(EIB Server)由Jini數(shù)據(jù)庫(Jini Database)和EIB控制器(EIB Controller)兩個(gè)模塊組成。它負(fù)責(zé)管理代理宿主機(jī)與現(xiàn)場總線之間的連接,其中Jini數(shù)據(jù)庫是一個(gè)存放EIB設(shè)備和相應(yīng)的EIB代理之間的映射關(guān)系的數(shù)據(jù)庫。EIB代理和EIB服務(wù)器運(yùn)行在代理宿主機(jī)上。
這樣,在EIB系統(tǒng)中使用Jini技術(shù)會帶來如下好處:
◇EIB系統(tǒng)中,每個(gè)設(shè)備提供的功能都可以映射成Jini服務(wù),這樣,不僅可以被其它的現(xiàn)場總線使用,而且還可以被支持Jini的任何設(shè)備(如PDA)來訪問;
◇Jini簡化了網(wǎng)絡(luò)編程,并且Java提高了系統(tǒng)的安全性;
◇EIB網(wǎng)絡(luò)可以連接到Internet,這樣系統(tǒng)變成了開放的,提高了EIB設(shè)備的可訪問性;
◇Jini使EIB系統(tǒng)中的設(shè)備可以與家用消費(fèi)電器和自動(dòng)化設(shè)備通信,增強(qiáng)EIB設(shè)備的功能;
◇Jini提供了一種獨(dú)立于廠商的服務(wù)平臺,使得不同廠商的現(xiàn)場總線產(chǎn)品相互兼容。
應(yīng)當(dāng)指出的是,Jini并不是完全適用于實(shí)時(shí)性要求高的嵌入式應(yīng)用。RoSES的研究項(xiàng)目中,將Jini移植到了CAN上;但實(shí)驗(yàn)結(jié)果表明,Jini的實(shí)時(shí)性能并不令人滿意。
4 總 結(jié)
在構(gòu)建分布式嵌入式系統(tǒng)的過程中利用Jini技術(shù),不但可以降低系統(tǒng)的開發(fā)難度、實(shí)現(xiàn)嵌入式環(huán)境中基于服務(wù)級的互操作,而且可使系統(tǒng)具有很好的靈活性和可靠性。同時(shí),在分布式嵌入式領(lǐng)域中使用Jini技術(shù)也存在一些需要解決的問題,包括如何使得嵌入式系統(tǒng)支持Jini以及Jini的實(shí)時(shí)性等。
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
評論