欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

對虛擬機解釋器(vmi)加速硬件的軟件支持的制作方法

文檔序號:6427898閱讀:233來源:國知局
專利名稱:對虛擬機解釋器(vmi)加速硬件的軟件支持的制作方法
技術(shù)領(lǐng)域
本發(fā)明一般來講涉及計算機程序設(shè)計語言,更具體來講,涉及虛擬機語言的翻譯和執(zhí)行。
背景技術(shù)
計算機程序設(shè)計語言用于創(chuàng)建由表示供計算機執(zhí)行的指令的人類可讀源代碼所組成的應(yīng)用程序。然而,在計算機能夠遵循這些指令以前,所述源代碼必須被翻譯成計算機可讀的二進制機器代碼。
諸如C、C++或者COBOL之類的程序設(shè)計語言通常使用編譯器,以便從源代碼產(chǎn)生匯編語言,然后將所述匯編語言翻譯為被轉(zhuǎn)換為機器代碼的機器語言。因此,在運行時以前發(fā)生源代碼的最終翻譯。不同的計算機要求不同的機器語言,因此,以例如C++編寫成的程序只能在該程序為之所寫的專用硬件平臺上運行。
解釋性程序設(shè)計語言被設(shè)計成創(chuàng)建具有將在多個硬件平臺上運行的源代碼的應(yīng)用程序。JavaTM是一種解釋性程序設(shè)計語言,其通過產(chǎn)生在運行時以前被轉(zhuǎn)換為公知為“字節(jié)碼”或者“虛擬機語言”的中間語言的源代碼,來實現(xiàn)平臺無關(guān)性。在運行時,所述字節(jié)碼被解釋器軟件譯成平臺適用機器代碼,如美國專利第4443865號中所公開的那樣。為了解釋每一字節(jié)碼,解釋器軟件執(zhí)行“取出、譯碼、調(diào)度”(FDD)操作系列。對于每一字節(jié)碼指令,解釋器軟件均包含一個用本機中央處理單元(CPU)指令表示的對應(yīng)執(zhí)行程序。所述解釋器軟件令CPU從存儲器中取出或者讀取一條虛擬機指令、對用于這條字節(jié)碼指令的執(zhí)行程序的CPU地址進行譯碼、并且通過將CPU的控制權(quán)轉(zhuǎn)移給那個執(zhí)行程序來進行調(diào)度。該解釋過程可能是耗時間的。
正如在PCT專利申請第WO9918484號中所公開的那樣,在存儲器和CPU之間添加預處理器(虛擬機解釋器(VMI))能改善虛擬機指令的處理。實際上,虛擬機并不是一種物理結(jié)構(gòu),而是一種自含式操作環(huán)境,其通過選擇存儲在VM內(nèi)的或者CPU中的相應(yīng)本機機器語言指令,來為硬件平臺解釋字節(jié)碼。然后將本機指令提供給硬件平臺的CPU,并在硬件平臺的CPU中連續(xù)地執(zhí)行這些指令。典型的虛擬機對于每一字節(jié)碼都需要20-60周期的處理時間(取決于字節(jié)碼的質(zhì)量和復雜性)來執(zhí)行FDD操作系列。
如PCT專利申請第WO9918484號和第WO9918486號中所公開的那樣,能夠通過實施硬件加速器來實現(xiàn)處理時間的進一步減少。首先,VMI從存儲器中讀取(取出)一個字節(jié)碼。然后,VMI查看所取出的字節(jié)碼的多個屬性(譯碼)。由VMI訪問的屬性之一指示該字節(jié)碼是簡單的還是復雜的,這決定了VMI是否能夠以硬件來翻譯該字節(jié)碼。VMI將簡單的JavaTM字節(jié)碼翻譯為專門的并且優(yōu)化的本機CPU指令序列,然后由CPU將其取出并執(zhí)行。在CPU執(zhí)行一條指令的同時,VMI取出下一條字節(jié)碼,并將其翻譯為CPU指令。VMI能夠在1-4周期內(nèi)處理簡單的字節(jié)碼。如果其屬性指示字節(jié)碼是復雜的,VMI產(chǎn)生一個本機CPU指令的類屬序列,從而實現(xiàn)一個“軟件陷阱”,其將該復雜的字節(jié)碼指引給軟件來翻譯和執(zhí)行。一旦遇到復雜的字節(jié)碼,VMI就向CPU發(fā)出機器代碼指令,從而執(zhí)行對應(yīng)的本機函數(shù)、即執(zhí)行駐留在CPU中的機器代碼子程序。作為響應(yīng),CPU中斷執(zhí)行作為先前字節(jié)碼翻譯的結(jié)果的、由VMI產(chǎn)生的本機指令,并執(zhí)行由該復雜的字節(jié)碼調(diào)用的本機函數(shù)。VMI等待來檢測從其輸出緩沖器中的新的取出操作,然后恢復對所述字節(jié)碼序列的翻譯。盡管VMI訪問現(xiàn)有的本機函數(shù),而不是逐指令地翻譯復雜的字節(jié)碼,但是它將FDD的操作時間的影響減少到幾乎0周期,因為,每一軟件陷阱的VMI處理(5-20周期)與另一字節(jié)碼的CPU執(zhí)行是同時發(fā)生的。
在解釋一個字節(jié)碼序列的同時,虛擬機可能遇到一個“遞歸”的復雜字節(jié)碼。執(zhí)行遞歸字節(jié)碼(RBC)時出現(xiàn)了難題,這是因為,每一RBC均調(diào)用一個本機函數(shù),所述本機函數(shù)最終產(chǎn)生一個方法調(diào)用(即,為另一Java字節(jié)碼序列重新啟動VMI)。因此,為了對來自另一個序列的字節(jié)碼進行譯碼,由RBC調(diào)用的本機函數(shù)必須訪問CPU寄存器中存儲的變量值。本機函數(shù)通常(但不總是)包括標準指令集,在下文中稱作“前同步碼”和“后同步碼”。標準前同步碼被設(shè)計成在執(zhí)行子程序以前,保存一些或者全部CPU寄存器的內(nèi)容。被保存的一些內(nèi)容關(guān)注在執(zhí)行本機函數(shù)期間可能需要被修改的變量值(例如用于重新啟動虛擬機的堆棧指針和返回地址)。然而,通常無法在由RBC指定的本機函數(shù)內(nèi)訪問這些變量,因為RBC方法調(diào)用是在程序設(shè)計語言的源代碼中定義的,而不是在被要求訪問CPU寄存器的機器代碼中定義的。此外,因為RBC方法調(diào)用無法訪問CPU寄存器,所以標準子程序后同步碼無法將已經(jīng)由RBC方法調(diào)用所修改的變量值寫回CPU寄存器中。換言之,因為RBC子程序或者由于缺乏環(huán)境設(shè)置(沒有前同步碼或者后同步碼),或者由于不兼容的環(huán)境設(shè)置與本機函數(shù)調(diào)用相關(guān)聯(lián),而無法訪問存儲在CPU寄存器中的變量,所以可能無法正確地執(zhí)行由遞歸字節(jié)碼調(diào)用的子程序??梢酝ㄟ^實現(xiàn)手工編碼的軟件來解決這一難題,所述手工編碼的軟件產(chǎn)生匯編語言,以便為RBC子程序?qū)懭牖蛘咝薷淖兞恐?,然而這一方法需要復雜的開發(fā)工作量。
需要這樣一種解釋編程語言的系統(tǒng),它能準確地和高效地執(zhí)行遞歸字節(jié)碼指定的指令,同時更容易實施。
發(fā)明概要本發(fā)明通過規(guī)定為由遞歸字節(jié)碼調(diào)用的本機函數(shù)提供前同步碼和后同步碼并執(zhí)行該本機函數(shù)的專用函數(shù),來滿足如上所述的需要。所述前同步碼和后同步碼代替或者修改與本機函數(shù)相關(guān)聯(lián)的任何標準前同步碼和后同步碼,并使得本機函數(shù)能夠訪問和修改必要的CPU寄存器的內(nèi)容。在另一個實施例中,專用函數(shù)能夠從處理器存儲器取出、或者為任何復雜的字節(jié)碼產(chǎn)生。借此,本發(fā)明維護了準確度和速度,同時簡化了軟件陷阱或者“VMI加速硬件”方法的實現(xiàn)。
更具體地說,本發(fā)明以應(yīng)用編程接口(API)的形式提供VMI支持。當VMI在解釋和執(zhí)行字節(jié)碼序列的同時遇到遞歸的字節(jié)碼的時候,本發(fā)明的VMI支持軟件使用附加的前同步碼和附加的后同步碼將由遞歸的字節(jié)碼調(diào)用的最高層子程序封裝起來。當該子程序被調(diào)用的時候,本發(fā)明的所述附加的前同步碼處理CPU寄存器中包含的變量值,從而使CPU將這些值寫入可在被調(diào)用的子程序的內(nèi)部來訪問的變量。用這樣的方式,被調(diào)用的子程序能夠修改變量值。本發(fā)明的所述附加的后同步碼在標準子程序后同步碼之后執(zhí)行,從而使CPU取出修改的變量的值并將該值寫入CPU寄存器中。由此,當CPU恢復執(zhí)行由隨后的字節(jié)碼翻譯所產(chǎn)生的本機指令的時候,所述修改的變量將可用。
簡要來講,本發(fā)明包括用于處理虛擬機指令的方法和系統(tǒng),它在本發(fā)明的示例性的實施例中是通過Java程序設(shè)計語言產(chǎn)生的。在編程級,Java源代碼被編譯為稱作字節(jié)碼的中間語言。字節(jié)碼包括能夠由虛擬機解釋以便由處理器來執(zhí)行的虛擬機指令。依據(jù)本發(fā)明的示例性的實施例,虛擬機(在該示例性的實施例中是VMI)在運行時被初始化。包括所有軟件陷阱的入口地址的表被編譯,其中,軟件陷阱從VM硬件中取消對于一些復雜的字節(jié)碼的處理,并且代之以使用軟件來處理復雜的字節(jié)碼。參數(shù)被初始化,所述參數(shù)依據(jù)用于每一字節(jié)碼的特征的適當?shù)奶幚矸椒▽ψ止?jié)碼進行分類。舉例來說,字節(jié)碼可以被分為簡單的、復雜的、或者遞歸的(RBC)。遞歸的字節(jié)碼是字節(jié)碼的第一序列中的虛擬機指令,它調(diào)用能執(zhí)行字節(jié)碼的第二序列中的一個或多個字節(jié)碼,然后返回到字節(jié)碼的第一序列的子程序。遞歸的Java字節(jié)碼的范例是INVOKESTATIC和NEW。那些被配置成用于處理RBC的軟件陷阱配備有適當?shù)那巴酱a和后同步碼。
VMI繼續(xù)將一系列字節(jié)碼中的每一個翻譯為一個或多個本機指令。當遇到RBC的時候,VMI掛起對字節(jié)碼序列的翻譯,并且通過適當?shù)能浖葳逄幚碓揜BC。一般來講,軟件陷阱檢索對應(yīng)于所述RBC的虛擬機指令的本機函數(shù)。本發(fā)明的應(yīng)用編程接口(API)規(guī)定了適當?shù)淖映绦?,其?zhí)行前同步碼、調(diào)用對應(yīng)于所述RBC的本機函數(shù)并且執(zhí)行后同步碼。在執(zhí)行由所述RBC調(diào)用的本機函數(shù)以前執(zhí)行所述前同步碼。在執(zhí)行由所述RBC調(diào)用的本機函數(shù)之后并且在所述RBC本機函數(shù)中的任何RETURN(返回)語句之后執(zhí)行所述后同步碼。如果由所述RBC調(diào)用的子程序包含標準前同步碼和/或標準后同步碼,則本發(fā)明的前同步碼被替代并且通常在執(zhí)行所述標準前同步碼以前執(zhí)行,而且,本發(fā)明中的后同步碼被替代并且通常在執(zhí)行所述標準后同步碼之后執(zhí)行。另外,本發(fā)明的前同步碼和后同步碼可以分別物理地修改或者改寫標準前同步碼或者標準后同步碼中包含的一條或多條指令。依據(jù)本發(fā)明的示例性實施例中的一個方面,所述前同步碼將值寫入可被RBC所調(diào)用的子程序訪問的變量。本發(fā)明的后同步碼將由被調(diào)用的子程序所修改的變量值寫回到包含該變量的CPU寄存器。然后,由API規(guī)定的子程序開始恢復在所述字節(jié)碼序列的VMI中的翻譯,這將持續(xù)直到遇到另一RBC或者翻譯過程終止。再有,由API規(guī)定的子程序可以根據(jù)需要執(zhí)行前同步碼和后同步碼,以便使本機的操作能訪問VMI環(huán)境,舉例來說,執(zhí)行在本機的處理開始以前的第一前同步碼、處理上述方法以前的第一后同步碼、上述方法執(zhí)行之后的另一前同步碼以及在本機的處理完成之后的最終后同步碼。
使用諸如C RETURN語句之類的代碼恢復VMI翻譯。然而,在本發(fā)明的示例性實施例中,通過用于釋放被配置為處理RBC的環(huán)境的CPU區(qū)域的恢復子程序添加由RBC發(fā)出的C RETURN語句,并且將VMI執(zhí)行返回到字節(jié)碼序列中的一個位置,例如返回到緊跟在最近被翻譯的RBC后面的位置。
本發(fā)明的另一方面是用于執(zhí)行來自諸如JavaTM之類的解釋語言的虛擬機指令的系統(tǒng)。該系統(tǒng)包括處理器(CPU)和預處理器(VMI)、指令存儲器、翻譯器(JVM)以及應(yīng)用編程接口(API)。所述處理器包含并且被配置成能執(zhí)行硬件專用指令,以下簡稱本機指令。所述預處理器是一種虛擬機,例如是VMI,其被配置為從指令存儲器中取出字節(jié)碼并且將所述字節(jié)碼翻譯為本機的CPU指令。對于某些類型的字節(jié)碼,API被配置為將值從CPU寄存器寫入變量,從而該變量對上述字節(jié)碼所表示的本機CPU指令來說是可訪問的,并可依據(jù)該字節(jié)碼所表示的本機CPU指令修改變量值。在本發(fā)明的示例性實施例中,API規(guī)定了一個子程序,該子程序在執(zhí)行由該字節(jié)碼調(diào)用的子程序之前實施前同步碼,在該執(zhí)行之后實施后同步碼。前同步碼將值從CPU寄存器寫到可由該被調(diào)用的子程序訪問的變量。在執(zhí)行由該字節(jié)碼表示的指令之后,API通過執(zhí)行后同步碼子程序而相應(yīng)地修改變量值。
盡管可以與本發(fā)明的API相結(jié)合地實施軟件陷阱方法以便處理各種類型的字節(jié)碼,但是本發(fā)明的該示例性的實施例旨在處理遞歸的字節(jié)碼。
本發(fā)明能夠在使用例如由Sun Microsystems制造的JVM之類的虛擬機來執(zhí)行JavaTM字節(jié)碼的系統(tǒng)中實施。然而,本發(fā)明還可以使用例如Microsoft虛擬機之類的其他JavaTM虛擬機來實施,并且還適用于執(zhí)行諸如Visual Basic、dBASE、BASIC和MSIL(微軟中間語言)之類的其他解釋語言的系統(tǒng)。
本發(fā)明的另外的目的、優(yōu)點和新穎特征部分地將在隨后的說明中闡述,同時部分地在研究了下文時而對于本領(lǐng)域中的技術(shù)人員顯而易見,或者通過實現(xiàn)本發(fā)明而學到。
附圖簡述

