RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

應(yīng)用于數(shù)字電視機(jī)頂盒的Java虛擬機(jī)的特點(diǎn)介紹

電子設(shè)計(jì) ? 作者:電子設(shè)計(jì) ? 2018-09-03 10:31 ? 次閱讀

引言

隨著有線廣播電視網(wǎng)向數(shù)字化、網(wǎng)絡(luò)化、產(chǎn)業(yè)化方向發(fā)展,利用有線電視網(wǎng)絡(luò)作為傳輸平臺(tái)的數(shù)字電視機(jī)頂盒除了能夠讓用戶(hù)在現(xiàn)有模擬電視機(jī)上觀看數(shù)字電視節(jié)目之外,廣播和交互式多媒體應(yīng)用功能的要求也應(yīng)運(yùn)而生,互動(dòng)電視成為數(shù)字電視發(fā)展的方向。眾多程序員熟悉的為網(wǎng)絡(luò)廣泛運(yùn)用的Java語(yǔ)言能很好地滿(mǎn)足機(jī)頂盒一些服務(wù)應(yīng)用的要求,因此提出了包含Java虛擬機(jī)的數(shù)字電視機(jī)頂盒中間件的系統(tǒng)架構(gòu),該虛擬機(jī)用來(lái)執(zhí)行Java應(yīng)用程序,并且中間件將應(yīng)用程序和底層操作系統(tǒng)硬件細(xì)節(jié)隔離開(kāi),使上層的數(shù)字電視的服務(wù)應(yīng)用不必考慮過(guò)多的底層細(xì)節(jié)。本文主要介紹了J2ME中主要用于數(shù)字電視領(lǐng)域的CDC的移植,其中又著重介紹了本地方法(native method)的實(shí)現(xiàn)過(guò)程。

結(jié)構(gòu)及工作原理

Java虛擬機(jī)工作原理

應(yīng)用于數(shù)字電視機(jī)頂盒的Java虛擬機(jī)的特點(diǎn)介紹

圖1Java虛擬機(jī)的工作過(guò)程

Java虛擬機(jī)處于機(jī)器和編譯程序之間,在任何平臺(tái)上都提供給編譯程序一個(gè)共同的接口。Java源程序經(jīng)過(guò)編譯器編譯后變成字節(jié)碼,字節(jié)碼由虛擬機(jī)解釋執(zhí)行,虛擬機(jī)將每一條要執(zhí)行的字節(jié)碼送給解釋器,解釋器將其翻譯成特定機(jī)器上的機(jī)器碼,然后在特定的機(jī)器上運(yùn)行。

Java虛擬機(jī)的主要任務(wù)是裝載class文件并且執(zhí)行其中的字節(jié)碼。Java虛擬機(jī)包含一個(gè)類(lèi)裝載器,它可以從程序和API中裝載class文件。字節(jié)碼由執(zhí)行引擎來(lái)執(zhí)行,具體過(guò)程如圖1所示。

Java虛擬機(jī)結(jié)構(gòu)

類(lèi)裝載器的體系結(jié)構(gòu)是Java虛擬機(jī)在安全性和網(wǎng)絡(luò)移動(dòng)性上發(fā)揮重要作用的一個(gè)方面,圖中所示的類(lèi)裝載器可以包含多個(gè)類(lèi)裝載器的子系統(tǒng), Java應(yīng)用程序能夠在運(yùn)行時(shí)決定需要安裝的類(lèi),并且將被不同的類(lèi)裝載器裝載的類(lèi)存放在不同的命名空間。

執(zhí)行引擎處于Java虛擬機(jī)的核心位置,它的行為由指令集所決定,其主要作用就是解釋字節(jié)碼(即運(yùn)行經(jīng)過(guò)編譯后的Java程序的class文件) ,不同的執(zhí)行引擎實(shí)現(xiàn)可能非常不同。由軟件實(shí)現(xiàn)的虛擬機(jī)的執(zhí)行引擎分為一次性解釋字節(jié)碼、即時(shí)編譯器和自適應(yīng)優(yōu)化器,由硬件芯片構(gòu)成的虛擬機(jī)用本地方法執(zhí)行Java字節(jié)碼,它的執(zhí)行引擎是內(nèi)嵌在芯片里。

