專利名稱:用于解碼可執(zhí)行代碼的方法和相關(guān)設(shè)備的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種用于解碼諸如VLIW處理器之類的處理器中的可執(zhí)行代碼的方法和相關(guān)設(shè)備,特別是在尤其用于加載和再定位存儲器中的處理器可執(zhí)行代碼的運(yùn)行期(run-time)操作系統(tǒng)中。
背景技術(shù):
隨著采用多媒體處理的增加,已經(jīng)開發(fā)了能夠支持大而復(fù)雜的多媒體應(yīng)用的大功率處理器。
在關(guān)于這類應(yīng)用的可執(zhí)行代碼能夠被運(yùn)行之前,有必要將可執(zhí)行映像加載到存儲器中并且隨后再定位。這種再定位是二進(jìn)制打補(bǔ)丁(binary-patching)的過程以便將可執(zhí)行代碼中的地址的引用與實(shí)際加載的地址空間相配。對這種地址的引用通常可以包括可執(zhí)行文本片段中的決策樹的起始地址,或者data、datal或bss片段中的數(shù)據(jù)地址。
可從Philips那里購買到TriMedia處理器是VLIW處理器的例子。TriMedia可執(zhí)行代碼是如上所述的這類代碼的例子,并且在可執(zhí)行代碼打補(bǔ)丁之后,包含TriMedia可執(zhí)行代碼的文本片段必須被位洗牌(bit-shuffled)以便允許處理器以高速緩存高效方式解碼可執(zhí)行代碼,特別地是在運(yùn)行期。然而,這種位洗牌包括密集存儲器、計(jì)算昂貴的操作,并且也將發(fā)現(xiàn)與正在加載的程序尺寸成比例。
當(dāng)從存儲器中加載可執(zhí)行代碼時(shí),比如例如從高速緩存的文件系統(tǒng)中加載,人們發(fā)現(xiàn)上述的位洗牌操作形成經(jīng)受的加載時(shí)間的主要組成部分。
在運(yùn)行期操作系統(tǒng)中,比如在有人需要頻繁地加載可執(zhí)行代碼的情況下,或者在大靜態(tài)鏈接程序?qū)⒈患虞d的情況下,這種位洗牌操作被認(rèn)為表示對性能的重要限制。
發(fā)明內(nèi)容
本發(fā)明設(shè)法提供一種用于解碼運(yùn)行期操作系統(tǒng)中的可執(zhí)行代碼的方法和相關(guān)設(shè)備,并且顯示出優(yōu)于已知這種方法和設(shè)備的優(yōu)點(diǎn)。
根據(jù)本發(fā)明的第一方面,提供了一種用于解碼包括位洗牌代碼的處理系統(tǒng)中的可執(zhí)行代碼的方法,并且包括下列步驟將代碼劃分成多個子部分;標(biāo)識能夠在處理之前被位洗牌的代碼的子部分;以及在處理之前對所述標(biāo)識子部分進(jìn)行位洗牌以便減少所需的處理位洗牌。
本發(fā)明能夠被優(yōu)選地應(yīng)用于預(yù)洗牌二進(jìn)制代碼的處理階段,例如在稍后的鏈接時(shí)間段期間鏈接預(yù)洗牌的二進(jìn)制目標(biāo)代碼。
在一個特定設(shè)備中,所述處理系統(tǒng)包括運(yùn)行期操作系統(tǒng)并且包含在運(yùn)行期的位洗牌以及標(biāo)識能夠在運(yùn)行期之前被位洗牌的子部分。
優(yōu)選地,所述一部分代碼的預(yù)洗牌可能導(dǎo)致在20-25%的數(shù)量級內(nèi)運(yùn)行期洗牌延遲的減少并且優(yōu)選地用來增加可執(zhí)行代碼加載和再定位時(shí)間。
因此能夠?qū)崿F(xiàn)運(yùn)行期性能改善并且將會認(rèn)識到的是,本發(fā)明證明當(dāng)處理TriMedia程序和可執(zhí)行代碼時(shí)尤其是有利的。
優(yōu)選地,所述方法包括下列步驟在鏈接時(shí),產(chǎn)生用于加載和再定位代碼的再定位補(bǔ)丁表。
此外,在上述鏈接的末尾檢查再定位補(bǔ)丁表以便確定打補(bǔ)丁代碼中的哪一個地址。
優(yōu)選地,所述方法包括下列步驟產(chǎn)生將打補(bǔ)丁的子部分的記錄并且在運(yùn)行期按位圖(bitmap)的形式洗牌。
本發(fā)明也可以包括下列步驟讀取程序加載器內(nèi)的代碼元素以供執(zhí)行所述程序。
接著,程序加載器能夠被設(shè)置成讀取再定位補(bǔ)丁表和可執(zhí)行代碼并且在可執(zhí)行代碼內(nèi)寫回所述結(jié)果。
根據(jù)本發(fā)明的另一個方面,提供了用于解碼處理器中的可執(zhí)行代碼的解碼設(shè)備,并且包括用于位洗牌代碼的裝置,所述設(shè)備還包括用于將代碼劃分成多個子部分的裝置;標(biāo)識能夠在處理之前被位洗牌的代碼的子部分的裝置;和在處理之前對所述標(biāo)識子部分進(jìn)行位洗牌以便減少處理所需的位洗牌的裝置。
優(yōu)選地,所述處理器包括運(yùn)行期操作系統(tǒng)。
優(yōu)選地,所述應(yīng)用包括用于產(chǎn)生再定位補(bǔ)丁表的裝置,所述補(bǔ)丁表用于在鏈接時(shí)加載和再定位代碼。
此外,本發(fā)明能夠包括用于在鏈接時(shí)位洗牌已標(biāo)識的子部分的裝置。
優(yōu)選地,提供用于產(chǎn)生將在運(yùn)行期按位圖的形式打補(bǔ)丁和洗牌的子部分的記錄的裝置。
在一個實(shí)施例中,包含程序加載器并且將其設(shè)置成讀取再定位補(bǔ)丁表和可執(zhí)行代碼并且在可執(zhí)行代碼內(nèi)寫回結(jié)果。
本發(fā)明還提供一種用于這種解碼的控制和用于提供上面所示的這種方法步驟的計(jì)算機(jī)程序單元和產(chǎn)品。
在下文中僅僅以舉例的方式參照附圖進(jìn)一步描述本發(fā)明,其中圖1包括舉例說明根據(jù)本發(fā)明實(shí)施例的程序可執(zhí)行映像的產(chǎn)生的示意性框圖;圖2是舉例說明加載和再定位圖1的程序可執(zhí)行映像的示意性框圖。
具體實(shí)施例方式
正如將從本發(fā)明的上述定義認(rèn)識到的是,有利地操縱位洗牌操作以便相對于所述代碼的子部分實(shí)施洗牌操作,其中所述子部分優(yōu)選地包括高速緩存尺寸塊。例如,供TriMedia處理之用,特別是TriMedia1300,所述代碼能夠按64字節(jié)的塊的形式被分解為指令高速緩存尺寸塊。
通過采用本發(fā)明,人們發(fā)現(xiàn)可執(zhí)行映像中的75-80%數(shù)量的高速緩存尺寸塊需要在運(yùn)行期打補(bǔ)丁和位洗牌。正如將認(rèn)識到的是,這留下20-25%未打補(bǔ)丁的,從而正如本發(fā)明確定的那樣,能夠在運(yùn)行期之前被位洗牌,特別是當(dāng)程序正在被鏈接以形成可執(zhí)行映像時(shí)。
由此,注意這種未打補(bǔ)丁的64個字節(jié)塊的預(yù)洗牌優(yōu)選地用于按通常經(jīng)驗(yàn)經(jīng)減少運(yùn)行期洗牌開銷的20-25%,從而導(dǎo)致可執(zhí)行加載和再定位時(shí)間方面的優(yōu)勢增加。
注意本發(fā)明優(yōu)選地在運(yùn)行期之前并且在程序正在被鏈接時(shí)提供位洗牌。因此,在鏈接時(shí),鏈接器優(yōu)選地被設(shè)置成產(chǎn)生用于在運(yùn)行期加載和再定位可執(zhí)行代碼的再定位補(bǔ)丁表。
在這種鏈接的末尾,鏈接器被設(shè)置成檢查再定位補(bǔ)丁表以確定文本片段中的哪一個地址接著被打補(bǔ)丁。通過標(biāo)識這種已打補(bǔ)丁的片段,很容易識別出64字節(jié)塊中的哪一塊需要在運(yùn)行期被打補(bǔ)丁和洗牌。
不受打補(bǔ)丁影響的64字節(jié)的塊接著在鏈接時(shí)被預(yù)洗牌,哪些塊將在運(yùn)行期被打補(bǔ)丁和洗牌的記錄是由鏈接器按位圖的形式產(chǎn)生的,這有利于被添加到可執(zhí)行映像。
這種位圖可以優(yōu)選地按表示可執(zhí)行文本片段中的64字節(jié)塊的每一單個位排列。位圖中的每一位接著充當(dāng)對于加載器來說容易識別是否位洗牌與它相關(guān)聯(lián)的特定的64字節(jié)塊的標(biāo)志。由此,位圖中的第N位表示可執(zhí)行文本片段中的第N個64字節(jié)塊。
因此,對于N字節(jié)的可執(zhí)行文本片段,需要位圖中的(N+63)/64位。利用8位的字節(jié),這僅僅將(N+63)/512添加到整個可執(zhí)行代碼。
現(xiàn)在轉(zhuǎn)向圖1,以示意性塊的形式舉例說明了根據(jù)本發(fā)明的用于產(chǎn)生具有預(yù)洗牌部分代碼的程序可執(zhí)行映像的設(shè)備。
圖1中舉例說明的設(shè)備10包括程序鏈接器12,其被設(shè)置成讀取對象文件14A、14B以便將所述對象鏈接在一起并由此形成所需的程序可執(zhí)行映像。
根據(jù)這個舉例說明的本發(fā)明的實(shí)施例,并且在鏈接過程期間,在鏈接器12內(nèi)形成將被打補(bǔ)丁的文本片段的地址的表16并且接著利用文本片段預(yù)洗牌器20通過參考文本片段補(bǔ)丁地址18的表16來對在運(yùn)行期不需要打補(bǔ)丁的文本片段的64字節(jié)塊進(jìn)行預(yù)洗牌。
當(dāng)結(jié)束這個過程時(shí),可執(zhí)行代碼22能夠繼而沿箭頭B的方向被讀出并且例如包含a.out或ELF首部的可執(zhí)行首部24、指示文本片段的哪一個64字節(jié)塊仍需要在運(yùn)行期洗牌的洗牌位圖26、設(shè)置成能在運(yùn)行期打補(bǔ)丁文本和數(shù)據(jù)段的再定位補(bǔ)丁表28、文本和數(shù)據(jù)片段30,32以及BSS片段34。
現(xiàn)在轉(zhuǎn)向圖2,將會認(rèn)識到如何有利地根據(jù)需要加載圖1中舉例說明的可執(zhí)行代碼22。
如上所述,所述可執(zhí)行代碼22包括相同的片段,尤其是洗牌位圖26,標(biāo)識再定位補(bǔ)丁表28以及文本片段30以便于引用。
TriMedia可執(zhí)行文本片段的加載和再定位按如下進(jìn)行。
程序加載器36被設(shè)置用于按箭頭B和C所示的那樣從可執(zhí)行映像22中讀取再定位補(bǔ)丁表和洗牌位圖以及可執(zhí)行文本代碼并且用來按箭頭D所示的那樣再定位圖像以及將此作為再定位后的文本片段30寫回。
程序加載器36接著按箭頭A指示的那樣逐位讀取洗牌位圖,并且這確定是否文本片段的每一個64字節(jié)塊都需要被程序加載器36內(nèi)的文本片段洗牌器38洗牌。如果識別出正在考慮的片段需要洗牌,則文本片段洗牌器38能夠按箭頭C所示的從文本片段中讀取64字節(jié)塊然后對它進(jìn)行洗牌,并按箭頭D所示的將其寫回。
正如將會認(rèn)識到的是,本發(fā)明帶來的優(yōu)點(diǎn)是可適用于供運(yùn)行期操作系統(tǒng)內(nèi)所需的任何可執(zhí)行代碼(諸如必須在執(zhí)行之前加載和再定位的TriMedia可執(zhí)行代碼)使用。
本發(fā)明不僅應(yīng)用于程序可執(zhí)行代碼而且還應(yīng)用于可運(yùn)行庫,比如TriMedia動態(tài)鏈接庫(DLL)。
正如將認(rèn)識到的是,程序和庫的加載通常是由例如pSOS實(shí)時(shí)操作系統(tǒng)中的加載器庫擔(dān)任的,或者是由諸如在UNIK類操作系統(tǒng)(比如,Linux)或?qū)崟r(shí)操作系統(tǒng)的整體內(nèi)核中的二進(jìn)制加載器函數(shù)擔(dān)任的。因此,將會認(rèn)識到的是,本發(fā)明的尤其有利的使用就是與必須加載和再定位TriMedia可執(zhí)行代碼的操作系統(tǒng)一起使用。
本發(fā)明不局限于上述實(shí)施例的細(xì)節(jié)。具體來講,所述原理不局限于與運(yùn)行期操作系統(tǒng)一起使用而是同樣地例如適用于預(yù)洗牌的二進(jìn)制的處理階段,比如在稍后鏈接時(shí)段期間列出預(yù)洗牌的二進(jìn)制目標(biāo)代碼。
權(quán)利要求
1.一種用于解碼包括位洗牌代碼的處理器系統(tǒng)中的可執(zhí)行代碼的方法,并且包括下列步驟-將代碼劃分成多個子部分;-標(biāo)識能夠在處理之前被位洗牌的代碼的子部分;以及-在處理之前對所述標(biāo)識的子部分進(jìn)行位洗牌以便減少所需的處理位洗牌。
2.根據(jù)權(quán)利要求1所述的方法,其中所述系統(tǒng)包括運(yùn)行期操作系統(tǒng),并且所述已標(biāo)識的子部分在運(yùn)行期之前被位洗牌。
3.根據(jù)權(quán)利要求2所述的方法,并且包括下列步驟,在鏈接時(shí)產(chǎn)生用于加載和再定位代碼的再定位補(bǔ)丁表。
4.根據(jù)權(quán)利要求3所述的方法,并且包括下列步驟,在上述鏈接的末尾檢查再定位補(bǔ)丁表以便確定代碼中的哪一個地址被打補(bǔ)丁。
5.根據(jù)權(quán)利要求2、3或4所述的方法,其中所述已標(biāo)識的子部分在鏈接時(shí)被位洗牌。
6.根據(jù)權(quán)利要求2-5中任何一項(xiàng)或多項(xiàng)所述的方法,并且包括下列步驟產(chǎn)生將在運(yùn)行期按位圖的形式打補(bǔ)丁和洗牌的子部分的記錄。
7.根據(jù)權(quán)利要求6所述的方法,并且包括下列步驟將所述位圖添加到可執(zhí)行代碼。
8.根據(jù)權(quán)利要求2-7中任何一項(xiàng)或多項(xiàng)所述的方法,并且包括下列步驟標(biāo)識不需要在運(yùn)行期打補(bǔ)丁的代碼的子部分以便標(biāo)識預(yù)洗牌的子部分。
9.根據(jù)權(quán)利要求2-8中任何一項(xiàng)或多項(xiàng)所述的方法,并且包括下列步驟讀取程序加載器內(nèi)的代碼元素以執(zhí)行程序。
10.根據(jù)權(quán)利要求9所述的方法,其中程序加載器被設(shè)置成讀取再定位補(bǔ)丁表和可執(zhí)行代碼并且在可執(zhí)行代碼內(nèi)寫回結(jié)果。
11.根據(jù)權(quán)利要求2-10中任何一項(xiàng)或多項(xiàng)所述的方法,其中所述可執(zhí)行代碼包括具有包含TriMedia可執(zhí)行代碼的文本片段的TriMedia程序。
12.根據(jù)權(quán)利要求2-11中任何一項(xiàng)或多項(xiàng)所述的方法,其中代碼的每一個子部分包括高速緩存尺寸塊。
13.根據(jù)權(quán)利要求12所述的方法,其中每一個高速緩存尺寸塊包括64字節(jié)的塊。
14.根據(jù)權(quán)利要求2-13中任何一項(xiàng)或多項(xiàng)所述的方法,用于需要在執(zhí)行之前加載和再定位的任何形式的TriMedia可執(zhí)行映像。
15.根據(jù)權(quán)利要求1所述的方法,并且包括在稍后鏈接時(shí)段期間的預(yù)洗牌代碼的鏈接。
16.用于解碼處理器中的可執(zhí)行代碼并且包括用于位洗牌代碼的裝置的解碼設(shè)備,所述設(shè)備還包括-用于將代碼劃分成多個子部分的裝置;-標(biāo)識能夠在處理之前被位洗牌的代碼的子部分的裝置;和-在處理之前對所述標(biāo)識子部分進(jìn)行位洗牌以便減少所需的處理位洗牌的裝置。
17.根據(jù)權(quán)利要求16所述的設(shè)備,其中所述系統(tǒng)包括運(yùn)行期操作系統(tǒng),并且已標(biāo)識的子部分是那些能夠在運(yùn)行期之前被位洗牌的子部分。
18.根據(jù)權(quán)利要求17所述的設(shè)備,并且包括用于在鏈接時(shí)產(chǎn)生用于加載和再定位代碼的再定位補(bǔ)丁表的裝置。
19.根據(jù)權(quán)利要求17或18所述的設(shè)備,并且包括用于在鏈接時(shí)位洗牌已標(biāo)識的子部分的裝置。
20.根據(jù)權(quán)利要求17、18或19所述的設(shè)備,并且包括用于產(chǎn)生將在運(yùn)行期按位圖的形式打補(bǔ)丁和洗牌的子部分的記錄的裝置。
21.根據(jù)權(quán)利要求17、18、19或20所述的設(shè)備,并且包括代碼元素被讀取到其中以供程序執(zhí)行的程序加載器。
22.根據(jù)權(quán)利要求21所述的設(shè)備,其中程序加載器被設(shè)置成讀取再定位補(bǔ)丁表和可執(zhí)行代碼并且在可執(zhí)行代碼內(nèi)寫回結(jié)果。
23.根據(jù)權(quán)利要求17所述的設(shè)備,其中代碼的每一個子部分包括高速緩存尺寸塊。
24.根據(jù)權(quán)利要求17所述的設(shè)備,其中每一個高速緩存尺寸塊包括64字節(jié)的塊。
25.根據(jù)權(quán)利要求16所述的設(shè)備,并且被設(shè)置用于在稍后鏈接時(shí)間段期間鏈接預(yù)洗牌代碼。
26.一種包括計(jì)算機(jī)程序代碼裝置的計(jì)算機(jī)程序單元,所述計(jì)算機(jī)程序代碼裝置令計(jì)算機(jī)執(zhí)行解碼包括位洗牌代碼的處理器中的可執(zhí)行代碼的過程,并且用于-將代碼劃分成多個子部分;-標(biāo)識能夠在處理之前被位洗牌的代碼的子部分;以及-在處理之前對所述標(biāo)識的子部分進(jìn)行位洗牌以便減少所需的處理位洗牌。
27.根據(jù)權(quán)利要求26所述的計(jì)算機(jī)程序單元,并且被設(shè)置成控制運(yùn)行期操作系統(tǒng)中的解碼。
28.根據(jù)權(quán)利要求26所述的計(jì)算機(jī)程序單元,并且被設(shè)置成控制在稍后鏈接時(shí)間段期間的預(yù)洗牌代碼的鏈接。
29.一種包括計(jì)算機(jī)可讀介質(zhì)并且包括如權(quán)利要求26、27或28所述的程序單元的計(jì)算機(jī)程序產(chǎn)品。
30.一種包括如權(quán)利要求26、27或28所述的計(jì)算機(jī)程序單元的計(jì)算機(jī)可讀介質(zhì)。
全文摘要
本發(fā)明提供了一種用于解碼處理系統(tǒng)(例如,運(yùn)行期操作系統(tǒng))中的可執(zhí)行代碼(包括運(yùn)行期的位洗牌代碼)的方法和相關(guān)設(shè)備以及控制程序,并且包括下列步驟將代碼劃分成多個子部分,標(biāo)識能夠在所述運(yùn)行期之前被位洗牌的代碼的子部分并且在運(yùn)行期之前對所述已標(biāo)識的子部分進(jìn)行位洗牌以便減少在運(yùn)行期所需的位洗牌。
文檔編號G06F9/445GK1910551SQ200580002293
公開日2007年2月7日 申請日期2005年1月11日 優(yōu)先權(quán)日2004年1月13日
發(fā)明者C·I·金 申請人:皇家飛利浦電子股份有限公司