專利名稱:中間代碼執(zhí)行系統(tǒng)、中間代碼執(zhí)行方法與執(zhí)行中間代碼的計(jì)算機(jī)程序產(chǎn)品的制作方法
對(duì)相關(guān)申請(qǐng)的參照說明本申請(qǐng)根據(jù)并要求2001年10月31日歸檔的現(xiàn)有日本專利申請(qǐng)?zhí)?001-334822的優(yōu)先權(quán),特此全部內(nèi)容參考編入。
本發(fā)明的背景1、本發(fā)明的領(lǐng)域?yàn)榱颂峁┮粋€(gè)不依賴于某個(gè)計(jì)算機(jī)平臺(tái)(譬如硬件或某個(gè)操作系統(tǒng))的程序,已經(jīng)提出了一種用某種軟件技術(shù)或某種硬件技術(shù)在每個(gè)平臺(tái)上構(gòu)造一臺(tái)虛擬機(jī)(VM)并在該虛擬機(jī)上執(zhí)行某個(gè)源代碼與某個(gè)目的代碼之間的一個(gè)中間代碼的方法。作為一個(gè)采用這種方法的程序語言,Java(R)采用了一種被稱為一個(gè)類文件的中間代碼形式。應(yīng)當(dāng)注意,該硬件或在該硬件基礎(chǔ)上構(gòu)造的虛擬機(jī)在下文可以被共同稱為一個(gè)中間代碼執(zhí)行系統(tǒng)。
2、相關(guān)技術(shù)的說明根據(jù)上述方法,由于單一的程序代碼可以供給各種平臺(tái)并被執(zhí)行,所以不再需要準(zhǔn)備只能在各自平臺(tái)上執(zhí)行的一個(gè)目的代碼。結(jié)果,不僅該程序的分配可以簡化,而且也提高了軟件開發(fā)的效率。所以已經(jīng)在各種計(jì)算機(jī)的平臺(tái)上構(gòu)造了虛擬機(jī)。而且近年來,也已經(jīng)開始在各種內(nèi)裝一個(gè)處理器的電子設(shè)備(下文將稱之為一個(gè)組裝式設(shè)備)中構(gòu)造基于一個(gè)微處理器的虛擬機(jī)。
這里,一個(gè)已知的虛擬機(jī)是某種解釋器類型,它以軟件的形式在該平臺(tái)上構(gòu)造,并順序解釋及執(zhí)行某個(gè)類文件中所包括的字節(jié)代碼命令。該解釋器類型的虛擬機(jī)需要一個(gè)從該類文件中逐個(gè)取出字節(jié)代碼命令并對(duì)它們的內(nèi)容作出解釋的過程。在現(xiàn)有技術(shù)中這一過程成為額外消耗,所以不能獲得優(yōu)良的性能。
因而,已經(jīng)提出了一個(gè)JIT編譯器(即時(shí)編譯器)系統(tǒng)、一個(gè)AOT編譯器(提前編譯器)或類似系統(tǒng),它們能將該類文件編譯為每個(gè)硬件固有的某種本機(jī)代碼并對(duì)其執(zhí)行以便改進(jìn)性能。而且,一直也在嘗試硬件形式的虛擬機(jī)結(jié)構(gòu),如專門設(shè)計(jì)以便能夠直接執(zhí)行字節(jié)代碼命令的某種Java芯片。
在上述的JIT或AOT編譯器系統(tǒng)中,由于執(zhí)行的是該處理器的本機(jī)代碼,所以如果只注意命令執(zhí)行的速度,那么它優(yōu)于解釋器程序系統(tǒng)。然而,該編譯器系統(tǒng)需要一個(gè)對(duì)一種編譯運(yùn)行本身必不可少的工作區(qū)域,或者需要一個(gè)長度為該類文件4至10倍的儲(chǔ)存該本機(jī)代碼的區(qū)域,因而十分不利的是需要比該解釋器系統(tǒng)更大量的存儲(chǔ)器。這一問題在對(duì)硬件資源的限制比一個(gè)常規(guī)計(jì)算機(jī)更為嚴(yán)格的組裝式設(shè)備中特別突出。而且,如果在指導(dǎo)執(zhí)行該類文件后開始編譯,那么該編譯操作就成為額外消耗,也就不能得到足夠好的性能。
此外,按照上述Java芯片,盡管該類文件可以不進(jìn)行編譯以高性能執(zhí)行,但在開發(fā)這一專用芯片時(shí)需要大量的開發(fā)成本,所以芯片本身的成本上升也就不可避免。另外考慮到,根據(jù)技術(shù)的進(jìn)步或市場(chǎng)需要,總要在語言規(guī)范中適當(dāng)更新版本或消除錯(cuò)誤,所以構(gòu)造硬件形式的虛擬機(jī)也未必是希望的方法。特別是,因?yàn)榧葟?qiáng)烈要求降低成本又要在一個(gè)短周期內(nèi)對(duì)規(guī)范進(jìn)行版本更新,所以在該組裝式設(shè)備的虛擬機(jī)中采用Java芯片并不現(xiàn)實(shí)。
如上所述,由于很難將編譯器系統(tǒng)或Java芯片這樣的虛擬機(jī)應(yīng)用于該組裝式設(shè)備或類似設(shè)備,所以一直希望在具有解釋器系統(tǒng)的虛擬機(jī)中能改進(jìn)這種類文件的運(yùn)行性能,由于該解釋器系統(tǒng)以能夠不依賴于某個(gè)特定硬件設(shè)計(jì)來處理規(guī)范中某種改變的軟件形式安裝,故而能夠執(zhí)行該緊湊的類文件。
本發(fā)明的簡單概要本發(fā)明的一個(gè)目的是改進(jìn)由某個(gè)解釋器系統(tǒng)來執(zhí)行某個(gè)中間代碼的一個(gè)中間代碼執(zhí)行系統(tǒng)的性能。
為達(dá)到這個(gè)目的,根據(jù)本發(fā)明的第一方面,提供了一個(gè)用某個(gè)解釋器來執(zhí)行某個(gè)中間代碼的系統(tǒng),對(duì)以某種預(yù)定程序語言生成的一個(gè)源代碼進(jìn)行轉(zhuǎn)換可以得到該中間代碼,該系統(tǒng)包括一個(gè)處理器;一個(gè)相對(duì)較快的第一存儲(chǔ)器部分;一個(gè)相對(duì)較慢的第二存儲(chǔ)器部分;一個(gè)第一解釋器模塊,它被儲(chǔ)存在該第一存儲(chǔ)器部分內(nèi)并對(duì)應(yīng)于該程序語言的某個(gè)命令集合中的一個(gè)子集;和一個(gè)第二解釋器模塊,它被儲(chǔ)存在該第二存儲(chǔ)器部分內(nèi)并對(duì)應(yīng)于該命令集合中的其余命令,其中該處理器用該第一解釋器模塊判斷取自該中間代碼的一個(gè)命令對(duì)應(yīng)于哪一個(gè)子集,若該命令在該子集之中就執(zhí)行該對(duì)應(yīng)命令,若該命令不在該子集之中,則用該第二解釋器認(rèn)定該命令所對(duì)應(yīng)的一個(gè)其余命令,并執(zhí)行該命令。
根據(jù)本發(fā)明的第二方面,提供了一種中間代碼執(zhí)行方法,它在一個(gè)處理器內(nèi)執(zhí)行對(duì)以某種預(yù)定程序語言生成的源代碼進(jìn)行轉(zhuǎn)換所得的中間代碼,一個(gè)相對(duì)較快的第一存儲(chǔ)器部分以及一個(gè)相對(duì)較慢的第二存儲(chǔ)部分與該處理器相連,該方法包括使該處理器利用對(duì)應(yīng)于該程序語言的某個(gè)命令集合中一個(gè)子集的一個(gè)第一解釋器模塊判斷取自該中間命令的一個(gè)命令對(duì)應(yīng)于哪一個(gè)子集,若該對(duì)應(yīng)命令在該子集之中就執(zhí)行該對(duì)應(yīng)命令;若該對(duì)應(yīng)命令不在該子集之中,則使該處理器利用對(duì)應(yīng)于該命令集合中其余命令的一個(gè)第二解釋器模塊認(rèn)定該命令對(duì)應(yīng)于哪一個(gè)其余命令中,并對(duì)其執(zhí)行。
根據(jù)本發(fā)明的第三方面,提供了一個(gè)計(jì)算機(jī)程序產(chǎn)品,它在一個(gè)處理器內(nèi)執(zhí)行對(duì)以預(yù)定程序語言生成的一個(gè)源代碼進(jìn)行轉(zhuǎn)換所得的一個(gè)中間代碼,一個(gè)相對(duì)較快的第一存儲(chǔ)器部分以及一個(gè)相對(duì)較慢的第二存儲(chǔ)器部分與該處理器相連,其中一個(gè)對(duì)應(yīng)于該程序語言的某個(gè)命令集合中一個(gè)子集的第一解釋器模塊被儲(chǔ)存在該相對(duì)較快的存儲(chǔ)器部分內(nèi),該第一解釋器模塊被用來判斷取自該中間代碼的一個(gè)命令對(duì)應(yīng)于哪一個(gè)子集,若該相應(yīng)命令在該子集之中就執(zhí)行該相應(yīng)命令,對(duì)應(yīng)于該命令集合中其余命令的一個(gè)第二解釋器模塊被儲(chǔ)存在一個(gè)相對(duì)較慢的第二存儲(chǔ)器部分內(nèi),若該相應(yīng)命令不在該子集之中,則該第二解釋器模塊被用來認(rèn)定該命令對(duì)應(yīng)于哪一個(gè)其余命令,并對(duì)其執(zhí)行。
本發(fā)明的其他目的與優(yōu)點(diǎn)將在隨后的說明中闡述,其中部分可以通過該說明變得顯而易見,或者可以通過本發(fā)明的實(shí)踐來認(rèn)識(shí)。本發(fā)明的目的與優(yōu)點(diǎn)可以借助下文特別指出的手段與組合來實(shí)現(xiàn)與獲取。
附圖的簡單說明編入并構(gòu)成該說明書之一部分的附圖演示了本發(fā)明目前希望的實(shí)施例,它們與上面給出的總體說明以及下面將要給出的對(duì)希望實(shí)施例的詳細(xì)說明一道可用于說明本發(fā)明的原理。
圖1是表示應(yīng)用于符合本發(fā)明的一個(gè)第一實(shí)施例的某種硬件結(jié)構(gòu)的示意圖;圖2是應(yīng)用于符合本發(fā)明的該第一實(shí)施例的一個(gè)中間代碼執(zhí)行系統(tǒng)的功能方框圖;圖3是流程圖,它說明應(yīng)用于根據(jù)本發(fā)明的該第一實(shí)施例的中間代碼執(zhí)行系統(tǒng)的某個(gè)運(yùn)行過程;圖4是表示應(yīng)用于根據(jù)本發(fā)明的第二實(shí)施例的中間代碼執(zhí)行系統(tǒng)的功能方框圖;圖5是流程圖,它表示應(yīng)用于根據(jù)本發(fā)明的該第二實(shí)施例的中間代碼執(zhí)行系統(tǒng)的某個(gè)運(yùn)行過程。
本發(fā)明的詳細(xì)說明先參看圖1、圖2與圖3來說明根據(jù)本發(fā)明的第一實(shí)施例。
圖1是表示根據(jù)本發(fā)明該第一實(shí)施例的一個(gè)中間代碼執(zhí)行系統(tǒng)1的硬件結(jié)構(gòu)的示意圖,圖2是中間代碼執(zhí)行系統(tǒng)1的方框圖。
如圖1所示,中間代碼執(zhí)行系統(tǒng)1的硬件結(jié)構(gòu)包括一個(gè)內(nèi)含一個(gè)處理器2(譬如一個(gè)CPU或一個(gè)MPU)以及一個(gè)高速存儲(chǔ)器3的芯片1和一個(gè)內(nèi)含一個(gè)RAM 7以及ROM 8的存儲(chǔ)器部分6。另外還可以具有一個(gè)輸入設(shè)備、一個(gè)顯示設(shè)備、一個(gè)外部接口或類似設(shè)備,但它們不直接與這個(gè)實(shí)施例的結(jié)構(gòu)以及效果/優(yōu)點(diǎn)相關(guān),故而這里從略。
這里,處理器2與存儲(chǔ)器部分6通過一條外部總線5相連,而處理器2與高速存儲(chǔ)器3則通過一條比外部總線4具有更大總線寬度的內(nèi)部總線4相連,而且高速存儲(chǔ)器3能夠以比存儲(chǔ)器部分5內(nèi)更快的傳輸速度向處理器2傳輸數(shù)據(jù)。盡管一個(gè)內(nèi)部存儲(chǔ)器或者一個(gè)高速緩沖存儲(chǔ)器都可以被用作一個(gè)高速存儲(chǔ)器3,但只對(duì)該內(nèi)部存儲(chǔ)器被用于這個(gè)實(shí)施例的情況加以說明。
在上述硬件配置中,形成圖2所示功能方框圖的中間代碼執(zhí)行系統(tǒng)1可以利用處理器2執(zhí)行儲(chǔ)存在存儲(chǔ)器部分6內(nèi)的各種軟件來實(shí)現(xiàn)。中間代碼執(zhí)行系統(tǒng)1執(zhí)行一個(gè)不依賴于某個(gè)平臺(tái)的中間代碼,在這個(gè)實(shí)施例中將說明對(duì)某個(gè)以Java語言生成的源代碼進(jìn)行編譯所得的一個(gè)類文件的執(zhí)行過程?,F(xiàn)在說明每個(gè)功能塊。
中間代碼執(zhí)行系統(tǒng)1包括一個(gè)處理命令獲取部分13、一個(gè)第一處理命令執(zhí)行部分15和一個(gè)第二處理命令執(zhí)行部分17。
命令獲取部分13從該類文件中順序取出需要執(zhí)行的下一個(gè)命令代碼,該取出的命令代碼被傳送到第一處理命令執(zhí)行部分15。
第一處理命令執(zhí)行部分15包括一個(gè)選定處理命令判斷部分14與若干處理模塊11,它具有一個(gè)順序解釋并執(zhí)行從該Java語言的一個(gè)命令系統(tǒng)內(nèi)所包括的所有字節(jié)代碼命令中選定的各字節(jié)代碼命令子集的功能。更具體地講,在選定處理命令判斷部分14中,將處理命令獲取部分13取出的一個(gè)命令代碼與該子集中所包括的每個(gè)字節(jié)代碼進(jìn)行比較,若它們彼此相符,就執(zhí)行對(duì)應(yīng)于該字節(jié)代碼的處理模塊11。該處理模塊11是按照該子集所包括的每個(gè)字節(jié)代碼命令來提供的一個(gè)軟件程序,它使處理器2根據(jù)每個(gè)字節(jié)代碼命令的某個(gè)定義內(nèi)容執(zhí)行處理。如果在該子集所包括的各字節(jié)代碼命令中沒有相同的命令代碼,那么該取出的命令代碼就被傳送到第二處理命令執(zhí)行部分17。
第二處理命令執(zhí)行部分17包括一個(gè)非選定命令認(rèn)定部分16與一個(gè)處理模塊12,并具有一種順序解釋并執(zhí)行不包括在該子集中的各字節(jié)代碼命令的功能。更具體地講,在非選定處理命令認(rèn)定部分16中,將該取出的命令代碼與不包括在該子集中的每個(gè)字節(jié)代碼命令進(jìn)行比較。那么,如果它們彼此匹配,就執(zhí)行對(duì)應(yīng)于那個(gè)字節(jié)代碼命令的處理模塊12。如上所述,預(yù)定的處理是在對(duì)應(yīng)于該取出的命令代碼的處理模塊11或12中由第一處理命令執(zhí)行部分15與第二處理命令執(zhí)行部分17聯(lián)合執(zhí)行的。
如上所述,在這個(gè)實(shí)施例中,字節(jié)代碼命令被劃分為在第一處理命令執(zhí)行部分15中執(zhí)行的命令與在第二處理命令執(zhí)行部分17中執(zhí)行的命令。這里,以Java(R)語言寫成的字節(jié)代碼命令被大致劃分為精度低的基于四則運(yùn)算的命令(iadd,isub,imul,idiv,...)或基于位操作的命令(ior,iand,ishl,...)、精度中等的基于存儲(chǔ)器操作的命令(iload,istore,iaload,...)和精度高的Java特別命令(new,invokespecial,...)。而且通常還存在一種傾向,即精度低的命令在這種類文件中的出現(xiàn)頻度高,而精度高的命令在這種類文件中的出現(xiàn)頻度低。
所以,在這個(gè)實(shí)施例中,預(yù)先從所有字節(jié)代碼命令中選出長度短且出現(xiàn)頻度高的命令,并在第一處理命令執(zhí)行部分15中執(zhí)行這些選定的字節(jié)代碼命令,而其余的字節(jié)代碼命令則在第二處理命令執(zhí)行部分17中執(zhí)行。就是說,第一處理命令執(zhí)行部分15具有對(duì)應(yīng)于每個(gè)選定字節(jié)代碼命令的處理模塊11。而且,選定處理命令判斷部分14將某個(gè)給定命令代碼的一個(gè)操作代碼與這些選定字節(jié)代碼命令的操作代碼進(jìn)行逐一比較,如果它們彼此相符就執(zhí)行對(duì)應(yīng)的處理模塊11。再者,第二處理命令執(zhí)行部分17具有對(duì)應(yīng)于每個(gè)其余字節(jié)代碼的處理模塊12。另外,非選定處理命令認(rèn)定部分16將該給定命令代碼的操作代碼與其余字節(jié)代碼命令的操作代碼進(jìn)行逐一比較,如果它們彼此相符就執(zhí)行處理模塊12。
然而,一個(gè)具有某個(gè)高頻度的字節(jié)代碼命令隨中間代碼執(zhí)行系統(tǒng)10所安裝的環(huán)境而變。譬如,它被安裝在一部移動(dòng)電話內(nèi)的情形、它被安裝在一個(gè)車輛路線指引系統(tǒng)內(nèi)的情形以及它被安裝在一個(gè)PDA內(nèi)的情形都有不同的使用目的與使用狀況,所以一個(gè)在某個(gè)給定環(huán)境中具有高頻度的命令不一定在某個(gè)其他系統(tǒng)中具有高頻度。因此,希望根據(jù)中間代碼執(zhí)行系統(tǒng)10所安裝的每種環(huán)境來檢查這些字節(jié)代碼命令的出現(xiàn)頻度,并根據(jù)某個(gè)檢查結(jié)果來選擇需要在第一處理命令執(zhí)行部分15中執(zhí)行的字節(jié)代碼命令。
另外,在這個(gè)實(shí)施例中,構(gòu)成具有上述結(jié)構(gòu)的第一處理命令執(zhí)行部分15的軟件程序(第一解釋器模塊)的一個(gè)代碼在該類文件被儲(chǔ)存到高速存儲(chǔ)器3內(nèi)的情況下執(zhí)行該類文件。譬如,中間代碼執(zhí)行系統(tǒng)10可以在執(zhí)行該類文件之前將第一處理命令執(zhí)行部分15的一個(gè)代碼從存儲(chǔ)器部分6復(fù)制到高速存儲(chǔ)器3內(nèi)。為了做到這一點(diǎn),要調(diào)整需要在第一處理命令執(zhí)行部分15中執(zhí)行的選定字節(jié)代碼命令的數(shù)量,要使構(gòu)成第一處理命令執(zhí)行部分15的軟件程序長度能夠被儲(chǔ)存到高速存儲(chǔ)器3內(nèi)。
另一方面,構(gòu)成第二命令執(zhí)行部分17的軟件程序(第二解釋器模塊)可以被保留儲(chǔ)存在存儲(chǔ)器部分6內(nèi)。
現(xiàn)在參看圖3來說明符合這個(gè)實(shí)施例的中間代碼執(zhí)行系統(tǒng)10的運(yùn)行過程。這里,中間代碼執(zhí)行系統(tǒng)10包括處理命令獲取部分13、內(nèi)含選定處理命令判斷部分14與處理模塊11的第一處理命令執(zhí)行部分15和內(nèi)含非選定處理命令認(rèn)定部分16與處理模塊12的第二處理命令執(zhí)行部分17,而且它們都是由處理器2通過執(zhí)行儲(chǔ)存在存儲(chǔ)器部分6內(nèi)的一系列軟件程序來實(shí)現(xiàn)的。
譬如,中間代碼執(zhí)行系統(tǒng)10從一個(gè)圖中未畫的信息輸入方接收一個(gè)Java應(yīng)用類文件,并將該接收到的類文件儲(chǔ)存到存儲(chǔ)器部分6的RAM7內(nèi)(S1)。然后,中間代碼執(zhí)行系統(tǒng)10執(zhí)行該軟件程序,并通過下面將要提到的一系列操作來進(jìn)一步執(zhí)行該類文件。在這一時(shí)刻,構(gòu)成第一處理命令執(zhí)行部分15的軟件程序(第一解釋器模塊)已經(jīng)預(yù)先被保留儲(chǔ)存在高速存儲(chǔ)器3內(nèi)。下述的操作也適用于符合該第一實(shí)施例的中間代碼執(zhí)行方法。
處理器2首先通過執(zhí)行該軟件程序來構(gòu)成處理命令獲取部分13,并從該類文件中取出一個(gè)命令代碼(S2)。
隨后,執(zhí)行儲(chǔ)存在高速存儲(chǔ)器3內(nèi)的、構(gòu)成第一處理命令執(zhí)行部分15的軟件程序(第一解釋器模塊),判斷在S2中取出的命令代碼可以被認(rèn)定為哪一個(gè)選定字節(jié)代碼命令(S3),如果能夠判斷就執(zhí)行對(duì)應(yīng)于該命令代碼的處理模塊11(S4)。更具體地講,這里執(zhí)行的處理是,在第一處理命令執(zhí)行部分15的選定處理命令判斷部分14中將取出的命令代碼的操作代碼與該選定字節(jié)代碼命令的操作代碼逐一加以比較,若它們彼此相符就執(zhí)行對(duì)應(yīng)的處理模塊11。
如果確定在S3中不能進(jìn)行判斷,就是說,在選定處理命令判斷部分14中認(rèn)定該取出的命令代碼的操作代碼不與該選定字節(jié)代碼命令的任何操作代碼相符,那么就執(zhí)行構(gòu)成第二處理命令執(zhí)行部分17的軟件程序(第二解釋器模塊),認(rèn)定該命令代碼所對(duì)應(yīng)的一個(gè)其余字節(jié)代碼命令(S5),并執(zhí)行對(duì)應(yīng)于該認(rèn)定命令代碼的處理模塊12(S6)。更具體地講,這里執(zhí)行的處理是,在第二處理命令執(zhí)行部分17的非選定處理命令認(rèn)定部分16中將該給定命令代碼的操作代碼與其余字節(jié)代碼的操作代碼逐一進(jìn)行比較,如果它們彼此相符就執(zhí)行對(duì)應(yīng)的處理模塊12。
此后,對(duì)該類文件所包含的下一個(gè)命令代碼執(zhí)行類似的步驟,并重復(fù)這些步驟來執(zhí)行該類文件。
根據(jù)上述操作,從所有字節(jié)代碼命令中選定的字節(jié)代碼命令是通過構(gòu)成一個(gè)以參考字符L1標(biāo)記的內(nèi)環(huán)處理過程來執(zhí)行的,而其余字節(jié)代碼命令則是通過構(gòu)成一個(gè)以參考字符L2標(biāo)記的外環(huán)處理過程來執(zhí)行的。
如上所述,在這個(gè)實(shí)施例中,首先從所有代碼命令中預(yù)先選出長度短且出現(xiàn)頻度高的字節(jié)代碼命令,在對(duì)應(yīng)于這些選定字節(jié)代碼命令的第一處理命令執(zhí)行部分15中解釋并執(zhí)行這些代碼命令,然后,未被執(zhí)行的命令代碼則在第二處理命令執(zhí)行部分17中被解釋并執(zhí)行。所以,具有高出現(xiàn)頻度的字節(jié)代碼命令被優(yōu)先解釋與執(zhí)行。此外,由于構(gòu)成第一處理命令執(zhí)行部分15的軟件程序(第一解釋器模塊)被儲(chǔ)存在高速存儲(chǔ)器3內(nèi),因而第一處理命令執(zhí)行部分15能夠以某個(gè)高速度來解釋與執(zhí)行具有高出現(xiàn)頻度的字節(jié)代碼命令。所以,根據(jù)這個(gè)實(shí)施例,具有高出現(xiàn)頻度的字節(jié)代碼命令能夠以某個(gè)高速度被優(yōu)先執(zhí)行。另一方面,由于具有低出現(xiàn)頻度的字節(jié)代碼命令由第二處理命令執(zhí)行部分17解釋與執(zhí)行,所以執(zhí)行這些字節(jié)代碼命令的速度無法提高。但是,第一處理命令執(zhí)行部分15以某個(gè)高速度優(yōu)先執(zhí)行具有高出現(xiàn)頻度的字節(jié)代碼命令的效率非常高,考慮執(zhí)行該類文件的整個(gè)處理過程,那么中間代碼執(zhí)行系統(tǒng)10的性能可以得到改進(jìn)。
此外,在這個(gè)實(shí)施例中,構(gòu)成第一處理命令執(zhí)行部分15的軟件程序(第一解釋器模塊)可以被配置得能最優(yōu)執(zhí)行該選定的命令代碼,中間代碼執(zhí)行系統(tǒng)10的性能也會(huì)因此而進(jìn)一步改進(jìn)。
舉例來說,構(gòu)成第一處理命令執(zhí)行部分15的軟件程序(第一解釋器模塊)與構(gòu)成第二處理命令執(zhí)行部分17的軟件程序(第二解釋器模塊)均可以用某種高級(jí)語言(如C或C++)生成,但前者也可以采用匯編語言配置成最優(yōu)。
而且,在選定處理命令判斷部分14中將取出的命令代碼的操作代碼與選定字節(jié)代碼命令的操作代碼比較并判斷出它們是否彼此相符時(shí),更希望以較高頻度字節(jié)代碼命令在先的順序進(jìn)行比較。這也適用于非選定處理命令認(rèn)定部分16。
考慮到用于執(zhí)行該中間代碼的計(jì)算機(jī)程序產(chǎn)品,這個(gè)實(shí)施例如下。
這就是,提供能夠在某個(gè)處理器中執(zhí)行某個(gè)中間代碼的一個(gè)計(jì)算機(jī)程序產(chǎn)品,對(duì)以某種預(yù)定語言生成的一個(gè)源代碼進(jìn)行轉(zhuǎn)換可獲得該中間代碼,高速存儲(chǔ)器3與存儲(chǔ)器部分6與該處理器相連,其中對(duì)應(yīng)于該程序語言的某個(gè)命令集合中一個(gè)子集的第一解釋器模塊被儲(chǔ)存在高速存儲(chǔ)器3內(nèi),該第一解釋器模塊被用于判斷取自該中間代碼的一個(gè)命令是否對(duì)應(yīng)于該子集的任何命令,如果這個(gè)命令在該子集之中就執(zhí)行該對(duì)應(yīng)命令,對(duì)應(yīng)于該命令集合中其余命令的第二解釋器模塊被儲(chǔ)存在存儲(chǔ)器部分6內(nèi),如果該子集內(nèi)沒有對(duì)應(yīng)命令,那么該第二解釋器模塊就被用于認(rèn)定那個(gè)命令對(duì)應(yīng)于哪一個(gè)其余命令,并對(duì)其執(zhí)行。在這種情況下,假定該程序語言的該命令集合中的該子集已經(jīng)預(yù)先定義。
現(xiàn)在參看圖4與圖5來說明符合本發(fā)明的一個(gè)第二實(shí)施例。
圖4是符合本發(fā)明該第二實(shí)施例的中間代碼執(zhí)行系統(tǒng)20的一個(gè)功能方框圖。在圖4中,相同的參照數(shù)碼表示與該第一實(shí)施例中相同的構(gòu)成部分。
符合該第二實(shí)施例的中間代碼執(zhí)行系統(tǒng)20的基本結(jié)構(gòu)類似于符合該第一實(shí)施例的系統(tǒng),但與之不同的是,提供了一個(gè)第一選定處理命令執(zhí)行部分24與一個(gè)第二選定處理命令執(zhí)行部分26來代替該第一實(shí)施例中的第一處理命令執(zhí)行部分15?,F(xiàn)在主要說明這一差別。
第一選定處理命令執(zhí)行部分24包括一個(gè)第一選定處理命令判斷部分23與處理模塊21,而且具有一種順序解釋并執(zhí)行一個(gè)從所有字節(jié)代碼命令中選擇的第一字節(jié)代碼命令子集的功能。
第二選定處理命令執(zhí)行部分26包括一個(gè)第二選定處理命令判斷部分25與處理模塊22,而且具有一種順序解釋并執(zhí)行一個(gè)從不包含該第一子集的其余字節(jié)代碼命令中選擇的第二字節(jié)代碼命令子集的功能。
處理模塊21是一個(gè)使某個(gè)處理器2按照屬于該第一子集的每個(gè)字節(jié)代碼命令的某個(gè)定義內(nèi)容來執(zhí)行處理的軟件程序,而處理模塊22是一個(gè)使某個(gè)處理器2按照屬于該第二子集的每個(gè)字節(jié)代碼命令的某個(gè)定義內(nèi)容來執(zhí)行處理的軟件程序。
此外,第一選定處理命令執(zhí)行部分24與第二選定處理命令執(zhí)行部分26的各具體功能也基本類似于該第一實(shí)施例中處理命令執(zhí)行部分15的功能。如果某個(gè)取出的命令代碼與屬于該第一子集或該第二子集的某個(gè)字節(jié)代碼命令相同,那么這些部分就執(zhí)行那個(gè)字節(jié)代碼命令。
這里,該第一子集包括某個(gè)類文件中具有最高出現(xiàn)頻度的一個(gè)字節(jié)代碼命令,該第二子集包括某個(gè)類文件中具有次高出現(xiàn)頻度的一個(gè)字節(jié)代碼命令。而且在這個(gè)實(shí)施例中,構(gòu)成第一選定處理命令執(zhí)行部分24的軟件程序的一個(gè)代碼被儲(chǔ)存在一個(gè)高速存儲(chǔ)器3內(nèi)。盡管在有足夠的自由存儲(chǔ)器容量時(shí)希望將構(gòu)成第二選定處理命令執(zhí)行部分26的一個(gè)代碼儲(chǔ)存在高速存儲(chǔ)器3內(nèi),但如果高速存儲(chǔ)器3沒有足夠的自由存儲(chǔ)器容量,也可以將它儲(chǔ)存在某個(gè)存儲(chǔ)器部分6內(nèi)。
現(xiàn)在參看圖5來說明中間代碼執(zhí)行系統(tǒng)20的運(yùn)行過程。
像該第一實(shí)施例一樣,中間代碼執(zhí)行系統(tǒng)10首先從一個(gè)圖中未畫的信息輸入方接收該Java應(yīng)用類文件,將該接收到的類文件儲(chǔ)存在存儲(chǔ)器部分6中的RAM 7內(nèi)(S11),并按照下述步驟借助儲(chǔ)存在高速存儲(chǔ)器3內(nèi)的、構(gòu)成第一選定處理命令執(zhí)行部分24的軟件程序來執(zhí)行該類文件。
首先像該第一實(shí)施例一樣從該類文件中取出一個(gè)命令代碼(S12)。
然后,執(zhí)行儲(chǔ)存在高速存儲(chǔ)器3內(nèi)的、構(gòu)成第一選定處理命令執(zhí)行部分24的軟件程序,判斷該取出的命令代碼能否被認(rèn)定為該第一子集中的任何代碼命令(S13),如果能夠認(rèn)定就執(zhí)行對(duì)應(yīng)于那個(gè)命令代碼的處理模塊21(S14)。
如果確定在S13中無法認(rèn)定,就執(zhí)行構(gòu)成第二選定處理命令執(zhí)行部分17的軟件程序,判斷該命令代碼能否被認(rèn)定為該第二子集中的任何代碼命令(S15),如果能夠認(rèn)定就執(zhí)行對(duì)應(yīng)于那個(gè)命令代碼的處理模塊22(S16)。
再者,如果確定在S15中無法認(rèn)定,就執(zhí)行構(gòu)成第二處理命令執(zhí)行部分17的軟件程序,認(rèn)定那個(gè)命令代碼所對(duì)應(yīng)的一個(gè)其余代碼命令(S17),并執(zhí)行對(duì)應(yīng)于該認(rèn)定命令代碼的處理模塊12(S18)。
對(duì)該類文件所包括的下一個(gè)命令代碼執(zhí)行類似的步驟,重復(fù)這些步驟就可以執(zhí)行該類文件。
根據(jù)用上述操作來執(zhí)行該類文件的這個(gè)實(shí)施例,該類文件中具有最高出現(xiàn)頻度的字節(jié)代碼命令可以像該第一實(shí)施例一樣以某個(gè)高速度被優(yōu)先執(zhí)行,而該類文件中具有次高出現(xiàn)頻度的字節(jié)代碼命令則以比其他任何字節(jié)代碼命令都高的優(yōu)先級(jí)執(zhí)行。
另外,在上述操作中,盡管構(gòu)成第一選定處理命令執(zhí)行部分24的軟件程序代碼被預(yù)先儲(chǔ)存在高速存儲(chǔ)器3內(nèi),但在執(zhí)行該類文件時(shí)高速存儲(chǔ)器3內(nèi)的某個(gè)自由存儲(chǔ)器容量可以被刪除,而且如果有足夠的自由存儲(chǔ)器容量,構(gòu)成第二選定處理命令執(zhí)行部分26的軟件程序代碼也可以同樣被儲(chǔ)存在高速存儲(chǔ)器3內(nèi)。
盡管上面已經(jīng)說明了符合該第一與第二實(shí)施例的中間代碼執(zhí)行系統(tǒng),但本發(fā)明并不限于這些實(shí)施例,可以很自然地作出各種改進(jìn)/修改而不偏離本發(fā)明的范圍。
譬如,盡管在前述實(shí)施例中用該內(nèi)部存儲(chǔ)器作為高速存儲(chǔ)器3,但本發(fā)明并不限于此,高速存儲(chǔ)器3也可以是一個(gè)高速緩沖存儲(chǔ)器。此外,本發(fā)明也不限于圖1所示的硬件配置示例,任何硬件配置只要能同時(shí)提供一個(gè)相對(duì)較快的存儲(chǔ)器與一個(gè)相對(duì)較慢的存儲(chǔ)器,就可以采用那個(gè)硬件配置。舉例來說,芯片1可以是一個(gè)ASIC或一個(gè)微控制器,而且一個(gè)包括一組芯片1或處理器2的結(jié)構(gòu)就能滿足要求。
如果在該第一實(shí)施例中采用高速緩沖存儲(chǔ)器作為高速存儲(chǔ)器3,那么開始執(zhí)行該類文件時(shí)可以將構(gòu)成該第一處理命令執(zhí)行部分15的軟件程序儲(chǔ)存在存儲(chǔ)器部分6內(nèi)。在這種情況下,由于該代碼被一個(gè)預(yù)定的高速緩沖存儲(chǔ)器裝置儲(chǔ)存到作為高速存儲(chǔ)器3的該高速緩沖存儲(chǔ)器內(nèi),所以就像前述實(shí)施例一樣,中間代碼執(zhí)行系統(tǒng)10的性能得到改善。在該第二實(shí)施例中使用該高速緩沖存儲(chǔ)器也是如此。
此外,盡管在前述每個(gè)實(shí)施例中都已經(jīng)描述了將Java類文件作為該中間代碼來執(zhí)行的情況,但本發(fā)明并不限于此。
而且,構(gòu)成該中間代碼執(zhí)行系統(tǒng)的軟件程序可以預(yù)先儲(chǔ)存在存儲(chǔ)器部分6內(nèi),或者它可以根據(jù)需要從該中間代碼執(zhí)行系統(tǒng)的外部提供。在這種情況下,從該中間代碼執(zhí)行系統(tǒng)外部接收該軟件程序的結(jié)構(gòu)并不限于通過某個(gè)網(wǎng)絡(luò)從一個(gè)服務(wù)器下載,該軟件也可以從一個(gè)存儲(chǔ)器媒體(如一個(gè)CD-ROM或一個(gè)便攜式存儲(chǔ)器)提供。
再者,采用使至少一部分處理模塊被確定為硬件邏輯的結(jié)構(gòu)可以進(jìn)一步改善性能。譬如,將該第一實(shí)施例中第一處理命令執(zhí)行部分15的處理模塊11確定為硬件邏輯,就能夠以某個(gè)更快的速度來執(zhí)行具有某個(gè)高頻度的字節(jié)代碼命令。在這種情況下,可以通過調(diào)整需要選擇的字節(jié)代碼命令數(shù)量來將實(shí)現(xiàn)該硬件邏輯所需的門電路數(shù)量限制在一個(gè)允許范圍之內(nèi)。
那些熟悉技術(shù)的人員很容易發(fā)現(xiàn)其他優(yōu)點(diǎn)與修改。所以本發(fā)明就其更廣的方面講并不限于這里顯示及描述的個(gè)別細(xì)節(jié)與代表性實(shí)施例。因此,可以作出各種修改而不偏離該所附權(quán)利要求以及它們的等價(jià)條款所定義的總體發(fā)明概念的精神或范圍。
權(quán)利要求
1.一個(gè)利用某個(gè)解釋器來執(zhí)行某個(gè)中間代碼的系統(tǒng),對(duì)以某種預(yù)定程序語言生成的一個(gè)源代碼進(jìn)行轉(zhuǎn)換可以獲得該中間代碼,該系統(tǒng)的特征為包括一個(gè)處理器(2);一個(gè)相對(duì)較快的第一存儲(chǔ)器部分(3);一個(gè)相對(duì)較慢的第二存儲(chǔ)器部分(6);一個(gè)第一解釋器模塊(15),它被儲(chǔ)存在該第一存儲(chǔ)器部分內(nèi)并對(duì)應(yīng)于該程序語言的某個(gè)命令集合中的一個(gè)子集;以及一個(gè)第二解釋器模塊(17),它被儲(chǔ)存在該第二存儲(chǔ)器部分內(nèi)并對(duì)應(yīng)于該命令集合中的其余命令,其中該處理器用該第一解釋器模塊來判斷取自該中間代碼的一個(gè)命令是否對(duì)應(yīng)于該子集的任何命令,若它在該子集之中就執(zhí)行該對(duì)應(yīng)命令,而且若該對(duì)應(yīng)命令不在該子集之中,則由該第二解釋器模塊認(rèn)定該命令對(duì)應(yīng)的任何其余命令,并對(duì)其執(zhí)行。
2.根據(jù)權(quán)利要求1的系統(tǒng),其特征為,該預(yù)定程序語言是Java語言。
3.根據(jù)權(quán)利要求1的系統(tǒng),其特征為,該中間代碼是一個(gè)包括Java字節(jié)代碼命令的類文件。
4.根據(jù)權(quán)利要求1的系統(tǒng),其特征為,該命令是一個(gè)Java字節(jié)代碼命令。
5.根據(jù)權(quán)利要求1的系統(tǒng),其特征為,該程序語言的該命令集合中的該子集是該中間代碼所包括的、具有某個(gè)預(yù)定頻度或某個(gè)較高頻度的一個(gè)選定處理命令集合,它可以預(yù)先根據(jù)與該系統(tǒng)所安裝的某個(gè)執(zhí)行環(huán)境有關(guān)的預(yù)定條件設(shè)定。
6.一個(gè)在某個(gè)處理器(2)上執(zhí)行某個(gè)中間代碼的中間代碼執(zhí)行方法,對(duì)以某種預(yù)定程序語言生成的一個(gè)源代碼進(jìn)行轉(zhuǎn)換可以獲得該中間代碼,一個(gè)相對(duì)較快的存儲(chǔ)器部分(3)與一個(gè)相對(duì)較慢的存儲(chǔ)器部分(6)被連接到該處理器,該方法的特征是包括使該處理器采用對(duì)應(yīng)于該程序語言的某個(gè)命令集合中的一個(gè)子集的一個(gè)第一解釋器模塊來判斷取自該中間代碼的一個(gè)命令對(duì)應(yīng)于哪一個(gè)子集,若該命令在該子集之中則執(zhí)行該對(duì)應(yīng)命令;若該對(duì)應(yīng)命令不在該子集之中,則使該處理器用對(duì)應(yīng)于該命令集合中其余命令的一個(gè)第二解釋器模塊來認(rèn)定該命令對(duì)應(yīng)于哪一個(gè)其余命令,并對(duì)其執(zhí)行。
7.根據(jù)權(quán)利要求6的方法,其特征為,該預(yù)定程序語言是Java語言。
8.根據(jù)權(quán)利要求6的方法,其特征為,該中間代碼是一個(gè)包括Java字節(jié)代碼的類文件。
9.根據(jù)權(quán)利要求6的方法,其特征為,該命令是一個(gè)Java字節(jié)代碼命令。
10.根據(jù)權(quán)利要求6的方法,其特征為,該程序語言的該命令集合中的該子集是該中間代碼中所包括的、具有某個(gè)預(yù)定頻度或某個(gè)較高頻度的一個(gè)選定處理命令集合,而且該子集預(yù)先根據(jù)與某個(gè)執(zhí)行環(huán)境有關(guān)的預(yù)定條件設(shè)定。
11.一個(gè)在某個(gè)處理器(2)中執(zhí)行某個(gè)中間代碼的計(jì)算機(jī)程序產(chǎn)品,對(duì)以某種預(yù)定程序語言生成的一個(gè)源代碼進(jìn)行轉(zhuǎn)換可以得到該中間代碼,一個(gè)相對(duì)較快的存儲(chǔ)器部分(3)與一個(gè)相對(duì)較慢的存儲(chǔ)器部分(6)被連接到該處理器,其特征為,對(duì)應(yīng)于該程序語言的某個(gè)命令集合中某個(gè)子集的一個(gè)第一解釋器模塊被儲(chǔ)存在該相對(duì)較快的存儲(chǔ)器部分(3)內(nèi),該第一解釋器模塊被用來判斷取自該中間代碼的一個(gè)命令是否對(duì)應(yīng)于該子集中的任何命令,若它在該子集之中就執(zhí)行該對(duì)應(yīng)命令;而且一個(gè)與該命令集合中其余命令對(duì)應(yīng)的第二解釋器模塊被儲(chǔ)存在該相對(duì)較慢的存儲(chǔ)器部分(6)內(nèi),若該對(duì)應(yīng)命令不在該子集之中,那么該第二解釋器模塊被用來認(rèn)定該命令對(duì)應(yīng)的一個(gè)其余命令,并對(duì)其執(zhí)行。
12.根據(jù)權(quán)利要求11的計(jì)算機(jī)程序產(chǎn)品,其特征為,該程序語言的該命令集合中的該子集是該中間代碼所包括的、具有某個(gè)預(yù)定頻度或某個(gè)較高頻度的一個(gè)選定處理命令集合,而且該子集預(yù)先根據(jù)與某個(gè)執(zhí)行環(huán)境有關(guān)的預(yù)定條件設(shè)定。
全文摘要
一個(gè)具有執(zhí)行某個(gè)預(yù)定命令系統(tǒng)所包括的每個(gè)處理命令的處理模塊(11、12)、并順序解釋與執(zhí)行按照該命令系統(tǒng)寫成的中間代碼的中間代碼執(zhí)行系統(tǒng)(10)包括一個(gè)能從該中間代碼中取出一個(gè)處理命令的命令獲取部分(13),一個(gè)能判斷那個(gè)處理命令是否對(duì)應(yīng)于從該命令系統(tǒng)所包括的處理命令中選擇的每個(gè)選定處理命令、并在該取出的處理命令對(duì)應(yīng)于該選定處理命令時(shí)選擇與執(zhí)行對(duì)應(yīng)于該選定處理命令的處理模塊(11)的第一處理命令執(zhí)行部分(15),和一個(gè)能認(rèn)定該第一處理命令執(zhí)行部分(15)中未被執(zhí)行的一個(gè)處理命令類型、并選擇與執(zhí)行對(duì)應(yīng)于那個(gè)處理命令的處理模塊(12)的第二處理命令執(zhí)行部分(17)。
文檔編號(hào)G06F9/455GK1419191SQ0214818
公開日2003年5月21日 申請(qǐng)日期2002年10月31日 優(yōu)先權(quán)日2001年10月31日
發(fā)明者小林哲之 申請(qǐng)人:亞普公司