Java虛擬機(jī)相當(dāng)于一個(gè)堆棧計(jì)算機(jī),它在指令間傳送信息時(shí)不使用任何物理寄存器,而使用堆棧的幀來(lái)表示方法的狀態(tài)、字節(jié)碼的操作對(duì)象、方法的參數(shù)空間及局部變量的空間,它的“程序計(jì)數(shù)器”為一個(gè)偽寄存器,是當(dāng)前所執(zhí)行指令的字節(jié)碼數(shù)組的一個(gè)指針。

Java實(shí)現(xiàn)方法

Java有兩種實(shí)現(xiàn)方法:Java方法和本地方法。Java方法是由Java 語(yǔ)言編寫(xiě),編譯成字節(jié)碼,存儲(chǔ)在class文件中。本地方法是由其他語(yǔ)言(比如C,C++,或者匯編語(yǔ)言)編寫(xiě)的,編譯成和處理器相關(guān)的機(jī)器代碼,保存在動(dòng)態(tài)連接庫(kù)中,格式是各個(gè)平臺(tái)專(zhuān)有的,它是聯(lián)系Java程序和底層主機(jī)操作系統(tǒng)的連接方法。Java方法與平臺(tái)無(wú)關(guān),但是本地方法卻不是,運(yùn)行中的Java程序調(diào)用本地方法時(shí),虛擬機(jī)裝載包含這個(gè)本地方法的動(dòng)態(tài)庫(kù),并調(diào)用這個(gè)方法。通過(guò)本地方法, Java程序可以直接訪問(wèn)底層操作系統(tǒng)的資源,使程序和特定的平臺(tái)相關(guān),一個(gè)本地方法接口——Java本地接口(JNI)使得本地方法可以在特定的主機(jī)系統(tǒng)的任何一個(gè)Java平臺(tái)上運(yùn)行。

J2ME中的CDC移植的解決方案

我們選用的要移植的Java虛擬機(jī)是Sun公司提供的J2ME對(duì)于數(shù)字電視領(lǐng)域CDC配置,該虛擬機(jī)是針對(duì)Linux的軟件實(shí)現(xiàn)(用C語(yǔ)言編寫(xiě)的虛擬機(jī),該虛擬機(jī)也稱(chēng)為C Virtual Machine,簡(jiǎn)稱(chēng)CVM) 。Java虛擬機(jī)規(guī)范并沒(méi)有強(qiáng)求Java虛擬機(jī)必須支持任何特定的本地方法接口,但是Sun 公司提供了本地方法接口(Java Native Interface) ,是為移植所用。Java程序通過(guò)調(diào)用本地方法和主機(jī)交互。

Java虛擬機(jī)

應(yīng)用于數(shù)字電視機(jī)頂盒的Java虛擬機(jī)的特點(diǎn)介紹

圖2Java虛擬機(jī)的位置

虛擬機(jī)處于嵌入式操作系統(tǒng)OS20 上,因此Sun公司提供的Java虛擬機(jī)中與底層操作系統(tǒng)相關(guān)的操作都應(yīng)該替換為OS20的內(nèi)核函數(shù)。因此將Sun公司提供的CDC移植到OS20需要完成一些工作,比如: C語(yǔ)言中關(guān)于基本數(shù)據(jù)類(lèi)型的數(shù)據(jù)位的修改,關(guān)于線程的創(chuàng)建機(jī)制(OS20為任務(wù)) ,關(guān)于線程之間的同步、互斥,關(guān)于動(dòng)態(tài)連接的實(shí)現(xiàn),關(guān)于本地方法的實(shí)現(xiàn)等,本節(jié)主要介紹關(guān)于本地方法的實(shí)現(xiàn)過(guò)程。

本地方法

