精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

應用于數字電視機頂盒的Java虛擬機的特點介紹

電子設計 ? 作者:電子設計 ? 2018-09-03 10:31 ? 次閱讀

引言

隨著有線廣播電視網向數字化、網絡化、產業化方向發展,利用有線電視網絡作為傳輸平臺的數字電視機頂盒除了能夠讓用戶在現有模擬電視機上觀看數字電視節目之外,廣播和交互式多媒體應用功能的要求也應運而生,互動電視成為數字電視發展的方向。眾多程序員熟悉的為網絡廣泛運用的Java語言能很好地滿足機頂盒一些服務應用的要求,因此提出了包含Java虛擬機的數字電視機頂盒中間件的系統架構,該虛擬機用來執行Java應用程序,并且中間件將應用程序和底層操作系統硬件細節隔離開,使上層的數字電視的服務應用不必考慮過多的底層細節。本文主要介紹了J2ME中主要用于數字電視領域的CDC的移植,其中又著重介紹了本地方法(native method)的實現過程。

結構及工作原理

Java虛擬機工作原理

應用于數字電視機頂盒的Java虛擬機的特點介紹

圖1Java虛擬機的工作過程

Java虛擬機處于機器和編譯程序之間,在任何平臺上都提供給編譯程序一個共同的接口。Java源程序經過編譯器編譯后變成字節碼,字節碼由虛擬機解釋執行,虛擬機將每一條要執行的字節碼送給解釋器,解釋器將其翻譯成特定機器上的機器碼,然后在特定的機器上運行。

Java虛擬機的主要任務是裝載class文件并且執行其中的字節碼。Java虛擬機包含一個類裝載器,它可以從程序和API中裝載class文件。字節碼由執行引擎來執行,具體過程如圖1所示。

Java虛擬機結構

類裝載器的體系結構是Java虛擬機在安全性和網絡移動性上發揮重要作用的一個方面,圖中所示的類裝載器可以包含多個類裝載器的子系統, Java應用程序能夠在運行時決定需要安裝的類,并且將被不同的類裝載器裝載的類存放在不同的命名空間。

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

Java虛擬機相當于一個堆棧計算機,它在指令間傳送信息時不使用任何物理寄存器,而使用堆棧的幀來表示方法的狀態、字節碼的操作對象、方法的參數空間及局部變量的空間,它的“程序計數器”為一個偽寄存器,是當前所執行指令的字節碼數組的一個指針。

Java實現方法

Java有兩種實現方法:Java方法和本地方法。Java方法是由Java 語言編寫,編譯成字節碼,存儲在class文件中。本地方法是由其他語言(比如C,C++,或者匯編語言)編寫的,編譯成和處理器相關的機器代碼,保存在動態連接庫中,格式是各個平臺專有的,它是聯系Java程序和底層主機操作系統的連接方法。Java方法與平臺無關,但是本地方法卻不是,運行中的Java程序調用本地方法時,虛擬機裝載包含這個本地方法的動態庫,并調用這個方法。通過本地方法, Java程序可以直接訪問底層操作系統的資源,使程序和特定的平臺相關,一個本地方法接口——Java本地接口(JNI)使得本地方法可以在特定的主機系統的任何一個Java平臺上運行。

J2ME中的CDC移植的解決方案

我們選用的要移植的Java虛擬機是Sun公司提供的J2ME對于數字電視領域CDC配置,該虛擬機是針對Linux的軟件實現(用C語言編寫的虛擬機,該虛擬機也稱為C Virtual Machine,簡稱CVM) 。Java虛擬機規范并沒有強求Java虛擬機必須支持任何特定的本地方法接口,但是Sun 公司提供了本地方法接口(Java Native Interface) ,是為移植所用。Java程序通過調用本地方法和主機交互。

Java虛擬機

應用于數字電視機頂盒的Java虛擬機的特點介紹

圖2Java虛擬機的位置

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

本地方法

