两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

用于在執(zhí)行被轉(zhuǎn)換指令時維持環(huán)境的方法和裝置的制作方法

文檔序號:6650337閱讀:182來源:國知局
專利名稱:用于在執(zhí)行被轉(zhuǎn)換指令時維持環(huán)境的方法和裝置的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及計算機系統(tǒng),尤其涉及用于改善微處理器在執(zhí)行程序過程中的性能的方法,所述程序是從為不同處理器執(zhí)行而設計的程序轉(zhuǎn)換而來。
背景技術(shù)
最近,開發(fā)了一種新的微處理器,它將一個簡單但快速的主機處理器(被稱作“變體主機(morph host)”)和軟件(被稱作“代碼變體軟件(code morphingsoftware)”)組合起來,以便執(zhí)行為目標處理器設計的應用程序,該目標處理器具有與變體主機處理器不同的指令集。變體主機處理器執(zhí)行代碼變體軟件,該軟件將目標應用程序動態(tài)地轉(zhuǎn)換成能夠?qū)崿F(xiàn)目標應用程序的目的主機處理器指令。當指令被轉(zhuǎn)換時,它們被存儲在一個轉(zhuǎn)換緩沖器中,在那里,它們可以被存取而無須進一步轉(zhuǎn)換。雖然程序初步轉(zhuǎn)換緩慢,但是,一旦被轉(zhuǎn)換,硬件執(zhí)行程序通常所需的其中的許多步驟就被取消了。新的微處理器已經(jīng)證明,被設計成擴展很少功率的一個簡單的快速處理器能夠以等同于“目標”處理器(程序為它而設計)速率的速率來執(zhí)行被轉(zhuǎn)換的“目標”指令。
使轉(zhuǎn)換問題復雜化的是各種中斷和例外,它們由目標計算機及其操作系統(tǒng)的硬件執(zhí)行,以便計算機系統(tǒng)進行操作。當在目標計算機的操作過程中采用目標例外時,通常必須通過調(diào)用一個微代碼序列以實現(xiàn)操作來保存例外時間的計算機狀態(tài),必須檢索正確的例外處理程序,必須處理例外,然后必須發(fā)現(xiàn)程序中的正確點,用于讀取程序。這經(jīng)常要求程序回復到例外發(fā)生點處的目標計算機狀態(tài)。實行這些操作的目標計算機的硬件和軟件所提供的各種結(jié)果必須以某種方式由轉(zhuǎn)換程序提供,以便變體主機處理器能夠正確地響應于這些例外。
為了能夠以快速的速率運行為其他處理器設計的程序,變體主機處理器包括許多硬件改進。這些改進中的一個改進是門控存儲緩沖器,它臨時存儲由執(zhí)行轉(zhuǎn)換緩沖器中的指令的被轉(zhuǎn)換序列產(chǎn)生的內(nèi)存存儲。第二項改進是一組主機寄存器(除了正常工作的寄存器以外),它們存儲任何序列的正在被轉(zhuǎn)換的目標指令開始時目標處理器的狀態(tài)。目標指令序列被轉(zhuǎn)換成主機指令并被加以執(zhí)行。這些序列在目標狀態(tài)已知的點處開始和結(jié)束。如果被轉(zhuǎn)換指令的執(zhí)行沒有出現(xiàn)一個例外,則由執(zhí)行被轉(zhuǎn)換主機指令生成的內(nèi)存存儲通過一個提交指令被存儲在存儲器中(被記住);保持目標狀態(tài)的寄存器被更新到完成序列的點處的目標狀態(tài)。
但是,如果在執(zhí)行該序列的主機指令時發(fā)生一個例外,則處理停止;整個操作可能被返回到該序列的目標指令的開始(其處存有目標處理器的已知狀態(tài))。這允許動態(tài)轉(zhuǎn)換和執(zhí)行指令時所導致的例外進行迅速、準確的處理。
將注意到,所用的方法是由新的微處理器處理轉(zhuǎn)換的執(zhí)行,它通過保持由臨時存儲器中的執(zhí)行所生成的效果,直到轉(zhuǎn)換的執(zhí)行被完成,是一種推測性的迅速而有效的方法。實質(zhì)上,新的微處理器使用相同的電路,用于推測其他操作的結(jié)果。例如,通過由軟件調(diào)度程序從自然轉(zhuǎn)換的指令重新排序后執(zhí)行,而臨時保存的指令的執(zhí)行結(jié)果,可以實現(xiàn)比原先的技術(shù)嘗試更有進取性的重新排序。當執(zhí)行這種重排序列的指令以產(chǎn)生一個正確的結(jié)果時,由執(zhí)行重排序序列產(chǎn)生的內(nèi)存存儲可以被記住,目標狀態(tài)可以被更新。如果重排序序列在執(zhí)行時生成一個例外,那么,處理器的狀態(tài)可以被返回序列開始時的目標狀態(tài)并在執(zhí)行序列的過程中采用一種更保守的方法。
新的微處理器最有利的特點之一是其鏈接長序列的被轉(zhuǎn)換指令的能力。一旦短序列的目標指令已被轉(zhuǎn)換并被發(fā)現(xiàn)無例外地執(zhí)行,就可以鏈接大量這些短序列,以便形成長序列的指令。這允許按高速度執(zhí)行一個轉(zhuǎn)換程序,因為微處理器不需要經(jīng)歷通常由硬件處理器采取的所有步驟(例如,查找每個較短的轉(zhuǎn)換序列)來執(zhí)行指令。甚至可以達到比預期可能更高的速度,因為一旦長序列被鏈接,優(yōu)化器就可以經(jīng)常取消來自長序列的許多步驟,而不改變產(chǎn)生的結(jié)果。硬件優(yōu)化器從未能優(yōu)化足夠長的各個序列的指令,以便允許顯著優(yōu)化模式能變得顯而易見。
無論處理器何時正在執(zhí)行指令,它都在按具有各種特征的某種特殊的模式運行。必須按正確的模式來執(zhí)行一項應用的指令,以便始終如一地產(chǎn)生正確的結(jié)果。模式的這些特征有效地成為指令的背景,可以被認為是指令的一部分。當處理器執(zhí)行指令時,那些指令中的某些指令可以改變操作的特征和模式。這要求微處理器的許多特征有不同的設置,以便處理這些不同的模式。機器狀態(tài)的特征通常是指指令在其中執(zhí)行的環(huán)境(context),這些特征必須被正確設置,以便指令提供正確的結(jié)果。環(huán)境可以被說成是機器當前狀態(tài)的概括,它是從指令執(zhí)行產(chǎn)生正確結(jié)果所需的。
在為具有第一指令集的目標處理器設計的各個序列的指令轉(zhuǎn)換成一個不同指令集的一系列主機指令的過程中,新的微處理器面臨的一個主要問題是由需要維持轉(zhuǎn)換和運行時的環(huán)境所引起。
有種種不同的事物,它們可構(gòu)成執(zhí)行一個程序中的環(huán)境。只列舉可構(gòu)成環(huán)境的許多因素中的一些因素就可展示該問題有多復雜。精通該技術(shù)領(lǐng)域的人將理解,差不多有成百上千個環(huán)境的可能項目。
許多微處理器被設計成操作具有8位、16位和32位字長(取決于使用的操作系統(tǒng)的能力)的指令的應用程序。相同的指令經(jīng)常被用于利用不同字長的指令來書寫應用。但是,如果微處理器嘗試執(zhí)行16位指令,而它的特征被設置用來執(zhí)行32位指令,則這些指令也許將不會正確執(zhí)行。這樣,指令字長可以被認為是出于執(zhí)行目的的目標處理器環(huán)境。
另一個例子是,指令按不同層次的許可來執(zhí)行。這樣,一些指令只能由具有最高層次存取的人來執(zhí)行;其他指令可以由處于較低層次和較高層次的用戶來執(zhí)行。當執(zhí)行轉(zhuǎn)換指令時,有必要維持相同的存取層次,以便應用不會干涉不相關(guān)的應用的資源。
基于因特爾X86的處理器允許應用指定代碼和數(shù)據(jù)的各個部分(段)被存儲在存儲器中。例如,程序可以指定基地址和程序段的長度,以便一個代碼段在一個基地址開始并連續(xù)通過一定數(shù)量的內(nèi)存,而一個數(shù)據(jù)段在一個不同的基地址開始并包括不同數(shù)量的內(nèi)存?;蛘?,程序可以指定一個單一的扁平段,用于存儲程序所有的指令、數(shù)據(jù)和其他因素。此外,一個程序的所有段可以在相同的基地址開始,但運行到不同的結(jié)束地址。所以,正在被使用的基地址的布置對于執(zhí)行指令而言是一個非常重要的特征。為不同用戶分配的各個內(nèi)存區(qū)域的混亂也許會妨礙程序執(zhí)行指令具有正確的結(jié)果。這樣,這就可能是環(huán)境的一個重要因素。
如果一項應用被設計成執(zhí)行調(diào)頁啟動,則該應用必須慮及可能發(fā)生的調(diào)頁例外。如果一項應用被設計為調(diào)頁關(guān)閉,則不會發(fā)生調(diào)頁例外。因此,調(diào)頁可能是環(huán)境的一個重要的因素。
有許多其他的特征,無論指令何時被執(zhí)行,這些特征必須與將指令匯編成指令時相同,以便產(chǎn)生正確的結(jié)果。利用復雜的指令集(例如,因特爾X86處理器所用的指令集),構(gòu)成環(huán)境的特征的數(shù)量非常大。
如同目標處理器的指令執(zhí)行一樣,當那些轉(zhuǎn)換指令被執(zhí)行時,有必要使從目標指令轉(zhuǎn)換來的主機指令維持原來處理器的環(huán)境,目標指令正是為該處理器而被設計,以便由主機系統(tǒng)產(chǎn)生相同的結(jié)果。由于環(huán)境的那些項目可能由指令而引起不同的結(jié)果,需要從轉(zhuǎn)換到執(zhí)行過程中維持環(huán)境,這似乎要求環(huán)境的差不多成百上千個因素都要成為各個轉(zhuǎn)換的一部分,以便確保所產(chǎn)生的結(jié)果是正確的。
何時執(zhí)行處理器上的指令以產(chǎn)生正確的結(jié)果很關(guān)鍵,同時還需要能盡快地執(zhí)行指令。通常通過產(chǎn)生盡可能有效地運行的代碼,來實現(xiàn)這一點。環(huán)境或機器狀態(tài)恰好控制如何可以使代碼有效。有許多機器狀態(tài)的特征(指令在其中執(zhí)行)影響轉(zhuǎn)換和執(zhí)行的效率并可以使指令更快地運行或?qū)?zhí)行產(chǎn)生某種其他所需的影響。在所有情況下,重要的是,在目標微處理器上以一種特殊的模式使被執(zhí)行的指令在一種環(huán)境中被加以執(zhí)行,該環(huán)境具有被設置成在主機系統(tǒng)中以相同模式執(zhí)行指令的特征。此外,重要的是,當執(zhí)行那個被優(yōu)化的代碼時,要維持執(zhí)行目標代碼的優(yōu)化轉(zhuǎn)換的轉(zhuǎn)換環(huán)境。
所以,需要提供這樣的裝置和方法,通過它們,執(zhí)行為目標處理器(具有不同指令集)設計的指令轉(zhuǎn)換而來的指令的微處理器可以維持目標處理器的環(huán)境,以便轉(zhuǎn)換指令的執(zhí)行提供正確的結(jié)果。
同樣需要通過動態(tài)轉(zhuǎn)換而保證的速度和由新的微處理器實行的優(yōu)化被維持在一個過程中,該過程確保在與原來設計的環(huán)境相同的環(huán)境中執(zhí)行轉(zhuǎn)換。