解釋器處理字節(jié)碼時(shí),與給定字節(jié)碼有關(guān)的動(dòng)作的語(yǔ)義、執(zhí)行字節(jié)碼的相關(guān)動(dòng)作大多是從堆棧中獲得其操作數(shù),并將其結(jié)果送回堆棧中。典型的情況下字節(jié)碼是帶有參數(shù)的,這些參數(shù)在字節(jié)碼流中緊跟在字節(jié)碼自身之后。

在虛擬機(jī)解釋字節(jié)碼過(guò)程中,執(zhí)行引擎會(huì)不時(shí)遇到請(qǐng)求本地方法調(diào)用的指令,虛擬機(jī)負(fù)責(zé)試著發(fā)起這個(gè)本地方法的調(diào)用。本地方法是Java虛擬機(jī)指令集的一種可編程擴(kuò)展,運(yùn)行這個(gè)本地方法就是Java虛擬機(jī)對(duì)這條指令的執(zhí)行。

本地方法函數(shù)調(diào)用

為了增加虛擬機(jī)的性能,加快其速度,解釋器在處理一些字節(jié)碼時(shí)調(diào)用的本地方法函數(shù)用匯編實(shí)現(xiàn)了將Java棧轉(zhuǎn)換為C棧,然后在C堆棧上實(shí)現(xiàn)函數(shù)的調(diào)用。Linux下是用獨(dú)立的匯編語(yǔ)言程序invokeNative_i386。 S實(shí)現(xiàn)函數(shù)CVMjniInvokeNative () ,我們采用在C里面嵌入?yún)R編的形式來(lái)實(shí)現(xiàn)該函數(shù)。

該函數(shù)的形參有7個(gè),完成的主要功能是將由實(shí)參傳遞來(lái)的部分?jǐn)?shù)據(jù)通過(guò)直接或者運(yùn)算后得到本地方法的參數(shù),然后壓入本地棧,通過(guò)匯編來(lái)實(shí)現(xiàn)本地的C函數(shù)調(diào)用。實(shí)參傳遞過(guò)來(lái)的7個(gè)數(shù)據(jù)包含JN I環(huán)境指針(env) 、本地方法的函數(shù)指針(native code) 、Java棧指針(args) 、本地方法的描述符(terse sig) , Java棧的參數(shù)總數(shù)(args size)表示靜態(tài)或非靜態(tài)方法的類(lèi)對(duì)象標(biāo)志(class object)及用于存儲(chǔ)返回值的一個(gè)指針變量(return value) ,其中env要作為第一個(gè)本地方法的參數(shù)傳遞,并且native code也要傳遞到本地方法來(lái)實(shí)現(xiàn)本地方法的正確調(diào)用。

J2ME中的CDC移植

由于Linux有多個(gè)通用寄存器,在實(shí)現(xiàn)該函數(shù)的代碼中充分運(yùn)用了如esp、ebp、esi等寄存器,但是OS20提供的可操作的寄存器只有3個(gè)通用寄存器Areg、Breg、Creg和1個(gè)工作指針寄存器Wptr (相當(dāng)于堆棧指針) ,在實(shí)現(xiàn)過(guò)程中,我們用在C函數(shù)中設(shè)立局部變量來(lái)代替Linux的通用寄存器,通過(guò)手動(dòng)調(diào)整工作棧指針來(lái)實(shí)現(xiàn)本地方法的調(diào)用,具體實(shí)現(xiàn)過(guò)程如圖3所示。

當(dāng)進(jìn)入?yún)R編函數(shù)時(shí),工作區(qū)指針為Wptr,實(shí)參、狀態(tài)寄存器和指令指針寄存器的值全部自動(dòng)入棧,然后是我們定義的代替Linux寄存器的局部變量自動(dòng)入棧,此時(shí)的Wptr自動(dòng)移到Wptr′,利用OS20的匯編指令,手動(dòng)將實(shí)參傳遞過(guò)來(lái)的參數(shù)通過(guò)計(jì)算得到本地方法參數(shù)的個(gè)數(shù),然后將本地方法所需的參數(shù)依次壓棧,最后再手動(dòng)調(diào)節(jié)工作區(qū)指針實(shí)現(xiàn)本地方法的成功調(diào)用。這里我們先將本地方法函數(shù)指針和1個(gè)標(biāo)志位flag(0x10101010)入棧,原因有兩個(gè):

