專利名稱:一種數(shù)字電視中間件系統(tǒng)的跨平臺(tái)Jave虛擬機(jī)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明屬于電通信技術(shù)領(lǐng)域,尤其涉及一種用于數(shù)字電視廣播系統(tǒng)的交互式信息 處理系統(tǒng)。
背景技術(shù):
數(shù)字電視是當(dāng)前IT產(chǎn)業(yè)的熱點(diǎn),作為一項(xiàng)即將在全國范圍內(nèi)開播的信息服務(wù), 它融合了計(jì)算機(jī)、多媒體、通信網(wǎng)絡(luò)等眾多技術(shù)。第一代數(shù)字電視產(chǎn)品主要表現(xiàn)在數(shù) 字機(jī)頂盒的設(shè)計(jì)與生產(chǎn),以及一些簡(jiǎn)單的交互式應(yīng)用在機(jī)頂盒中的實(shí)現(xiàn)。第一代產(chǎn)品 的深入發(fā)展使得人們對(duì)交互式電視的要求越來越高,同時(shí)數(shù)字電視運(yùn)營商也紛紛認(rèn)識(shí) 到增值性服務(wù)的重要性。因?yàn)槎鄻踊脑鲋敌苑?wù)不僅能為他們吸引更多的新用戶, 同時(shí)在競(jìng)爭(zhēng)越來越激烈的環(huán)境下,增值性服務(wù)也成為運(yùn)營商有別于其他競(jìng)爭(zhēng)者的重要 特征。
數(shù)字電視技術(shù)目前已進(jìn)入第二代發(fā)展階段。數(shù)字電視技術(shù)第二代機(jī)頂盒產(chǎn)品以電 視與互聯(lián)網(wǎng)相結(jié)合為其主要特征。交互式應(yīng)用越來越廣泛,信息服務(wù)、電子商務(wù)、即 時(shí)節(jié)目點(diǎn)播(TV Anytime)等增值服務(wù)也成為發(fā)展的主要特點(diǎn)。
截至2005年底,全球數(shù)字電視用戶總數(shù)已超過2.2億,全球數(shù)字電視滲透率(數(shù) 字電視用戶/電視用戶數(shù))已達(dá)到16%,在2006年,全球有7000萬臺(tái)數(shù)字機(jī)頂盒出 貨量。未來五年,全球數(shù)字電視用戶數(shù)量年均增長(zhǎng)率將在30%左右。全球數(shù)字電視相 關(guān)的服務(wù)(點(diǎn)播,付費(fèi),互動(dòng)等)將達(dá)到15, 000億美元-Dataquest。
在歐洲,交互式數(shù)字電視的發(fā)展領(lǐng)先于世界上其他國家。特別是MHP(媒體家庭 平臺(tái))的產(chǎn)生,創(chuàng)造了一種有利的氛圍,同時(shí)歐洲對(duì)交互式應(yīng)用的重視遠(yuǎn)勝于北美地區(qū)。
美國正在用數(shù)字電視替代模擬電視,隨著消費(fèi)者準(zhǔn)備從模擬電視轉(zhuǎn)向數(shù)字電視, 他們急切地?cái)U(kuò)展數(shù)字廣播的機(jī)頂盒業(yè)務(wù)。據(jù)預(yù)測(cè),到2011年,數(shù)字廣播機(jī)頂盒的使 用數(shù)量將超過4700萬臺(tái)。
日本在數(shù)字電視內(nèi)容的創(chuàng)作正在形成,并以此為產(chǎn)業(yè)鏈輸送全球。
在中國,數(shù)字電視取代模擬電視是電視技術(shù)發(fā)展的必然,也是目前正在悄悄發(fā)生 的事實(shí)。
中國的數(shù)字電視標(biāo)準(zhǔn)有別于世界其他地方(如歐洲、美國和日本),尤其是中間件平臺(tái)的標(biāo)準(zhǔn),使得數(shù)字電視提供商要自主研發(fā)具有自主產(chǎn)權(quán)的中間件系統(tǒng),推廣更多 的增值性應(yīng)用。增值服務(wù),內(nèi)容創(chuàng)意將是全球競(jìng)爭(zhēng)的關(guān)注點(diǎn)。
目前,數(shù)字電視機(jī)頂盒是基于有線電視網(wǎng)絡(luò)傳輸?shù)哪M電視機(jī)接收數(shù)字電視節(jié)目 和數(shù)字信息的主要接入平臺(tái)。要實(shí)現(xiàn)交互式電視的功能,數(shù)字電視中間件技術(shù)是必不 可少的條件,它己成為交互式電視的核心技術(shù)。我國已制定了數(shù)字電視中間件標(biāo)準(zhǔn), 利用該標(biāo)準(zhǔn)開發(fā)具有自主知識(shí)產(chǎn)權(quán)的中間件系統(tǒng)是非常必要的。
中間件是在應(yīng)用程序與操作系統(tǒng)、硬件平臺(tái)之間嵌入的一個(gè)中間層,通常定義成 一組較為完整的、標(biāo)準(zhǔn)的應(yīng)用程序接口。它主要為應(yīng)用軟件的開發(fā)提供跨操作系統(tǒng)、 跨硬件的平臺(tái)及層次化、模塊化和可擴(kuò)展的接口,同時(shí),根據(jù)嵌入式應(yīng)用的編程特點(diǎn) 提供必要的編程工具。
借助中間件,應(yīng)用程序可以獨(dú)立于操作系統(tǒng)和硬件平臺(tái),使產(chǎn)品的開放性和可移 植性更強(qiáng)。有了中間件,應(yīng)用程序不僅可以運(yùn)行于不同硬件平臺(tái),也可以在不同的操 作系統(tǒng)上運(yùn)行,從而在提高開發(fā)效率、減少開發(fā)成本的同時(shí)能夠跟上技術(shù)的發(fā)展,使 應(yīng)用的開發(fā)變得更加簡(jiǎn)捷,也為應(yīng)用程序提供了一個(gè)相對(duì)穩(wěn)定的高層應(yīng)用環(huán)境。
交互式電視以電視與互聯(lián)網(wǎng)相結(jié)合為其主要特征,可以為用戶提供豐富的互動(dòng)功 能,包括電子節(jié)目指南、視頻點(diǎn)播、股票信息、互動(dòng)游戲等。這些互動(dòng)功能需要機(jī)頂 盒與互聯(lián)網(wǎng)連接,能夠及時(shí)更新信息,支持網(wǎng)絡(luò)瀏覽器,提供用戶和電視臺(tái)互動(dòng)的能
力。那么中間件系統(tǒng)必須有一個(gè)Java虛擬機(jī)(JVM),它提供對(duì)JAVA代碼的分析,支 持互聯(lián)網(wǎng)瀏覽。提供Jave虛擬機(jī)是中間件系統(tǒng)不可或缺的功能。
Java虛擬機(jī)(JVM)是可運(yùn)行Java代碼的假想計(jì)算機(jī)。只要根據(jù)JVM規(guī)格描述將 解釋器移植到特定的硬件平臺(tái)(基于NEC EMA2主芯片數(shù)字機(jī)頂盒平臺(tái))上,就能 保證其支持的經(jīng)過編譯的任何Java代碼能夠在該系統(tǒng)上運(yùn)行。
Java虛擬機(jī)是一個(gè)想象中的機(jī)器,在實(shí)際的實(shí)現(xiàn)中是通過軟件模擬來實(shí)現(xiàn)。Java 虛擬有自己想象中的硬件,如處理器、堆棧、寄存器等,還具有相應(yīng)的指令系統(tǒng)。
現(xiàn)有JVM存在的缺陷
1. 結(jié)構(gòu)龐大不適合嵌入式設(shè)備,比如我們數(shù)字電視接收機(jī)設(shè)備;
2. 不易裁減和移植;
3. 運(yùn)行需要大量的系統(tǒng)資源比如內(nèi)存。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題是提供一種數(shù)字電視中間件系統(tǒng)的跨平臺(tái)Jave虛擬機(jī),其支持中國標(biāo)準(zhǔn)(DTVM),很容易向其他標(biāo)準(zhǔn)(MHP, OCAP)移植,與硬件平臺(tái)無 關(guān),統(tǒng)一資源管理,運(yùn)行的JAVA線程數(shù)量不受OS限制,具有更緊湊的系統(tǒng)結(jié)構(gòu)和 占用更少的硬件資源以及更少的硬件平臺(tái)限制。
本發(fā)明的技術(shù)方案是提供一種數(shù)字電視中間件系統(tǒng)的跨平臺(tái)Jave虛擬機(jī),包括 基于硬件平臺(tái)的操作系統(tǒng)和設(shè)備驅(qū)動(dòng)程序,其特征是在操作系統(tǒng)和設(shè)備驅(qū)動(dòng)程序的 基礎(chǔ)上設(shè)置平臺(tái)適配層;在該適配層的基礎(chǔ)上,利用包含安裝中間件系統(tǒng)中的Java 虛擬機(jī)和機(jī)頂盒設(shè)備的核心類庫,構(gòu)建一至少由類裝載子系統(tǒng)、安全管理子系統(tǒng)、執(zhí) 行引擎和本地方法調(diào)用接口子系統(tǒng)功能模塊所構(gòu)成的jave虛擬機(jī),為給數(shù)字電視中間 件提供一個(gè)Java應(yīng)用與業(yè)務(wù)的運(yùn)行平臺(tái),同時(shí)支持本地文件系統(tǒng)和網(wǎng)絡(luò)訪問。
進(jìn)一步的,所述的Jave虛擬機(jī)還包括垃圾回收子系統(tǒng)功能模塊。
具體的,平臺(tái)適配層提供操作系統(tǒng)和/或設(shè)備驅(qū)動(dòng)系統(tǒng)與上層各模塊的接口,采用 JAVA線程與下層OS平臺(tái)線程管理分離技術(shù),這樣運(yùn)行于Jave虛擬機(jī)的線程對(duì)OS 而言是透明的,與具體的OS平臺(tái)無關(guān),方便整個(gè)數(shù)字電視中間件移植到不同的平臺(tái), 支持不同的原始設(shè)備供應(yīng)商。
類裝載子系統(tǒng)裝載JAVA類,通過指定的類的類型完全限定名產(chǎn)生一個(gè)代表該類 型的二進(jìn)制數(shù)據(jù)流。把這些二進(jìn)制數(shù)據(jù)流解析到相應(yīng)的方法區(qū)的數(shù)據(jù)結(jié)構(gòu)中,創(chuàng)建一 個(gè)表示該類型的Java丄ang.Class的類實(shí)例,然后驗(yàn)證該類符合的JAVA語法的語義, 接著初始化該類,最后連接到實(shí)際應(yīng)用該JAVA的區(qū)域。
安全管理子系統(tǒng)先實(shí)現(xiàn)類java.lang.SecurityManager,該類有一個(gè)訪問控制器 (AccessController)對(duì)象,當(dāng)運(yùn)行在Jave虛擬機(jī)內(nèi)的代碼需要訪問Jave虛擬機(jī)系統(tǒng) 外部的某個(gè)資源時(shí),對(duì)該代碼進(jìn)行訪問的檢查,安全管理器會(huì)把每一個(gè)當(dāng)前運(yùn)行的java 代碼創(chuàng)建的Permission對(duì)象傳遞給AccessController對(duì)象的checkPermission ()方法 去,由于每個(gè)被調(diào)用的Java代碼都有自己的Java幀,每個(gè)java幀又屬于具體的某個(gè) Java線程調(diào)用的方法,而每個(gè)Java方法在相應(yīng)的Java類中被定義,每個(gè)Java類都屬 于某個(gè)保護(hù)域,每個(gè)保護(hù)域都定義了相應(yīng)的系統(tǒng)訪問權(quán)限,根據(jù)這些權(quán)限來判定目前 的java幀中運(yùn)行的代碼訪問的系統(tǒng)資源是否被許可。
執(zhí)行引擎負(fù)責(zé)把從class文件中的虛擬機(jī)機(jī)器指令(bytecode)翻譯為本地方法和 本地平臺(tái)的實(shí)際匯編代碼并通過本地CPU執(zhí)行,采用一次性解釋字節(jié)碼并結(jié)合自適 應(yīng)優(yōu)化技術(shù)的方案,統(tǒng)計(jì)出調(diào)用最頻繁的部分代碼進(jìn)行編譯,。
本地方法調(diào)用接口子系統(tǒng)用匯編將Java棧轉(zhuǎn)換為C棧,然后在C堆棧上實(shí)現(xiàn)函 數(shù)的調(diào)用,在C里面嵌入?yún)R編的形式來實(shí)現(xiàn)函數(shù)CVMjnilnvokeNative (),將由實(shí)參傳遞來的部分?jǐn)?shù)據(jù)通過直接或者運(yùn)算后得到本地方法的參數(shù),然后壓入本地棧,通過匯 編來實(shí)現(xiàn)本地的C函數(shù)調(diào)用。
垃圾回收子系統(tǒng)采用漸進(jìn)式收集垃圾,在成熟對(duì)象空間中提供限定時(shí)間的漸進(jìn)收 集,所有的資源都可以由同一個(gè)垃圾回收器來清除和分配;其使用虛擬表技術(shù)把一個(gè) 對(duì)Java對(duì)象在內(nèi)存中的表現(xiàn)分成三個(gè)部分handle pool, object pool, data pool, 其中handle pool和object pool在堆中存放,data pool在方法區(qū)中存放,當(dāng)垃圾回收子 系統(tǒng)移除一個(gè)Java對(duì)象實(shí)例的時(shí)候只需要修改該對(duì)象存放在handle pool中的對(duì)象指 針即可。
與現(xiàn)有技術(shù)比較,本發(fā)明的優(yōu)點(diǎn)是
1. 支持中國標(biāo)準(zhǔn)(DTVM),符合數(shù)字電視中間件GEM標(biāo)準(zhǔn),所以在功能和接口 上80%和其他國家地區(qū)的數(shù)字電視中間件標(biāo)準(zhǔn)一致,移植的工作量將非常小,很容易 向其他標(biāo)準(zhǔn)(MHP, OCAP)移植。
2. 基于虛擬機(jī)技術(shù)的中間件平臺(tái)上開發(fā)應(yīng)用只需要用簡(jiǎn)單的JAVA語言,由于 JAVA簡(jiǎn)單和跨平臺(tái)特點(diǎn),不僅提高了數(shù)字電視應(yīng)用的開發(fā)效率,同時(shí)應(yīng)用可以基 于我們Jave虛擬機(jī)中間件的不同硬件平臺(tái)上運(yùn)行不用再做移植工作。
3. 采用了統(tǒng)一資源管理的模式,所有的資源都可以由同一個(gè)垃圾回收器來清除和 分配(甚至包含編譯好了的字節(jié)碼),可以使用標(biāo)記-清除-緊縮的垃圾回收方式管理 內(nèi)存資源,這樣就避免了一般JVM有小碎片的問題。
4. 采用JAVA線程與下層OS平臺(tái)線程管理分離技術(shù),這樣運(yùn)行于Jave虛擬機(jī) 的線程對(duì)OS而言是透明的,與具體的OS平臺(tái)無關(guān),因此在我們的3H-JM跑多JAVA 應(yīng)用將不再受制于某個(gè)OS平臺(tái)
5. 由于線程每調(diào)用一個(gè)方法就會(huì)為該方法分配相應(yīng)的Java棧,因此不用考慮方 法內(nèi)部變量多線程同步問題,由于不使用真實(shí)CPU的積存器,節(jié)省了寶貴的硬件資 源,同時(shí)易于把Jave虛擬機(jī)移植到只有很少寄存器的硬件平臺(tái)上。
圖l是本發(fā)明Jave虛擬機(jī)的內(nèi)部體系結(jié)構(gòu)示意圖; 圖2是Jave虛擬機(jī)在中間件軟件層次的結(jié)構(gòu)示意圖; 圖3是Jave虛擬機(jī)的內(nèi)部功能模塊結(jié)構(gòu)示意圖; 圖4是類裝載子系統(tǒng)的模塊流程圖; 圖5是系統(tǒng)安全管理器的關(guān)系流程圖;圖6是Java棧、Java幀和Java方法調(diào)用狀態(tài)的關(guān)系示意圖。
具體實(shí)施例方式
下面結(jié)合附圖對(duì)本發(fā)明做進(jìn)一步說明。
圖1中,本發(fā)明包括基于硬件平臺(tái)的操作系統(tǒng)和設(shè)備驅(qū)動(dòng)程序,其特征是在操作系統(tǒng)和設(shè)備驅(qū)動(dòng)程序的基礎(chǔ)上設(shè)置平臺(tái)適配層;在該適配層的基礎(chǔ)上,利用包含安裝中間件系統(tǒng)中的Java虛擬機(jī)和機(jī)頂盒設(shè)備的核心類庫,構(gòu)建一至少由類裝載子系統(tǒng)、安全管理子系統(tǒng)、執(zhí)行引擎和本地方法調(diào)用接口子系統(tǒng)功能模塊所構(gòu)成的Jave虛擬機(jī),為給數(shù)字電視中間件提供一個(gè)Java應(yīng)用與業(yè)務(wù)的運(yùn)行平臺(tái),同時(shí)支持本地文件系統(tǒng)和網(wǎng)絡(luò)訪問。
本發(fā)明定義了一套Java的運(yùn)行環(huán)境和開發(fā)環(huán)境,它包含了安裝中間件系統(tǒng)中的Java虛擬機(jī)和特別為了機(jī)頂盒設(shè)備的核心類庫。
本發(fā)明的Jave虛擬機(jī)還可包括垃圾回收子系統(tǒng)功能模塊。
數(shù)字電視支持JAVA應(yīng)用,能與互聯(lián)網(wǎng)相結(jié)合,提供交互式電視,中間件系統(tǒng)必須有一個(gè)Java虛擬機(jī)(JVM),它提供對(duì)JAVA代碼的分析,支持HTML/XML,支持互聯(lián)網(wǎng)瀏覽。提供Jave虛擬機(jī)是中間件系統(tǒng)不可或缺的功能。
圖2中,給出了中間件在軟件層次的總體結(jié)構(gòu),其中,應(yīng)用程序管理器負(fù)責(zé)第三方Java應(yīng)用程序(諸如股票查詢分析/車牌違章查詢/投票/游戲等等)的下載,運(yùn)行和銷毀,以及應(yīng)用使用系統(tǒng)資源的管理。
SI引擎接收從調(diào)制解調(diào)設(shè)備(tuner)傳送過來的TS數(shù)據(jù),根據(jù)SI協(xié)議(數(shù)字電視廣播中文業(yè)務(wù)信息規(guī)范/DVB-SI)從這些TS數(shù)據(jù)中獲取相應(yīng)的表信息(NIT/PAT/AIT/PMT)提供給上層應(yīng)用服務(wù)。
OC/DC引擎根據(jù)數(shù)字媒體存儲(chǔ)和命令(DSMCC),協(xié)議解析從TS或網(wǎng)絡(luò)中的數(shù)據(jù),還原成相應(yīng)的文件和數(shù)據(jù)對(duì)象。
Jave虛擬機(jī)提供數(shù)字電視Java應(yīng)用與業(yè)務(wù)的運(yùn)行和管理平臺(tái),包含文件系統(tǒng)和網(wǎng)絡(luò)以及安全,是數(shù)字電視增值業(yè)務(wù)的技術(shù)核心。
平臺(tái)適配層提供下層(操作系統(tǒng)/設(shè)備驅(qū)動(dòng))系統(tǒng)與上層各模塊的接口,方便整個(gè)數(shù)字電視中間件移植到不同的平臺(tái),支持不同的原始設(shè)備供應(yīng)商。
圖3中,本Jave虛擬機(jī)至少由類裝載子系統(tǒng)、安全管理子系統(tǒng)、執(zhí)行引擎和本地方法調(diào)用接口子系統(tǒng)功能模塊所構(gòu)成,Jave虛擬機(jī)還可包括垃圾回收子系統(tǒng)功能模塊。其中,平臺(tái)適配層提供操作系統(tǒng)和/或設(shè)備驅(qū)動(dòng)系統(tǒng)與上層各模塊的接口,采用
JAVA線程與下層OS平臺(tái)線程管理分離技術(shù),這樣運(yùn)行于Jave虛擬機(jī)的線程對(duì)OS而言是透明的,與具體的OS平臺(tái)無關(guān),方便整個(gè)數(shù)字電視中間件移植到不同的平臺(tái),支持不同的原始設(shè)備供應(yīng)商。
類裝載子系統(tǒng)裝載JAVA類,通過指定的類的類型完全限定名產(chǎn)生一個(gè)代表該類型的二進(jìn)制數(shù)據(jù)流。把這些二進(jìn)制數(shù)據(jù)流解析到相應(yīng)的方法區(qū)的數(shù)據(jù)結(jié)構(gòu)中,創(chuàng)建一個(gè)表示該類型的Java丄ang.Class的類實(shí)例,然后驗(yàn)證該類符合的JAVA語法的語義,接著初始化該類,最后連接到實(shí)際應(yīng)用該JAVA的區(qū)域。
安全管理子系統(tǒng)先實(shí)現(xiàn)類java.lang.SecurityManager,該類有一個(gè)訪問控制器(AccessCon加ller)對(duì)象,當(dāng)運(yùn)行在Jave虛擬機(jī)內(nèi)的代碼需要訪問Jave虛擬機(jī)系統(tǒng)外部的某個(gè)資源時(shí),對(duì)該代碼進(jìn)行訪問的檢查,安全管理器會(huì)把每一個(gè)當(dāng)前運(yùn)行的java代碼創(chuàng)建的Permission對(duì)象傳遞給AccessController對(duì)象的checkPermission ()方法去,由于每個(gè)被調(diào)用的Java代碼都有自己的Java幀,每個(gè)java幀又屬于具體的某個(gè)Java線程調(diào)用的方法,而每個(gè)Java方法在相應(yīng)的Java類中被定義,每個(gè)Java類都屬于某個(gè)保護(hù)域,每個(gè)保護(hù)域都定義了相應(yīng)的系統(tǒng)訪問權(quán)限,根據(jù)這些權(quán)限來判定目前的Java幀中運(yùn)行的代碼訪問的系統(tǒng)資源是否被許可。
執(zhí)行引擎負(fù)責(zé)把從class文件中的虛擬機(jī)機(jī)器指令(bytecode)翻譯為本地方法和本地平臺(tái)的實(shí)際匯編代碼并通過本地CPU執(zhí)行,采用一次性解釋字節(jié)碼并結(jié)合自適應(yīng)優(yōu)化技術(shù)的方案,統(tǒng)計(jì)出調(diào)用最頻繁的部分代碼進(jìn)行編譯。
具體的,虛擬機(jī)代碼解析器子系統(tǒng)主要負(fù)責(zé)把從class文件中的虛擬機(jī)機(jī)器指令(bytecode)翻譯為本地方法和本地平臺(tái)的實(shí)際匯編代碼并通過本地CPU執(zhí)行。執(zhí)行引擎處于Java虛擬機(jī)的核心位置,它的行為由指令集所決定,其主要作用就是解釋字節(jié)碼(即運(yùn)行經(jīng)過編譯后的Java程序的class文件),不同的執(zhí)行引擎實(shí)現(xiàn)可能非常不同。在我們3H-JVM實(shí)現(xiàn)的虛擬機(jī)執(zhí)行引擎中采用一次性解釋字節(jié)碼并結(jié)合自適應(yīng)優(yōu)化技術(shù)的方案實(shí)現(xiàn)。
其具體設(shè)計(jì)思路如下由于在JVM中運(yùn)行的代碼被執(zhí)行的頻率不一樣,我們統(tǒng)計(jì)出調(diào)用最頻繁的部分代碼進(jìn)行編譯(該部分的比例目前在實(shí)現(xiàn)中為總運(yùn)行代碼的20%,可設(shè)置),這樣在節(jié)省內(nèi)存空間時(shí)(在目前PC版的JVM中由于內(nèi)存都比較大,在執(zhí)行引擎的實(shí)現(xiàn)中都采用JIT技術(shù),及把所有運(yùn)行的代碼全部編譯,而在我們的數(shù)字電視機(jī)頂盒由于內(nèi)存的限制所以采用JIT是不現(xiàn)實(shí)的,因此我們使用自適應(yīng)優(yōu)化只需要編譯其中的部分代碼(大約為20%的比例)),除了在Java應(yīng)用程序第一次啟動(dòng)的時(shí)候會(huì)慢點(diǎn)(由于持續(xù)時(shí)間不長(zhǎng)一般很用戶很難感覺到),后面執(zhí)行就很快。
本地方法調(diào)用接口子系統(tǒng)用匯編將Java棧轉(zhuǎn)換為C棧,然后在C堆棧上實(shí)現(xiàn)函數(shù)的調(diào)用,在C里面嵌入?yún)R編的形式來實(shí)現(xiàn)函數(shù)CVMjnilnvokeNative(),該函數(shù)的形參有7個(gè),完成的主要功能是將由實(shí)參傳遞來的部分?jǐn)?shù)據(jù)通過直接或者運(yùn)算后得到本地方法的參數(shù),然后壓入本地棧,通過匯編來實(shí)現(xiàn)本地的C函數(shù)調(diào)用。實(shí)參傳遞過來的7個(gè)數(shù)據(jù)包含JNI環(huán)境指針(erw)、本地方法的函數(shù)指針(native code) 、 Java棧指針(args)、本地方法的描述符(terse sig) , Java棧的參數(shù)總數(shù)(args size)表示靜態(tài)或非靜態(tài)方法的類對(duì)象標(biāo)志(classobject)及用于存儲(chǔ)返回值的一個(gè)指針變量(retura value),其中env要作為第一個(gè)本地方法的參數(shù)傳遞,并且native code也要傳遞到本地方法來實(shí)現(xiàn)本地方法的正確調(diào)用。
垃圾回收子系統(tǒng)采用漸進(jìn)式收集垃圾,在成熟對(duì)象空間中提供限定時(shí)間的漸進(jìn)收集,所有的資源都可以由同一個(gè)垃圾回收器來清除和分配;其使用虛擬表技術(shù)把一個(gè)對(duì)Java對(duì)象在內(nèi)存中的表現(xiàn)分成三個(gè)部分handle pool, object pool, data pool,其中handlepool和object pool在堆中存放,data pool在方法區(qū)中存放,當(dāng)垃圾回收子系統(tǒng)移除一個(gè)Java對(duì)象實(shí)例的時(shí)候只需要修改該對(duì)象存放在handle pool中的對(duì)象指針即可。
垃圾回收子系統(tǒng)設(shè)計(jì)的好壞直接影響JVM的執(zhí)行性能和內(nèi)存消耗。垃圾回收子系統(tǒng)的功能是回收不再使用的內(nèi)存對(duì)象同時(shí)對(duì)不連續(xù)的堆碎片進(jìn)行整理,在機(jī)頂盒上運(yùn)行java程序,性能很重要,我們不希望在運(yùn)行Java程序時(shí)候我們的垃圾回收子系統(tǒng)占用太長(zhǎng)的時(shí)間以至讓Java程序運(yùn)行緩慢,所以我們必須保證垃圾回收子系統(tǒng)運(yùn)行時(shí)不能超過一個(gè)最大時(shí)間,在本發(fā)明中實(shí)現(xiàn)垃圾回收子系統(tǒng)采用了采用漸進(jìn)式收集垃圾,并不是一次收集所有的垃圾,在成熟對(duì)象空間中提供限定時(shí)間的漸進(jìn)收集,這樣保證了收集時(shí)間不會(huì)太長(zhǎng)。
圖4中,給出了類裝載子系統(tǒng)德爾系統(tǒng)組成及功能模塊間關(guān)聯(lián)圖,其主要功能為裝載JAVA類,通過指定的類的類型完全限定名(該的裝載域唯一標(biāo)識(shí)名稱)產(chǎn)生一個(gè)代表該類型的二進(jìn)制數(shù)據(jù)流。把這些二進(jìn)制數(shù)據(jù)流解析到相應(yīng)的3H-JVM方法區(qū)的數(shù)據(jù)結(jié)構(gòu)中。創(chuàng)建一個(gè)表示該類型的Java.Lang.Class的類實(shí)例。然后驗(yàn)證該類符合的JAVA語法的語義,接著初始化該類,最后連接到實(shí)際應(yīng)用該JAVA的區(qū)域。
其具體的實(shí)現(xiàn)方式及規(guī)格
用標(biāo)準(zhǔn)C語言實(shí)現(xiàn)對(duì)Java Class文件的裝載解析驗(yàn)證以及初始化,符合JVM規(guī)范,支持JDK1.1 JDK1.3標(biāo)準(zhǔn).Class文件的來源支持有下面幾種途徑本地文件系統(tǒng)裝載、網(wǎng)絡(luò)下載、從壓縮文檔(JAR, ZIP, CBA)中提取、專有數(shù)據(jù)庫中提取、從Java源程序再生成Class文件中提取等。
圖5中,系統(tǒng)安全管理器主要是保護(hù)在我們3H-JVM之外的系統(tǒng)資源不被運(yùn)行在3H-JVM內(nèi)部的有漏洞或惡意的代碼破壞.當(dāng)java應(yīng)用程序啟動(dòng)的時(shí)候,它還沒有安全管理器,但是,應(yīng)用程序通過將一個(gè)指向java.lang.SecurityManager或是其子類的實(shí)例給setSecurityManger(),以此來安裝安全管理器,因此我們3H-JVM要實(shí)現(xiàn)系統(tǒng)安全管理器必須先實(shí)現(xiàn)類java.lang.SecurityManager ,該類有 一 個(gè)訪問控制器(AccessControUer)對(duì)象,該對(duì)象的作用當(dāng)運(yùn)行在3H-JVM內(nèi)的代碼需要訪問3H-JVM系統(tǒng)外部的某個(gè)資源時(shí),對(duì)該代碼進(jìn)行訪問的檢查。其具體實(shí)現(xiàn)是安全管理器會(huì)把每一個(gè)當(dāng)前運(yùn)行的java代碼創(chuàng)建的Permission對(duì)象傳遞給AccessController對(duì)象的checkPermission ()方法去,由于每個(gè)被調(diào)用的Java代碼都有自己的Java幀,每個(gè)Java幀又屬于具體的某個(gè)Java線程調(diào)用的方法,而每個(gè)Java方法在相應(yīng)的Java類中被定義,每個(gè)Java類都屬于某個(gè)保護(hù)域,每個(gè)保護(hù)域都定義了相應(yīng)的系統(tǒng)訪問權(quán)限,這樣我們就能根據(jù)這些權(quán)限來判定目前的Java幀中運(yùn)行的代碼訪問的系統(tǒng)資源是否被許可。
圖6中,在本技術(shù)方案的實(shí)現(xiàn)中,不使用真正硬件平臺(tái)的寄存器來保存中間數(shù)據(jù),而采用Java棧(每個(gè)Java線程在創(chuàng)建的時(shí)候,均會(huì)給它分配一個(gè)獨(dú)有棧,用來存放該線程的中間數(shù)據(jù)),每個(gè)Java棧又由多個(gè)Java幀組成,在每個(gè)Java幀中保存了一個(gè)Java方法的調(diào)用狀態(tài),這樣本發(fā)明所涉及的硬件系統(tǒng)結(jié)構(gòu)會(huì)更緊湊,同時(shí)由于線程每調(diào)用一個(gè)方法就會(huì)為該方法分配相應(yīng)的Java棧,因此不用考慮方法內(nèi)部變量多線程同步問題,由于不使用真實(shí)CPU的寄存器,節(jié)省了寶貴的硬件資源,同時(shí)易于把本發(fā)明移植到只有很少寄存器的硬件平臺(tái)上。
由于本發(fā)明的技術(shù)方案符合數(shù)字電視中間件GEM標(biāo)準(zhǔn),支持中國標(biāo)準(zhǔn)(DTVM),所以在功能和接口上80%和其他國家地區(qū)的數(shù)字電視中間件標(biāo)準(zhǔn)一致,很容易向其他標(biāo)準(zhǔn)(MHP, OCAP)移植,移植的工作量將非常小。
此外,在以前的數(shù)字電視應(yīng)用開發(fā)中, 一般采用C/C++作為其開發(fā)語言,其在一個(gè)硬件平臺(tái)上開發(fā)的應(yīng)用就不能直接在另外一個(gè)平臺(tái)上運(yùn)行,如果一家有線運(yùn)營商采購了多家廠家的數(shù)字電視機(jī)頂盒產(chǎn)品或者同一個(gè)公司機(jī)頂盒的不同版本就需要為每一個(gè)平臺(tái)做一次應(yīng)用的移植工作,不但浪費(fèi)應(yīng)用開發(fā)和維護(hù)費(fèi)用同時(shí)還降低了運(yùn)營效率.也限制了數(shù)字電視產(chǎn)業(yè)的發(fā)展,而在本發(fā)明中,基于Jave虛擬機(jī)技術(shù)的中間件平臺(tái)上開發(fā)應(yīng)用只需要用簡(jiǎn)單的JAVA語言,由于JAVA簡(jiǎn)單和跨平臺(tái)特點(diǎn),不僅提高了數(shù)字電視應(yīng)用的開發(fā)效率,同時(shí)應(yīng)用可以在基于JVM中間件的不同硬件平臺(tái)上運(yùn)行不用再做移植工作。
同時(shí),本發(fā)明一個(gè)很大的優(yōu)點(diǎn)是采用了統(tǒng)一資源管理的模式,在本Jave虛擬機(jī)中
分配的數(shù)據(jù)全被放到對(duì)象棧,這些數(shù)據(jù)包含
*Java X寸象。
,反射對(duì)象,如方法和類。*字節(jié)碼。 . 虛擬機(jī)內(nèi)部數(shù)據(jù)結(jié)構(gòu)。
一個(gè)很重要的的優(yōu)點(diǎn)是所有的資源都可以由同一個(gè)垃圾回收器來清除和分配(甚至包含編譯好了的字節(jié)碼),然而其他的一般的Java虛擬機(jī)都采用指定的區(qū)域存放相應(yīng)的資源比如用戶對(duì)象,反射數(shù)據(jù),臨時(shí)數(shù)據(jù)和字節(jié)碼,而這樣很容易形成小碎片,采用統(tǒng)一資源管理的方式可以使用標(biāo)記-清除-緊縮的垃圾回收方式管理內(nèi)存資源,這樣就避免了 一般JVM有小碎片的問題。
本發(fā)明可廣泛用于數(shù)字電視系統(tǒng)領(lǐng)域。
權(quán)利要求
1.一種數(shù)字電視中間件系統(tǒng)的跨平臺(tái)Jave虛擬機(jī),包括基于硬件平臺(tái)的操作系統(tǒng)和設(shè)備驅(qū)動(dòng)程序,其特征是在操作系統(tǒng)和設(shè)備驅(qū)動(dòng)程序的基礎(chǔ)上設(shè)置平臺(tái)適配層;在該適配層的基礎(chǔ)上,利用包含安裝中間件系統(tǒng)中的Java虛擬機(jī)和機(jī)頂盒設(shè)備的核心類庫,構(gòu)建一至少由類裝載子系統(tǒng)、安全管理子系統(tǒng)、執(zhí)行引擎和本地方法調(diào)用接口子系統(tǒng)功能模塊所構(gòu)成的Jave虛擬機(jī),為給數(shù)字電視中間件提供一個(gè)Java應(yīng)用與業(yè)務(wù)的運(yùn)行平臺(tái),同時(shí)支持本地文件系統(tǒng)和網(wǎng)絡(luò)訪問。
2. 按照權(quán)利要求1所述的數(shù)字電視中間件系統(tǒng)的跨平臺(tái)Jave虛擬機(jī),其特征是所 述的Jave虛擬機(jī)還包括垃圾回收子系統(tǒng)功能模塊。
3. 按照權(quán)利要求1所述的數(shù)字電視中間件系統(tǒng)的跨平臺(tái)Jave虛擬機(jī),其特征是所 述的平臺(tái)適配層提供操作系統(tǒng)和/或設(shè)備驅(qū)動(dòng)系統(tǒng)與上層各模塊的接口,采用JAVA線 程與下層OS平臺(tái)線程管理分離技術(shù),這樣運(yùn)行于Jave虛擬機(jī)的線程對(duì)OS而言是 透明的,與具體的OS平臺(tái)無關(guān),方便整個(gè)數(shù)字電視中間件移植到不同的平臺(tái),支持 不同的原始設(shè)備供應(yīng)商。
4. 按照權(quán)利要求1所述的數(shù)字電視中間件系統(tǒng)的跨平臺(tái)Jave虛擬機(jī),其特征是所 述的類裝載子系統(tǒng)裝載JAVA類,通過指定的類的類型完全限定名產(chǎn)生一個(gè)代表該類 型的二進(jìn)制數(shù)據(jù)流。把這些二進(jìn)制數(shù)據(jù)流解析到相應(yīng)的方法區(qū)的數(shù)據(jù)結(jié)構(gòu)中,創(chuàng)建一 個(gè)表示該類型的Java丄ang.Class的類實(shí)例,然后驗(yàn)證該類符合的JAVA語法的語義, 接著初始化該類,最后連接到實(shí)際應(yīng)用該JAVA的區(qū)域。
5. 按照權(quán)利要求1所述的數(shù)字電視中間件系統(tǒng)的跨平臺(tái)Jave虛擬機(jī),其特征是所 述的安全管理子系統(tǒng)先實(shí)現(xiàn)類java.lang.SecurityManager,該類有一個(gè)訪問控制器對(duì)象, 當(dāng)運(yùn)行在Jave虛擬機(jī)內(nèi)的代碼需要訪問Jave虛擬機(jī)系統(tǒng)外部的某個(gè)資源時(shí),對(duì)該代碼 進(jìn)行訪問的檢查,安全管理器會(huì)把每一個(gè)當(dāng)前運(yùn)行的java代右馬創(chuàng)建的Permission對(duì)象 傳遞給AccessController對(duì)象的checkPermission ()方法去,由于每個(gè)被調(diào)用的Java 代碼都有自己的Java幀,每個(gè)Java幀又屬于具體的某個(gè)Java線程調(diào)用的方法,而每 個(gè)Java方法在相應(yīng)的Java類中被定義,每個(gè)Java類都屬于某個(gè)保護(hù)域,每個(gè)保護(hù)域 都定義了相應(yīng)的系統(tǒng)訪問權(quán)限,根據(jù)這些權(quán)限來判定目前的Java幀中運(yùn)行的代碼訪問 的系統(tǒng)資源是否被許可。
6. 按照權(quán)利要求1所述的數(shù)字電視中間件系統(tǒng)的跨平臺(tái)Jave虛擬機(jī),其特征是所述的執(zhí)行引擎負(fù)責(zé)把從class文件中的虛擬機(jī)機(jī)器指令翻譯為本地方法和本地平臺(tái)的 實(shí)際匯編代碼并通過本地CPU執(zhí)行,采用一次性解釋字節(jié)碼并結(jié)合自適應(yīng)優(yōu)化技術(shù)的 方案,統(tǒng)計(jì)出調(diào)用最頻繁的部分代碼進(jìn)行編譯,。
7. 按照權(quán)利要求1所述的數(shù)字電視中間件系統(tǒng)的跨平臺(tái)Jave虛擬機(jī),其特征是所 述的本地方法調(diào)用接口子系統(tǒng)用匯編將Java棧轉(zhuǎn)換為C棧,然后在C堆棧上實(shí)現(xiàn)函 數(shù)的調(diào)用,在C里面嵌入?yún)R編的形式來實(shí)現(xiàn)函數(shù)CVMjnilnvokeNative(),將由實(shí)參傳 遞來的部分?jǐn)?shù)據(jù)通過直接或者運(yùn)算后得到本地方法的參數(shù),然后壓入本地棧,通過匯 編來實(shí)現(xiàn)本地的C函數(shù)調(diào)用。
8. 按照權(quán)利要求1所述的數(shù)字電視中間件系統(tǒng)的跨平臺(tái)Jave虛擬機(jī),其特征是所 述的垃圾回收子系統(tǒng)采用漸進(jìn)式收集垃圾,在成熟對(duì)象空間中提供限定時(shí)間的漸進(jìn)收 集,所有的資源都可以由同一個(gè)垃圾回收器來清除和分配;其使用虛擬表技術(shù)把一個(gè) 對(duì)Java對(duì)象在內(nèi)存中的表現(xiàn)分成三個(gè)部分handle pool, object pool, data pool, 其中handle pool和object pool在堆中存放,data pool在方法區(qū)中存放,當(dāng)垃圾回收子 系統(tǒng)移除一個(gè)Java對(duì)象實(shí)例的時(shí)候只需要修改該對(duì)象存放在handle pool中的對(duì)象指 針即可。
全文摘要
一種數(shù)字電視中間件系統(tǒng)的跨平臺(tái)Jave虛擬機(jī),屬通信技術(shù)領(lǐng)域。包括基于硬件平臺(tái)的操作系統(tǒng)和設(shè)備驅(qū)動(dòng)程序,其在操作系統(tǒng)和設(shè)備驅(qū)動(dòng)程序的基礎(chǔ)上設(shè)置平臺(tái)適配層;在該適配層的基礎(chǔ)上,利用包含安裝中間件系統(tǒng)中的Java虛擬機(jī)和機(jī)頂盒設(shè)備的核心類庫,構(gòu)建一至少由類裝載子系統(tǒng)、安全管理子系統(tǒng)、執(zhí)行引擎和本地方法調(diào)用接口子系統(tǒng)功能模塊所構(gòu)成的Jave虛擬機(jī),為給數(shù)字電視中間件提供一個(gè)Java應(yīng)用與業(yè)務(wù)的運(yùn)行平臺(tái)。其支持中國標(biāo)準(zhǔn),很容易向其他標(biāo)準(zhǔn)移植,與硬件平臺(tái)無關(guān),統(tǒng)一資源管理,運(yùn)行的Jave線程數(shù)量不受OS限制,具有更緊湊的系統(tǒng)結(jié)構(gòu)和占用更少的硬件資源以及更少的硬件平臺(tái)限制。
文檔編號(hào)G06F9/46GK101593127SQ20081003811
公開日2009年12月2日 申請(qǐng)日期2008年5月27日 優(yōu)先權(quán)日2008年5月27日
發(fā)明者王賢生, 許海華, 陳德環(huán) 申請(qǐng)人:商埃曲網(wǎng)絡(luò)軟件(上海)有限公司