
下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、java虛擬機應用于數(shù)字電視機頂盒的研究與實現(xiàn)隨著有線廣播電視網(wǎng)向數(shù)字化、網(wǎng)絡化、產(chǎn)業(yè)化方向進展,利用有線電視網(wǎng)絡作為傳輸平臺的除了能夠讓用戶在現(xiàn)有模擬電視機上觀察數(shù)字電視節(jié)目之外,廣播和交互式多媒體應用功能的要求也應運而生,互動電視成為數(shù)字電視進展的方向。眾多程序員認識的為網(wǎng)絡廣泛運用的java語言能很好地滿足機頂盒一些服務應用的要求,因此提出了包含java虛擬機的數(shù)字電視機頂盒中間件的系統(tǒng)架構,該虛擬機用來執(zhí)行java應用程序,并且中間件將應用程序和底層操作系統(tǒng)、硬件詳情隔離開,使上層的數(shù)字電視的服務應用不必考慮過多的底層詳情。本文主要介紹了j2me中主要用于數(shù)字電視領域的cdc的移植,其
2、中又著重介紹了本地辦法(native method)的實現(xiàn)過程。結構及工作原理java虛擬機工作原理圖1java虛擬機的工作過程java虛擬機處于機器和編譯程序之間,在任何平臺上都提供應編譯程序一個共同的接口。java源程序經(jīng)過編譯器編譯后變成字節(jié)碼,字節(jié)碼由虛擬機說明執(zhí)行,虛擬機將每一條要執(zhí)行的字節(jié)碼送給說明器,說明器將其翻譯成特定機器上的機器碼,然后在特定的機器上運行。java虛擬機的主要任務是裝載class文件并且執(zhí)行其中的字節(jié)碼。java虛擬機包含一個類裝載器,它可以從程序和api中裝載class文件。字節(jié)碼由執(zhí)行引擎來執(zhí)行,詳細過程1所示。java虛擬機結構類裝載器的體系結構是jav
3、a虛擬機在平安性和網(wǎng)絡移動性上發(fā)揮重要作用的一個方面,圖中所示的類裝載器可以包含多個類裝載器的子系統(tǒng), java應用程序能夠在運行時打算需要安裝的類,并且將被不同的類裝載器裝載的類存放在不同的命名空間。執(zhí)行引擎處于java虛擬機的核心位置,它的行為由命令集所打算,其主要作用就是說明字節(jié)碼(即運行經(jīng)過編譯后的java程序的class文件) ,不同的執(zhí)行引擎實現(xiàn)可能十分不同。由軟件實現(xiàn)的虛擬機的執(zhí)行引擎分為一次性說明字節(jié)碼、即時編譯器和自適應優(yōu)化器,由硬件芯片構成的虛擬機用本地辦法執(zhí)行java字節(jié)碼,它的執(zhí)行引擎是內(nèi)嵌在芯片里。java虛擬機相當于一個堆棧計算機,它在命令間傳送信息時不用法任何物理
4、寄存器,而用法堆棧的幀來表示辦法的狀態(tài)、字節(jié)碼的操作對象、辦法的參數(shù)空間及局部變量的空間,它的“程序計數(shù)器”為一個偽寄存器,是當前所執(zhí)行命令的字節(jié)碼數(shù)組的一個指針。java實現(xiàn)辦法java有兩種實現(xiàn)辦法:java辦法和本地辦法。java辦法是由java 語言編寫,編譯成字節(jié)碼,存儲在class文件中。本地辦法是由其他語言(比如c,c+,或者匯編語言)編寫的,編譯成和處理器相關的機器代碼,保存在動態(tài)銜接庫中,格式是各個平臺專有的,它是聯(lián)系java程序和底層主機操作系統(tǒng)的銜接辦法。java辦法與平臺無關,但是本地辦法卻不是,運行中的java程序調(diào)用本地辦法時,虛擬機裝載包含這個本地辦法的動態(tài)庫,并
5、調(diào)用這個辦法。通過本地辦法, java程序可以挺直拜訪底層操作系統(tǒng)的資源,使程序和特定的平臺相關,一個本地辦法接口java本地接口(jni)使得本地辦法可以在特定的主機系統(tǒng)的任何一個java平臺上運行。j2me中的cdc移植的解決計劃我們選用的要移植的java虛擬機是sun公司提供的j2me對于數(shù)字電視領域cdc配置,該虛擬機是針對的軟件實現(xiàn)(用編寫的虛擬機,該虛擬機也稱為c virtual machine,簡稱cvm) 。java虛擬機規(guī)范并沒有強求java虛擬機必需支持任何特定的本地辦法接口,但是sun 公司提供了本地辦法接口(java native interface) ,是為移植所用。
6、java程序通過調(diào)用本地辦法和主機交互。java虛擬機圖2java虛擬機的位置虛擬機處于操作系統(tǒng)os20 上,因此sun公司提供的java虛擬機中與底層操作系統(tǒng)相關的操作都應當替換為os20的內(nèi)核函數(shù)。因此將sun公司提供的cdc移植到os20需要完成一些工作,比如: c語言中關于基本數(shù)據(jù)類型的數(shù)據(jù)位的修改,關于線程的創(chuàng)建機制(os20為任務) ,關于線程之間的同步、互斥,關于動態(tài)銜接的實現(xiàn),關于本地辦法的實現(xiàn)等,本節(jié)主要介紹關于本地辦法的實現(xiàn)過程。本地辦法說明器處理字節(jié)碼時,與給定字節(jié)碼有關的動作的語義、執(zhí)行字節(jié)碼的相關動作大多是從堆棧中獲得其操作數(shù),并將其結果送回堆棧中。典型的狀況下字節(jié)碼
7、是帶有參數(shù)的,這些參數(shù)在字節(jié)碼流中緊跟在字節(jié)碼自身之后。在虛擬機說明字節(jié)碼過程中,執(zhí)行引擎會時常碰到哀求本地辦法調(diào)用的命令,虛擬機負責試著發(fā)起這個本地辦法的調(diào)用。本地辦法是java虛擬機命令集的一種可編程擴展,運行這個本地辦法就是java虛擬機對這條命令的執(zhí)行。本地辦法函數(shù)調(diào)用為了增強虛擬機的性能,加快其速度,說明器在處理一些字節(jié)碼時調(diào)用的本地辦法函數(shù)用匯編實現(xiàn)了將java棧轉(zhuǎn)換為c棧,然后在c堆棧上實現(xiàn)函數(shù)的調(diào)用。linux下是用自立的匯編語言程序invokenative_i386。 s實現(xiàn)函數(shù)cvmjniinvokenative () ,我們采納在c里面嵌入?yún)R編的形式來實現(xiàn)該函數(shù)。該函數(shù)的
8、形參有7個,完成的主要功能是將由實參傳遞來的部分數(shù)據(jù)通過挺直或者運算后得到本地辦法的參數(shù),然后壓入本地棧,通過匯編來實現(xiàn)本地的c函數(shù)調(diào)用。實參傳遞過來的7個數(shù)據(jù)包含jn i環(huán)境指針(env) 、本地辦法的函數(shù)指針(native code) 、java棧指針(args) 、本地辦法的描述符(terse sig) , java棧的參數(shù)總數(shù)(args size)表示靜態(tài)或非靜態(tài)辦法的類對象標記(class object)及用于存儲返回值的一個指針變量(return value) ,其中env要作為第一個本地辦法的參數(shù)傳遞,并且native code也要傳遞到本地辦法來實現(xiàn)本地辦法的正確調(diào)用。j2me
9、中的cdc移植因為linux有多個通用寄存器,在實現(xiàn)該函數(shù)的代碼中充分運用了如esp、ebp、esi等寄存器,但是os20提供的可操作的寄存器惟獨3個通用寄存器areg、breg、creg和1個工作指針寄存器wptr (相當于堆棧指針) ,在實現(xiàn)過程中,我們用在c函數(shù)中設立局部變量來代替linux的通用寄存器,通過手動調(diào)節(jié)工作棧指針來實現(xiàn)本地辦法的調(diào)用,詳細實現(xiàn)過程3所示。當進入?yún)R編函數(shù)時,工作區(qū)指針為wptr,實參、狀態(tài)寄存器和命令指針寄存器的值所有自動入棧,然后是我們定義的代替linux寄存器的局部變量自動入棧,此時的wptr自動移到wptr,利用os20的匯編命令,手動將實參傳遞過來的參
10、數(shù)通過計算得到本地辦法參數(shù)的個數(shù),然后將本地辦法所需的參數(shù)依次壓棧,最后再手動調(diào)整工作區(qū)指針實現(xiàn)本地辦法的勝利調(diào)用。這里我們先將本地辦法函數(shù)指針和1個標記位flag(0x10101010)入棧,緣由有兩個:當隨后我們手動調(diào)整工作指針wptr到wptr"時,工作棧已由從前的嵌套匯編的函數(shù)進入到了要調(diào)用的本地辦法的c函數(shù),因此從前的函數(shù)的局部變量在此時無效,也就是說此時假如用以前實參傳遞過來的本地函數(shù)指針調(diào)用本地的函數(shù)絕對不會勝利,因此要把這個函數(shù)指針先手動保存起來。flag的設置的緣由是:本地辦法的參數(shù)的個數(shù)不是固定的,而os20 所提供的用匯編調(diào)用函數(shù)在回到函數(shù)入口點時只彈出wptr"指向的4 個單元的內(nèi)容,因此多余的參數(shù)出棧操作也必需通過調(diào)整wptr手動完成,通過向下移動wptr查找flag標記,再調(diào)整wp tr到wtpr+2即可正確地回到匯編函數(shù)。當本地辦法的參數(shù)徹低手動入棧后就可以手動調(diào)整工作區(qū)指針wptr而進入到調(diào)用的本地函數(shù),函數(shù)返回后的第一件事是保存在寄存器中的函數(shù)的返回值到return value,復原工作區(qū)指針wptr,并將本地辦法的返回值類型作為嵌入
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 科技教育儀器設備使用培訓與實踐
- 社會工作在提高老年人生活質(zhì)量中的作用研究報告
- 知識產(chǎn)權教育與創(chuàng)客文化的融合策略
- 知識產(chǎn)權教育培養(yǎng)未來創(chuàng)新者
- 科技型企業(yè)知識產(chǎn)權培訓體系建設
- 物業(yè)顧問合同范本
- 2025年甘肅西涼人力資源有限公司招聘80人筆試參考題庫附帶答案詳解
- 知識產(chǎn)權培訓企業(yè)創(chuàng)新發(fā)展的基石
- 肉雞養(yǎng)殖合同范本
- 2025年度競業(yè)協(xié)議起草與知識產(chǎn)權保護咨詢合同
- 廣電和通信設備電子裝接工(高級工)理論考試復習題庫(含答案)
- 2024年河南住戶調(diào)查業(yè)務題庫
- 中小企業(yè)(民營企業(yè))ESG星級評價
- 電氣工程及其自動化職業(yè)規(guī)劃課件
- 天車安全操作培訓教材
- 《籃球運球》教案(共四篇)
- 國企關于違反“三重一大”決策制度責任追究辦法
- CRF病例報告表模板
- 九上下冊物理人教版九年級物理全冊第十九章《生活用電》第3節(jié)《安全用電》課件(42張)公開課教案
- 高中 語文 必修上冊 第八單元《詞語積累與詞語解釋》課件
- 2024年計算機二級WPS考試題庫380題(含答案)
評論
0/150
提交評論