①當(dāng)隨后我們手動(dòng)調(diào)節(jié)工作指針Wptr′到Wptr"時(shí),工作棧已由先前的嵌套匯編的函數(shù)進(jìn)入到了要調(diào)用的本地方法的C函數(shù),因此先前的函數(shù)的局部變量在此時(shí)無(wú)效,也就是說(shuō)此時(shí)如果用以前實(shí)參傳遞過(guò)來(lái)的本地函數(shù)指針調(diào)用本地的函數(shù)肯定不會(huì)成功,因此要把這個(gè)函數(shù)指針先手動(dòng)保存起來(lái)。

②flag的設(shè)置的原因是:本地方法的參數(shù)的個(gè)數(shù)不是固定的,而OS20 所提供的用匯編調(diào)用函數(shù)在回到函數(shù)入口點(diǎn)時(shí)只彈出Wptr"指向的4 個(gè)單元的內(nèi)容,因此多余的參數(shù)出棧操作也必須通過(guò)調(diào)節(jié)Wptr手動(dòng)完成,通過(guò)向下移動(dòng)Wptr查找flag標(biāo)志,再調(diào)節(jié)Wp tr到Wtpr+2即可正確地回到匯編函數(shù)。當(dāng)本地方法的參數(shù)完全手動(dòng)入棧后就可以手動(dòng)調(diào)節(jié)工作區(qū)指針Wptr而進(jìn)入到調(diào)用的本地函數(shù),函數(shù)返回后的第一件事是保存在寄存器中的函數(shù)的返回值到return value,恢復(fù)工作區(qū)指針Wptr,并將本地方法的返回值類(lèi)型作為嵌入?yún)R編的函數(shù)的返回值,此時(shí)就完成了由Java棧到C棧的轉(zhuǎn)換,并成功調(diào)用本地方法。

應(yīng)用于數(shù)字電視機(jī)頂盒的Java虛擬機(jī)的特點(diǎn)介紹

圖3Java棧到本地棧的轉(zhuǎn)換


結(jié) 論

