專利名稱:在程序控制流中實(shí)現(xiàn)改變的裝置和方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)處理系統(tǒng),具體地說,涉及具有實(shí)現(xiàn)執(zhí)行數(shù)據(jù)處理指令的軟件解釋程序的系統(tǒng)。
背景技術(shù):
Java編程語言是一種面向?qū)ο蟮母呒壘幊陶Z言,它是由Sun微系統(tǒng)有限公司開發(fā)的,其設(shè)計(jì)得足夠便攜,從而能在從小型個(gè)人計(jì)算機(jī)一直到超級計(jì)算機(jī)的廣泛范圍內(nèi)運(yùn)行。用Java(和其它語言)寫的計(jì)算機(jī)程序可以被編譯成虛擬機(jī)指令用于由Java虛擬機(jī)(JVM)執(zhí)行。一般地,Java虛擬機(jī)是譯碼并執(zhí)行虛擬機(jī)指令的解釋程序(interpreter)。
用于Java虛擬機(jī)的虛擬機(jī)指令是字節(jié)碼,這意味著它們包含一個(gè)或者更多的字節(jié)。字節(jié)碼儲存在被稱為“類文件”的特殊文件格式中。除了字節(jié)碼,類文件還包括符號表以及其它輔助信息。
像Java字節(jié)碼一樣在一個(gè)或更多類文件中實(shí)現(xiàn)的計(jì)算機(jī)程序是獨(dú)立的平臺。該計(jì)算機(jī)程序可以在能夠運(yùn)行Java虛擬機(jī)的工具的任意計(jì)算機(jī)上不做更改地運(yùn)行。Java虛擬機(jī)是“一般”計(jì)算機(jī)的軟件仿真器,它是允許用于Java虛擬機(jī)的計(jì)算機(jī)程序成為獨(dú)立平臺的一個(gè)主要因素。
Java虛擬機(jī)通常作為軟件解釋程序?qū)崿F(xiàn)。在運(yùn)行過程中,常規(guī)的解釋程序一次一條指令地譯碼并執(zhí)行被解釋程序的虛擬機(jī)指令。另一方面,編譯器在執(zhí)行前將虛擬機(jī)指令轉(zhuǎn)化為本地機(jī)器指令,這樣在執(zhí)行過程中就不會(huì)對虛擬機(jī)指令進(jìn)行譯碼。因?yàn)槊看斡龅街噶顣r(shí),常規(guī)解釋程序都會(huì)在執(zhí)行之前對每條指令重復(fù)地譯碼,由于被編譯程序的本地機(jī)指令可以在本地機(jī)或者計(jì)算機(jī)系統(tǒng)上直接執(zhí)行,因此典型地,被解釋程序的執(zhí)行要比被編譯程序慢得多。
由于為了譯碼和執(zhí)行被解釋程序而必須執(zhí)行軟件解釋程序,軟件解釋程序會(huì)消耗資源(例如存儲器)這些資源不能再被解釋程序使用。這與被編譯程序形成了對比,被編譯程序會(huì)像本機(jī)指令一樣執(zhí)行,這樣它們會(huì)在目標(biāo)計(jì)算機(jī)上直接地被執(zhí)行,因此通常只需要比被解釋程序更少的資源。
因此,需要有新的技術(shù)來加快被注釋的計(jì)算機(jī)程序的執(zhí)行速度。此外,需要提供在考慮它們需要的資源時(shí)有效的解釋程序。
由于Java語言的獨(dú)立平臺和普遍存在的性質(zhì)以及Java虛擬機(jī)工具的發(fā)展,許多嵌入式器件正在變得可使用Java。許多低成本嵌入式系統(tǒng)希望像JVM一樣實(shí)現(xiàn)Java處理功能,以避免專用Java處理器或者硬件加速器(例如分離的協(xié)同處理器)的硬件開銷。實(shí)現(xiàn)JVM和執(zhí)行Java程序的一個(gè)簡單方法就是通過使用軟件解釋程序。
解釋程序完成了被注釋指令流的指令取數(shù),譯碼,執(zhí)行等標(biāo)準(zhǔn)功能,在此意義上,實(shí)現(xiàn)了一個(gè)處理器的軟件版本。典型地,該解釋程序是作為重復(fù)進(jìn)行取數(shù),譯碼和執(zhí)行步驟的程序循環(huán)而實(shí)現(xiàn)的。
當(dāng)Java指令(字節(jié)碼)被取出時(shí),解釋程序維持一個(gè)虛擬程序計(jì)數(shù)器(Java PC),并且由帶有子句的大的選擇語句(情況語句)根據(jù)字節(jié)碼的每個(gè)二進(jìn)制編碼完成對每個(gè)被注釋Java指令的譯碼。每個(gè)子句內(nèi)的代碼進(jìn)行由字節(jié)碼定義的實(shí)際操作。
由于字節(jié)碼必須被取出并被譯碼,因此存在與處理每個(gè)字節(jié)碼相關(guān)的開銷。由于許多Java指令(字節(jié)碼)只進(jìn)行簡單操作,因此與序列的取數(shù)和譯碼部分相關(guān)的開銷會(huì)在整個(gè)執(zhí)行時(shí)間中占據(jù)很大的百分比。
由于Java環(huán)境支持多線程執(zhí)行的概念,解釋程序循環(huán)的附加功能是支持用于確定何時(shí)發(fā)生線程(任務(wù))轉(zhuǎn)換的計(jì)數(shù)器。
在Java虛擬機(jī)的某些實(shí)現(xiàn)中,線程轉(zhuǎn)換的確定是基于已執(zhí)行的Java字節(jié)碼的數(shù)量的。通過保持每次解釋程序循環(huán)執(zhí)行時(shí)都會(huì)修改的計(jì)數(shù)器的值,并且把它與預(yù)設(shè)值進(jìn)行比較,解釋程序也可以實(shí)現(xiàn)線程轉(zhuǎn)換邏輯。維持計(jì)數(shù)器并確定何時(shí)線程轉(zhuǎn)換也制造了大量的開銷。這個(gè)開銷大大限制了軟件解釋程序的操作效率。
附圖簡要說明
圖1方框圖類型中說明的是一個(gè)示例性的數(shù)據(jù)處理系統(tǒng);圖2中說明的是一個(gè)已知編碼序列,示出了Java程序執(zhí)行時(shí)的執(zhí)行流;圖3中說明的是與圖2的Java程序的執(zhí)行相關(guān)聯(lián)的一個(gè)已知解釋程序開銷圖;圖4中說明根據(jù)本發(fā)明的當(dāng)程序執(zhí)行時(shí)的Java程序及相關(guān)仿真編碼表;圖5中說明的是根據(jù)本發(fā)明、需要比組大小所能允許的還要多的仿真編碼的Java程序執(zhí)行的一個(gè)例子;圖6說明根據(jù)本發(fā)明的一個(gè)示例仿真編碼表,示出了指令時(shí)隙(instruction slot)的一種配置;圖7中說明根據(jù)本發(fā)明的用于在Java程序中轉(zhuǎn)換指令流的Java解釋程序指令解釋;圖8方框圖說明根據(jù)本發(fā)明的用于實(shí)現(xiàn)程序執(zhí)行的圖1的系統(tǒng)的數(shù)據(jù)處理器的一部分;和圖9中說明根據(jù)本發(fā)明的一個(gè)示例仿真編碼表,示出了指令時(shí)隙的另一種配置。
具體實(shí)施例方式
本發(fā)明是通過舉例而不是通過對附圖中的限定而說明的,其中相似的引用表示類似的部件。在下面的說明中,將闡述諸如具體字或字節(jié)長度等許多的具體細(xì)節(jié),以提供對本發(fā)明的透徹理解。但是,很顯然,對于本領(lǐng)域技術(shù)人員,沒有這樣的具體細(xì)節(jié)也可以實(shí)現(xiàn)本發(fā)明。其它的例子中,為了不以不必要的細(xì)節(jié)混淆本發(fā)明,以方框圖示出了電路。在很大程度上,忽略了關(guān)于定時(shí)考慮和其它類似的細(xì)節(jié),因?yàn)檫@樣的細(xì)節(jié)對于獲得本發(fā)明的完全理解是不必要的,并且是在相關(guān)領(lǐng)域的普通技術(shù)人員的技巧之內(nèi)。
術(shù)語“總線”被用來指可用于傳輸一個(gè)或更多不同類型信息(諸如數(shù)據(jù),地址,控制,或狀態(tài))的多個(gè)信號或者導(dǎo)線。術(shù)語“聲明”和“否定”將在表示信號、狀態(tài)位、或者類似裝置分別進(jìn)入其邏輯真或邏輯假狀態(tài)的反映時(shí)使用。如果邏輯真狀態(tài)是邏輯電平1,那么邏輯非狀態(tài)就是邏輯電平0。如果邏輯真狀態(tài)是邏輯電平0,那么邏輯非狀態(tài)就是邏輯電平1。在下面的說明和附圖中,通過預(yù)附加‘0x’,對于某些數(shù)值使用了十六進(jìn)制的概念。因此,數(shù)值0xff就代表十進(jìn)制數(shù)值255。
圖1是說明數(shù)據(jù)處理系統(tǒng)10的一個(gè)實(shí)施例的方框圖,它包括處理器12,協(xié)同處理器14,協(xié)同處理器16,存儲器18,其它模塊20和外部總線接口22,他們都通過總線28進(jìn)行雙向連接。本發(fā)明的其它實(shí)施例也可具有僅僅一個(gè)協(xié)同處理器14,兩個(gè)協(xié)同處理器14和16或者甚至更多的協(xié)同處理器(未示出)。外部總線接口22通過集成電路終端35與外部總線26雙向相連。存儲器24雙向連接到外部總線26。處理器12可通過集成電路終端31有選擇地把外部連接到數(shù)據(jù)處理系統(tǒng)10。協(xié)同處理器14可通過集成電路終端32有選擇地把外部連接到數(shù)據(jù)處理系統(tǒng)10。存儲器18可通過集成電路終端33有選擇地把外部連接到數(shù)據(jù)處理系統(tǒng)10。其它模塊20可通過集成電路終端34有選擇地把外部連接到數(shù)據(jù)處理系統(tǒng)10。處理器12通過協(xié)同處理器接口30雙向連接到協(xié)同處理器14和協(xié)同處理器16。數(shù)據(jù)處理系統(tǒng)10中處理器12的具體操作將在下面Java代碼執(zhí)行的上下文中引用。
參看圖2和圖3,給出了Java程序中指令的一個(gè)常規(guī)執(zhí)行流的例子。通常,已知解釋程序的一個(gè)重要操作問題是軟件花費(fèi)了大量的時(shí)間用于在每個(gè)仿真的Java字節(jié)碼之間改變指令流并且執(zhí)行解釋程序開銷程序。圖2中說明的指令執(zhí)行步驟將突出顯示出這一點(diǎn)。注意到,圖2中從步驟1到7的每個(gè)標(biāo)識步驟都需要在軟件程序中流的改變。在現(xiàn)有技術(shù)中,必須重復(fù)地跳轉(zhuǎn)到諸如解釋程序開銷54的一個(gè)或者更多軟件程序,這將制造額外的解釋程序開銷。圖3示出了與圖2相同的軟件程序,但更清楚地示出了需要完成解釋程序開銷程序的時(shí)間量和軟件之間的關(guān)系,這可以與需要為諸如a,f和c的不同功能執(zhí)行仿真編碼的更少時(shí)間量和軟件作比較。解釋程序開銷軟件包括取數(shù)、譯碼和發(fā)送Java字節(jié)碼。發(fā)送是實(shí)現(xiàn)跳轉(zhuǎn)到與被仿真的Java字節(jié)碼對應(yīng)的仿真碼的步驟。注意到,解釋程序開銷還包括實(shí)現(xiàn)計(jì)數(shù)器功能的軟件以確定線程轉(zhuǎn)換何時(shí)應(yīng)該發(fā)生。注意到,解釋程序開銷54軟件還包括必須保持更新的用于Java虛擬機(jī)的虛擬程序計(jì)數(shù)器。注意到,圖2和圖3示出了Java程序字節(jié)碼和處理器(例如圖1的處理器12)需要的仿真碼表,以實(shí)際地執(zhí)行Java程序所需要的字節(jié)碼。注意到,對于每個(gè)由處理器12執(zhí)行的Java字節(jié)碼,需要完成Java字節(jié)碼仿真的代碼需要兩個(gè)部分。第一部分是實(shí)際完成功能(a,f,c)的代碼,第二部分是將仿真碼的執(zhí)行返回到解釋程序開銷54軟件的軟件程序(routine)。參看圖3,注意,粗線示出的解釋程序開銷軟件可能是需要執(zhí)行Java字節(jié)碼的軟件中很重要的一部分。結(jié)果,我在這里講述能夠有效減少執(zhí)行仿真碼解釋程序開銷部分所需軟件和時(shí)間量的一種系統(tǒng)和方法。應(yīng)該從圖2注意到,需要執(zhí)行每個(gè)功能(a,f,c)的仿真碼在大小上可以并且典型地顯著不同,而且經(jīng)常是代碼量相對較少。相反地,作為與需要執(zhí)行特殊Java字節(jié)碼的仿真碼的比較,解釋程序開銷54軟件的代碼量卻很巨大。
現(xiàn)在參看圖4,根據(jù)本發(fā)明的一個(gè)實(shí)施例,這里示出了可由圖1的處理器12執(zhí)行的Java程序60及其相應(yīng)的仿真碼表62的一個(gè)例子。注意到,在圖4說明的本發(fā)明的程序執(zhí)行實(shí)施例中,每個(gè)Java字節(jié)碼都在仿真碼表62中具有一個(gè)相應(yīng)的組。從一般意義上來說,每組都與程序的預(yù)設(shè)操作碼相關(guān),正如本發(fā)明沒有限定僅僅使用于Java程序一樣。通過在仿真碼表中以所示的步驟1,2和3的順序進(jìn)行搜索,可以進(jìn)行對字節(jié)碼a,f,c...的字節(jié)碼執(zhí)行。在圖4中示出的本發(fā)明的特殊實(shí)施例中,由Java字節(jié)碼十六進(jìn)制值諸如0x0,0x1,等等限定的仿真碼表62中的每個(gè)代碼組,包含16條處理器12指令。數(shù)字16被選擇作為能為大部分Java字節(jié)碼仿真提供足夠指令時(shí)隙并且不會(huì)出現(xiàn)過多的未用時(shí)隙的一個(gè)數(shù)值。有些Java字節(jié)碼可使用少于16條的處理器12指令來執(zhí)行,有些則多于16條。結(jié)果,應(yīng)該很好地認(rèn)識到,本發(fā)明的其它實(shí)施例可以對每組使用任意數(shù)量的處理器12指令時(shí)隙。組數(shù)量也可以根據(jù)更高級語言所需要的字節(jié)碼的數(shù)量而不同。還注意到,解釋程序開銷軟件不再是仿真碼所需的必須跳轉(zhuǎn)到的單獨(dú)程序。如圖2所示的現(xiàn)有技術(shù)要求的解釋程序開銷已經(jīng)由在每個(gè)組中使用的標(biāo)識著“開銷+JAVASW”的代碼塊代替了。注意,“開銷+JAVASW”代碼塊現(xiàn)在分布遍及處理器12執(zhí)行的仿真碼。注意,與圖2中的現(xiàn)有技術(shù)相比較,圖4中示出的軟件流和仿真碼表的流步驟的改變更少些。應(yīng)該認(rèn)識到,流的改變是控制改變的一種形式,勝于完成一個(gè)跳轉(zhuǎn)指令,在實(shí)現(xiàn)控制改變的地方可以進(jìn)行的操作可能是另一個(gè)操作,諸如在用戶和超級用戶模式之間轉(zhuǎn)換。本發(fā)明提供的流步驟改變的減少,節(jié)省了大量的軟件開銷。圖2和圖4中示出的箭頭需要額外的軟件以執(zhí)行,注意到這一點(diǎn)很重要。注意,雖然在圖4示出的實(shí)施例中,每個(gè)Java字節(jié)碼都分配了16條指令時(shí)隙,但是一些特殊的Java字節(jié)碼不需要所有16條指令時(shí)隙。另一方面,一些Java字節(jié)碼在仿真碼中需要多于16條的指令時(shí)隙。這樣的例子將在圖5中討論。因此,圖4說明了可以由圖1的處理器12執(zhí)行的仿真碼表62。在示出的類型中,仿真碼表62具有256個(gè)相同大小的組,這些組是分配用于每個(gè)Java字節(jié)碼的仿真的,正如0x0到0xFF的十六進(jìn)制地址標(biāo)識。這樣,當(dāng)處理器12執(zhí)行Java程序時(shí),圖4中示出的仿真碼表提供了更連續(xù)的流。這個(gè)更連續(xù)的流減少了軟件開銷量,此軟件開銷是現(xiàn)有技術(shù)所需的大量程序流的改變所需要的(參見圖2)。
現(xiàn)在參看圖5,圖5說明了本發(fā)明可如何用于需要比在仿真碼表63中的組大小更多仿真碼的Java字節(jié)碼。圖5中說明的是仿真碼表63。對于圖5中示出的說明,假設(shè)仿真碼的初始部分開始于如步驟1箭頭表示的地址0x67。步驟2表明,已經(jīng)使用了所有16條指令時(shí)隙都,而相應(yīng)的字節(jié)碼還需要額外的仿真碼。因此,步驟2表明,仿真軟件流必須移動(dòng)到新的并且可用的代碼塊以完成Java字節(jié)碼的執(zhí)行。在圖5中示出的例子中,步驟2說明了在仿真碼跳轉(zhuǎn)的類型中程序執(zhí)行的轉(zhuǎn)移,其中仿真碼是跳轉(zhuǎn)到越過原始仿真碼表62末端的位置,在該位置將會(huì)定位代碼塊以完成Java字節(jié)碼的執(zhí)行。這個(gè)額外的代碼可以是任意大小,并且只受到系統(tǒng)資源的限制。額外的代碼可以存儲在系統(tǒng)中具有可用資源的任意位置,該可用資源允許儲存要被執(zhí)行的剩余Java字節(jié)碼仿真代碼。因此應(yīng)該認(rèn)識到,被選擇的跳轉(zhuǎn)地址可以在預(yù)設(shè)的地址范圍(0x0到0xFF)內(nèi),該地址范圍小于數(shù)據(jù)處理系統(tǒng)內(nèi)的總地址范圍,或者,被選擇的跳轉(zhuǎn)地址可以在預(yù)設(shè)的用于存儲在具有可用資源的任意地方的地址范圍之外。步驟3示出,一旦用于特殊Java字節(jié)碼的仿真碼完成,仿真碼可以跳轉(zhuǎn)回位于“開銷+JAVASW”軟件開始位置的256組之中的任意組。這樣,在仿真碼表63末尾處需要用來完成Java字節(jié)碼仿真的額外的軟件就不需要包括“開銷+JAVASW”軟件了。在仿真碼表63中Java字節(jié)碼不能只使用一組被仿真的情況下,這個(gè)操作特點(diǎn)允許重新使用至少一組“開銷+JAVASW”軟件部分。
參看圖6,選擇分配給每組的指令時(shí)隙的數(shù)量是一個(gè)很重要的問題。這個(gè)選擇通常涉及了仿真碼表總體大小和超出組大小的溢出Java字節(jié)碼數(shù)量之間的一個(gè)折衷。雖然圖6中示出的實(shí)施例每組使用了16條指令時(shí)隙,但是本發(fā)明的其它實(shí)施例可以將組的大小優(yōu)化成不同數(shù)量的指令時(shí)隙。注意到,具有固定的組大小可以大大地簡化用于指向每個(gè)被仿真字節(jié)碼的仿真碼的地址計(jì)算。這對于每條指令,對于處理器12,這可能是大量的計(jì)算時(shí)間,并且能夠?qū)?shù)據(jù)處理系統(tǒng)10的性能造成顯著地影響。
仍然參看圖6,注意到,可以使用一個(gè)或者更多硬件加速器,作為數(shù)據(jù)處理系統(tǒng)10的部件(參見圖1,協(xié)同處理器14,16),以改進(jìn)數(shù)據(jù)處理系統(tǒng)10的性能。應(yīng)該可以很好地認(rèn)識到,協(xié)同處理器恰恰是可能會(huì)使用的硬件加速器的一種類型。參看圖6,以兩種方法示出了IADD(整數(shù)加)程序,以說明仿真碼表是如何基于硬件加速器的存在與否而變化的。整數(shù)加功能只是作為例子而選擇的。圖6的“IADD”程序的左邊是軟件程序80,其可以在不存在硬件加速器的情況下由處理器12執(zhí)行。右邊的代碼82說明了可以在存在硬件加速器(例如協(xié)同處理器14)的情況下由處理器12執(zhí)行程序。注意到,硬件加速器可用于完成Java字節(jié)碼執(zhí)行的重要部分。比較圖6中代碼的左塊和右塊,很顯然地看到,當(dāng)使用硬件加速器時(shí),不再需要先前不得不由處理器12執(zhí)行的大量的存取指令。正如將在有關(guān)圖8的進(jìn)一步細(xì)節(jié)中說明的,在本發(fā)明的一個(gè)類型中提供了用戶可決定的控制信號,該信號允許系統(tǒng)用戶選擇預(yù)設(shè)代碼大小組合的第一仿真表結(jié)構(gòu)或者不同的預(yù)設(shè)代碼大小組合的第二仿真表結(jié)構(gòu)。注意,硬件加速器和處理器必須具有某種類型的接口或者信號交換機(jī)制,以進(jìn)行通信和協(xié)調(diào)Java字節(jié)碼的執(zhí)行。參看圖1,處理器12和協(xié)同處理器14,16通過協(xié)同處理器接口30進(jìn)行通信。注意到,處理器12與協(xié)同處理器14,16之間的通信可能會(huì)由于如下事實(shí)而變得復(fù)雜Java程序中可能會(huì)發(fā)生線程轉(zhuǎn)換。Java程序執(zhí)行期間,軟件的至少一部分必須周期性地檢查確定是否有必要轉(zhuǎn)換任務(wù)并允許另一個(gè)任務(wù)占用處理器12執(zhí)行時(shí)間的一部分。在Java中軟件任務(wù)之間的這個(gè)轉(zhuǎn)換或者改變被稱為線程轉(zhuǎn)換。參看圖1,常規(guī)上,處理器12根據(jù)是否發(fā)生線程轉(zhuǎn)換來發(fā)信號通知協(xié)同處理器14,16是否有有效Java字節(jié)碼要執(zhí)行。這條信號是JAVASW指令執(zhí)行的一部分;并且,由于除非處理器12也執(zhí)行字節(jié)碼,協(xié)同處理器是不會(huì)執(zhí)行Java字節(jié)碼的,因此這條信號是有條件的,即基于這樣的事實(shí)沒有進(jìn)行線程轉(zhuǎn)換;并且,當(dāng)進(jìn)行線程轉(zhuǎn)換時(shí),應(yīng)該被正常執(zhí)行的Java字節(jié)碼將保持不被執(zhí)行狀態(tài),直到當(dāng)前線程被重新啟動(dòng)。注意到,協(xié)同處理器接口30還可包括監(jiān)聽或者廣播信號以允許處理器12和協(xié)同處理器14,16在由其它處理器操作著的軟件流中具有可見性。對于可用本發(fā)明的關(guān)于任意一個(gè)已知處理器到協(xié)同處理器接口的具體信息,可以參考美國專利5,983,338,在此通過引用將其結(jié)合進(jìn)來。
注意到,圖6的仿真碼表72包括256個(gè)可尋址的組(0x0到0xff),其中每個(gè)組都分配有一個(gè)相應(yīng)的Java字節(jié)碼。希望對仿真碼定位以在仿真碼表中實(shí)現(xiàn)Java線程轉(zhuǎn)換。由于每組中有固定數(shù)量的指令時(shí)隙,所以在可用于線程轉(zhuǎn)換軟件的仿真碼表72中沒有未被分配的存儲器定位。因此,有必要在一個(gè)或更多組中使用未被使用的指令時(shí)隙來對線程轉(zhuǎn)換代碼進(jìn)行定位。在本發(fā)明的一個(gè)實(shí)施例中,線程轉(zhuǎn)換軟件程序定位在第一組中,相當(dāng)于Java字節(jié)碼零(0)。作為例子,由于需要4條指令時(shí)隙的這一組被分配了空操作(NOP)指令,剩余了12條未被使用的指令時(shí)隙來存儲軟件程序的至少一部分用于進(jìn)行線程轉(zhuǎn)換。注意到,如果線程轉(zhuǎn)換程序不在已分配時(shí)隙的范圍內(nèi),可以進(jìn)行一個(gè)跳轉(zhuǎn),到越過仿真碼表72末尾的位置,如圖5中的針對仿真碼表63所說明的一樣。本發(fā)明的其它實(shí)施例可以定位軟件,用于在仿真碼表72中的其它位置進(jìn)行線程轉(zhuǎn)換。注意到,使用仿真碼表72中的這第一組對線程轉(zhuǎn)換軟件進(jìn)行定位,允許硬件用于實(shí)現(xiàn)JAVASW指令(在這里要進(jìn)一步說明),其中JAVASW指令將要在處理器12中以使用硬件的更直接的方式來實(shí)現(xiàn)。
圖7進(jìn)一步說明了先前在圖4和圖5的仿真表中引用的“JAVASW”指令的細(xì)節(jié)。在本發(fā)明的一個(gè)實(shí)施例中,JAVASW指令是一個(gè)由處理器12執(zhí)行的指令(參見圖1)。為了進(jìn)一步清楚了解JAVASW指令的執(zhí)行,圖8中進(jìn)一步提供了圖1中處理器12的詳細(xì)部分。圖8中說明的是指令寄存器116。指令譯碼104有一個(gè)輸入,用于通過連接到指令寄存器116輸出的導(dǎo)線117,從指令寄存器116接收處理器12指令,和一個(gè)連接到控制電路105輸入的輸出。控制電路105也在輸入118處接收要被執(zhí)行的Java字節(jié)碼??刂齐娐?05的輸出連接到多路復(fù)用(Mux)和混合器106的控制輸入,連到具有程序計(jì)數(shù)器108的寄存器107和其它寄存器109的輸入/輸出終端,連接到算術(shù)邏輯單元(ALU)110的輸入/輸出終端,以及通過導(dǎo)線130連接到地址選擇邏輯111的輸入/輸出終端。遞增電路112具有一個(gè)輸出,通過導(dǎo)線120連接到地址選擇邏輯1 1的第一輸入。跳轉(zhuǎn)地址121連接到地址選擇邏輯111的第二輸入。例外地址(Exception Address)122連接到地址選擇邏輯111的第三輸入,分支地址123連接到地址選擇邏輯111的第四輸入。多路復(fù)用和混合器106的輸出連接到地址選擇邏輯111的第五輸入,用于提供JAVASW程序計(jì)數(shù)器地址124。導(dǎo)線133連接到遞增電路112的輸入,連接到地址選擇邏輯111的輸出,和連接到用于向控制電路105和從控制電路105通信的程序計(jì)數(shù)器108的輸入/輸出終端。跳轉(zhuǎn)地址121,例外地址122和分支地址123均由控制電路105提供。多路復(fù)用和混合器106具有用于接收常數(shù)0x8100的輸入,具有等于R4<<1 101的值(寄存器109的寄存器R4中左移一位的值)的輸入,具有等于R4<<5102(寄存器109的寄存器R4中左移五位的值)的值的輸入,表外入口點(diǎn)103,和用于接收程序計(jì)數(shù)器值+2(PC+2)的輸入。控制電路105具有用于通過一條或更多條導(dǎo)線134接收轉(zhuǎn)換線程門限值的附加的輸入。
參看圖7,在“偽C”代碼的類型中說明了JAVASW指令的一個(gè)實(shí)施例的操作。在一個(gè)實(shí)施例中,JAVASW引起了到字節(jié)碼仿真序列的一個(gè)跳轉(zhuǎn)。方程92說明了此字節(jié)碼仿真序列的地址的計(jì)算方法。方程92的括號中包括的部分表示了JAVASW指令執(zhí)行期間載入寄存器107的程序計(jì)數(shù)器108(PC)的跳轉(zhuǎn)地址。這個(gè)值是圖8中的多路復(fù)用和混合器106通過導(dǎo)線124提供給地址選擇邏輯111的。方程92的值“PC+2”是程序計(jì)數(shù)器108在經(jīng)過遞增電路112的遞增之后的程序計(jì)數(shù)器值。此遞增過程作為處理器12執(zhí)行流水線中的固有步驟而發(fā)生,并因此很方便作為基礎(chǔ)地址值。在本發(fā)明的其它實(shí)施例中,將改為使用一個(gè)非遞增的程序計(jì)數(shù)器值。之后,遞增加的程序值將與值0xffffe000進(jìn)行邏輯與操作。這個(gè)布爾操作具有使(PC+2)的值的低13位為0的效果。結(jié)果地址指向仿真碼表72中的第一字節(jié)碼指令組的第一指令時(shí)隙(參見圖6)。注意到,在本發(fā)明的某些實(shí)施例中,不要求邏輯與操作。實(shí)際上,值PC+2的低13位也可以直接舍去。如果指針值沒有舍去,它將與存儲在寄存器R4(寄存器109中的一個(gè))中的字節(jié)碼值進(jìn)行邏輯或操作,根據(jù)組大小移動(dòng)一定的數(shù)量。所述操作將把新程序計(jì)數(shù)器地址有效地指引到仿真碼表72內(nèi)的正確位置,以使程序計(jì)數(shù)器寄存器現(xiàn)在能夠?yàn)閷⒁商幚砥?2仿真的Java字節(jié)碼指向正確指令組的開始位置。組成指針值的另一個(gè)方法是將PC+2的高18位與儲存在寄存器R4中的Java字節(jié)碼值連接起來,之后給結(jié)果添上5bit的0以組成一個(gè)32位的地址。注意到,跳轉(zhuǎn)地址可以由不同的方式組成。但是,不管用于組成跳轉(zhuǎn)地址的是如何不同的技術(shù)及其組合,結(jié)果總是指向與當(dāng)前Java字節(jié)碼對應(yīng)的仿真碼表72(參見圖6)內(nèi)的正確指令組起始的地址。注意到,如果沒有發(fā)生線程轉(zhuǎn)換,方程92將用于計(jì)算跳轉(zhuǎn)地址。注意到,如果語句91為真,則不發(fā)生線程轉(zhuǎn)換。語句91判斷是否越過了轉(zhuǎn)換計(jì)算(SWCOUNT)門限(數(shù)據(jù)處理系統(tǒng)實(shí)現(xiàn)程序任務(wù)改變的點(diǎn)),以確定另一個(gè)Java線程的改變是否應(yīng)該發(fā)生。因此,語句91需要對一個(gè)值(諸如計(jì)算值)與預(yù)設(shè)值(轉(zhuǎn)換計(jì)算門限值)進(jìn)行比較確定。如果語句91為真,有第一結(jié)果,如果語句91不為真,則有第二結(jié)果。但是,如果語句91不為真的話,那么“else”語句93將引出用于計(jì)算儲存在程序計(jì)數(shù)器108中的跳轉(zhuǎn)地址的方程94。注意到,方程94中的與操作是與上述方程92中的相同的與操作。但是,方程94的或操作用于指引到仿真碼表的包含線程轉(zhuǎn)換軟件的部分。再次注意到,如果在方程94中用舍去操作代替與操作的話,那么舍去操作的結(jié)果將與線程轉(zhuǎn)換軟件的偏移量(常數(shù)0x8)聯(lián)系或者合并起來。之后,語句95表示轉(zhuǎn)換計(jì)算值(SWCOUNT)遞減的Java指令。應(yīng)該很容易看出來,本發(fā)明的其它實(shí)施例也可以使用遞增計(jì)數(shù)器而不是遞減計(jì)數(shù)器?;蛘呖梢砸阅撤N其它的方式來記住線程轉(zhuǎn)換,諸如通過在轉(zhuǎn)換發(fā)生之前設(shè)定了一定時(shí)間的一個(gè)定時(shí)器。雖然圖7中說明的實(shí)施例以非常具體的方法選擇了跳轉(zhuǎn)地址,但是本發(fā)明的其它實(shí)施例也可使用其它的方程來實(shí)現(xiàn)方程92和94以及語句93。雖然所述的本發(fā)明的說明的實(shí)施例使用了由方程92和94限定的跳轉(zhuǎn)到字節(jié)碼仿真序列的具體地址,但是本發(fā)明的其它實(shí)施例也可以使用修改形式的方程92和94,跳轉(zhuǎn)到所希望的地址。雖然圖7中說明的本發(fā)明的實(shí)施例記述了用于跳轉(zhuǎn)到字節(jié)碼仿真序列的處理器12的指令,但是本發(fā)明的其它實(shí)施例也可以使用這種類型的指令,針對多種不同的目的,跳轉(zhuǎn)到多個(gè)跳轉(zhuǎn)目的地址中的一個(gè)。因此,本發(fā)明并不限定于跳轉(zhuǎn)到Java字節(jié)碼仿真序列,而是也適用于其它類型的跳轉(zhuǎn)。此外,語句91和93可以是選擇多個(gè)可能跳轉(zhuǎn)目的地址中的一個(gè)的任意類型的不同條件。應(yīng)該進(jìn)一步認(rèn)識到,語句95是可選的,可以不在某些實(shí)施例中使用。
圖7中說明的指令格式90也可以叫做操作碼。在優(yōu)選的類型中,指令格式90存于指令寄存器116之中,由圖8的指令譯碼104電路譯碼,從而提供給控制電路105以在處理器12中執(zhí)行JAVASW指令。
注意,JAVASW指令期間進(jìn)行的跳轉(zhuǎn)操作是始終發(fā)生的。跳轉(zhuǎn)并不是可選的或者有條件的,而是總是發(fā)生,跳轉(zhuǎn)到多個(gè)跳轉(zhuǎn)目的地址中的一個(gè)。
注意,R4<<5表示預(yù)設(shè)值(在本例中是字節(jié)碼值)在載入寄存器R4之前被左移5位。在圖7中說明的本發(fā)明的實(shí)施例中,每條指令都是16位長度,因此占用2字節(jié)的存儲。注意到,左移5位相當(dāng)于乘32字節(jié)或者16條指令。參看圖6,字節(jié)碼值移動(dòng)5或者乘32的原因是為了允許偏移到仿真碼表72中從而指到仿真碼表72內(nèi)的正確字節(jié)碼指令組。因此,值R4<<5用于移動(dòng)跳轉(zhuǎn)目的地址指針到仿真碼表72內(nèi)的正確組的開始位置。
應(yīng)該意識到,本發(fā)明的其它實(shí)施例可以包括使用多于1條指令的JAVASW指令功能的工具。注意,本發(fā)明的一個(gè)實(shí)施例中,JAVASW指令合并了控制計(jì)數(shù)器的功能和在單獨(dú)指令中實(shí)現(xiàn)表跳轉(zhuǎn)的功能。這在圖7中作為語句95示出,該語句95是完成方程92或94中一個(gè)之后又完成的。注意到,對于JAVASW指令,指令流的改變是始終發(fā)生的,而并非是用于條件分支指令的情況。注意到,響應(yīng)JAVASW指令進(jìn)行的跳轉(zhuǎn)是到兩個(gè)地址中的一個(gè)的,其中這兩個(gè)地址都在預(yù)設(shè)表之內(nèi)(參見圖4中的仿真碼表62)。此外,在本發(fā)明的一個(gè)實(shí)施例中,JAVASW指令進(jìn)行了表跳轉(zhuǎn)操作,其中表跳轉(zhuǎn)的目的地是Java字節(jié)碼值和計(jì)數(shù)器值的一個(gè)函數(shù)。在本發(fā)明的一個(gè)實(shí)施例中,計(jì)數(shù)器值可以是轉(zhuǎn)換計(jì)算值(圖7中的SWCOUNT),其被Java解釋程序用來決定應(yīng)該何時(shí)發(fā)生線程轉(zhuǎn)換。在一個(gè)實(shí)施例中,寄存器109的一個(gè)可以用作計(jì)數(shù)器。其它的實(shí)施例也可以在處理器12中使用硬件和硬件或者軟件和硬件的組合,以實(shí)現(xiàn)這個(gè)轉(zhuǎn)換計(jì)數(shù)器功能。對于JAVASW指令的一個(gè)實(shí)施例,計(jì)數(shù)器值有條件地使得跳轉(zhuǎn)的正常入口點(diǎn)被返回仿真表的預(yù)設(shè)固定入口點(diǎn)(圖7和8中如0x8說明的)所重疊(override)。其它實(shí)施例可以使用不同于0x8的地址。如圖7中所說明的,正常表入口點(diǎn)對應(yīng)由方程92的執(zhí)行所決定的PC值的地址計(jì)算,并且在沒有線程轉(zhuǎn)換要發(fā)生的時(shí)候發(fā)生。當(dāng)線程轉(zhuǎn)換要發(fā)生時(shí),沒有使用對應(yīng)方程92的正常表入口點(diǎn)。實(shí)際上,當(dāng)現(xiàn)在應(yīng)該進(jìn)行線程轉(zhuǎn)換時(shí),它被方程94定義的入口點(diǎn)所重疊,并且不再輸入用于應(yīng)該被正常仿真的Java字節(jié)碼的仿真碼。
JAVASW指令提供了這樣一條指令當(dāng)使用無重疊表入口點(diǎn)時(shí),該指令通過握手信號(協(xié)同處理器接口30的一部分)有條件地向硬件加速器(例如協(xié)同處理器14,16)發(fā)出信號。這個(gè)握手信號允許硬件加速器決定處理器12是否在執(zhí)行圖7中的方程92(在這種情況中,字節(jié)碼由處理器12和硬件加速器進(jìn)行仿真),或者決定處理器12是否通過執(zhí)行圖7中的方程94來進(jìn)行線程轉(zhuǎn)換(在這種情況中,硬件加速器必須不進(jìn)行當(dāng)前字節(jié)碼的仿真)。
此外,JAVASW指令可以提供允許圖6中所示正常表結(jié)構(gòu)被重疊小組字節(jié)碼值的調(diào)度機(jī)制。例如,通常對于已執(zhí)行的、需要多于16條指令時(shí)隙的并因此會(huì)溢出分配的組大小的Java字節(jié)碼,可以提供使得JAVASW指令跳轉(zhuǎn)到仿真碼表之外位置的硬件,以執(zhí)行Java字節(jié)碼需要的代碼。注意到,僅需要實(shí)現(xiàn)這樣一個(gè)調(diào)度機(jī)制的硬件是對將溢出它們所分配的指令時(shí)隙的所選組的Java字節(jié)碼進(jìn)行譯碼的少量譯碼邏輯,下面介紹的在圖8中的多路復(fù)用和混合器106的附加輸入103連同相應(yīng)的控制一起允許這個(gè)所選Java字節(jié)碼的仿真碼跳轉(zhuǎn)到仿真碼表外的位置。注意,這個(gè)譯碼電路可以在處理器12的控制電路105內(nèi)實(shí)現(xiàn),如下面結(jié)合圖8的介紹。
如前所述,圖8說明了圖1的處理器12的相應(yīng)部分的僅僅一個(gè)實(shí)施例。重申一下,用于仿真Java字節(jié)碼的指令由指令譯碼電路104從指令寄存器116中接收。指令譯碼電路104對仿真指令進(jìn)行譯碼并把譯碼結(jié)果提供給控制電路105??刂齐娐?05把控制信號提供給處理器12中的其它單元以執(zhí)行這些指令。如前所示,控制電路105是通過導(dǎo)線130雙向連接到寄存器107,算術(shù)邏輯單元(ALU)110和地址選擇邏輯111的??刂齐娐?05把控制信號提供給多路復(fù)用和混合器106。本發(fā)明的其它實(shí)施例可以使用多路復(fù)用和混合器106的更多、更少、或者不同的輸入。多路復(fù)用和混合器106的輸出是提供作為地址選擇邏輯111輸入的JAVASW程序計(jì)數(shù)器地址124。地址選擇邏輯111接收分支地址123,例外地址122,和跳轉(zhuǎn)地址121作為輸入。此外,地址選擇邏輯111的輸出可以由遞增電路112進(jìn)行遞增,之后通過導(dǎo)線120作為地址選擇邏輯111的輸入反饋進(jìn)來。在本發(fā)明說明的實(shí)施例中,遞增電路112把地址增加了2字節(jié),這2字節(jié)相當(dāng)于一個(gè)指令的長度。本發(fā)明的其它實(shí)施例可以使用遞增電路112把地址增加不同的數(shù)量。由地址選擇邏輯111輸出的地址通過導(dǎo)線133提供給程序計(jì)數(shù)器108和控制電路105??刂齐娐?05用于產(chǎn)生跳轉(zhuǎn)地址121、例外地址122、和分支地址123??刂齐娐?05通過一條或更多條導(dǎo)線134接收一個(gè)或更多的轉(zhuǎn)換線程門限信號。如上所述,寄存器107通過導(dǎo)線130、131、和132雙向連接到算術(shù)邏輯單元110。
在所說明的類型中,多路復(fù)用和混合器106的不同輸入給數(shù)據(jù)處理系統(tǒng)10提供了大量的靈活性。多路復(fù)用和混合器106的輸入113提供了來自程序計(jì)數(shù)器108的當(dāng)前PC+2值,該值被用于與多路復(fù)用和混合器106的其它輸入組合來形成多種JAVASW程序計(jì)數(shù)器地址124值。例如,提供常數(shù)0x8的輸入100可與輸入113一起被使用,使JAVASW程序計(jì)數(shù)器地址指向線程轉(zhuǎn)換軟件程序76,該程序位于圖6中的仿真碼表72的第一組。新程序計(jì)數(shù)器地址將在需要線程轉(zhuǎn)換軟件的時(shí)候使用。多路復(fù)用和混合器106的輸入101指出寄存器R4的內(nèi)容被左移一個(gè)數(shù)位,這個(gè)移動(dòng)相當(dāng)于乘2。當(dāng)仿真碼表72中的組包含一個(gè)單獨(dú)的指令來儲存越過實(shí)現(xiàn)相應(yīng)字節(jié)碼的仿真碼所在的仿真碼表72尾部的跳轉(zhuǎn)地址的時(shí)候,輸入101用于形成新程序計(jì)數(shù)器地址。下面圖9的介紹中將進(jìn)一步說明這個(gè)功能。多路復(fù)用和混合器106的輸入102指出寄存器R4的內(nèi)容左移5,這相當(dāng)于乘32。將左移后的值R4<<5與輸入113一起用來在仿真碼表72的組中進(jìn)行選擇。這樣的移動(dòng)是一個(gè)調(diào)整,用于當(dāng)處理器12完成前一個(gè)Java字節(jié)碼的執(zhí)行并且轉(zhuǎn)移到下一個(gè)Java字節(jié)碼的執(zhí)行時(shí)產(chǎn)生新程序計(jì)數(shù)器地址。多路復(fù)用和混合器106的輸入103允許對于較小組的字節(jié)碼值,正常表結(jié)構(gòu)被重疊。換句話說,可以通過輸入到多路復(fù)用和混合器106的表外入口點(diǎn)103信號使得仿真碼表72外的地址成為預(yù)設(shè)的值。注意到,本發(fā)明的其它實(shí)施例可以具有其它多路復(fù)用和混合器106的輸入,用于基于數(shù)據(jù)處理系統(tǒng)10的需要?jiǎng)?chuàng)建不同的新程序計(jì)數(shù)器地址。注意到,多路復(fù)用和混合器106的輸入可用于改變仿真碼表72內(nèi)組的大小。雖然所說明的實(shí)施例只示出了一個(gè)標(biāo)準(zhǔn)組大小,但是本發(fā)明的其它實(shí)施例可以使用不同的組大小或者由多路復(fù)用和混合器106的輸入限定的多個(gè)組大小。這在確定需要仿真諸如Java的高級語言的不同字節(jié)碼的代碼長度方面,給數(shù)據(jù)處理器10的用戶提供了很大的靈活性。
現(xiàn)在參看圖9,圖9說明了針對字節(jié)碼值的大組允許仿真碼表被壓縮的調(diào)度機(jī)制。如較早前根據(jù)圖5的討論,對于某些字節(jié)碼值,相應(yīng)的仿真碼可能需要比組大小所能提供的更多的指令時(shí)隙。如果仿真碼保持在連續(xù)序列中,有關(guān)圖5中步驟2和3的開銷有可能被簡化。注意到,對于Java字節(jié)碼編碼來說,在0xc0到0xff的范圍內(nèi)有很大百分比的字節(jié)碼需要比16時(shí)隙的組大小更多的指令時(shí)隙,希望用圖9中的替換的仿真碼表83。于是,圖9示出了作為包含256個(gè)入口(每字節(jié)碼一組)的儲存設(shè)備的仿真碼表83,其中,前192個(gè)入口(入口的3/4)具有16指令時(shí)隙的組大小,(對應(yīng)字節(jié)碼0x0到0xbf的入口),后64個(gè)入口(入口的1/4)具有1指令時(shí)隙的組大小。通過以這種方式構(gòu)成表,字節(jié)碼0x0到0xbf的入口可根據(jù)圖5和6的前述而被利用,此時(shí)字節(jié)碼0x0到0xbf的入口包含一個(gè)跳轉(zhuǎn)到用于相應(yīng)字節(jié)碼的實(shí)際仿真碼的跳轉(zhuǎn)指令。這個(gè)結(jié)構(gòu)允許表在大小上被壓縮,并且這些更復(fù)雜字節(jié)碼的仿真碼可以保持連續(xù),而不是像圖5中所做的那樣被分成起始部分和結(jié)束部分。調(diào)度機(jī)制通過去除對圖5中步驟2和3的操作,簡化了代碼并且減少了開銷。實(shí)際上,引入替換的步驟2,該步驟將直接跳轉(zhuǎn)到用于范圍0xc0到0xff的Java字節(jié)碼的入口仿真程序。往回參看圖8,通過使用多路復(fù)用和混合器106的輸入101以及PC+2輸入113和控制電路105完成這個(gè)表壓縮。通過衡量(scaling)R4<<1,完成了對表83的后64個(gè)入口的適當(dāng)指引。對應(yīng)多路復(fù)用和混合器106的輸入113的值PC+2被控制電路105修改,作為對控制電路105的輸入118上0xc0到0xff范圍內(nèi)的字節(jié)碼進(jìn)行譯碼的響應(yīng),以指向圖9的起始入口88。之后,將這個(gè)修改的值與R4<<1合并,以在多路復(fù)用和混合器106中選擇適當(dāng)?shù)谋砣肟邳c(diǎn)??刂齐娐?05可以通過使用在輸入118接收的Java字節(jié)碼,進(jìn)一步實(shí)現(xiàn)一個(gè)用戶可決定的控制信號。該控制信號選擇預(yù)設(shè)組大小的第一仿真表結(jié)構(gòu)或者預(yù)設(shè)組大小的第二仿真表結(jié)構(gòu),并且提供了是通過類似圖5的儲存設(shè)備還是類似圖9的儲存設(shè)備進(jìn)行操作來的靈活性。
根據(jù)本發(fā)明,盡管圖9中說明的實(shí)施例示出字節(jié)碼0xc0到0xff的特殊段作為已壓縮碼入口的字節(jié)碼,可以選擇其它的字節(jié)碼組,或者可以為已壓縮的表入口選擇不同數(shù)量的字節(jié)碼。
至此,應(yīng)該很明顯地看到,這里提供了一種數(shù)據(jù)處理指令,該指令對有關(guān)解釋程序循環(huán)的開銷進(jìn)行了合并和最小化??梢詫⒁环N形式的指令儲存在集成電路芯片內(nèi)的或者與集成電路芯片獨(dú)立且分離的存儲媒介中。該指令的硬件支持允許對用于實(shí)現(xiàn)解釋程序功能的存儲器的優(yōu)化。結(jié)果,顯著地減少了執(zhí)行時(shí)間類型中的開銷、所需的硬件資源量和所需的解釋程序軟件量。本發(fā)明合并了對計(jì)數(shù)器的控制和對表跳轉(zhuǎn)的實(shí)現(xiàn),其中總是發(fā)生流的改變。JAVASW指令實(shí)現(xiàn)了把表跳轉(zhuǎn)的目的地作為字節(jié)碼值和計(jì)數(shù)器值的一個(gè)函數(shù),計(jì)數(shù)器值有條件地使得表中正常計(jì)算的入口點(diǎn)被預(yù)設(shè)的固定入口點(diǎn)所重疊。當(dāng)沒有進(jìn)行線程轉(zhuǎn)換的時(shí)候,JAVASW指令也通過交換信號有條件地向硬件加速器發(fā)出信號。在說明的實(shí)施例中,提供了針對小組字節(jié)碼值允許正常存儲結(jié)構(gòu)被重疊的調(diào)度機(jī)制。同時(shí)也提供了針對大組字節(jié)碼值允許存儲表被壓縮的調(diào)度機(jī)制。此外,存儲表可配制成支持對應(yīng)簡單和復(fù)雜的字節(jié)碼的多組大小(例如2,8,16字節(jié)等等)。在這樣的分情況處理過程中,操作碼(字節(jié)碼)得到了譯碼,代碼基于組大小被有選擇地分開。
在前述的說明中,已經(jīng)參考具體實(shí)施例描述了本發(fā)明。但是,本領(lǐng)域普通技術(shù)人員應(yīng)該認(rèn)識到,在不背離如所附權(quán)利要求闡明的本發(fā)明的范圍的條件下,可以做出不同的修改和變更。因此,本說明書和附圖應(yīng)該被理解為說明性的,而非限定性的,并且所有這樣的修改都將落入本發(fā)明的范圍之中。技術(shù)人員應(yīng)該認(rèn)識到,附圖中的部分是為了簡單明了而示例的,沒有必要進(jìn)行詳述。例如,圖中某些部分的尺寸相對于其它部分可能是被放大的,這是為了幫助更好地理解本發(fā)明的實(shí)施例。
上面已經(jīng)介紹了相對具體實(shí)施例的好處、其它優(yōu)點(diǎn)、以及對問題的解決。但是,好處、優(yōu)點(diǎn)、問題的解決,以及可以帶來任何好處、優(yōu)點(diǎn)、或者出現(xiàn)的或變得更顯著的解決的元素被不會(huì)被解釋為任何或所有權(quán)利要求元素的關(guān)鍵的、需要的、或者重要的特點(diǎn)或要素。正如在此所使用的,術(shù)語“包括”,“包含”或者它的其它任何變種,涵蓋非排它性的包括,這樣包括一系列要素的處理,方法,項(xiàng)目,或者裝置,它們不僅包括這些要素,還可包括沒有明確列出的或者這樣的處理,方法,項(xiàng)目,或者裝置所固有的其它要素。
權(quán)利要求
1.一種在數(shù)據(jù)處理系統(tǒng)中的程序執(zhí)行方法,該系統(tǒng)包括取出位于第一地址的第一條指令的裝置;和用所述數(shù)據(jù)處理系統(tǒng)執(zhí)行所述第一條指令的裝置,該方法包括執(zhí)行所述的第一條指令;基于一個(gè)值選擇跳轉(zhuǎn)地址,如果所述值與預(yù)設(shè)值的比較有第一結(jié)果,則為所述跳轉(zhuǎn)地址提供第二地址,如果所述值與預(yù)設(shè)值的比較有第二結(jié)果,則為所述跳轉(zhuǎn)地址提供第三地址,其中所述第二地址和所述第三地址都不與所述第一地址相鄰;和通過改變程序執(zhí)行方向到所述跳轉(zhuǎn)地址,始終在所述程序執(zhí)行中實(shí)現(xiàn)控制的改變,以此響應(yīng)執(zhí)行所述第一指令。
2.根據(jù)權(quán)利要求1的方法,其中所述第一結(jié)果是所述值大于所述預(yù)設(shè)值的比較判斷,所述第二結(jié)果是所述值小于或等于所述預(yù)設(shè)值的比較判斷。
3.根據(jù)權(quán)利要求1的方法,進(jìn)一步包括通過在程序執(zhí)行期間保留具有遞增的地址值的程序計(jì)數(shù)器,舍去所述地址值的預(yù)設(shè)數(shù)量的幾個(gè)低比特位,并且組合偏移值與一結(jié)果以創(chuàng)建所述跳轉(zhuǎn)地址,從而產(chǎn)生所述跳轉(zhuǎn)地址。
4.根據(jù)權(quán)利要求1的方法,進(jìn)一步包括提供具有預(yù)設(shè)地址范圍的存儲設(shè)備,用于存儲將要被執(zhí)行的裝置所執(zhí)行的處理指令,所述處理指令排列成組,每組都與程序的預(yù)設(shè)操作碼相關(guān)。
5.根據(jù)權(quán)利要求4的方法,進(jìn)一步包括以預(yù)設(shè)數(shù)量的指令時(shí)隙各分段組成存儲設(shè)備,預(yù)設(shè)數(shù)量的每段都專用于所述指令的存儲。
6.根據(jù)權(quán)利要求4的方法,進(jìn)一步包括將所述處理指令的執(zhí)行從所述存儲設(shè)備的一個(gè)段指引到所述預(yù)設(shè)地址范圍外的一個(gè)地址,隨后將程序執(zhí)行的方向改變回所述存儲設(shè)備的另外一個(gè)段的預(yù)設(shè)部分。
7.一種數(shù)據(jù)處理系統(tǒng),其包括存儲器,用來存儲多個(gè)程序指令;通過數(shù)據(jù)總線連接到所述存儲器的處理器,用于從所述存儲器中取出所述程序指令,并且有選擇地執(zhí)行所述多個(gè)程序指令;和存儲設(shè)備,用于存儲將要被所述處理器執(zhí)行的多個(gè)處理指令,所述多個(gè)處理指令被安排在多組中,其中每組都與所述多個(gè)程序指令中預(yù)設(shè)的一個(gè)相關(guān);所述處理器在預(yù)設(shè)地址執(zhí)行預(yù)設(shè)處理指令,并基于一個(gè)數(shù)值選擇跳轉(zhuǎn)地址,如果所述值與預(yù)設(shè)值的比較具有第一結(jié)果,則為所述跳轉(zhuǎn)地址提供第一地址,如果所述值與預(yù)設(shè)值的比較具有第二結(jié)果,則為所述跳轉(zhuǎn)地址提供第二地址,其中所述第一地址和所述第二地址都不與所述第一地址相鄰,所述預(yù)設(shè)處理指令的執(zhí)行始終在程序執(zhí)行中實(shí)現(xiàn)控制的改變。
8.根據(jù)權(quán)利要求7的數(shù)據(jù)處理系統(tǒng),其中所述處理器進(jìn)一步包括指令寄存器,用于接收所述程序指令;連接到所述指令寄存器的指令譯碼器,用于將所述程序指令譯碼成具體的操作碼值;連接到所述指令譯碼器的控制電路,用于提供控制信號作為對所述具體操作碼值的響應(yīng);連接到所述控制電路的地址產(chǎn)生電路,用于接收所述控制信號并創(chuàng)建所述跳轉(zhuǎn)地址;連接到所述地址產(chǎn)生電路的寄存器,用于存儲操作數(shù)作為對所述控制電路的響應(yīng);和連接到所述地址產(chǎn)生電路和所述控制電路的算術(shù)邏輯單元,所述算術(shù)邏輯單元處理由寄存器存儲的所述操作數(shù)。
9.根據(jù)權(quán)利要求8的數(shù)據(jù)處理系統(tǒng),其中所述控制電路進(jìn)一步包括用戶可決定的控制信號,該控制信號選擇預(yù)設(shè)組大小的第一結(jié)構(gòu)或者預(yù)設(shè)組大小的第二結(jié)構(gòu)。
全文摘要
本發(fā)明公開了一種數(shù)據(jù)處理器,通過將表跳轉(zhuǎn)的任務(wù)與由諸如計(jì)數(shù)器或者定時(shí)器的運(yùn)行值控制的線程或任務(wù)轉(zhuǎn)換進(jìn)行合并,可以執(zhí)行指令(JAVASW)以實(shí)現(xiàn)有效解釋程序的功能。指令的執(zhí)行始終需要進(jìn)行流的改變。在一種類型中,指令可以導(dǎo)致向硬件加速器發(fā)送信號以完成指令執(zhí)行。此外,通過使用分離存儲包含與具體字節(jié)碼相關(guān)的仿真碼的存儲表,可以針對大量已識別字節(jié)碼被壓縮。進(jìn)一步地,存儲表的相同部分的使用可以連同不同字節(jié)碼的執(zhí)行一起發(fā)生。盡管是在Java字節(jié)碼的上下文中討論,但是指令適用于任何編程語言和處理器結(jié)構(gòu)。
文檔編號G06F9/318GK1531680SQ01822555
公開日2004年9月22日 申請日期2001年12月18日 優(yōu)先權(quán)日2001年2月9日
發(fā)明者威廉C·莫耶, 威廉C 莫耶 申請人:摩托羅拉公司