国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

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

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

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

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