Java虛擬機(jī)相當(dāng)于一個堆棧計算機(jī),它在指令間傳送信息時不使用任何物理寄存器,而使用堆棧的幀來表示方法的狀態(tài)、字節(jié)碼的操作對象、方法的參數(shù)空間及局部變量的空間,它的“程序計數(shù)器”為一個偽寄存器,是當(dāng)前所執(zhí)行指令的字節(jié)碼數(shù)組的一個指針。
Java實現(xiàn)方法
Java有兩種實現(xiàn)方法:Java方法和本地方法。Java方法是由Java語言編寫,編譯成字節(jié)碼,存儲在class文件中。本地方法是由其他語言(比如C,C++,或者匯編語言)編寫的,編譯成和處理器相關(guān)的機(jī)器代碼,保存在動態(tài)連接庫中,格式是各個平臺專有的,它是聯(lián)系Java程序和底層主機(jī)操作系統(tǒng)的連接方法。Java方法與平臺無關(guān),但是本地方法卻不是,運行中的Java程序調(diào)用本地方法時,虛擬機(jī)裝載包含這個本地方法的動態(tài)庫,并調(diào)用這個方法。通過本地方法,Java程序可以直接訪問底層操作系統(tǒng)的資源,使程序和特定的平臺相關(guān),一個本地方法接口——Java本地接口(JNI)使得本地方法可以在特定的主機(jī)系統(tǒng)的任何一個Java平臺上運行。
J2ME中的CDC移植的解決方案
我們選用的要移植的Java虛擬機(jī)是Sun公司提供的J2ME對于數(shù)字電視領(lǐng)域CDC配置,該虛擬機(jī)是針對Linux的軟件實現(xiàn)(用C語言編寫的虛擬機(jī),該虛擬機(jī)也稱為CVirtualMachine,簡稱CVM)。Java虛擬機(jī)規(guī)范并沒有強(qiáng)求Java虛擬機(jī)必須支持任何特定的本地方法接口,但是Sun公司提供了本地方法接口(JavaNativeInterface),是為移植所用。Java程序通過調(diào)用本地方法和主機(jī)交互。
Java虛擬機(jī)
圖2Java虛擬機(jī)的位置
虛擬機(jī)處于嵌入式操作系統(tǒng)OS20上,因此Sun公司提供的Java虛擬機(jī)中與底層操作系統(tǒng)相關(guān)的操作都應(yīng)該替換為OS20的內(nèi)核函數(shù)。因此將Sun公司提供的CDC移植到OS20需要完成一些工作,比如:C語言中關(guān)于基本數(shù)據(jù)類型的數(shù)據(jù)位的修改,關(guān)于線程的創(chuàng)建機(jī)制(OS20為任務(wù)),關(guān)于線程之間的同步、互斥,關(guān)于動態(tài)連接的實現(xiàn),關(guān)于本地方法的實現(xiàn)等,本節(jié)主要介紹關(guān)于本地方法的實現(xiàn)過程。