圖1是一個方框圖,示出了本發(fā)明的環(huán)境中的示例性實施例的功能要素。
圖2示出了一個示例性的字節(jié)碼處理序列。
圖3是依據(jù)本發(fā)明的示例性實施例的方法的流程圖。
圖4是示出本發(fā)明的示例性實施例中涉及的操作的相對時間關(guān)系的時間線。
最佳實施例說明現(xiàn)在詳細參考本發(fā)明的一個示例性的實施例,它在附圖中被圖示出,其中類似的附圖標記標明類似的部件,圖1是本發(fā)明的環(huán)境中的示例性實施例的方框圖。該環(huán)境的基本部件是硬件平臺100,它包括處理器110、預處理器120以及指令存儲器150,它們均通過系統(tǒng)總線160相連接。預處理器120包括至少一個表130和翻譯器140。硬件平臺100通常包括中央處理單元(CPU)、基本外圍設(shè)備以及操作系統(tǒng)(OS)。本發(fā)明中的處理器110是諸如MIPS、ARM、Inte1TMx86、PowerPCTM或者SPARC型號微處理器之類的CPU,而且包含并被配置為用于執(zhí)行硬件專用指令,以下簡稱為本機指令。在本發(fā)明的示例性實施例中,所述翻譯器140是JavaTM虛擬機(JVM),例如是由Sun Microsystems制造的KVM。該示例性實施例中的預處理器120最好是在WO9918486中公開的虛擬機解釋器(VMI),并且被配置為從指令存儲器中取出字節(jié)碼并將該字節(jié)碼翻譯為本機CPU指令。VMI 120是總線160上的外圍設(shè)備,可以充當存儲器映像的外圍設(shè)備,其中,將預定范圍的CPU地址分配給VMI 120。VMI 120管理用于指示指令存儲器150中的當前(或者下一個)虛擬機指令的獨立虛擬機指令指針。所述指令存儲器150包含虛擬機指令,例如包含JavaTM字節(jié)碼170。
所述VMI 120通過將大部分字節(jié)碼170翻譯為本機CPU指令的最佳序列,來加速Java字節(jié)碼170的解釋。然而,VMI 120通過執(zhí)行軟件陷阱實施用于處理復雜字節(jié)碼170的軟件解決方案。一般來講,本發(fā)明涉及用于擴充軟件陷阱的執(zhí)行能力的系統(tǒng)和方法,所述軟件陷阱是以特定類型的復雜字節(jié)碼即公知的遞歸字節(jié)碼(RBC)230為目標的。圖2示出RBC 230的重要特征,那就是對在字節(jié)碼170的第一系列210中的RBC 230的處理會導致對字節(jié)碼170的第二系列220中的字節(jié)碼170的處理以及隨后返回到對系列210中的字節(jié)碼170的處理。因此,執(zhí)行RBC 230會產(chǎn)生稱為“方法”的字節(jié)碼子程序。注意,如果系列210等于系列220,則系列210構(gòu)成“遞歸方法”,該術(shù)語不等于“遞歸字節(jié)碼”。通過定義一個包含軟件陷阱的通用結(jié)構(gòu)規(guī)范的API,本發(fā)明可支持用于處理RBC 230的軟件陷阱的一般操作。
根據(jù)本發(fā)明并且參考圖3,在運行時初始化VMI 120,這項處理包括設(shè)置VMI 120的翻譯控制寄存器。表130被編譯,該表包括用于所有軟件陷阱的入口地址。參數(shù)被初始化,該參數(shù)允許VMI依據(jù)字節(jié)碼的屬性處理每一字節(jié)碼。當字節(jié)碼是復雜的時候,VMI通過適當?shù)能浖葳逄幚碓撟止?jié)碼。根據(jù)本發(fā)明,作為共同形成軟件陷阱的本機指令的類屬序列的一部分,被配置為處理RBC 230的那些軟件陷阱涉及適當?shù)那巴酱a和后同步碼,所述前同步碼和后同步碼可以通過VMI 120產(chǎn)生,但是在該示例性實施例中,它們被存儲在處理器存儲器中、在處理器存儲器中實例化并且從處理器存儲器中執(zhí)行。另外,所述前同步碼和后同步碼能夠被存儲在VMI內(nèi)的表130中。因此在API實現(xiàn)方式中,一旦系統(tǒng)初始化,每一RBC軟件陷阱進入點就會被編程為指向本機子程序(“PPA子程序”)。所述PPA子程序包括執(zhí)行前同步碼和后同步碼,并且已經(jīng)被實例化為含有到由RBC調(diào)用的本機函數(shù)(或多個本機函數(shù))的跳轉(zhuǎn)。
作為本發(fā)明的操作的一個例子,VMI 120繼續(xù)將字節(jié)碼170的系列210中的每一個翻譯為一個或多個本機指令。參考圖2,字節(jié)碼B0至B2是非遞歸的,因此VMI 120僅從指令存儲器150中取出B0至B2、選擇為每一字節(jié)碼170定義的本機指令或者多條指令并且將這些指令提供給處理器110來執(zhí)行。Bn是RBC 230,它的執(zhí)行可能引起來自第二序列220的一個或多個字節(jié)碼(在這里是Bo至Bs)的執(zhí)行。注意在Java中,方法調(diào)用始終進入第一字節(jié)碼處的序列,然而其他語言可能不允許在沿一個指令序列的其他位置處進入,這并沒有技術(shù)上的原因。在執(zhí)行第二序列220中的字節(jié)碼之后,Bs是一個RETURN字節(jié)碼,它使字節(jié)碼執(zhí)行以便在第一序列210中的某處繼續(xù)。正如不是序列220的最后字節(jié)碼的Bs指示的那樣,Java方法能夠具有幾個出口點(RETURN字節(jié)碼)。在Bs之后,執(zhí)行通常在第一序列210中Bn+1處繼續(xù),但是并不一定非得是這樣。
如圖3中框310所示,VMI 120在進行到框320以取出每一字節(jié)碼170之前對虛擬機計數(shù)器加1。在框330中,VMI 120通過根據(jù)字節(jié)碼170確定字節(jié)碼170是否為“簡單的”——即是否存在由用于字節(jié)碼170的至少一個本機指令構(gòu)成的硬件翻譯——而對字節(jié)碼170譯碼。如果存在用于字節(jié)碼170的當前硬件翻譯,則該方法前進到框370并且相應(yīng)地處理所述簡單字節(jié)碼。如果沒有存在用于該字節(jié)碼170的硬件翻譯,則該字節(jié)碼170是復雜的。在框340中,VMI對照表140中的參數(shù)檢驗字節(jié)碼170,所述參數(shù)可識別用于復雜字節(jié)碼的本機指令的適當類屬序列。VMI 120掛起字節(jié)碼170的序列210的翻譯,并且依據(jù)組成適當軟件陷阱的這一類屬序列來處理復雜的字節(jié)碼,其地址位于表140中。軟件陷阱通常通過檢索對應(yīng)于字節(jié)碼170的本機函數(shù)并且將該本機函數(shù)調(diào)度給CPU 110、而不是通過逐指令地解釋由字節(jié)碼170表示的子程序來處理復雜的字節(jié)碼。本發(fā)明的應(yīng)用編程接口(API)是一項技術(shù)規(guī)范,其規(guī)定了在實施處理RBC時擴充該軟件陷阱方法所需的功能,并且規(guī)定了怎樣訪問該功能。如果如框380中假定的那樣,字節(jié)碼170不是遞歸的,則依據(jù)在框340中識別出的適當軟件陷阱,在框384中進行本機操作,直到如在框368中那樣將控制權(quán)返回到VMI。如果如在框350中假定的那樣,字節(jié)碼170是遞歸的,則本發(fā)明的API規(guī)定了一個適當?shù)腜PA子程序360,其配置用于RBC 230的環(huán)境,從而,由RBC 230表示的本機函數(shù)能夠訪問包含有執(zhí)行子程序所必需的變量值的CPU 110中的寄存器。必需的變量可以包括指向常數(shù)池、堆棧、本機和程序代碼的指針。在CPU在框364中開始處理對應(yīng)于RBC 230的本機操作之前,在框362中,由API規(guī)定的PPA子程序360執(zhí)行前同步碼。本機的處理繼續(xù),直到在框364中遇到本機環(huán)境訪問函數(shù)為止,這就會重啟動VMI。在框365中、改變VMI的參數(shù)來處理方法220,直到RETURN字節(jié)碼使任何剩余本機處理的恢復(框366)為止。在本機處理期間遇到另一RETURN字節(jié)碼則把控制權(quán)移回到PPA子程序,在框367中為該PPA子程序執(zhí)行后同步碼,并且,在完成PPA子程序360的執(zhí)行之后,在框368中、將控制權(quán)返回到VMI以便根據(jù)新參數(shù)進行處理。適當PPA子程序360的地址被存儲在表140中并且對應(yīng)于所述被配置為處理遞歸的字節(jié)碼170的軟件陷阱。在執(zhí)行由所述RBC 230調(diào)用的本機操作(本機處理)以前執(zhí)行所述前同步碼。如果一個標準前同步碼與由RBC 230調(diào)用的本機函數(shù)相關(guān)聯(lián),則執(zhí)行本發(fā)明的前同步碼,以便或者替換、或者修改與本機函數(shù)相關(guān)聯(lián)的標準前同步碼。在執(zhí)行由所述RBC 230調(diào)用的本機函數(shù)之后執(zhí)行所述后同步碼。類似地,在RBC本機函數(shù)中的C RETURN語句之后執(zhí)行本發(fā)明的后同步碼,以便或者替換、或者修改與由所述RBC調(diào)用的本機函數(shù)相關(guān)聯(lián)的標準后同步碼(如果存在標準后同步碼的話)。
依據(jù)本發(fā)明的示例性實施例的一個方面,所述前同步碼將值寫入表示諸如堆棧指針之類的某些重要指針的變量,借此使得由RBC 230調(diào)用的本機函數(shù)能夠訪問該指針。例如,為了提供對由RBC 230調(diào)用的本機函數(shù)的環(huán)境的訪問,定義了幾個函數(shù)void*vmi_bcc(void*jfp);void*vmi_object(void*jfp);void*vmi_jsp(void*jfp);void*vmi_cpd(void*jfp);void*vmi_cpt(void*jfp);void*vmi_bcc(void*jfp);類似地,以下函數(shù)給出對常數(shù)池的訪問<t>vmi_cpdEntry(void*jfp,unsigned n,<t>)unsigned char vmi_cptEntry(void*jfp,unsigned n)以下函數(shù)給出對當前和下一字節(jié)碼170的訪問unsigned char vmi_bc(void*jfp,n)unsigned char vmi_s hortPar(void* jfp,n)unsigned char vmi_3bytePar(void* jfp,n)unsigned char vmi_wordPar(void*jfp,n)以下函數(shù)用于訪問JavaTM堆棧<t>vmi_stkEntry(void*jfp,n,<t>)現(xiàn)在參考圖4,VMI的主動翻譯(Java字節(jié)碼處理)功能是由Java虛擬機(JVM)標準規(guī)定的。圖4表示假定的字節(jié)碼處理時間線,其中間隔T0-T12表示不一定相等的任意時間的時間段。在間隔T0期間,VMI使用本發(fā)明的API作為接口來翻譯字節(jié)碼,直到遇到遞歸的字節(jié)碼(RBC)230為止。交叉參照圖2中的假定圖表,VMI處理字節(jié)碼B0至B2,然后遇到Bn。當識別出適當?shù)腞BC軟件陷阱(由API指示出)并且執(zhí)行對應(yīng)的PPA子程序的時候,RBC 230(Bn)使得控制權(quán)被傳遞到間隔T1中的本機處理。在間隔T2至T10中,軟件陷阱執(zhí)行由RBC 230調(diào)用的本機函數(shù),從而訪問(在間隔T4中)由前同步碼初始化的環(huán)境。例如,根據(jù)需要,在間隔T5和T6中重復間隔T3和T4的處理周期(專用于RBC 230的本機操作和對環(huán)境訪問函數(shù)的調(diào)用)。本機函數(shù)最后(可能在數(shù)以千計的本機執(zhí)行循環(huán)之后)產(chǎn)生本機環(huán)境訪問函數(shù),它在間隔T7重新啟動VMI。VMI主動地為新調(diào)用的方法處理字節(jié)碼(假定的字節(jié)碼Bo至Br),直到在間隔T7遇到一個RETURN字節(jié)碼(Bs)為止,這就會將控制權(quán)返回給本機函數(shù)處理。在間隔T8中,或者通過VMI 120硬件、或者通過軟件(經(jīng)由API并且經(jīng)由諸如C程序設(shè)計語言RETURN語句之類的代碼實現(xiàn)的),將控制權(quán)完全從VMI 120返回到本機處理。本機處理在間隔T10繼續(xù),這時另一C RETURN語句將控制轉(zhuǎn)移給PPA子程序,以致在間隔T11中執(zhí)行后同步碼。在控制權(quán)在時間間隔T12中重新返回到VMI 120(在假定的字節(jié)碼Bn+1處)之后,本發(fā)明的后同步碼將由RBC子程序修改的變量值寫回到包含這些變量的CPU寄存器中。根據(jù)圖5中所示的另一個的實施例,可以執(zhí)行前同步碼和后同步碼,以便實現(xiàn)處理新調(diào)用的方法(示例性的字節(jié)碼Bo至Bs)所需的環(huán)境改變,例如,改變本機處理在間隔T1開始之前的第一前同步碼、所述方法在T9至T11中被處理之前的第一后同步碼、在執(zhí)行該方法之后的間隔T12中的另一前同步碼、以及在本機處理完成之后的間隔T16中的最后的后同步碼。
再次參看圖3,在框368中,由API規(guī)定的PPA子程序還被配置成開始恢復在字節(jié)碼170的序列210的VMI120中的翻譯?;蛘咄ㄟ^VMI120或者通過API實現(xiàn)方式、并且以硬件或者以軟件形式的實現(xiàn)方式,將控制權(quán)完全地從VMI120返回到本機處理。這一恢復例程的軟件實現(xiàn)方式是通過諸如C程序設(shè)計語言RETURN語句之類的代碼實現(xiàn)的,它通常包括在本機函數(shù)中。在從本機處理返回之后,環(huán)境被例如vmi_freeFrame破壞,從而,控制權(quán)能夠被傳遞回到VMI 120。環(huán)境的破壞釋放了CPU 110中的被配置為用于處理RBC 230的環(huán)境的區(qū)域,并且將VMI 120翻譯返回到字節(jié)碼170的序列210中的位置,例如(但不一定)返回到緊跟在最近翻譯的RBC 230之后的位置。
當在框310中將控制權(quán)返回到VMI 120的時候,虛擬機計數(shù)器加1,并且,VMI 120取出下一字節(jié)碼170。因此,由VMI 120進行的翻譯將繼續(xù),直到遇到另一RBC 230或者翻譯處理終止(例如,VMI遇到另一復雜的字節(jié)碼,或者在字節(jié)碼之中運行以便處理)為止。
鑒于上述內(nèi)容,將被理解的是本發(fā)明提供了一種系統(tǒng)和方法,用于支持處理虛擬機指令的軟件陷阱方法,以便方便地實現(xiàn)用于準確和有效地處理遞歸虛擬機指令的方法。此外,仍應(yīng)理解的是上文僅僅涉及了本發(fā)明的示例性實施例,而在不背離如下列權(quán)利要求書中定義的本發(fā)明的精神和范圍的情況下,可以對其作出很多改變。
權(quán)利要求
1.一種處理虛擬機指令的方法,包括初始化參數(shù),以便識別具有特定特征集合的虛擬機指令的子集;將一批所述虛擬機指令翻譯為可由處理器執(zhí)行的本機指令,直到遇到所述識別出的虛擬機指令子集中的一個成員為止;一旦遇到所述識別出的虛擬機指令子集中的一個成員,就掛起對所述批虛擬機指令的翻譯;實現(xiàn)接口,其中所述接口規(guī)定了本機處理器指令的集合,該指令集合可以在執(zhí)行由所述識別出的虛擬機指令子集的所述成員表示的本機處理器指令之前,執(zhí)行前同步碼;從與由所述識別出的虛擬機指令子集的所述成員表示的指令相對應(yīng)的處理器中檢索本機函數(shù);執(zhí)行檢索出的本機指令;在執(zhí)行由所述識別出的虛擬機指令子集的所述成員表示的本機指令之后,執(zhí)行后同步碼;以及恢復在所述批虛擬機指令的虛擬機中的翻譯,其中,執(zhí)行繼續(xù)直到遇到所述識別出的虛擬機指令子集的另一成員為止;以及執(zhí)行所述本機處理器指令集合。
2.如權(quán)利要求1所述的方法,進一步包括在執(zhí)行檢索出的構(gòu)成一個方法的本機指令之前執(zhí)行后同步碼,其中,所述后同步碼包括本機指令,所述本機指令用于修改處理器的寄存器內(nèi)的變量值,以便實現(xiàn)執(zhí)行該方法所需要的環(huán)境改變;以及在執(zhí)行檢索出的構(gòu)成一個方法的本機指令之后執(zhí)行前同步碼,其中,所述前同步碼包括將值從處理器中的寄存器寫入可由在執(zhí)行該方法之后執(zhí)行的本機指令訪問的變量中。
3.如權(quán)利要求1所述的方法,其中,所述前同步碼和所述后同步碼是由虛擬機產(chǎn)生的。
4.如權(quán)利要求1所述的方法,其中,所述前同步碼和所述后同步碼是從處理器存儲器中檢索出的。
5.如權(quán)利要求1所述的方法,其中,所述前同步碼包括將值從處理器中的寄存器寫入變量的本機指令,其中,所述變量可以被由所述識別出的虛擬機指令子集表示的指令訪問。
6.如權(quán)利要求1所述的方法,其中,所述后同步碼包括本機指令,所述本機指令根據(jù)被由所述識別出的虛擬機指令子集表示的指令將處理器的寄存器內(nèi)的變量值修改到處理器的寄存器中。
7.如權(quán)利要求1所述的方法,其中,所述前同步碼和所述后同步碼替換與所述識別出的虛擬機指令子集的所述成員相關(guān)聯(lián)的沖突指令。
8.如權(quán)利要求1所述的方法,其中,所述前同步碼和所述后同步碼修改與所述識別出的虛擬機指令子集的所述成員相關(guān)聯(lián)的沖突指令。
9.如權(quán)利要求1所述的方法,進一步包括開始恢復子程序,其中,所述恢復子程序包括釋放由前同步碼和后同步碼訪問過的處理器中的寄存器;以及指引虛擬機在所述批虛擬機指令中的一處位置恢復翻譯。
10.一種處理虛擬機指令的方法,包括配置中央處理單元中的環(huán)境;實現(xiàn)用于規(guī)定本機處理器指令集合的接口,所述本機處理器指令集合包括在執(zhí)行由所述虛擬機指令表示的本機處理器指令之前執(zhí)行前同步碼;從與由所述虛擬機指令表示的指令相對應(yīng)的處理器中檢索本機函數(shù);執(zhí)行檢索出的本機指令;在執(zhí)行由所述虛擬機指令表示的本機指令之后執(zhí)行后同步碼;以及釋放所配置的環(huán)境;以及執(zhí)行所述本機處理器指令集合。
11.一種用于處理虛擬機指令的設(shè)備,包括處理器(110),它具有本機指令集,并且被配置為執(zhí)行本機指令;指令存儲器(150),它被配置為存儲虛擬機指令;預處理器(120),其中,所述預處理器(120)是虛擬機,它被配置為從指令存儲器(150)中取出虛擬機指令,并且被配置為將取出的虛擬機指令翻譯為可由處理器執(zhí)行的本機指令;以及所述指令存儲器(150)和所述處理器(110)之間的接口,它被配置為啟動一個子程序,該子程序?qū)⑺鎏幚砥鲉卧?100)中的可被由虛擬機指令表示的指令所訪問的變量的值寫入寄存器,發(fā)出對應(yīng)于由虛擬機指令表示的指令的本機子程序調(diào)用,依據(jù)所述虛擬機指令修改所述變量的值并且將控制權(quán)返回給所述預處理器。
12.一種用于執(zhí)行被虛擬機指令調(diào)用的本機處理器子程序的方法,包括在執(zhí)行所調(diào)用的子程序之前執(zhí)行本機指令的前同步碼集合,其中,所述前同步碼被配置為將值從處理器的寄存器中寫入可由所調(diào)用的子程序訪問的變量;以及在執(zhí)行所調(diào)用的子程序之后執(zhí)行本機指令的后同步碼集合,其中,所述后同步碼被配置為根據(jù)所調(diào)用的子程序修改處理器的寄存器中的變量值。
全文摘要
一種用于處理虛擬機指令的系統(tǒng)和方法,其支持軟件陷阱方法。應(yīng)用程序編程接口(API)規(guī)定用于軟件陷阱的附加功能,軟件陷阱從虛擬機硬件中消除對于遞歸虛擬機指令的處理,并代之以使用軟件處理遞歸虛擬機指令。所述附加功能包括對用于處理遞歸虛擬機指令的環(huán)境進行配置,這使得虛擬機指令能夠訪問CPU寄存器,以便根據(jù)需要檢索和修改變量的值;當完成遞歸虛擬機指令的處理的時,釋放所配置的環(huán)境;以及,將控制權(quán)返回給用于處理非遞歸虛擬機指令的虛擬機。
文檔編號G06F9/45GK1596398SQ02818700
公開日2005年3月16日 申請日期2002年9月6日 優(yōu)先權(quán)日2001年9月25日
發(fā)明者M·M·林德維, S·本-耶德 申請人:皇家飛利浦電子股份有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
肇庆市| 鹤峰县| 阿城市| 汉阴县| 海淀区| 交城县| 常宁市| 泰和县| 黎城县| 青冈县| 阿鲁科尔沁旗| 巨野县| 宝山区| 准格尔旗| 醴陵市| 巫山县| 赤壁市| 芮城县| 贵港市| 凤庆县| 柏乡县| 高邮市| 修武县| 奉节县| 察隅县| 日土县| 三江| 县级市| 华池县| 芦山县| 建阳市| 大冶市| 苏州市| 瑞昌市| 剑川县| 溧水县| 贵定县| 泾源县| 靖西县| 金乡县| 丹东市|