摘 要:隨著各項技術(shù)的進步與發(fā)展,嵌入式、Java等技術(shù)在各行各業(yè)都取得了廣泛的應用,目前常用的基于嵌入式Linux的Java虛擬機主要是針對數(shù)字電視、機頂盒所開發(fā)的,應用于數(shù)字電視機頂盒中,承擔著各種Java應用的接收與解釋運行的作用,并且可以通過移植將其應用于Java手機以及其他與網(wǎng)絡應用相關(guān)的PDA設(shè)備,本文就主要對基于嵌入式Linux的Java虛擬機予以簡單分析研究。
關(guān)鍵詞:基于嵌入式的Linux;Java虛擬機;分析設(shè)計
中圖分類號:TP316.81 文獻標識碼:A 文章編號:1674-7712 (2014) 18-0000-01
一、嵌入式Linux
嵌入式系統(tǒng)是以計算機技術(shù)為基礎(chǔ),以應用為核心,軟硬件可以裁減,能夠適應應用系統(tǒng)對于功耗、體積、成本、可靠性、功能等的嚴格要求的專用計算機系統(tǒng),其中嵌入式操作系統(tǒng)是一種能夠支持嵌入式系統(tǒng)應用的操作系統(tǒng)軟件,而Linux是一個自由軟件,隨著各項技術(shù)的進步,嵌入系統(tǒng)與Linux的結(jié)合已經(jīng)逐漸成為研究熱點,Linux由于具有源代碼開放、效率高、內(nèi)核小等諸多的優(yōu)點,使得其具有非常廣泛的應用。
嵌入式Linux的系統(tǒng)組成主要表現(xiàn)為:(1)引導程序,其主要功能是能夠?qū)崿F(xiàn)系統(tǒng)的快速引導,以便于實現(xiàn)瞬間開機,并要完成Linux內(nèi)核到內(nèi)存的加載;(2)Linux內(nèi)核,其作為一個單一內(nèi)核的操作系統(tǒng),可以動態(tài)的裝入與卸載內(nèi)核中的部分源代碼,其內(nèi)核由:系統(tǒng)啟動、網(wǎng)絡管理、進程間通信、設(shè)備驅(qū)動程序、接口文件系統(tǒng)、虛擬文件系統(tǒng)、模塊管理、定時器中斷管理、進程管理、內(nèi)存管理等組成;(3)初始化進程,系統(tǒng)在啟動初期是運行在內(nèi)核方式中,只有一個初始化進程在運行,其需要首先實施系統(tǒng)的初始化之后,執(zhí)行初始化程序,初始化進程就指的是系統(tǒng)的第一個進程;(4)硬件驅(qū)動程序,設(shè)備的驅(qū)動程序是內(nèi)核的一個組成部分,其與內(nèi)核中的其他代碼一樣在內(nèi)核模式中運行。
二、Java平臺及虛擬機
對上圖進行簡單分析,Java的整體架構(gòu)主要由兩個部分組成,應用程序接口(API)與虛擬機,其中Java虛擬機處于整個系統(tǒng)中的核心位置,其是實現(xiàn)程序與底層操作系統(tǒng)與硬件無關(guān)的關(guān)鍵,其下方是移植接口,移植接口主要由Java操作系統(tǒng)與適配器兩部分組成,適配器是依賴于平臺的部分,虛擬機是需要通過移植接口在具體的平臺與操作系統(tǒng)上實現(xiàn)的。Java虛擬機到底是什么,可以將其看做是一個想象中的機器,在實際的計算機上應用軟件模擬來得以實現(xiàn),其具有自己想象中的硬件如寄存器、堆棧、處理器等,并且具有自己的指令系統(tǒng),其在實際應用中,可以由不同的廠商來實現(xiàn),不同的廠商在虛擬機的實現(xiàn)上存在一定的差別,但是其可以實現(xiàn)跨平臺特性,一個虛擬機實例行為涉及到指令、數(shù)據(jù)類型、存儲區(qū)域、子系統(tǒng)等部分,其描述了虛擬機的一個抽象的內(nèi)部體系結(jié)構(gòu),其最終目的并不完全是為了實現(xiàn)虛擬機內(nèi)部的體系結(jié)構(gòu),更為重要的是要提供一種方式,用于對實現(xiàn)時的外部行為予以嚴格的定義,每個虛擬機中又包含了本地方法棧、程序計數(shù)器、Java棧、堆、方法區(qū)等部分。
三、Java虛擬機內(nèi)部Interpreter設(shè)計與實現(xiàn)
Java系統(tǒng)之所以能夠跨越平臺,其中影響因素眾所,但是其中最主要的原因就是因為Java應用了獨特的instruction結(jié)構(gòu),以及一個用來對每個instructinon意義進行解釋的interpreter,其作為一個大型的循環(huán),不斷的從programcounter所指的內(nèi)存空間中抓取Javabyecodes出來執(zhí)行,并應用機器的母語對每次所抓取到的Java bytecode進行解釋。
對虛擬機運行時間取代byte code的機制進行簡單分析,為了不應用復雜的編譯技巧來加快Java程序的執(zhí)行速度,虛擬機中應用了一種簡單的執(zhí)行時取代byte code的機制來在執(zhí)行時代換取有關(guān)信息的傳遞以及其他種類的Javabytecodes,要開啟這種機制就需要開啟ENABLEFASTBYTECODES選項,在虛擬機執(zhí)行的過程中,有很多種情況下,可以進行bytecode內(nèi)容的實時代換,并在一些時候參考inlinecache中的數(shù)據(jù),以便于獲得所需要的執(zhí)行時間信息,這樣能夠避開在metnodtable、constantpool上所耗費的大量時間。
另一方面,在Java instructions中還有一些byte codes的所應用頻率比較低,對于這類byte codes,如:customcode、multianewarray、instanceof、checkcast、anewarray、invokeinterface new、invokesteic、invokespecial、invokevirtual、putfiald、getfield、putstatic、getstatic等,可以應用另一個函數(shù)對其進行單獨的除了,這能夠有效的減少Java interpreter的主要循環(huán)大小,并且C編譯器通常能夠?qū)^小的循環(huán)作出較好的最優(yōu)化。如果要在虛擬機中將這一功能激活,就需要在定義VmCommon/h/main.h中的SPLITINFRERQUENTBYTECODES選項設(shè)定為1,這能夠強迫虛擬機應用一個單獨的解釋函數(shù)來對那些應用頻率較低的Java byte codes予以解釋,在系統(tǒng)比較多的情況,采用這種方式能夠有效增進一些執(zhí)行上的效能。
四、結(jié)束語
隨著各項技術(shù)的進步與發(fā)展,基于嵌入式Linux的Java虛擬機的應用越來越廣泛,在現(xiàn)有基礎(chǔ)上,加大其分析與設(shè)計的研究力度是非常必要的,本文就主要結(jié)合其結(jié)構(gòu)特點,對其虛擬機內(nèi)部的Interpreter的設(shè)計實現(xiàn)進行了簡單分析探討。
參考文獻:
[1]李澤球,黎衛(wèi)紅.基于嵌入式Linux的通用打印系統(tǒng)的研究與設(shè)計[J].軟件導刊,2011(04).
[2]趙玲玲,俞侃.基于嵌入式Linux的PLC實時性任務的分析與設(shè)計[J].電腦知識與技術(shù),2013(35).
[作者簡介]孫茜(1975.10-),女,浙江杭州人,2005年畢業(yè)于南昌大學信息管理專業(yè),本科,現(xiàn)供職于江西科技學院講師,研究方向:計算機應用與開發(fā)。