發(fā)明內(nèi)容
所以,本發(fā)明的一個目的是確保轉(zhuǎn)換指令在與它們被原來轉(zhuǎn)換的環(huán)境相同的轉(zhuǎn)換環(huán)境中被加以執(zhí)行,只要有可能,就這樣做,而不減慢被轉(zhuǎn)換指令的執(zhí)行。
本發(fā)明的這個目的和其他的目的通過這樣一種方法來實現(xiàn),該方法維持轉(zhuǎn)換指令的每個部分的轉(zhuǎn)換環(huán)境,將其中只要轉(zhuǎn)換指令的一個新部分要被執(zhí)行時變體主機就起作用的的轉(zhuǎn)換環(huán)境與轉(zhuǎn)換指令所述部分的轉(zhuǎn)換處的轉(zhuǎn)換環(huán)境進行比較,如果轉(zhuǎn)換環(huán)境相同,則允許執(zhí)行;如果轉(zhuǎn)換環(huán)境不同,則強迫搜索一個不同的轉(zhuǎn)換或原始指令的重新轉(zhuǎn)換,從中導出被轉(zhuǎn)換指令的所述部分。
通過參考以下結(jié)合附圖的詳細描述,將更好地理解本發(fā)明的這些和其他的目的和特征。在附圖中,類似的因素在幾幅視圖中有類似的名稱。
附圖簡述