通過(guò)對(duì)Sun公司下載的CDC代碼的修改與編寫(xiě),對(duì)CDC中的加載的類(lèi)做了一些裁減,并且將線程化的解釋器改為一次性解釋字節(jié)碼的單線程解釋器簡(jiǎn)化程序,成功地生成了在機(jī)頂盒上可以運(yùn)行簡(jiǎn)單的Java程序的虛擬機(jī)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 機(jī)頂盒
    +關(guān)注

    關(guān)注

    4

    文章

    390

    瀏覽量

    54120
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5336

    瀏覽量

    120230
  • JAVA
    +關(guān)注

    關(guān)注

    19

    文章

    2966

    瀏覽量

    104702
  • 虛擬機(jī)
    +關(guān)注

    關(guān)注

    1

    文章

    914

    瀏覽量

    28160
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    雙向數(shù)字電視機(jī)頂盒的設(shè)計(jì)與實(shí)現(xiàn)

    雙向數(shù)字電視機(jī)頂盒的設(shè)計(jì)與實(shí)現(xiàn) 摘要: 文章討論了基于DVB 標(biāo)準(zhǔn)的嵌入式雙向數(shù)字機(jī)頂盒的有關(guān)問(wèn)題,在此基礎(chǔ)上描述了一個(gè)交互式
    發(fā)表于 11-13 19:03 ?1597次閱讀
    雙向<b class='flag-5'>數(shù)字電視機(jī)頂盒</b>的設(shè)計(jì)與實(shí)現(xiàn)

    數(shù)字電視機(jī)頂盒原理

    ,用戶(hù)對(duì)信息需求的不斷增強(qiáng),機(jī)頂盒演變成以電視機(jī)為顯示終端的信息接收和處理設(shè)備,目前在市場(chǎng)上有接收數(shù)字電視機(jī)頂盒和接入因特網(wǎng)的WebTV機(jī)頂盒
    發(fā)表于 06-24 12:23

    數(shù)字電視機(jī)頂盒開(kāi)發(fā)平臺(tái)

      數(shù)字電視機(jī)頂盒開(kāi)發(fā)學(xué)習(xí)平臺(tái)數(shù)字電視機(jī)頂盒開(kāi)發(fā)學(xué)習(xí)平臺(tái)產(chǎn)品簡(jiǎn)介 ?數(shù)字電視機(jī)頂盒開(kāi)發(fā)學(xué)習(xí)平臺(tái)目標(biāo):   1、讓院校師生、嵌入式開(kāi)發(fā)愛(ài)好者、工程師成為真正的嵌入式開(kāi)發(fā)人才。   2
    發(fā)表于 08-14 11:01

    數(shù)字電視機(jī)頂盒開(kāi)發(fā)平臺(tái)

      數(shù)字電視機(jī)頂盒開(kāi)發(fā)學(xué)習(xí)平臺(tái)數(shù)字電視機(jī)頂盒開(kāi)發(fā)學(xué)習(xí)平臺(tái)產(chǎn)品簡(jiǎn)介 ?數(shù)字電視機(jī)頂盒開(kāi)發(fā)學(xué)習(xí)平臺(tái)目標(biāo):   1、讓院校師生、嵌入式開(kāi)發(fā)愛(ài)好者、工程師成為真正的嵌入式開(kāi)發(fā)人才。   2
    發(fā)表于 08-14 11:03

    數(shù)字電視機(jī)頂盒開(kāi)發(fā)平臺(tái)

      數(shù)字電視機(jī)頂盒開(kāi)發(fā)學(xué)習(xí)平臺(tái)數(shù)字電視機(jī)頂盒開(kāi)發(fā)學(xué)習(xí)平臺(tái)產(chǎn)品簡(jiǎn)介 ?數(shù)字電視機(jī)頂盒開(kāi)發(fā)學(xué)習(xí)平臺(tái)目標(biāo):   1、讓院校師生、嵌入式開(kāi)發(fā)愛(ài)好者、工程師成為真正的嵌入式開(kāi)發(fā)人才。   2
    發(fā)表于 08-14 11:05

    數(shù)字電視機(jī)頂盒開(kāi)發(fā)平臺(tái)

      數(shù)字電視機(jī)頂盒開(kāi)發(fā)學(xué)習(xí)平臺(tái)數(shù)字電視機(jī)頂盒開(kāi)發(fā)學(xué)習(xí)平臺(tái)產(chǎn)品簡(jiǎn)介 ?數(shù)字電視機(jī)頂盒開(kāi)發(fā)學(xué)習(xí)平臺(tái)目標(biāo):   1、讓院校師生、嵌入式開(kāi)發(fā)愛(ài)好者、工程師成為真正的嵌入式開(kāi)發(fā)人才。   2
    發(fā)表于 08-14 15:07

    數(shù)字電視機(jī)頂盒開(kāi)發(fā)平臺(tái)

      數(shù)字電視機(jī)頂盒開(kāi)發(fā)學(xué)習(xí)平臺(tái)數(shù)字電視機(jī)頂盒開(kāi)發(fā)學(xué)習(xí)平臺(tái)產(chǎn)品簡(jiǎn)介 ?數(shù)字電視機(jī)頂盒開(kāi)發(fā)學(xué)習(xí)平臺(tái)目標(biāo):   1、讓院校師生、嵌入式開(kāi)發(fā)愛(ài)好者、工程師成為真正的嵌入式開(kāi)發(fā)人才。   2
    發(fā)表于 08-14 15:09

    數(shù)字電視機(jī)頂盒開(kāi)發(fā)平臺(tái)

      數(shù)字電視機(jī)頂盒開(kāi)發(fā)學(xué)習(xí)平臺(tái)數(shù)字電視機(jī)頂盒開(kāi)發(fā)學(xué)習(xí)平臺(tái)產(chǎn)品簡(jiǎn)介 ?數(shù)字電視機(jī)頂盒開(kāi)發(fā)學(xué)習(xí)平臺(tái)目標(biāo):   1、讓院校師生、嵌入式開(kāi)發(fā)愛(ài)好者、工程師成為真正的嵌入式開(kāi)發(fā)人才。   2
    發(fā)表于 08-14 15:10

    數(shù)字電視機(jī)頂盒開(kāi)發(fā)平臺(tái)

      數(shù)字電視機(jī)頂盒開(kāi)發(fā)學(xué)習(xí)平臺(tái)數(shù)字電視機(jī)頂盒開(kāi)發(fā)學(xué)習(xí)平臺(tái)產(chǎn)品簡(jiǎn)介 ?數(shù)字電視機(jī)頂盒開(kāi)發(fā)學(xué)習(xí)平臺(tái)目標(biāo):   1、讓院校師生、嵌入式開(kāi)發(fā)愛(ài)好者、工程師成為真正的嵌入式開(kāi)發(fā)人才。   2
    發(fā)表于 08-14 15:12

    數(shù)字電視機(jī)頂盒開(kāi)發(fā)平臺(tái)

      數(shù)字電視機(jī)頂盒開(kāi)發(fā)學(xué)習(xí)平臺(tái)數(shù)字電視機(jī)頂盒開(kāi)發(fā)學(xué)習(xí)平臺(tái)產(chǎn)品簡(jiǎn)介 ?數(shù)字電視機(jī)頂盒開(kāi)發(fā)學(xué)習(xí)平臺(tái)目標(biāo):   1、讓院校師生、嵌入式開(kāi)發(fā)愛(ài)好者、工程師成為真正的嵌入式開(kāi)發(fā)人才。   2
    發(fā)表于 08-14 15:13

    數(shù)字電視機(jī)頂盒的工作原理

    數(shù)字電視機(jī)頂盒的工作原理
    發(fā)表于 08-20 21:00

    廣電數(shù)字電視機(jī)頂盒技術(shù)分析

    隨著廣播電視技術(shù)的發(fā)展,數(shù)字電視機(jī)頂盒已成為一種基于嵌入式系統(tǒng)的設(shè)備,提供易操作的圖形用戶(hù)界面,同時(shí)支持因特網(wǎng)瀏覽、視頻(VOD)點(diǎn)播、可視電話、DVD播放等多媒體的功能以及放大、解密、加擾的功能
    發(fā)表于 12-21 11:17

    數(shù)字電視機(jī)頂盒關(guān)鍵技術(shù)主要有哪些?

    數(shù)字電視機(jī)是由哪些部分組成的?數(shù)字電視機(jī)頂盒的工作過(guò)程是怎樣的?數(shù)字電視機(jī)頂盒關(guān)鍵技術(shù)主要有哪些?
    發(fā)表于 05-20 06:58

    電視機(jī)頂盒原理與設(shè)計(jì)

    本專(zhuān)題為你詳述電視機(jī)頂盒的定義原理,網(wǎng)絡(luò)電視機(jī)頂盒數(shù)字電視機(jī)頂盒、有線電視機(jī)頂盒最新產(chǎn)品,機(jī)頂盒安裝與使用,
    發(fā)表于 08-31 11:03
    <b class='flag-5'>電視機(jī)頂盒</b>原理與設(shè)計(jì)

    Java虛擬機(jī)應(yīng)用于數(shù)字電視機(jī)頂盒的研究與實(shí)現(xiàn)

    關(guān)鍵詞:java , 機(jī)頂盒 , 數(shù)字電視 , 虛擬機(jī) 隨著有線廣播電視網(wǎng)向數(shù)字化、網(wǎng)絡(luò)化、產(chǎn)業(yè)
    發(fā)表于 02-12 07:43 ?518次閱讀
    RM新时代网站-首页