解釋器處理字節碼時,與給定字節碼有關的動作的語義、執行字節碼的相關動作大多是從堆棧中獲得其操作數,并將其結果送回堆棧中。典型的情況下字節碼是帶有參數的,這些參數在字節碼流中緊跟在字節碼自身之后。

在虛擬機解釋字節碼過程中,執行引擎會不時遇到請求本地方法調用的指令,虛擬機負責試著發起這個本地方法的調用。本地方法是Java虛擬機指令集的一種可編程擴展,運行這個本地方法就是Java虛擬機對這條指令的執行。

本地方法函數調用

為了增加虛擬機的性能,加快其速度,解釋器在處理一些字節碼時調用的本地方法函數用匯編實現了將Java棧轉換為C棧,然后在C堆棧上實現函數的調用。Linux下是用獨立的匯編語言程序invokeNative_i386。 S實現函數CVMjniInvokeNative () ,我們采用在C里面嵌入匯編的形式來實現該函數。

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

J2ME中的CDC移植

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

當進入匯編函數時,工作區指針為Wptr,實參、狀態寄存器和指令指針寄存器的值全部自動入棧,然后是我們定義的代替Linux寄存器的局部變量自動入棧,此時的Wptr自動移到Wptr′,利用OS20的匯編指令,手動將實參傳遞過來的參數通過計算得到本地方法參數的個數,然后將本地方法所需的參數依次壓棧,最后再手動調節工作區指針實現本地方法的成功調用。這里我們先將本地方法函數指針和1個標志位flag(0x10101010)入棧,原因有兩個:

①當隨后我們手動調節工作指針Wptr′到Wptr"時,工作棧已由先前的嵌套匯編的函數進入到了要調用的本地方法的C函數,因此先前的函數的局部變量在此時無效,也就是說此時如果用以前實參傳遞過來的本地函數指針調用本地的函數肯定不會成功,因此要把這個函數指針先手動保存起來。

②flag的設置的原因是:本地方法的參數的個數不是固定的,而OS20 所提供的用匯編調用函數在回到函數入口點時只彈出Wptr"指向的4 個單元的內容,因此多余的參數出棧操作也必須通過調節Wptr手動完成,通過向下移動Wptr查找flag標志,再調節Wp tr到Wtpr+2即可正確地回到匯編函數。當本地方法的參數完全手動入棧后就可以手動調節工作區指針Wptr而進入到調用的本地函數,函數返回后的第一件事是保存在寄存器中的函數的返回值到return value,恢復工作區指針Wptr,并將本地方法的返回值類型作為嵌入匯編的函數的返回值,此時就完成了由Java棧到C棧的轉換,并成功調用本地方法。

應用于數字電視機頂盒的Java虛擬機的特點介紹

圖3Java棧到本地棧的轉換


結 論

通過對Sun公司下載的CDC代碼的修改與編寫,對CDC中的加載的類做了一些裁減,并且將線程化的解釋器改為一次性解釋字節碼的單線程解釋器簡化程序,成功地生成了在機頂盒上可以運行簡單的Java程序的虛擬機。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 機頂盒
    +關注

    關注

    4

    文章

    386

    瀏覽量

    54074
  • 寄存器
    +關注

    關注

    31

    文章

    5317

    瀏覽量

    120003
  • JAVA
    +關注

    關注

    19

    文章

    2957

    瀏覽量

    104544
  • 虛擬機
    +關注

    關注

    1

    文章

    908

    瀏覽量

    28086
