国产精品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>

      二進制程序轉(zhuǎn)換設備,轉(zhuǎn)換方法和程序記錄媒體的制作方法

      文檔序號:6412470閱讀:216來源:國知局
      專利名稱:二進制程序轉(zhuǎn)換設備,轉(zhuǎn)換方法和程序記錄媒體的制作方法
      技術(shù)領(lǐng)域
      本發(fā)明涉及一種二進制程序轉(zhuǎn)換設備和方法,用于將原始二進制程序轉(zhuǎn)換成新的、在電腦上運行更快的二進制程序。此外,本發(fā)明涉及一種程序記錄媒體,它帶有一種使一臺計算機象二進制轉(zhuǎn)換設備那樣發(fā)揮作用的程序。
      為了改善計算機系統(tǒng)的性能,很多年來人們付出許多努力去加速主存儲器。然而,高速緩沖存儲器的發(fā)展已經(jīng)能夠不用加速主存儲器而改善計算機系統(tǒng)的性能。
      高速緩沖存儲器是一種位于主存儲器和CPU之間的小型快速存儲器。在一個帶有高速緩沖存儲器的計算機系統(tǒng)中,當CPU需要一個字(一條指令或數(shù)據(jù))時,先檢查所需要的字是否在高速緩沖存儲器中存在。如果所需要的字在高速緩沖存儲器中存在,這個在高速緩沖存儲器中的字被送入CPU。另一方面,如果所需要的字在高速緩沖存儲器中不存在,則一個固定尺寸的、包含所需要的詞的數(shù)據(jù)塊,稱為一個塊或行,被從主存儲器中取回,并放置在該高速緩沖存儲器中。然后,在高速緩沖存儲器中的、包含在該數(shù)據(jù)(行)中的所需要的字被送入CPU。
      這就是說,程序傾向于重新使用它們最近使用過的指令和數(shù)據(jù),并傾向于使用在一個較短時間內(nèi)、其地址彼此接近的字。(注意前一特性和后一特性分別被稱為參考時間局部性和參考空間局部性。)換句話說,CPU在最近的將來執(zhí)行某一程序時所需要的、在主存儲器中的字可以有一定程度的提前。
      既然高速緩沖存儲器存儲這樣的字,則帶有該高速緩沖存儲器的計算機中的CPU可以以不是相對于主存儲器的存取速度而是相對于高速緩沖存儲器的存取速度的速度得到為執(zhí)行某個程序所需要的大多數(shù)詞語。結(jié)果,帶有一個高速緩沖存儲器的計算機的運行速度與不帶高速緩沖存儲器而帶有高速主存儲器的系統(tǒng)的速度相同。
      此外,既然帶高速緩沖存儲器的計算機只需要小容量的高速存儲器,所以使用高速緩沖存儲器降低了制造一臺具有一定性能的計算機的成本。因而,近年來的大多數(shù)計算機都提供有高速緩沖存儲器。
      再者,近年來個人電腦的普及大大降低了存儲器設備的價格。結(jié)果,為改善計算機的性能而修改某個程序(軟件)使主存儲器的利用率得以提高就變得不是很重要。因為,在一臺為了發(fā)揮大容量的主存儲器的作用而安裝有許多價格便宜的存儲器設備的計算機中,主存儲器的利用率非常高,以致于沒有影響運行速度。
      因此,通過修改某個程序以提高計算機的性能,更有效的方法就是修改程序使高速緩沖存儲器的利用率得以提高。也就是說,改進程序的訪問局部性,最大限度地發(fā)揮高速緩沖存儲器的性能變得更加重要。
      到目前為止,要改進某臺計算機中高速緩沖存儲器的利用率,需通過為該計算機開發(fā)的編譯器來編譯源程序。也就是說,要利用這個重編譯技術(shù),每個程序用戶不僅必須保留二進制程序,這是實際中使用的程序,而且要保留它們的源程序。
      此外,由于計算機硬件的進步非常迅速,相應于一個新的計算機結(jié)構(gòu)而開發(fā)新的編譯器需要時間,很可能在該編譯器的開發(fā)完成以前,更新的硬件就已開發(fā)出來。也就是說,通過傳統(tǒng)重編譯技術(shù)方法的對應并不能趕上硬件的進步,這是一個問題。
      出于這些原因,人們希望有一種程序轉(zhuǎn)換技術(shù),它能不使用其源程序,將某個程序轉(zhuǎn)換成適合目標計算機的新程序。
      本發(fā)明的一個目的在于提供一種二進制程序轉(zhuǎn)換設備和一種二進制程序轉(zhuǎn)換方法,它能將原始二進制程序轉(zhuǎn)換成另外一種無需使用該原始二進制程序的源程序的、在計算機中以高速運行的二進制程序。
      本發(fā)明的另一個目的在于提供一種程序記錄媒體,它帶有一種使一臺計算機象二進制轉(zhuǎn)換設備那樣發(fā)揮作用的程序。
      根據(jù)本發(fā)明的第一個方面的一種二進制程序轉(zhuǎn)換設備,用于將包含一組第一指令塊的某個第一二進制程序轉(zhuǎn)換成在一臺具有高速緩沖存儲器的計算機中執(zhí)行的一個第二二進制程序。
      該二進制程序轉(zhuǎn)換設備包括一個執(zhí)行部分,一個生成部分和一個制作部分。該執(zhí)行部分執(zhí)行該第一二進制程序。
      該生成部分生成用于指示由該執(zhí)行部分執(zhí)行的第一指令塊的執(zhí)行塊信息。
      該制作部分根據(jù)由該生成部分生成的執(zhí)行塊信息,制作第二二進制程序,它包含相應于該組第一指令塊的第二指令塊,并且當在計算機中執(zhí)行時,使計算機將相應于由該執(zhí)行部分執(zhí)行的第一指令塊的第二指令塊,存儲在該高速緩沖存儲器的不同位置。
      由此,第一個方面的二進制程序轉(zhuǎn)換設備將某個二進制程序(第一二進制程序),通過執(zhí)行包括重排二進制代碼(執(zhí)行塊)的過程,轉(zhuǎn)換成在帶有高速緩沖存儲器的計算機中快速運行的、新的二進制程序(第二二進制程序)。所以,根據(jù)這個二進制程序轉(zhuǎn)換設備,可以無需使用(管理)其源程序而得到適合帶有高速緩沖存儲器的計算機的二進制程序。
      根據(jù)第一個方面的該二進制程序轉(zhuǎn)換設備的實現(xiàn)涉及到該制作部分的使用,它制作第二二進制程序,包括相應于由該執(zhí)行部分執(zhí)行的第一指令塊的第二指令塊是連續(xù)布置的一個部分。
      根據(jù)本發(fā)明的第一個方面的該二進制程序轉(zhuǎn)換設備還包括一個建立部分和一個控制部分。該建立部分建立一個行數(shù)據(jù),用于指示當由該制作部分制作的第二二進制程序在計算機中被執(zhí)行時,將要被使用的高速緩沖存儲器的行。
      該控制部分控制該執(zhí)行部分,以執(zhí)行一個最初包含一組第三指令塊的第三二進制程序。然后,該控制部分控制該生成部分,以生成用于指示由該執(zhí)行部分執(zhí)行的第三指令塊的第二執(zhí)行塊信息。此外,該控制部分還控制該制作部分,以制作一個第四二進制程序,當在計算機中被執(zhí)行時,它使計算機將相應于由該執(zhí)行部分執(zhí)行的第三指令塊的第四指令塊存儲在除該行數(shù)據(jù)所指示的行之外的、該高速緩沖存儲器的行的不同位置上。
      根據(jù)所構(gòu)造的二進制轉(zhuǎn)換設備,在同一時刻執(zhí)行的兩個二進制程序(第一,第三二進制程序),可以被轉(zhuǎn)換成以高速在計算機中運行的、兩個新的二進制程序(第二,第四二進制程序)。
      該二進制程序轉(zhuǎn)換設備還包括一個識別部分,用于通過監(jiān)控由該執(zhí)行部分執(zhí)行的第一二進制程序的運行狀態(tài),識別該高速緩沖存儲器的每行的數(shù)據(jù)存取的使用頻率,以及選擇部分,它基于該識別部分的識別結(jié)果,從該高速緩沖存儲器的所有行中選出用于存儲相應于由該執(zhí)行部分執(zhí)行的第一指令塊的第二指令塊的行。在這種情況下,采用該制作部分,它制作第二二進制程序,當在計算機中被執(zhí)行時,該程序使計算機將相應于由該執(zhí)行部分執(zhí)行的第一指令塊的第二指令塊存儲在由該選擇部分所選出的行的不同位置上。
      根據(jù)所構(gòu)造的二進制轉(zhuǎn)換設備,可以得到在一個指令存取和一個數(shù)據(jù)存取之間不產(chǎn)生或幾乎不產(chǎn)生沖突錯誤的一個新的二進制程序(第二二進制程序)。
      此外,當使用該制作部分制作,包括相應于由該執(zhí)行部分執(zhí)行的第一指令塊的第二指令塊是連續(xù)布置的一個部分的第二二進制程序時,該二進制程序轉(zhuǎn)換設備可以通過增加一個搜索部分和一個改變部分而構(gòu)造。
      該搜索部分從由該制作部分制作的二進制程序中搜索一個在其結(jié)尾包含一個其分支目的地被設置為下一個第二指令塊的、條件分支指令的第二指令塊。該改變部分改變一個分支條件和該條件分支指令的分支目的地,從而無需分支,產(chǎn)生從該搜索部分搜索出的第二指令塊到下一個第二指令塊的轉(zhuǎn)移。
      根據(jù)所構(gòu)造的二進制轉(zhuǎn)換設備,可以得到以高速運行的一個新的二進制程序(第二二進制程序)。
      根據(jù)本發(fā)明的第二個方面的二進制程序轉(zhuǎn)換設備,用于將一個第一二進制程序轉(zhuǎn)換成一個在計算機中被執(zhí)行的第二二進制程序。
      根據(jù)第二個方面的二進制程序轉(zhuǎn)換設備包括一個搜索部分和一個制作部分。該搜索部分用于從該第一二進制程序中搜索第一指令字符串,每一個這種字符串至少包括一個預定的指令代碼。該制作部分用于,通過以指定給該第一指令字符串的第二指令字符串替代由該搜索部分搜索出的相應指令字符串,制作該第二二進制程序。
      由此,第二個方面的二進制程序轉(zhuǎn)換設備將一個原始的二進制程序(第一二進制程序),通過替換該原始二進制程序中的指令字符串,轉(zhuǎn)換成一個在目標計算機中快速運行的、新的二進制程序(第二二進制程序)。所以,根據(jù)這個二進制程序轉(zhuǎn)換設備,可以無需使用(管理)其源程序而得到適合目標計算機的二進制程序。
      請注意,本發(fā)明的二進制程序轉(zhuǎn)換設備可以通過運行一個記錄在一臺普通計算機的程序媒體中的相應程序而實現(xiàn)。
      根據(jù)本發(fā)明的第一個方面的二進制程序轉(zhuǎn)換方法,用于將一個包括一組第一指令塊的第一二進制程序轉(zhuǎn)換成一個由帶有高速緩沖存儲器的計算機執(zhí)行的第二二進制程序。
      根據(jù)第一個方面的二進制程序轉(zhuǎn)換方法包括一個執(zhí)行步驟,一個生成步驟和一個制作步驟。在該執(zhí)行步驟中,該第一二進制程序被執(zhí)行。在該生成步驟中,生成用于指示在該執(zhí)行步驟中所執(zhí)行的第一指令塊的執(zhí)行塊信息。在該制作步驟中,基于在該生成步驟中生成的執(zhí)行塊信息,產(chǎn)生第二二進制程序,它包含相應于第一二進制程序的該組第一指令塊的第二指令塊,并且,當在計算機中被執(zhí)行時,使計算機將相應于在該執(zhí)行步驟中所執(zhí)行的第一指令塊的第二指令塊存儲在高速緩沖存儲器的不同位置上。
      根據(jù)第一個方面的二進制程序轉(zhuǎn)換方法可以采用制作步驟,它涉及制作包括相應于由該執(zhí)行步驟中執(zhí)行的第一指令塊的第二指令塊是連續(xù)布置的一個部分的第二二進制程序。
      對該程序轉(zhuǎn)換方法增加一個建立步驟和一個控制步驟也是切實可行的。該建立步驟包括建立一個行數(shù)據(jù),用于指示當在該制作步驟中所制作的第二二進制程序在計算機中被執(zhí)行時,該高速緩沖存儲器的行的一個過程。該控制步驟包括控制該執(zhí)行步驟,以執(zhí)行一個包含一組第三指令塊的第三二進制程序,和控制該生成步驟,以生成用于指示在該執(zhí)行步驟中所執(zhí)行的第三指令塊的第二執(zhí)行塊信息,以及控制該制作步驟,以基于該第二執(zhí)行塊信息和該行數(shù)據(jù),制作一個第四二進制程序,它包含相應于該組第三指令塊的第四指令塊,并且當在計算機中被執(zhí)行時,使計算機在除該行數(shù)據(jù)所指示的行之外的、該高速緩沖存儲器的行的不同位置上存儲相應于由該所述方法所執(zhí)行的第三指令塊的第四指令塊的過程。
      對根據(jù)本發(fā)明的第一個方面的二進制程序轉(zhuǎn)換方法,增加一個識別步驟和一個選擇步驟也是可以的。
      該識別步驟包括通過監(jiān)控由該執(zhí)行步驟中所執(zhí)行的第一二進制程序的運行狀態(tài),識別該高速緩沖存儲器的每行的數(shù)據(jù)存取使用的頻率的過程。該選擇步驟包括,基于該識別步驟的識別結(jié)果,從該高速緩沖存儲器的所有行中選出用于存儲第二指令塊的行的過程。順便說及,在這種情況下,也采用了制作步驟,包括制作第二二進制程序,當在計算機中被執(zhí)行時,該程序使計算機在該選擇步驟所選出的行的不同位置上存儲相應于由該執(zhí)行步驟所執(zhí)行的第一指令塊的第二指令塊。
      當采用該制作步驟,包括制作相應于由該執(zhí)行步驟所執(zhí)行的第一指令塊的第二指令塊是連續(xù)布置的一個部分的第二二進制程序的過程時,對該二進制程序轉(zhuǎn)換方法最好增加一個搜索步驟和一個改變步驟。
      該搜索步驟包括搜索一個在其結(jié)尾包含一個其分支目的地被設置為下一個第二指令塊的、條件分支指令的第二指令塊的過程。該改變步驟包括改變一個分支條件和該條件分支指令的分支目的地,從而無需分支,產(chǎn)生從該搜索步驟中所搜索出的第二指令塊到下一個第二指令塊的轉(zhuǎn)移的過程。
      根據(jù)本發(fā)明的第二個方面二進制程序轉(zhuǎn)換方法,用于將一個第一二進制程序轉(zhuǎn)換成一個在計算機中被執(zhí)行的第二二進制程序。該二進制程序轉(zhuǎn)換方法包括一個搜索步驟和一個制作步驟。
      該搜索步驟包括從該第一二進制程序中搜索第一指令字符串的過程,每一個這種字符串至少包括一個預定的指令代碼。該制作步驟通過以指定給該第一指令字符串的第二指令字符串替代由該搜索步驟搜索出的相應指令字符串,制作該第二二進制程序。
      在以下結(jié)合附圖的討論中,本發(fā)明的其它目的和優(yōu)點會變得非常明顯。其中;附

      圖1是說明圖,描述了本發(fā)明的實施例中的二進制程序轉(zhuǎn)換設備的構(gòu)造;附圖2顯示了由在該實施例的二進制程序轉(zhuǎn)換設備中的記錄分析器所生成的文本表的說明圖;附圖3顯示由該記錄分析器生成的數(shù)據(jù)使用行表的說明圖;附圖4顯示由該二進制程序轉(zhuǎn)換設備中的一個高速緩存分配器生成的行表的說明圖;附圖5顯示由該二進制程序轉(zhuǎn)換設備轉(zhuǎn)換的一個二進制程序的說明圖;附圖6顯示該二進制程序轉(zhuǎn)換設備的運行過程的原理的說明附圖7顯示該二進制程序轉(zhuǎn)換設備在轉(zhuǎn)換同時執(zhí)行的兩個二進制程序的運行過程中的前半部分的說明圖;附圖8顯示該二進制程序轉(zhuǎn)換設備在轉(zhuǎn)換同時執(zhí)行的兩個二進制程序的運行過程中的后半部分的說明圖;附圖9是流程圖,顯示該高速緩存分配器的運行過程;附圖10是流程圖,顯示該二進制程序轉(zhuǎn)換設備中一個目標代碼轉(zhuǎn)換程序的整體運行過程;附圖11是由該目標代碼轉(zhuǎn)換器實施的塊拷貝過程的流程圖;附圖12是由該目標代碼轉(zhuǎn)換器實施的拷貝過程的流程圖;附圖13是由該目標代碼轉(zhuǎn)換器實施的分支條件逆過程的流程圖;附圖14是由該目標代碼轉(zhuǎn)換器實施的CTI再定位過程的流程圖;附圖15是由該目標代碼轉(zhuǎn)換器實施的分支件預測過程的流程圖;附圖16是由該目標代碼轉(zhuǎn)換器實施的再定位過程的流程圖;附圖17顯示該二進制程序轉(zhuǎn)換設備在轉(zhuǎn)換同時執(zhí)行的兩個二進制程序的運行過程中的原理的說明圖;附圖18顯示當兩個可執(zhí)行的目標程序被該二進制程序轉(zhuǎn)換設備生成時,該高速緩沖存儲器是如何被使用的的說明圖;附圖19至26是用于描述該二進制程序轉(zhuǎn)換設備的運行過程的部分程序列表;附圖27A,27B顯示在轉(zhuǎn)換前后執(zhí)行的二進制程序時,該高速緩沖存儲器是如何被使用的說明圖。
      現(xiàn)在結(jié)合附圖對本發(fā)明進行描述。
      在一個實施例中的該二進制程序轉(zhuǎn)換設備將某個二進制程序轉(zhuǎn)換成在一臺帶有高速緩沖存儲器的目標計算機中以高速運行的另一個二進制程序。將某個存儲在象CD-ROM這樣的記錄媒體中的程序安裝到該目標計算機,即可實現(xiàn)該二進制程序轉(zhuǎn)換設備的功能。
      因此,在討論該二進制程序轉(zhuǎn)換設備的運行過程之前,先描述該實施例中所使用的計算機的構(gòu)造和結(jié)構(gòu)。
      該計算機帶有1MB的、劃分成行的高速緩沖存儲器,每行由連續(xù)的64個字節(jié)組成。即,該高速緩沖存儲器有16384(=1MB/64字節(jié))行。這16384行分別用從0到16383的行數(shù)進行管理。
      此外,該實施例中的計算機也被虛擬存儲器所支持。也就是說,來自CPU的虛擬地址被翻譯成實際地址,用于存取主存儲器或高速緩沖存儲器。
      在該計算機中,當CPU需要一個字節(jié)的指令/數(shù)據(jù)時,它先檢查該指令/數(shù)據(jù)是否存在于高速緩沖存儲器中。如果該指令/數(shù)據(jù)在高速緩沖存儲器中不存在,則包含該指令/數(shù)據(jù)的主存儲器中的64字節(jié)的數(shù)據(jù)從主存儲器被取回,并被放置在高速緩沖存儲器中。然后,包含在高速緩沖存儲器的該取回數(shù)據(jù)中的該指令/數(shù)據(jù)被送入CPU。
      存儲包含該指令/數(shù)據(jù)的取回數(shù)據(jù)的行由所需要的指令/數(shù)據(jù)的虛擬地址而唯一地決定。實際上,由該高速緩沖存儲器的尺寸所劃分的虛擬地址的余數(shù)被用作存儲該取回數(shù)據(jù)的行的索引。
      以下,假定該計算機具有上述的構(gòu)造和結(jié)構(gòu),來描述該實施例中二進制程序轉(zhuǎn)換設備的運行。請注意,在以下的討論中,編譯過的源程序(或源代碼)表示成目標程序,存儲目標程序的文件表示成目標文件。通過連接一個和多個目標程序而得到的可在計算機中執(zhí)行的程序表示成可執(zhí)行的目標程序。此外,二進制程序一般將被用作目標程序和可執(zhí)行的目標程序。
      首先,通過給出一個可執(zhí)行的目標程序被轉(zhuǎn)換的例子來描述該二進制程序轉(zhuǎn)換設備的運行過程的輪廓。
      如上所述,將為該二進制程序轉(zhuǎn)換設備開發(fā)的二進制程序轉(zhuǎn)換程序安裝到計算機上即可實現(xiàn)該二進制程序轉(zhuǎn)換設備的功能。當運行所安裝的二進制程序轉(zhuǎn)換程序時,計算機開始運行由一個連接編輯器11,一個簡表生成器12,一個記錄分析器13,一個高速緩存分配器14和一個目標代碼轉(zhuǎn)換器15組成的二進制程序轉(zhuǎn)換設備,如附圖1所示。
      連接編輯器11將一個與該高速緩沖存儲器有相同大小(在該實施例中為1MB)的高速緩沖塊區(qū)域(以下簡稱CaB區(qū))增加到待轉(zhuǎn)換的一個可執(zhí)行的目標程序。實際上,連接編輯器11連接一個偽函數(shù)以保證帶有待轉(zhuǎn)換的可執(zhí)行目標程序的該CaB區(qū)(以下將詳細描述),從而生成另一個可執(zhí)行的目標程序。連接編輯器11還在該可執(zhí)行的目標程序中存儲有再定位信息(地址常量),已完成該目標代碼轉(zhuǎn)換器15的完全的再定位。請注意,在以下的描述中,由連接編輯器11生成的該可執(zhí)行的目標程序中除CaB區(qū)以外的一個區(qū)域?qū)⒈槐硎境蒑TXT區(qū)。
      簡表生成器12跟蹤(執(zhí)行)在其中CaB區(qū)被保證的該可執(zhí)行的目標程序,并生成一個包含有關(guān)所執(zhí)行的指令代碼的信息的執(zhí)行簡表。
      記錄分析器13分析由簡表生成器12生成的執(zhí)行簡表,并生成一個文本表和一個數(shù)據(jù)使用行表。該文本表是一張記錄了為轉(zhuǎn)換該可執(zhí)行的目標程序所需的信息的表。實際上,它所保持的記錄,每一個都由10項所構(gòu)成,如附圖2所示。數(shù)據(jù)使用行表所保持的記錄,每一個都由高速緩沖行數(shù)(“LINE”)和被該高速緩沖行數(shù)所決定,該行用于存儲數(shù)據(jù)的次數(shù)(“USE”)組成,如附圖3所示。
      高速緩存分配器14基于由記錄分析器13所生成的文本表中的信息,識別由簡表生成器11所執(zhí)行的MTXT區(qū)中存儲所有的指令塊所必需的一個容量(大小)。然后,高速緩存分配器14確定L,它是為保持所執(zhí)行的指令塊所需的最小高速緩沖行數(shù),并基于數(shù)據(jù)使用行表中的信息、選擇、具有最低數(shù)據(jù)存取使用頻率的第一L行。再后,高速緩存分配器14將所選出的行分成若干組,每一組均由連續(xù)的行構(gòu)成,并且生成一個包含用以指示所分類的組的信息的行表。實際上,高速緩沖分配器14生成一個包含記錄的行表,每項記錄都包括開始行號(“FROM”),結(jié)尾行號(“TO”),和由連續(xù)行組成的一個區(qū)域的行數(shù),如附圖4所示。
      請注意,當存儲所有所執(zhí)行的指令塊所需的尺寸大于該高速緩沖存儲器的尺寸時,高速緩存分配器14執(zhí)行與上述過程不同的過程。以下將詳細描述該過程。
      在行表生成后,目標代碼轉(zhuǎn)換器15開始轉(zhuǎn)換可執(zhí)行的目標程序的過程。
      在轉(zhuǎn)換可執(zhí)行的目標程序的過程中,目標代碼轉(zhuǎn)換器15將簡表生成器12所執(zhí)行的指令塊拷貝到與高速緩存分配器14基于該文本表和行表中的信息所選出的高速緩沖行相應的、該CaB區(qū)范圍內(nèi)的區(qū)域中。然后,目標代碼轉(zhuǎn)換器15在其拷貝是在該CaB區(qū)中完成的每個指令塊的開始位置上寫下一個無條件分支指令,使轉(zhuǎn)移到CaB區(qū)中該拷貝的起始位置源。此外,目標代碼轉(zhuǎn)換器改變CTIs(控制轉(zhuǎn)移指令,分支,調(diào)用,jmpl等等)的目標偏移/地址。也就是說,目標代碼轉(zhuǎn)換器14修改目標程序使CaB區(qū)中該拷貝被執(zhí)行。
      由此生成的可執(zhí)行的目標程序的運行速度要比轉(zhuǎn)換前的可執(zhí)行的目標程序更快。原因如下。
      例如,假定讓該二進制程序轉(zhuǎn)換設備轉(zhuǎn)換一個包含三個在某個運行條件下執(zhí)行的指令塊a,b和c的可執(zhí)行的目標程序。還假定指令塊a和b存在于與高速緩沖存儲器中的相同的行相應的位置上,如附圖5所示。
      在這種情況下,該二進制程序轉(zhuǎn)換設備,如附圖6所示,拷貝該CaB區(qū)中的指令塊a,b和c,從而生成一個新的、其CaB區(qū)中的指令塊被執(zhí)行的可執(zhí)行的目標程序。也就是說,該二進制程序轉(zhuǎn)換設備生成其指令塊a,b和c將被存儲在該高速緩沖存儲器中不同行上的可執(zhí)行的目標程序。
      隨后,當運行由該二進制程序轉(zhuǎn)換設備生成的可執(zhí)行的目標程序時,不會發(fā)生由于指令存取之間的沖突而在該高速緩沖存儲器中錯過的情況。結(jié)果,所轉(zhuǎn)換的可執(zhí)行的目標程序的運行速度要比原始的可執(zhí)行的目標程序更快。
      以下,通過給出兩個在同一時刻被執(zhí)行的可執(zhí)行的目標程序A和B被轉(zhuǎn)換的例子來更詳細地描述該二進制程序轉(zhuǎn)換設備的運行過程。
      在這種情況下,如附圖7所示,連接編輯器連接偽函數(shù)以保證帶有可執(zhí)行的目標程序A和B的CaB區(qū),從而生成可執(zhí)行的目標程序A′和B′,A′和B′中每個程序都有一個CaB區(qū)。此時,要完成目標轉(zhuǎn)換器再定位,連接編輯器將再定位信息(地址常量)存儲在每個可執(zhí)行的目標程序中。
      然后,簡表生成器單獨或同時跟蹤該可執(zhí)行的目標程序A′和B′,并生成一個包含有關(guān)所執(zhí)行的指令代碼的信息的一個執(zhí)行簡表。
      在生成執(zhí)行簡表后,如附圖8所示,記錄分析器生成文本表A和B,并基于該執(zhí)行記錄中的信息生成數(shù)據(jù)使用行表A和B。
      此后,基于文本表A和B中的信息,高速緩沖分配器確定該可執(zhí)行程序的目標程序A′和B′中所執(zhí)行的指令塊的整體尺寸(大小)。然后,如果整體尺寸小于高速緩沖存儲器的尺寸(CaB區(qū);本實施例中的1MB),則高速緩沖分配器選出高速緩沖行以用于基于數(shù)據(jù)使用行表A和B中的信息保持全部執(zhí)行指令塊。再后,它將由所選出的高速緩沖行組成的區(qū)域劃分成連續(xù)行區(qū)域,并生成一個包含一個或多個用于指示一個連續(xù)行區(qū)域的記錄的行表。
      反之,如果該執(zhí)行指令塊的整體尺寸大于高速緩沖存儲器的尺寸,該高速緩存分配器生成一個具有一個記錄的行表,該記錄由開始行號,結(jié)尾行號,和不用選出高速緩沖行的該高速緩沖存儲器的行數(shù)組成。此外,該高速緩存分配器從所有執(zhí)行的指令塊中選出將要拷貝到CaB區(qū)的指令塊,并改變文本表A和B的內(nèi)容以將選擇結(jié)果通知目標代碼轉(zhuǎn)換器。
      實際上,如附圖9所示,高速緩存分配器首先確定SUMtot,即由該簡表生成器基于所有文本表中的信息執(zhí)行的指令塊的尺寸的總額(步驟100)。然后,高速緩沖分配器判斷SUMtot>CZ是否滿足(步驟101)。這里,CZ是高速緩沖存儲器的尺寸。
      當SUMtot>CZ滿足時(步驟101T),高速緩存分配器確定一個SUM(X)>CZ得以滿足的最大值X,并將X存儲為MAXRUN(步驟102)。這里,SUM(X)是該指令塊至少被執(zhí)行X次的尺寸的總額。請注意,高速緩存分配器確定MAXRUN如下。高速緩存分配器首先從所有文本表中取回有關(guān)指令塊的記錄。其次,它使用RUN作為關(guān)鍵詞,按降序?qū)λ』氐挠涗涍M行排序,從而,通過對該排序記錄的第一批記錄的SZ的值求和,SUM(X)可以得到計算。然后,高速緩存分配器減少X的值計算SUM(X),并將第一次滿足不等式SUM(X)>CZ的X的值存儲為MAXRUN。
      確定MAXRUN之后,高速緩存分配器將記錄中有關(guān)指令塊的RUN的值,它等于或小于MAXRUN,改變?yōu)椤?”(步驟103)。然后,高速緩存分配器生成包含一個記錄,該記錄由開始行號,結(jié)尾行號,和該高速緩沖存儲器的行數(shù)組成,的一個行表(步驟104)。即,高速緩沖分配器生成包含一個記錄的行表,其中FROM,TO,和LINE的值分別設為0,16383,和16384。生成該行表之后,高速緩存分配器終止附圖所示的過程。
      另一方面,當SUMtot>CZ沒有滿足時(步驟101F),高速緩存分配器確定為保持由簡表生成器基于高速緩存組成信息(行尺寸)和SUMtot而執(zhí)行的所有指令塊所必需的行數(shù),L(步驟105)。然后,高速緩沖分配器使用USE作為關(guān)鍵詞對所有數(shù)據(jù)使用行表中的記錄按升序進行排序,以選出具有最低USE的第一批L記錄(步驟106)。
      在L記錄選出后,高速緩沖分配器使用行數(shù)(LINE)作為關(guān)鍵詞對記錄按升序進行排序,并將排過序的記錄分成若干組,每一組都由一個和多個具有連續(xù)行數(shù)的記錄組成。然后,它確定開始行號,結(jié)尾行號,和由每組記錄指示的連續(xù)行區(qū)域的行數(shù)(步驟107)。
      以后,高速緩存分配器生成一個行表(見附圖4),其中每組記錄都由開始行號,結(jié)尾行號,和按行號的降序放置的一個連續(xù)行區(qū)域的行數(shù)(步驟108),并終止該過程。
      在行表生成后,目標代碼轉(zhuǎn)換器開始轉(zhuǎn)換可執(zhí)行的目標程序A′和B′的過程。
      如附圖8所示,當轉(zhuǎn)換屬于待轉(zhuǎn)換的第一個程序的可執(zhí)行的目標程序A′時,目標代碼轉(zhuǎn)換器使用文本表A′和行表。另一方面,當轉(zhuǎn)換待轉(zhuǎn)換的第二個程序的可執(zhí)行的目標程序B′時,目標代碼轉(zhuǎn)換器使用文本表B′,行表和一個在對可執(zhí)行的目標程序A′的轉(zhuǎn)換過程中生成的行記錄A。
      以下,結(jié)合附圖10至16描述由目標代碼轉(zhuǎn)換器所執(zhí)行的轉(zhuǎn)換過程的細節(jié)。
      當開始轉(zhuǎn)換過程時,如附圖10所示,目標轉(zhuǎn)換器首先判斷待處理的可執(zhí)行的目標程序是否是要轉(zhuǎn)換的第一個程序(步驟110)。當目標程序是第一個程序時(步驟110T),目標代碼轉(zhuǎn)換器相繼執(zhí)行一個塊拷貝過程(步驟112),一個CTI再定位過程(步驟113),和一個地址常量再定位過程(步驟114)。
      附圖11顯示目標代碼轉(zhuǎn)換器在塊拷貝過程中的運行步驟。當開始塊拷貝過程時,目標代碼轉(zhuǎn)換器針對文本表中的一個指令塊選出一個記錄,并判斷RUN(Si)≥1是否滿足(步驟120)。這里,Si代表與所選記錄相關(guān)的一個指令塊,RUN(Si)代表在所選記錄中的RUN值(指令塊被執(zhí)行的次數(shù))。
      當RUN(Si)≥1沒有滿足時(步驟120F),目標代碼轉(zhuǎn)換器判斷是否已完成對所有指令塊的處理(步驟127)。當對所有指令塊的處理沒有完成時(步驟127F),目標代碼轉(zhuǎn)換器返回步驟120,并開始對下一個指令塊的處理。
      當RUN(Si)≥1滿足時(步驟120T),為了將MTXT區(qū)域中的指令塊Si拷貝到CaB區(qū),目標代碼轉(zhuǎn)換器指令一個拷貝過程。
      附圖12顯示目標代碼轉(zhuǎn)換器在拷貝過程中的運行步驟。當開始拷貝過程時,目標代碼轉(zhuǎn)換器首先基于行表中的信息和高速緩存組成信息,確定一個拷貝目標地址,從該地址,指令塊Si將要被拷貝(步驟130)。然后,目標代碼轉(zhuǎn)換器判斷指令塊Si是否能被布置在包括該拷貝目標地址的CaB區(qū)域內(nèi)的一個連續(xù)區(qū)域上,并且與行表中一個記錄所指示的連續(xù)行區(qū)域相對應(步驟131)。當指令塊Si可以被布置在連續(xù)區(qū)域中時(步驟131T),目標代碼轉(zhuǎn)換器將指令塊Si拷貝到該連續(xù)區(qū)域中(步驟132),并終止拷貝過程。
      當指令塊Si不能被布置在連續(xù)區(qū)域中時(步驟131F),目標代碼轉(zhuǎn)換器將指令塊Si劃分成若干塊,并將所劃分的塊拷貝到若干連續(xù)區(qū)域(步驟133)。在這一步驟中,當拷貝除最后一個劃分塊以外的每一劃分塊時,目標代碼轉(zhuǎn)換器在其中拷貝有所劃分的塊的連續(xù)區(qū)域的結(jié)尾位置寫入一個無條件分支,該無條件分支使轉(zhuǎn)移到下一個將被用于保持下一個劃分塊的連續(xù)區(qū)域。然后,它終止拷貝過程。
      拷貝過程完成之后,目標代碼轉(zhuǎn)換器,如附圖11所示,在MTXT區(qū)域中指令塊Si的開始位置寫入一個無條件分支指令,它使轉(zhuǎn)移到CaB區(qū)域中的指令塊Si(步驟122)。
      隨后,目標代碼轉(zhuǎn)換器確定將要被拷貝到CaB區(qū)域的指令塊Sj,并計算MADDR(Sj),它是指令塊Sj的開始地址(步驟123)。然后,目標代碼轉(zhuǎn)換器判斷一個分支指令Ci是否被包括在塊Si中(步驟124)。
      當沒有分支指令包括在指令塊Si中時(步驟124F),目標代碼轉(zhuǎn)換器判斷MADDR(Sj)!=MADDR(Si)+SZ(Si)是否滿足(步驟128)。這里,SZ(Si)是指令塊Si的尺寸。當MADDR(Sj)?。組ADDR(Si)+SZ(Si)滿足時(步驟128T),目標代碼轉(zhuǎn)換器在緊臨CaB區(qū)域中的拷貝指令塊Si的位置寫入一個無條件分支指令,它使轉(zhuǎn)移到地址“MADDR(Si)+SZ(Si)”(步驟129),并進行步驟127。另一方面,當MADDR(Sj)?。組ADDR(Si)+SZ(Si)不滿足時,也就是說,MADDR(Sj)=MADDR(Si)+SZ(Si)滿足時(步驟128F),目標代碼轉(zhuǎn)換器不寫入無條件分支指令就進行步驟127。
      當一個分支指令Ci包括在指令塊Si中時(步驟124T),目標代碼轉(zhuǎn)換器判斷MADDR(Sj)=TADDR(Ci)是否滿足(步驟125)。這里,TADDR(Ci)是分支指令Ci的目標地址(分支地址)。當MADDR(Sj)=TADDR(Ci)滿足時(步驟125T),目標代碼轉(zhuǎn)換器執(zhí)行一個分支條件反轉(zhuǎn)過程(步驟126)。
      以下結(jié)合附圖13描述目標代碼轉(zhuǎn)換器在分支條件逆過程中的運行步驟。請注意,進行這一過程的理由將在以后描述。
      當開始分支條件逆過程時,目標代碼轉(zhuǎn)換器首先判斷分支指令Ci是否是一個取消的分支指令(步驟140)。該取消的分支指令(延遲無效分支指令)是一個當該分支被采用時指導CPU執(zhí)行其后續(xù)指令(延遲指令),以及當該分支不被采用時不執(zhí)行后續(xù)指令的分支指令。
      當分支指令Ci不是一個取消的分支指令時(步驟140F),目標代碼轉(zhuǎn)換器反轉(zhuǎn)該分支Ci的分支條件(步驟143)。另一方面,當分支指令Ci是一個取消的分支指令時(步驟140T),目標代碼轉(zhuǎn)換器反轉(zhuǎn)該分支Ci的分支條件,并去除該取消的限制(步驟141)。然后,目標代碼轉(zhuǎn)換器在該分支指令和該延遲指令之間插入一個指令“nop”(指導CPU進行無效運行的指令)(步驟142)。
      也就是說,在原始程序中的該取消的分支指令是一條僅當某個條件滿足時,使CPU執(zhí)行一個延遲指令的指令。但是,只要該取消的分支指令的分支條件被反轉(zhuǎn),該反轉(zhuǎn)指令使CPU僅當某個條件不滿足時執(zhí)行該延遲指令。由此,目標代碼轉(zhuǎn)換器去除該取消的限制,增加“nop”指令,從而生成指令代碼的組合,使CPU僅當某個條件滿足時執(zhí)行該“delay”指令。
      在執(zhí)行步驟142或步驟143后,目標代碼轉(zhuǎn)換器判斷其分支條件被反轉(zhuǎn)的分支指令是否是一個“bn”(步驟144)。這里,“bn”(永不發(fā)生的分支)是一個永遠不引起一個分支的分支指令,并且刪除該“bn”會導致任何問題。由此,當分支指令是一個“bn”時(步驟144T),目標代碼轉(zhuǎn)換器刪除該指令(步驟145)。然后,目標代碼轉(zhuǎn)換器判斷該分支指令的后續(xù)指令是否是一個“nop”(步驟146)。當后續(xù)指令是一個“nop”時(步驟146T),目標代碼轉(zhuǎn)換器刪除該指令(步驟147),并終止分支條件反轉(zhuǎn)過程。
      當所改變的分支指令不是一個“bn”(步驟144F)或者后續(xù)指令不是一個“nop”(步驟146F),目標代碼轉(zhuǎn)換器不刪除任何指令而終止該分支條件反轉(zhuǎn)過程。
      在該分支條件反轉(zhuǎn)過程終止后,目標代碼轉(zhuǎn)換器,如附圖11所示,進行步驟127,并判斷對所有指令塊的處理是否已經(jīng)完成。當對所有指令塊的處理已經(jīng)完成時(步驟127T),目標代碼轉(zhuǎn)換器終止塊拷貝過程,并開始CTI再定位過程。
      附圖14顯示目標代碼轉(zhuǎn)換器在該CTI再定位過程中的運行步驟。
      在該CTI再定位過程中,目標代碼轉(zhuǎn)換器首先選出一個與文本表中的CTI有關(guān)的記錄,并判斷地址TADDR(Ci)處的一個代碼是否已經(jīng)被拷貝到該CaB區(qū)(步驟150)。這里,TADDR(Ci)是與所選記錄有關(guān)的指令Ci的目標地址。
      當TADDR(Ci)處的代碼已經(jīng)被拷貝到該CaB區(qū)時(步驟150T),目標代碼轉(zhuǎn)換器再定位TADDR(Ci)(步驟151),并對MTXT區(qū)域中的指令Ci執(zhí)行一個分支預測過程(以下將描述細節(jié))(步驟152)。然后,目標代碼轉(zhuǎn)換器判斷包含指令Ci的指令塊Si是否已經(jīng)被拷貝到該CaB區(qū)(步驟153)。當指令塊Si已經(jīng)被拷貝到該CaB區(qū)時(步驟153T),目標代碼轉(zhuǎn)換器再定位該CaB區(qū)中指令Ci的拷貝的目標地址(步驟154),并對該CaB區(qū)中的指令Ci執(zhí)行分支預測過程(步驟155)。
      然后,當對所有CTI的處理沒有完成時(步驟156F),目標代碼轉(zhuǎn)換器返回步驟150,并開始處理下一個CTI。另一方面,當對所有CTI的處理完成時(步驟156T),目標代碼轉(zhuǎn)換器生成一個行記錄,它保持了用于指示高速緩沖行的、其中的該指令塊在當所轉(zhuǎn)換的可執(zhí)行的目標程序執(zhí)行時被存儲的信息(步驟157),并終止該CTI再定位過程。
      在該CTI再定位過程終止后,目標代碼轉(zhuǎn)換器,如前所述(見附圖10),執(zhí)行地址常量再定位過程。
      在描述地址常量再定位過程之前,先參考附圖15描述分支預測過程(步驟152,155)。
      當開始分支預測過程時,目標代碼轉(zhuǎn)換器首先判斷目標計算機中的CPU是否支持一個預測性分支指令(步驟160)。請注意,該預測性分支指令是一個具有一個預測位的、來顯示將被采用的分支的可能性是高于或不高于0.5的分支指令。當具有的預測位、顯示該可能性高于0.5的該預測性分支指令“BPcc,pt”給出時,支持該預測性分支指令的CPU預取當該分支被采用時將被執(zhí)行的指令。當具有一個預測位、來顯示該可能性不高于0.5的該預測性分支指令“BPcc,pn”給出時,CPU不預取指令而執(zhí)行該分支指令。
      當CPU支持該預測性分支指令時(步驟160T),目標代碼轉(zhuǎn)換器判斷BT(Ci)/RUN(Ci)>0.5(“分支指令被采用的次數(shù)”/“分支指令被執(zhí)行的次數(shù)”>0.5)是否滿足(步驟161)。當BT(Ci)/RUN(Ci)>0.5滿足時(步驟161T),目標代碼轉(zhuǎn)換器以“BPcc,pt”重寫指令Ci(步驟162),并終止該預測分支過程。另一方面,當BT(Ci)/RUN(Ci)>0.5不滿足時(步驟161F),目標代碼轉(zhuǎn)換器以分支指令“BPcc,pn”重寫Ci(步驟163),并終止該預測分支過程。
      以下參考附圖16描述目標代碼轉(zhuǎn)換器在地址常量再定位過程中的運行步驟。請注意,執(zhí)行地址常量再定位過程是為了防止控制被一個以寄存器為條件的分支指令轉(zhuǎn)移到MTXT區(qū)域中的一個指令。
      當開始地址常量再定位過程時,目標代碼轉(zhuǎn)換器在由連接編輯器存儲在該可執(zhí)行的目標程序中的地址常量中選出一個地址常量,并判斷該所選的地址常量是否指向其拷貝是在CaB上作出的指令塊上的任何位置(步驟170)。當該地址常量指向任何這樣的位置時(步驟170T),目標代碼轉(zhuǎn)換器以一個CaB區(qū)中的相應地址重寫地址常量(步驟171),并進行步驟172。另一方面,當該地址常量不指向任何這樣的位置時(步驟170F),目標代碼轉(zhuǎn)換器不重寫該地址常量而進行步驟172。
      在步驟172中,目標代碼轉(zhuǎn)換器判斷對所有地址常量的處理是否已經(jīng)完成(步驟172)。當對所有地址常量的處理沒有完成時(步驟172F),目標代碼轉(zhuǎn)換器返回步驟170,并開始處理下一個地址常量。
      當識別出對所有地址常量的處理已完成時(步驟172T),目標代碼轉(zhuǎn)換器終止地址常量再定位過程。
      當?shù)刂烦A吭俣ㄎ贿^程終止時,對目標程序A′的轉(zhuǎn)換過程便完成。即,生成了比目標程序A運行更快的目標程序A″。然后,將開始對下一個可執(zhí)行的目標程序B′的轉(zhuǎn)換過程,如附圖8,10所示。
      在這種情況下,由于該目標程序B′不是第一個程序,目標代碼轉(zhuǎn)換器進行步驟111,并刪除有關(guān)將被用于基于在目標程序A′的CTI再定位過程中生成的行記錄A中的信息,保持來自行表的目標程序A″中的指令塊的高速緩沖行的記錄。在更新該行表內(nèi)容之后,目標代碼轉(zhuǎn)換器相繼執(zhí)行塊拷貝過程(步驟112),CTI再定位過程(步驟113),和針對可執(zhí)行的目標程序B′的地址常量再定位過程(步驟114)。
      隨后,如附圖17所示,目標程序B中的該執(zhí)行的指令塊被拷貝到CaB區(qū),所用的方式為,CaB區(qū)中該拷貝的指令塊,當被執(zhí)行時,被存儲到不用于存儲該拷貝的指令塊的目標程序A″中的高速緩沖行中。
      以下,使用附圖19至26所示的程序列表更實際地描述以上討論的二進制程序轉(zhuǎn)換設備的運行步驟。請注意,在以下的討論中,為方便起見,假定該二進制程序轉(zhuǎn)換設備(目標代碼轉(zhuǎn)換器)在執(zhí)行其它過程之前,將所有的執(zhí)行的指令塊拷貝到CaB區(qū)中。每一程序列表中的符號都是基于一種用于某個計算機結(jié)構(gòu)的匯編語言。
      首先,通過給出其列表如附圖19所示的一個可執(zhí)行的目標程序被轉(zhuǎn)換的例子來討論該二進制程序轉(zhuǎn)換設備的基本運行步驟。請注意,列表中指令“seticc”代表一個用于設置稱為條件分支指令的條件代碼的指令。指令“be”(分支相等)是一個當一個相等條件滿足時產(chǎn)生一個分支的指令。“c-.”跟在“be”之后表示該分支目標的偏移值是一個通過從塊c的開始地址減去現(xiàn)有地址(“·”)而得到的值。指令“延遲”是一個與該分支指令同時被執(zhí)行的延遲指令。甚至當該分支被采用時也執(zhí)行該“延遲”。也就是說,在一個分支指令和相應的“延遲”被執(zhí)行時,就執(zhí)行一個分支目標的指令。
      如前所述,當一個程序被轉(zhuǎn)換時,只有由簡表生成器執(zhí)行的指令塊被拷貝到CaB區(qū)。因此,如果附圖19所示的程序中的塊a和b由簡表生成器所執(zhí)行,則該程序被修改為附圖20所示的程序。也就是說,具有指令塊a′和b′的程序,它們是指令塊a和b的拷貝,在CaB區(qū)中被生成。
      然后,執(zhí)行再定位使指令塊a′和b′被執(zhí)行。結(jié)果,附圖20所示的程序被修改為附圖21所示的程序。
      也就是說,一個使轉(zhuǎn)移到CaB區(qū)中的塊a′的無條件分支指令“ba,aa′—·”被設置在MTXT區(qū)中塊a的開始地址(*1)。類似的,一個使轉(zhuǎn)移到塊b′的無條件分支指令“ba,ab′—·”被設置在塊b的開始地址(*2)。請注意,指令“ba,aa′—·”中或“ba,ab′—·”中的“,a”代表該指令是一個使CPU不執(zhí)行其后續(xù)指令的取消分支指令。
      此外,塊a′中分支指令的目標偏移值被重寫,從而使控制轉(zhuǎn)移到MTXT區(qū)中的塊c(*3)。關(guān)于CaB區(qū)中的塊b′,既然緊跟塊b之后的塊c沒有拷貝到CaB區(qū),則無條件分支指令“ba,ac—·”被增加到其末尾(*4)。
      以下,通過給出附圖19所示的程序中塊a和c由簡表生成器所執(zhí)行的一個例子來描述該分支條件反轉(zhuǎn)過程中的運行步驟。
      在這種情況下,附圖19所示的程序被轉(zhuǎn)換成附圖22所示的程序。也就是說,對塊a′和c′的無條件分支指令被設置在MTXT區(qū)中塊a和c中的開始地址(*5,*7)處。此外,由于塊a中的分支指令“be”的分支目標是其拷貝在CaB區(qū)中作出的指令塊c,分支指令的目標偏移值被重寫,從而該分支指令使轉(zhuǎn)移到該指令塊c′(*6)。
      進一步,由于塊b′中的分支指令“be”的目標是其拷貝在CaB區(qū)中和在CaB區(qū)緊接塊b′的位置作出的指令塊c,該指令被分支指令“bne”(分支不相等)替代,其目標偏移值被重寫,從而使一個分支在該分支條件反轉(zhuǎn)過程中導向MTXT區(qū)中的塊b(*8)。
      以下,通過給出將附圖23所示的程序提供給該二進制程序轉(zhuǎn)換設備和由簡表生成器所執(zhí)行的塊a和c的一個例子來描述對一個取消的分支指令的分支條件反轉(zhuǎn)過程中的運行步驟。
      在這種情況下,該二進制程序轉(zhuǎn)換設備生成附圖24所示的程序。也就是說,關(guān)于MTXT區(qū)中的指令塊a和c,類似于程序不包括一個取消的分支指令的情況,增加無條件分支指令和再定位目標偏移值(見附圖22)。
      然后,關(guān)于塊a′中該取消的分支指令“be,ac-.”(圖中未畫出),由于其分支目標(即塊c)被拷貝到緊接塊b′的位置,其分支條件被反轉(zhuǎn),該取消的限制被去除。也就是說,該取消的分支指令“be,a”被未取消的分支指令“bne”所取代。此外,“bne”的目標偏移值被重寫,從而使一個分支轉(zhuǎn)移到向MTXT區(qū)中的塊b(*9)。再者,指令“nop”被插進所修改的分支指令和指令“delay”之間(*10)。
      因此,當所轉(zhuǎn)換的程序是在塊a′中的分支指令“bne b-”產(chǎn)生一個分支的情況下被執(zhí)行時,其后續(xù)指令“nop”被執(zhí)行,但指令“delay”不執(zhí)行。另一方面,當該程序是在分支指令“bne b-”不產(chǎn)生一個分支的情況下被使用時,指令“delay”被執(zhí)行。所以,由該二進制程序轉(zhuǎn)換設備生成的程序按照原始程序的方式控制CPU。
      以下,通過給出將附圖25所示的程序提供給該二進制程序轉(zhuǎn)換設備和程序中塊a和c被簡表生成器所執(zhí)行的一個例子來描述分支預測過程中的運行步驟。請注意,在以下的描述中,假定所執(zhí)行的指令塊中分支指令的BT/RUN值(*11,*12)大于0.5。
      在這種情況下,附圖25所示的程序被轉(zhuǎn)換成附圖26所示的程序。即,首先,對該程序進行,將所執(zhí)行的指令塊拷貝到CaB區(qū),再定位,反轉(zhuǎn)分支指令的分支條件。隨后,所處理的程序中對MTXT區(qū)中具有很高可能性轉(zhuǎn)移的分支指令“be”和“bg”分別被相應的預測分支指令“be,pt”和“bg,pt”所替代(*13,*14)。塊c′中所拷貝的分支指令“bg”也被相應的預測分支指令“bg,pt”所替代(*16)。另一方面,關(guān)于塊a′中所拷貝的分支指令,由于已經(jīng)進行對分支條件的反轉(zhuǎn)處理,則執(zhí)行預測分支指令”bne,pn”的替換(*15)。
      如上的詳細討論,該二進制程序轉(zhuǎn)換設備,當被提供一個或多個目標程序用于轉(zhuǎn)換時,對每個目標程序在該高速緩沖存儲器中的不同位置增加一個將被存儲的CaB區(qū)字,并檢查將被執(zhí)行的指令塊。然后,如果將被執(zhí)行的指令塊的整體尺寸不大于該高速緩沖存儲器的尺寸,它將部分將被執(zhí)行的指令塊拷貝到CaB區(qū),并修改若干指令代碼,從而使該CaB區(qū)的指令塊的拷貝被使用。如果將被執(zhí)行的指令塊的整體尺寸小于該高速緩沖存儲器的尺寸,它將所有將被執(zhí)行的指令塊拷貝到CaB區(qū),從而使該拷貝被存儲在不經(jīng)常用于存儲數(shù)據(jù)的高速緩沖行中,并并修改若干指令代碼,從而使該CaB區(qū)的指令塊的拷貝被使用。
      因此,根據(jù)本二進制程序轉(zhuǎn)換設備,可以得到一個和多個新的目標程序,由于指令存取之間的沖突,它們在將被執(zhí)行的指令塊的整體尺寸大于原始目標程序中該高速緩沖存儲器的尺寸的情況下,比其原始目標程序具有較低的錯誤率。此外,在將被執(zhí)行的指令塊的整體尺寸小于原始目標程序中該高速緩沖存儲器的尺寸的情況下,可以得到由于指令存取之間的沖突不產(chǎn)生錯誤以及由于指令存取和數(shù)據(jù)存取之間的沖突產(chǎn)生更少的錯誤的新的目標程序。
      此外,由于通過將指令塊壓縮到CaB區(qū)來進行轉(zhuǎn)換,由該二進制程序轉(zhuǎn)換設備生成的目標程序與其原始程序相比,只占用極小的高速緩沖存儲器的容量用于存儲不必要的指令塊。換句話說,該二進制程序轉(zhuǎn)換設備生成的目標程序充分有效地利用了高速緩沖存儲器的行。
      例如,根據(jù)本二進制程序轉(zhuǎn)換設備,在附圖27A所示的條件下為高速緩沖存儲器所利用的一個目標程序被轉(zhuǎn)換成在附圖27B所示的條件下為高速緩沖存儲器所利用的一個新的目標程序。
      請注意,在附圖27A和27B中,“l(fā)ine”列中的值代表高速緩沖存儲器的一個行號,“wi”(i=0-15)列中的值代表在相應的高速緩沖行中存取第i個字(4個字節(jié))的次數(shù)?!癮ccess”列中的值代表在相應的高速緩沖行中存取第0個字至第15個字的次數(shù)的總額。“wc”列中的值代表在相應的高速緩沖行中所存取的(所使用的)字數(shù)?!皀”列中的值代表存儲在相應的高速緩沖行中的程序行數(shù)。即,其“n”的值大于1的一個高速緩沖行是一個被另一個程序行替換過幾次(至少一次)的行。
      如附圖27A所示,當在轉(zhuǎn)換前運行目標程序時,會出現(xiàn)幾次一個高速緩沖行被用于保持一個包含許多不必要的字的程序行(見“wc”的值)。
      另一方面,由于該二進制程序轉(zhuǎn)換設備將待執(zhí)行的指令塊壓縮到CaB區(qū),從而生成一個新的目標程序,則當運行該生成的新的目標程序時,每一高速緩沖行都被用于保持一個不包含或幾乎不包含不必要的詞的程序行,如附圖27B所示。事實上,高速緩沖行的字使用率的平均值,如附圖27B所示,是94.4%(15.1個詞/行),而對原始目標程序來說是59.4%(9.5個詞/行)。因此,根據(jù)本二進制程序轉(zhuǎn)換設備可以得到具有很高的字使用率的目標程序。
      請注意,新的目標程序由該二進制程序轉(zhuǎn)換設備生成時,包括在相對于附圖27A所示具有值3698的“l(fā)ine”和15的“wc”的行的(第二行)原始目標程序中程序行中的指令代碼被存儲在其行數(shù)是9742的高速緩沖行的第10個至第15個字中,以及其行數(shù)是9743的高速緩沖行的第0個至第9個字中,包括在相對于第三,第五,第六,第入,第十,第十二,和第十五排的程序行中的指令代碼和被存儲的指令代碼將被存儲在其行數(shù)是9743-9748的高速緩沖行內(nèi),剩余的指令代碼將被存儲在行數(shù)為9742,9728和9729的高速緩沖行中的剩余字(指令代碼不被分配的字)中。
      此外,該二進制程序轉(zhuǎn)換設備修改目標程序,使因采用分支轉(zhuǎn)移控制的頻率變低,并用新的,更合適的指令代碼替換一些指令代碼,這些修改同樣提高了目標程序的速度。
      也就是說,由于一般而言,因采用一個分支,控制轉(zhuǎn)移到較遠的地址要比控制轉(zhuǎn)移到下一個地址需要更長的時間,修改分支指令將提高目標程序的速度。此外,經(jīng)常有這樣的情況,即,一個指令代碼(或一個指令代碼組合)不能被一個目標CPU快速執(zhí)行,但該代碼(或組合)能被另一個CPU快速執(zhí)行。同樣也存在這樣的情況,目標CPU通常有一個可選擇的該代碼的指令代碼。結(jié)果,替換指令代碼也提高了目標程序的速度。
      因此,根據(jù)本實施例中的二進制程序轉(zhuǎn)換設備,因為對原始二進制程序可作出各種優(yōu)化,所以可以很方便地得到在目標計算機中以極高速度運行的新的二進制程序。
      應當注意,這里所討論的二進制轉(zhuǎn)換技術(shù)可以應用于本實施例的計算機之外的各種計算機。
      例如,本實施例中的計算機帶有每行64字節(jié),16384行的高速緩沖存儲器。當然,本技術(shù)也可應用于帶有任意行和尺寸的高速緩沖存儲器的計算機。此外,有些計算機在CPU和主存儲器之間帶有多級(通常為兩級)高速緩沖存儲器。該技術(shù)也可應用于這樣的計算機。
      此外,本實施例中的高速緩沖存儲器是一個存儲數(shù)據(jù)和指令的集成型高速緩沖存儲器,本技術(shù)也可應用于帶有所謂由一個保持數(shù)據(jù)的數(shù)據(jù)高速緩沖,和一個保持指令的指令高速緩沖組成的分離型高速緩沖存儲器的計算機。當將本技術(shù)應用于這樣的計算機時,使用行表的數(shù)據(jù)處理過程可以省略,因為在該分離型高速緩沖存儲器中不會發(fā)生由于一個指令存取和一個數(shù)據(jù)存取之間的沖突而出現(xiàn)錯誤的情況。
      該技術(shù)可應用于帶有成組關(guān)聯(lián)高速緩沖或完全關(guān)聯(lián)高速緩沖的計算機,因為本實施例中的計算機具有直接映象高速緩沖(等同于單路成組關(guān)聯(lián)高速緩沖)。在這類高速緩沖存儲器中,一個放置有包含所需字的高速緩沖行不能由該所需的字的一個地址所決定。但是,一組(一組高速緩沖行)放置有包含所需字的高速緩沖行能由該地址所決定,并且該行被放置在位于該組中并不用于存儲一行的一個高速緩沖行上。
      結(jié)果,關(guān)于這些高速緩沖存儲器,一個將被用于保持該行的高速緩沖行可以基于該所需字的地址而指定。因此,本技術(shù)可以應用于帶有成組關(guān)聯(lián)或完全關(guān)聯(lián)高速緩沖存儲器的計算機。
      事實上,本技術(shù)可以應用于帶有不是虛擬高速緩沖而是使用物理地址進行索引的物理高速緩沖存儲器的計算機。
      簡而言之,該二進制轉(zhuǎn)換技術(shù)可以應用于其中該高速緩沖存儲器中的一個所需字的存儲位置可由其地址猜出的每一種計算機。
      還應當注意,該技術(shù)的一部分可以應用于不帶高速緩沖存儲器的計算機。例如,在分支預測過程中所演示的替代技術(shù),對不帶高速緩沖存儲器的計算機同樣有效。因為,利用本技術(shù),包含不適用于目標計算機的指令代碼的一個原始目標程序,可以被轉(zhuǎn)換成一個新的包含適用于該計算機的指令代碼的目標程序。
      權(quán)利要求
      1.一種二進制程序轉(zhuǎn)換設備,用于將一個由一組第一指令塊組成的第一二進制程序轉(zhuǎn)換成一個由帶有高速緩沖存儲器的計算機執(zhí)行的第二二進制程序,包括執(zhí)行設備,用于執(zhí)行該第一二進制程序;生成設備,用于生成指示由該執(zhí)行設備執(zhí)行的第一指令塊的執(zhí)行塊信息;和制作設備,用于根據(jù)由該生成設備生成的執(zhí)行塊信息,制作第二二進制程序,它包含相應于該組第一指令塊的第二指令塊,并且當在計算機中執(zhí)行時,使計算機將相應于由該執(zhí)行設備執(zhí)行的第一指令塊的第二指令塊,存儲在該高速緩沖存儲器的不同位置。
      2.根據(jù)權(quán)利要求1的二進制程序轉(zhuǎn)換設備,其中所述的制作設備制作第二二進制程序,包括相應于由該執(zhí)行設備執(zhí)行的第一指令塊的第二指令塊是連續(xù)布置的一個部分。
      3.根據(jù)權(quán)利要求1的二進制程序轉(zhuǎn)換設備,還包括建立設備,用于建立一個行數(shù)據(jù),它指示當由該制作設備制作的第二二進制程序在計算機中被執(zhí)行時,將要被使用的高速緩沖存儲器的行,和控制設備,用于控制所述的執(zhí)行設備,使其執(zhí)行一個由一組第三指令塊組成的第三二進制程序,還用于控制所述的生成設備,使其生成指示由所述的執(zhí)行設備執(zhí)行的第三指令塊的第二執(zhí)行塊信息,還用于控制所述的制作設備,使其基于第二執(zhí)行塊信息和行數(shù)據(jù),制作一個第四二進制程序,它包含相應于所述組第三指令塊的第四指令塊,并且當在計算機中被執(zhí)行時,它使計算機將相應于由該執(zhí)行設備執(zhí)行的第三指令塊的第四指令塊存儲在除該行數(shù)據(jù)所指示的行之外的、該高速緩沖存儲器的行的不同位置上。
      4.根據(jù)權(quán)利要求1的二進制程序轉(zhuǎn)換設備,還包括識別設備,用于通過監(jiān)控由所述執(zhí)行設備執(zhí)行的第一二進制程序的運行狀態(tài),識別該高速緩沖存儲器的每行的數(shù)據(jù)存取的使用頻率;和選擇設備,用于基于所述識別設備的識別結(jié)果,從該高速緩沖存儲器的所有行中選出用于存儲相應于由所述執(zhí)行設備執(zhí)行的第一指令塊的第二指令塊的行,以及其中所述的制作設備制作第二二進制程序,當在計算機中被執(zhí)行時,該程序使計算機將相應于由所述的執(zhí)行設備執(zhí)行的第一指令塊的第二指令塊存儲在由所述選擇設備所選出的行的不同位置上。
      5.根據(jù)權(quán)利要求2的二進制程序轉(zhuǎn)換設備,還包括搜索設備,用于從由所述制作設備制作的二進制程序中搜索一個在其結(jié)尾包含一個其分支目的地被設置為下一個第二指令塊的、條件分支指令的第二指令塊;和改變設備,用于改變一個分支條件和該條件分支指令的分支目的地,從而無需分支,產(chǎn)生從所述搜索設備搜索出的第二指令塊到下一個第二指令塊的轉(zhuǎn)移。
      6.一種二進制程序轉(zhuǎn)換設備,用于將一個第一二進制程序轉(zhuǎn)換成一個在計算機中執(zhí)行的第二二進制程序,包括一個搜索設備,用于從該第一二進制程序中搜索第一指令字符串,每一個這種字符串至少包括一個預定的指令代碼;和一個制作設備,用于通過以指定給該第一指令字符串的第二指令字符串替代由所述搜索設備搜索出的相應指令字符串,制作該第二二進制程序。
      7.一種二進制程序轉(zhuǎn)換方法,用于將一個由一組第一指令塊組成的第一二進制程序轉(zhuǎn)換成一個由帶有高速緩沖存儲器的計算機執(zhí)行的第二二進制程序,包括一個執(zhí)行步驟,執(zhí)行該第一二進制程序;一個生成步驟,生成用于指示在該執(zhí)行步驟中所執(zhí)行的第一指令塊的執(zhí)行塊信息;和一個制作步驟,基于在該生成步驟中生成的執(zhí)行塊信息,制作第二二進制程序,它包含相應于第一二進制程序的該組第一指令塊的第二指令塊,并且,當在計算機中被執(zhí)行時,使計算機將相應于在該執(zhí)行步驟中所執(zhí)行的第一指令塊的第二指令塊存儲在高速緩沖存儲器的不同位置上。
      8.根據(jù)權(quán)利要求7的二進制程序轉(zhuǎn)換方法,其中制作步驟涉及制作包括相應于由該執(zhí)行步驟中執(zhí)行的第一指令塊的第二指令塊是連續(xù)布置的一個部分的第二二進制程序。
      9.根據(jù)權(quán)利要求7的二進制程序轉(zhuǎn)換方法,還包括建立步驟,建立一個行數(shù)據(jù),用于指示當在該制作步驟中所制作的第二二進制程序在計算機中被執(zhí)行時,該高速緩沖存儲器的行;和一個控制步驟,控制該執(zhí)行步驟,執(zhí)行一個包含一組第三指令塊的第三二進制程序,和控制該生成步驟,生成用于指示在該執(zhí)行步驟中所執(zhí)行的第三指令塊的第二執(zhí)行塊信息,以及控制該制作步驟,基于該第二執(zhí)行塊信息和該行數(shù)據(jù),制作一個第四二進制程序,它包含相應于該組第三指令塊的第四指令塊,并且當在計算機中被執(zhí)行時,使計算機在除該行數(shù)據(jù)所指示的行之外的、該高速緩沖存儲器的行的不同位置上存儲相應于由所述執(zhí)行步驟所執(zhí)行的第三指令塊的第四指令塊。
      10.根據(jù)權(quán)利要求7的二進制程序轉(zhuǎn)換方法,還包括一個識別步驟,通過監(jiān)控由該執(zhí)行步驟中所執(zhí)行的第一二進制程序的運行狀態(tài),識別該高速緩沖存儲器的每行的數(shù)據(jù)存取的使用頻率;和一個選擇步驟,基于該識別步驟的識別結(jié)果,從該高速緩沖存儲器的所有行中選出用于存儲第二指令塊的行,以及其中制作步驟涉及制作第二二進制程序,當在計算機中被執(zhí)行時,該程序使計算機在該選擇步驟所選出的行的不同位置上存儲相應于由該執(zhí)行步驟所執(zhí)行的第一指令塊的第二指令塊。
      11.根據(jù)權(quán)利要求8的二進制程序轉(zhuǎn)換方法,還包括一個搜索步驟,搜索一個在其結(jié)尾包含一個其分支目的地被設置為下一個第二指令塊的、條件分支指令的第二指令塊;和一個改變步驟,改變一個分支條件和該條件分支指令的分支目的地,從而無需分支,產(chǎn)生從該搜索步驟中所搜索出的第二指令塊到下一個第二指令塊的轉(zhuǎn)移。
      12.一種二進制程序轉(zhuǎn)換方法,用于將一個第一二進制程序轉(zhuǎn)換成一個在計算機中被執(zhí)行的第二二進制程序,包括;一個搜索步驟,從該第一二進制程序中搜索第一指令字符串,每一個這種字符串至少包括一個預定的指令代碼;和一個制作步驟,通過以指定給該第一指令字符串的第二指令字符串替代由該搜索步驟搜索出的相應指令字符串,制作該第二二進制程序。
      13.一種記錄媒體,用于記錄使帶有高速緩沖存儲器的計算機發(fā)揮如下功能的程序執(zhí)行設備,用于執(zhí)行一個由一組第一指令塊組成的第一二進制程序;生成設備,用于生成指示由所述執(zhí)行設備執(zhí)行的第一指令塊的執(zhí)行塊信息;和制作設備,用于根據(jù)由所述生成設備生成的執(zhí)行塊信息,制作第二二進制程序,它包含相應于該組第一二進制程序的第一指令塊的第二指令塊,并且當在計算機中執(zhí)行時,使計算機將相應于由所述執(zhí)行設備執(zhí)行的第一指令塊的第二指令塊,存儲在該高速緩沖存儲器的不同位置。
      14.一種記錄媒體,用于記錄使帶有高速緩沖存儲器的計算機發(fā)揮如下功能的程序一個搜索設備,用于從該第一二進制程序中搜索第一指令字符串,每一個這種字符串至少包括一個預定的指令代碼;和一個制作設備,用于通過以指定給該第一指令字符串的第二指令字符串替代由所述搜索設備搜索出的相應指令字符串,制作該第二二進制程序。
      全文摘要
      一種能將一個原始二進制程在轉(zhuǎn)換成在一臺帶有高速緩沖存儲器的目標計算機中以更高速度運行的一個新的二進制程序的二進制程序轉(zhuǎn)換設備。該二進制程序轉(zhuǎn)換設備由一個執(zhí)行部分,一個生成部分和一個制作部分組成。執(zhí)行部分執(zhí)行該原始二進制程序。生成部分生成用于指示由該執(zhí)行部分執(zhí)行的第一指令塊的執(zhí)行塊信息。制作部分根據(jù)由該生成部分生成的執(zhí)行塊信息,制作新的二進制程序。
      文檔編號G06F9/45GK1181528SQ9712119
      公開日1998年5月13日 申請日期1997年10月27日 優(yōu)先權(quán)日1996年10月28日
      發(fā)明者日比賢伸, 西英文, 井土俊樹, 北岡正治 申請人:富士通株式會社
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1