圖1是說明根據(jù)本發(fā)明的一種方法的流程圖。
圖2展示了執(zhí)行一個特定指令所必需的各個步驟。
圖3是展示實施本發(fā)明的一種方法的流程圖。
圖4是展示本發(fā)明的方法的一個部分的流程圖。
圖5是展示本發(fā)明的方法的另一個部分的流程圖。
圖6是展示根據(jù)本發(fā)明的環(huán)境表述圖。
具體實施例方式
如以上詳細描述的內(nèi)容,新的微處理器執(zhí)行將目標指令序列轉(zhuǎn)換成主機指令序列的代碼變體軟件,將那些轉(zhuǎn)換指令序列存儲在一個轉(zhuǎn)換緩沖器中用于再用,嘗試執(zhí)行那些轉(zhuǎn)換指令序列,當轉(zhuǎn)換序列執(zhí)行以產(chǎn)生一個正確的結(jié)果時更新狀態(tài)和內(nèi)存,當轉(zhuǎn)換指令序列沒有通過執(zhí)行以產(chǎn)生一個正確結(jié)果時,放棄轉(zhuǎn)換指令序列的嘗試執(zhí)行的效果。所存儲的轉(zhuǎn)換指令序列可以被優(yōu)化,并經(jīng)常被互相鏈接,以產(chǎn)生長序列的轉(zhuǎn)換指令。這些長序列可以被進一步優(yōu)化,以減小它們的長度并提高它們的執(zhí)行效率,以便新的處理器執(zhí)行操作的速度經(jīng)??梢源蟠蟮乜煊谠嫁D(zhuǎn)換。
為了使一系列轉(zhuǎn)換指令產(chǎn)生由原始目標指令產(chǎn)生的結(jié)果,新的處理器必須正確地為每個目的指令解碼。這意味著新的處理器必須確保轉(zhuǎn)換指令包括原來指令的所有環(huán)境,以便那些原來的指令的意思被完全轉(zhuǎn)換。例如,轉(zhuǎn)換必須包括確定定義段類型、其基地址和范圍的信息,以便可以執(zhí)行適當?shù)膬?nèi)存存取。轉(zhuǎn)換必須能夠確定調(diào)頁在執(zhí)行期間是否被啟動以便知道地址怎樣被計算,以及頁面例外是否應該被接受。轉(zhuǎn)換必須能夠確定環(huán)境的所有其他因素,這些因素允許目標序列實現(xiàn)結(jié)果,當轉(zhuǎn)換序列由主機處理器執(zhí)行時,它從該目標序列被轉(zhuǎn)換并被實現(xiàn)。
例如,X86處理器的一個指令(例如以下所示)add$eax,4($ebp);命令X86處理器將4加到“ebp”寄存器中的值中,以確定一個段偏移。核查這個段偏移,以確定它是否位于正在被存取的內(nèi)存段(堆棧段)的段界限內(nèi)。此外,X86處理器核查指令是否被允許讀和/或?qū)懻诒淮嫒〉膬?nèi)存段;最后,段偏移被加到段基地址,以產(chǎn)生一個線性地址,它又被用來確定由指令存取的內(nèi)存位置的物理地址。然后,該物理地址被用來取出存儲在內(nèi)存位置中的值和將內(nèi)存值加到“eax”寄存器中的值中。
但是,除了指令的這些因素以外,有大量的隱含因素。例如,這里“ebp”寄存器的使用意味著堆棧段的使用。一個不同寄存器的使用可能意味著一個不同段的使用。
X86段會“增大”或“減小”。堆棧段經(jīng)常減小,而其他的段通常則增大。一個段偏移對于一個特定段是否有效的確定取決于正在被存取的段是增大還是減小。對于一個增大段而言,有效偏移的范圍從0到段界限。對于一個減小段而言,有效偏移的范圍從段界限到16位段的最大的可能偏移(216-1)和32位段的(232-1)。
當線性地址已被計算時,確定是否可以使用調(diào)頁。如果不可以,則線性地址是內(nèi)存數(shù)據(jù)的物理地址;如果可以使用調(diào)頁,則物理地址必須被加以計算。在任何一種情況下,內(nèi)存段的界限必須被測試,以確定地址是否合法;最后,數(shù)據(jù)被存取并被加到eax寄存器中的值中。
這樣,關(guān)于這個簡單的指令,ebp寄存器是一個堆棧寄存器的知識、存儲器中堆棧的基地址、取決于段是增大還是減小的段的有效偏移的范圍、是否可以使用調(diào)用、正在被尋址的內(nèi)存段的類型。它的基地址是構(gòu)成環(huán)境的所有特征。當轉(zhuǎn)換指令被執(zhí)行時,必須了解這些特征,以便能夠適當?shù)貓?zhí)行操作。
實際上,當解釋程序執(zhí)行一項目標指令時,它必須執(zhí)行所有這些隱含的(即背景)步驟和檢查,以便正確地執(zhí)行指令。隱含的步驟和檢查必須以潛在的大代價被加以明確的執(zhí)行。將目標指令自然地轉(zhuǎn)換成主機指令也將是如此。
精通該技術(shù)領(lǐng)域的人將理解,指令可以改變環(huán)境,在此環(huán)境中,指令通過改變構(gòu)成一種操作模式的特征中的一個特征來加以執(zhí)行。所以,新的處理器必須跟蹤指令,并確保當目標指令改變環(huán)境(轉(zhuǎn)換指令序列將在其中執(zhí)行)時環(huán)境的因素在轉(zhuǎn)換序列內(nèi)變化。這樣,當轉(zhuǎn)換序列完成執(zhí)行時,將為新的處理器正確地表現(xiàn)轉(zhuǎn)換序列的環(huán)境。
轉(zhuǎn)換指令的每個序列不僅應該包括可以用于確定構(gòu)成環(huán)境的所有必要特征的信息,只要轉(zhuǎn)換指令的任何序列被正確執(zhí)行和接下來的一個序列將要被執(zhí)行,新的處理器就應該確保它目前正在其中操作的環(huán)境是正確執(zhí)行下一個序列的開始所需的環(huán)境。這樣,新的處理器應該測試存在于轉(zhuǎn)換指令的第一序列的末端的環(huán)境,以確保它等同于在可以開始執(zhí)行下一個序列之前轉(zhuǎn)換指令的下一個序列所需的環(huán)境。同樣,為了將兩個序列的轉(zhuǎn)換指令鏈接起來成為一個單一的序列,新的處理器應該確定第一序列在其中完成執(zhí)行的環(huán)境與序列(它將被鏈接到該序列)將在其中開始執(zhí)行的環(huán)境相同。
將會看到,需要包括轉(zhuǎn)換指令的每個序列中的環(huán)境的所有因素,并需要在開始執(zhí)行之前檢查每個新序列的環(huán)境,這些并不產(chǎn)生有效的代碼。
本發(fā)明克服了這些問題并產(chǎn)生以一個速率有效地執(zhí)行代碼,該速率對目標處理器執(zhí)行相同代碼的速率提出了挑戰(zhàn)。本發(fā)明依靠局域性的特性,以便生成執(zhí)行更加有效的代碼。
尤其是,在多數(shù)情況下,處理器在任何過程或程序中執(zhí)行的指令趨向于被執(zhí)行不只一次,或利用其他指令被執(zhí)行大部分的時間。這產(chǎn)生的效果是使環(huán)境從指令的一個序列到下一個序列是類似的或相同的。例如,環(huán)境的許多因素取決于正在被存取的特殊的內(nèi)存段;一個段基地址和范圍、段是否增大或減小、段是否可寫還是只能被讀取是取決于正在被存取的段的所有因素。如果段從一個序列到下一個序列是相同的,則這些因素是相同的。在多數(shù)情況下,被用于第一序列的內(nèi)存段與被用于下一個序列的段相同。環(huán)境的其他因素也顯示了局域性的特征。局域性的屬性允許本發(fā)明假設環(huán)境從一個序列到另一個序列將是相同的。
環(huán)境相同的假設使新的處理器能夠轉(zhuǎn)換一系列指令,來表現(xiàn)轉(zhuǎn)換的環(huán)境,以便以某種方式作為一個不變量適當?shù)貓?zhí)行。然后,處理器只核查表現(xiàn),以確定整個環(huán)境是相同的,而不是逐步通過確定轉(zhuǎn)換的環(huán)境正確所需的每項測試。如果是相同的,則可以執(zhí)行轉(zhuǎn)換序列。如果不相同,則處理器尋找符合標準的另一種轉(zhuǎn)換。如果沒有發(fā)現(xiàn)什么,則必須生成一項新的轉(zhuǎn)換。圖1以流程圖展示了一般方法。
將會看見,使用局域性屬性允許系列轉(zhuǎn)換指令由于某些指令而減少,那些指令由正在被作為不變量的環(huán)境因素隱含。圖2展示了一系列操作,它們代表解釋程序執(zhí)行上述增加功能的各個步驟所必需的步驟。如所見內(nèi)容,那些步驟中至少有10個步驟被環(huán)境要求插入序列,以確保執(zhí)行操作,來提供作為增加功能的相同的結(jié)果。被標記有一個星號的那些操作可以從指令序列中被除去,并用某種方式被表現(xiàn)在轉(zhuǎn)換序列的開端處。例如,可能是兩種狀態(tài)中的這個狀態(tài)或另一個狀態(tài)的環(huán)境的因素可能都由環(huán)境的第一種表示(例如,四分之一字)的某個指定位置中的單個位代表,而具有更大數(shù)量的狀態(tài)的特征可能需要四分之一字的一些其他指定位置中的更大數(shù)量的位。
圖3是流程圖,展示了當完成第一序列的轉(zhuǎn)換指令的執(zhí)行和開始下一個序列時新的處理器的操作。所展示的第一步驟是對下一個序列指令的環(huán)境的一項測試。新的處理器觀察其目前的環(huán)境(第一序列完成時機器正在操作的環(huán)境)表示,并將那個環(huán)境與下一個序列的環(huán)境的表述進行比較。如果環(huán)境完全相同,則下一個序列的轉(zhuǎn)換指令作為先前序列在相同的環(huán)境中被加以執(zhí)行。這取消了較早序列中所需的所有步驟,以便確定環(huán)境是否正確。新的處理器假設符合每個條件并相應地執(zhí)行以下步驟,而不是執(zhí)行由星號標記的圖2中的各個步驟。
如果整個環(huán)境不相同,則不執(zhí)行下一個序列的指令。而是新的處理器搜索符合下一個序列標準的另一個序列的轉(zhuǎn)換指令。通常,這將是相同序列的目標指令的另一個轉(zhuǎn)換,但是,該目標指令具有的環(huán)境表示與上次執(zhí)行的序列的環(huán)境表示相同。這種序列可能不存在。如果是這樣,新的處理器執(zhí)行代碼變體軟件,以便創(chuàng)建這種轉(zhuǎn)換并將該轉(zhuǎn)換存儲在具有其環(huán)境表示的轉(zhuǎn)換緩沖器中,用于進一步使用。
為了確保一系列被轉(zhuǎn)換指令在其中執(zhí)行的環(huán)境是正確的,代碼變體軟件有必要跟蹤環(huán)境的可預知變化,并且當發(fā)生任何變化時,有必要將環(huán)境的表述改變成正確的表示。在這種方式下,當實現(xiàn)下一個序列的環(huán)境測試時,主機處理器目前正在執(zhí)行的環(huán)境將被正確地表示。
代碼變體軟件檢測不可預見地改變環(huán)境的一個指令,這也是很重要的。例如,如果一個指令加載一個新的段寄存器,那么,可能隨段而變化的所有標準可能會改變。在加載段寄存器之后,實際上有一種新的環(huán)境;新的環(huán)境應該被用于執(zhí)行來自該序列中的那個點上的指令。取決于環(huán)境的被影響部分的任何后續(xù)指令(例如,存取被加載的段寄存器的任何指令)不能被執(zhí)行,而沒有證實新的環(huán)境是合適的。代碼變體軟件可以終止兩個點之間的任何點處的轉(zhuǎn)換,和/或安排環(huán)境在它被修改的點與后來指令取決于更新值的點之間被加以證實。
由于通過將不同的轉(zhuǎn)換序列鏈接起來而使得執(zhí)行被明顯地加速,以便它們作為一個單一較長序列而運行,因此,使用鏈接程序是非常合乎需要的。將會理解,當兩個序列將被鏈接時,有必要使較長序列的每個部分正確地執(zhí)行。所以,有必要使環(huán)境適合較長序列的每個部分,以便正確地執(zhí)行。通過利用使用第二個轉(zhuǎn)換序列的地址而將第一轉(zhuǎn)換序列與第二個轉(zhuǎn)換序列鏈接,可以在本發(fā)明的一個實施例中實現(xiàn)這一點。在新的處理器中,該地址通常保留在一個程序控制單元中。當一個序列將被鏈接到另一個序列時,第一序列通過指向程序控制中的地址來結(jié)束。當?shù)诙€序列被輸入時,轉(zhuǎn)換核查環(huán)境的表述,以確保它與第二個序列所需的環(huán)境相同。
根據(jù)每個鏈接序列的第二個序列所需的環(huán)境表示來測試主機的環(huán)境,這需要一些操作周期。所以,如圖4中所示,本發(fā)明的一個更高級的實施例將環(huán)境測試從轉(zhuǎn)換中除去,并將它放在原來的鏈接程序。也就是說,當首先確定兩個序列將被鏈接時,通過比較第一序列和第二個序列的環(huán)境表示,來比較第一序列結(jié)束時它正在其中執(zhí)行的環(huán)境和第二個序列在其中開始執(zhí)行的環(huán)境。如果環(huán)境表示相同,則可以實現(xiàn)鏈接。此后,當執(zhí)行較長的序列時,不再一定要測試兩個序列被鏈接的點處的環(huán)境。第一序列的末端指向第二個序列的地址,就可以實現(xiàn)鏈接。通過只是在原來鏈接的時間核查環(huán)境,而不是每次執(zhí)行鏈接序列都核查環(huán)境,來加速指令執(zhí)行。
以同樣的方式,無論何時進行對轉(zhuǎn)換的搜索,一個實施例會既尋找一個特定轉(zhuǎn)換和一個特定環(huán)境。這樣,如圖5中所示,機器操作環(huán)境到所需轉(zhuǎn)換環(huán)境的核查完全從轉(zhuǎn)換序列中除去,并被置于代碼變體軟件的調(diào)度功能中。只要需要下一個轉(zhuǎn)換或?qū)⒁獙崿F(xiàn)一個被提議的鏈接,通過在轉(zhuǎn)換緩沖器中搜索一個正確的轉(zhuǎn)換和一個正確的環(huán)境,調(diào)度功能本質(zhì)上尋找下一個序列的轉(zhuǎn)換指令來執(zhí)行。
本發(fā)明提供進一步提高執(zhí)行指令的速度的延伸。由本發(fā)明提供的一項延伸允許當一個指令不可預見地改變環(huán)境時發(fā)生鏈接。該操作允許鏈接到由程序控制器保留的地址,然后根據(jù)目前的環(huán)境來測試新環(huán)境。如果環(huán)境的表述相同,則可以后續(xù)鏈接。
另一項延伸(也在圖5中示出)取決于新的轉(zhuǎn)換序列不一定總要具有與目前環(huán)境(主機正在其中執(zhí)行)相同的環(huán)境,以便產(chǎn)生正確的結(jié)果。一些轉(zhuǎn)換序列取決于環(huán)境的很少因素或環(huán)境(而不是主機正在其中執(zhí)行的環(huán)境)的限制因素。只要存在正確執(zhí)行待執(zhí)行序列所必需的環(huán)境,這些序列就可以被執(zhí)行并被鏈接到前面的序列。通過比較待執(zhí)行的轉(zhuǎn)換序列的環(huán)境表示和主機的目前環(huán)境的表述以便確定不同環(huán)境的那些因素,可以對此進行測試。然后,回顧不同的因素,以便確定它們對于待執(zhí)行的序列而言是否必要,如果必要的話,則不同之處是它們在待執(zhí)行的序列中的限制性是否較少。如果環(huán)境因素不需要或限制性較少,則可以執(zhí)行或鏈接該序列。
如圖6所示,表述環(huán)境的方式可以在很寬的范圍內(nèi)變化。例如,如果被連接在一起的所有環(huán)境因素占據(jù)的位與機器寄存器中的位的數(shù)量差不多(例如,32或64位),則環(huán)境可以由這種串聯(lián)來表示;通過執(zhí)行有關(guān)表示的簡單的位操作(例如,“異或(XOR)”和“與(AND)”),可以容易地實現(xiàn)這些測試?;蛘?,當環(huán)境中的因素的數(shù)量和尺寸超過寄存器中的位的數(shù)量時,環(huán)境因素可以被存儲在存儲器中的一個數(shù)據(jù)結(jié)構(gòu)中;并且,進入數(shù)據(jù)結(jié)構(gòu)的指針可以被用于為精確的環(huán)境匹配進行比較。然后,指針是環(huán)境的表述。取決于環(huán)境的單獨因素的更多的有關(guān)比較(不是精確的匹配)將必須存取存儲器中的數(shù)據(jù)結(jié)構(gòu)。
表示環(huán)境的另一種方法是這兩種技術(shù)的混合物??梢灾苯颖硎疽恍┮蛩兀渌蛩貏t被存儲在存儲器中。表示的余項是到存儲器中的數(shù)據(jù)結(jié)構(gòu)的一個指針/索引。精確的比較又是直接了當?shù)模Q于因素的比較則將會更加復雜。
雖然本發(fā)明已根據(jù)一個較佳實施例被描述過,但是,將理解,在不脫離本發(fā)明的精神和范圍的前提下,精通該技術(shù)領(lǐng)域的人可以進行各種修改和變化。所以,本發(fā)明應該根據(jù)以下的權(quán)利要求來加以衡量。
權(quán)利要求
1.一種方法,其特征在于該方法包括維持轉(zhuǎn)換指令的每個部分的轉(zhuǎn)換環(huán)境;將其中只要將要執(zhí)行轉(zhuǎn)換指令的新部分就運行變體(morph)主機處理器的轉(zhuǎn)換環(huán)境與該部分轉(zhuǎn)換處的轉(zhuǎn)換環(huán)境進行比較;如果正確執(zhí)行新部分所必需的轉(zhuǎn)換環(huán)境相同,就允許執(zhí)行;以及如果正確執(zhí)行新部分所必需的轉(zhuǎn)換環(huán)境不同,則強迫搜索一個不同的轉(zhuǎn)換。
2.如權(quán)利要求1所述的的方法,該方法包括維持轉(zhuǎn)換指令的每個部分的轉(zhuǎn)換環(huán)境,其中,如果正確執(zhí)行該新部分所必需的轉(zhuǎn)換環(huán)境不同則強迫搜索一個不同的轉(zhuǎn)換,這包括重新轉(zhuǎn)換原始指令,從中導出轉(zhuǎn)換指令的部分。
全文摘要
一種方法(圖1),用于維持從為目標微處理器設計的指令轉(zhuǎn)換而得到的指令的轉(zhuǎn)換環(huán)境,以便在主機微處理器上運行,包括存儲與每個轉(zhuǎn)換主機指令有關(guān)的轉(zhuǎn)換環(huán)境;指示目前正在由主機處理器執(zhí)行的主機指令的轉(zhuǎn)換環(huán)境;將為下一條主機指令存儲的轉(zhuǎn)換環(huán)境與目前正在被執(zhí)行的主機指令的轉(zhuǎn)換環(huán)境進行比較(圖2);如果下一條主機指令的轉(zhuǎn)換環(huán)境和目前執(zhí)行的主機指令相同,則執(zhí)行下一條主機指令;以及如果下一條主機指令的轉(zhuǎn)換環(huán)境和目前執(zhí)行的主機指令不相同,則搜索(圖2)具有這樣轉(zhuǎn)換環(huán)境的一個指令,它相比于目前執(zhí)行的主機指令的轉(zhuǎn)換環(huán)境。
文檔編號G06F9/45GK1862495SQ20051011888
公開日2006年11月15日 申請日期2000年9月6日 優(yōu)先權(quán)日1999年10月13日
發(fā)明者D·凱培爾, R·克邁利克, R·貝迪切克 申請人:全斯美達有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
宁乡县| 雅安市| 宣化县| 和田县| 宁德市| 克拉玛依市| 长治市| 桑植县| 镇坪县| 巩留县| 康乐县| 新竹市| 阿克陶县| 章丘市| 高密市| 钟山县| 桂林市| 新野县| 京山县| 乌兰浩特市| 封丘县| 宜章县| 综艺| 松潘县| 北辰区| 余干县| 泽普县| 麻栗坡县| 濮阳县| 建水县| 石首市| 运城市| 安顺市| 南投市| 广宗县| 虞城县| 炎陵县| 大渡口区| 南和县| 顺昌县| 广东省|