收藏 人收藏

    評論

    相關推薦

    雙向數字電視機頂盒的設計與實現

    雙向數字電視機頂盒的設計與實現 摘要: 文章討論了基于DVB 標準的嵌入式雙向數字機頂盒的有關問題,在此基礎上描述了一個交互式
    發表于 11-13 19:03 ?1584次閱讀
    雙向<b class='flag-5'>數字電視機頂盒</b>的設計與實現

    數字電視機頂盒原理

    ,用戶對信息需求的不斷增強,機頂盒演變成以電視機為顯示終端的信息接收和處理設備,目前在市場上有接收數字電視機頂盒和接入因特網的WebTV機頂盒
    發表于 06-24 12:23

    數字電視機頂盒開發平臺

      數字電視機頂盒開發學習平臺數字電視機頂盒開發學習平臺產品簡介 ?數字電視機頂盒開發學習平臺目標:   1、讓院校師生、嵌入式開發愛好者、工程師成為真正的嵌入式開發人才。   2
    發表于 08-14 11:01

    數字電視機頂盒開發平臺

      數字電視機頂盒開發學習平臺數字電視機頂盒開發學習平臺產品簡介 ?數字電視機頂盒開發學習平臺目標:   1、讓院校師生、嵌入式開發愛好者、工程師成為真正的嵌入式開發人才。   2
    發表于 08-14 11:03

    數字電視機頂盒開發平臺

      數字電視機頂盒開發學習平臺數字電視機頂盒開發學習平臺產品簡介 ?數字電視機頂盒開發學習平臺目標:   1、讓院校師生、嵌入式開發愛好者、工程師成為真正的嵌入式開發人才。   2
    發表于 08-14 11:05

    數字電視機頂盒開發平臺

      數字電視機頂盒開發學習平臺數字電視機頂盒開發學習平臺產品簡介 ?數字電視機頂盒開發學習平臺目標:   1、讓院校師生、嵌入式開發愛好者、工程師成為真正的嵌入式開發人才。   2
    發表于 08-14 15:07

    數字電視機頂盒開發平臺

      數字電視機頂盒開發學習平臺數字電視機頂盒開發學習平臺產品簡介 ?數字電視機頂盒開發學習平臺目標:   1、讓院校師生、嵌入式開發愛好者、工程師成為真正的嵌入式開發人才。   2
    發表于 08-14 15:09

    數字電視機頂盒開發平臺

      數字電視機頂盒開發學習平臺數字電視機頂盒開發學習平臺產品簡介 ?數字電視機頂盒開發學習平臺目標:   1、讓院校師生、嵌入式開發愛好者、工程師成為真正的嵌入式開發人才。   2
    發表于 08-14 15:10

    數字電視機頂盒開發平臺

      數字電視機頂盒開發學習平臺數字電視機頂盒開發學習平臺產品簡介 ?數字電視機頂盒開發學習平臺目標:   1、讓院校師生、嵌入式開發愛好者、工程師成為真正的嵌入式開發人才。   2
    發表于 08-14 15:12

    數字電視機頂盒開發平臺

      數字電視機頂盒開發學習平臺數字電視機頂盒開發學習平臺產品簡介 ?數字電視機頂盒開發學習平臺目標:   1、讓院校師生、嵌入式開發愛好者、工程師成為真正的嵌入式開發人才。   2
    發表于 08-14 15:13

    數字電視機頂盒的工作原理

    數字電視機頂盒的工作原理
    發表于 08-20 21:00

    廣電數字電視機頂盒技術分析

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

    數字電視機頂盒關鍵技術主要有哪些?

    數字電視機是由哪些部分組成的?數字電視機頂盒的工作過程是怎樣的?數字電視機頂盒關鍵技術主要有哪些?
    發表于 05-20 06:58

    電視機頂盒原理與設計

    本專題為你詳述電視機頂盒的定義原理,網絡電視機頂盒數字電視機頂盒、有線電視機頂盒最新產品,機頂盒安裝與使用,
    發表于 08-31 11:03
    <b class='flag-5'>電視機頂盒</b>原理與設計

    Java虛擬機應用于數字電視機頂盒的研究與實現

    關鍵詞:java , 機頂盒 , 數字電視 , 虛擬機 隨著有線廣播電視網向數字化、網絡化、產業
    發表于 02-12 07:43 ?509次閱讀