可以分別存儲(chǔ)經(jīng)轉(zhuǎn)換的指令A(yù)1和B1,它們可能是分別從代碼頁面A 234和頁面 B 236中的交叉修改代碼(XMC)轉(zhuǎn)換的。PhysMap 236將存儲(chǔ)存儲(chǔ)器230的頁面的轉(zhuǎn)換指示 符值,包括代碼頁面A 234和B 236的轉(zhuǎn)換指示符值,其中每個(gè)都帶有指出頁面234和236 中的代碼已經(jīng)被轉(zhuǎn)換的相關(guān)聯(lián)的轉(zhuǎn)換指示符。數(shù)據(jù)頁面232中每一個(gè)都具有相關(guān)聯(lián)的轉(zhuǎn)換 指示符值〇,以指出沒有轉(zhuǎn)換數(shù)據(jù)頁面232的內(nèi)容。
[0030] 在操作中,第一核(核0)可以執(zhí)行經(jīng)轉(zhuǎn)換的指令A(yù)1,第二核(核1)可以執(zhí)行經(jīng) 轉(zhuǎn)換的指令B1。經(jīng)轉(zhuǎn)換的指令A(yù)1可包括向代碼頁面B 236的STORE指令,在由核0執(zhí)行 時(shí),該STORE指令將修改代碼頁面B 236的內(nèi)容。在經(jīng)轉(zhuǎn)換的指令A(yù)1的執(zhí)行過程中,核0 可以基于與代碼頁面B 236相關(guān)聯(lián)的T值1 (指出存儲(chǔ)在代碼頁面B中的代碼已經(jīng)被轉(zhuǎn)換) 檢測(cè)到?jīng)_突,該沖突可能會(huì)導(dǎo)致核0生成錯(cuò)誤??刂瓶梢赞D(zhuǎn)移到處理程序,以更新PhysMap 236 (例如,通過WRITE的執(zhí)行),更新與頁面B相關(guān)聯(lián)的轉(zhuǎn)換指示符,以及更新包含STORE 指令的操作數(shù)的緩存線中的緩存線轉(zhuǎn)換指示符。
[0031] 對(duì)PhysMap 236的更新可以導(dǎo)致向系統(tǒng)中的所有XTBA生成監(jiān)聽,包括向正在執(zhí)行 經(jīng)轉(zhuǎn)換的指令B1的核1中的XTBA。由于經(jīng)轉(zhuǎn)換的指令B1正在被執(zhí)行,因此,核1的XTBA 可以存儲(chǔ)與代碼頁面B相關(guān)聯(lián)的轉(zhuǎn)換指示符值。核1的XTBA中的轉(zhuǎn)換指示符值從第一值 更新到第二值可以向核1指出,經(jīng)轉(zhuǎn)換的指令B1陳舊,導(dǎo)致經(jīng)轉(zhuǎn)換的指令B1的執(zhí)行中止。 [0032] 在另一個(gè)實(shí)施例中(未示出),輸入/輸出(I/O)單元可以通過直接存儲(chǔ)器訪問 (DMA)修改代碼頁面A 234。對(duì)代碼頁面A的修改會(huì)觸發(fā)向PhysMap 236的WRITE,以更新 與頁面A 234相關(guān)聯(lián)的指出頁面A中的代碼在頁面A中的指令的轉(zhuǎn)換之后已經(jīng)被修改的相 關(guān)聯(lián)的轉(zhuǎn)換指示符值。相關(guān)聯(lián)的轉(zhuǎn)換指示符的已更新的值可以向系統(tǒng)的所有XTBA生成監(jiān) 聽,導(dǎo)致與經(jīng)轉(zhuǎn)換的指令A(yù)1的執(zhí)行相關(guān)聯(lián)的一個(gè)或多個(gè)錯(cuò)誤。因此,在執(zhí)行經(jīng)轉(zhuǎn)換的指令 A1的每一個(gè)核中,可以中止經(jīng)轉(zhuǎn)換的指令A(yù)1的執(zhí)行。
[0033] 現(xiàn)在參考圖3,所示是描繪了根據(jù)本發(fā)明的一個(gè)實(shí)施例的轉(zhuǎn)換指示符代理 (XTBA) 300的框圖。XTBA 300可包括多個(gè)存儲(chǔ)比特,包括存儲(chǔ)比特302。每一個(gè)存儲(chǔ)比特 都被配置成存儲(chǔ)與當(dāng)前正在執(zhí)行的指令或最近已執(zhí)行的指令相關(guān)聯(lián)的轉(zhuǎn)換指示符值,每一 個(gè)轉(zhuǎn)換指示符值還與存儲(chǔ)器的從其轉(zhuǎn)換了當(dāng)前正在執(zhí)行的指令的對(duì)應(yīng)的頁面相關(guān)聯(lián)。XTBA 300的存儲(chǔ)比特可以從,例如,諸如圖1的PM$150之類的轉(zhuǎn)換指示符緩存加載,或可以從諸 如圖1的PhysMap 170之類的與存儲(chǔ)器的頁面相關(guān)聯(lián)的轉(zhuǎn)換指示符的物理圖譜加載。
[0034] 在一個(gè)實(shí)施例中,XTBA 300可以發(fā)生作用,以監(jiān)測(cè)執(zhí)行中的經(jīng)轉(zhuǎn)換的指令的狀態(tài)。 例如,在經(jīng)轉(zhuǎn)換的指令A(yù)1的執(zhí)行開始時(shí),XTBA 300中的與頁面A(包含對(duì)應(yīng)的末經(jīng)轉(zhuǎn)換的 指令)相關(guān)聯(lián)的轉(zhuǎn)換指示符指出,經(jīng)轉(zhuǎn)換的指令A(yù)1有效。XTBA 300可以監(jiān)測(cè)與頁面A相關(guān) 聯(lián)的并存儲(chǔ)在PhysMap中的轉(zhuǎn)換指示符的值。如果與頁面A相關(guān)聯(lián)的轉(zhuǎn)換指示符的值在經(jīng) 轉(zhuǎn)換的指令A(yù)1的執(zhí)行過程中變化,則經(jīng)轉(zhuǎn)換的指令A(yù)1的執(zhí)行可以被中止,并可以被發(fā)送到 處理程序以完成執(zhí)行。
[0035] 另外,處理程序還可以向系統(tǒng)的所有其他XTBA生成監(jiān)聽,諸如向圖1的處理器100 中的其他XTBA中的每一個(gè)。向系統(tǒng)中的其他XTBA中的每一個(gè)的監(jiān)聽可以導(dǎo)致對(duì)應(yīng)于現(xiàn)在 陳舊的經(jīng)轉(zhuǎn)換的指令的相應(yīng)的轉(zhuǎn)換指示符的更新。監(jiān)聽可以導(dǎo)致中止其他核中的經(jīng)轉(zhuǎn)換的 指令的執(zhí)行,每一個(gè)核都可以向相應(yīng)的處理程序發(fā)送經(jīng)轉(zhuǎn)換的指令以完成執(zhí)行。
[0036] 現(xiàn)在參考圖4,所示是描繪了與諸如圖1的處理器110之類的處理器相關(guān)聯(lián)的一組 數(shù)據(jù)緩存400的框圖。該組數(shù)據(jù)緩存400包括一級(jí)數(shù)據(jù)緩存410、二級(jí)數(shù)據(jù)緩存420以及三 級(jí)數(shù)據(jù)緩存430。
[0037] 每一個(gè)數(shù)據(jù)緩存都可包括多個(gè)緩存線。每一個(gè)緩存線都可包括數(shù)據(jù)存儲(chǔ)部分,諸 如數(shù)據(jù)存儲(chǔ)部分412、422以及432,每一個(gè)都存儲(chǔ)操作數(shù)以及諸如標(biāo)記部分414,424以及 434之類的標(biāo)記部分。每一個(gè)標(biāo)記部分都可包括對(duì)應(yīng)的存儲(chǔ)的轉(zhuǎn)換指示符,諸如轉(zhuǎn)換指示符 416,426以及436。標(biāo)記部分中的每一個(gè)轉(zhuǎn)換指示符都可以對(duì)應(yīng)于存儲(chǔ)器中的從其中復(fù)制 了操作數(shù)并且操作數(shù)被置于數(shù)據(jù)存儲(chǔ)部分的源頁面的轉(zhuǎn)換指示符。
[0038] 在一個(gè)實(shí)施例中,STORE指令將在其轉(zhuǎn)換指示符具有指出STORE被指向包含已經(jīng) 被轉(zhuǎn)換的代碼的源頁面的值的緩存線的操作數(shù)上執(zhí)行。因此,STORE指令的執(zhí)行將修改源 頁面的內(nèi)容。執(zhí)行STORE指令的處理器可以通過讀取緩存線中的轉(zhuǎn)換指示符值,來檢測(cè)沖 突,并可以復(fù)位轉(zhuǎn)換指示符,向處理程序發(fā)送STORE指令以解決即將發(fā)生的沖突。如此,存 儲(chǔ)在緩存線中的轉(zhuǎn)換指示符可以充當(dāng)沖突的指示符,例如,包含已經(jīng)被轉(zhuǎn)換的指令的源代 碼頁面的修改。
[0039] 對(duì)與STORE指令相關(guān)聯(lián)的即將發(fā)生的沖突的檢測(cè)可以導(dǎo)致PhysMap中的對(duì)應(yīng)的轉(zhuǎn) 換指示符從第一值更新到第二值的生成。對(duì)PhysMap的更新可以導(dǎo)致向系統(tǒng)的所有XTBA 的監(jiān)聽的生成。每一監(jiān)聽都更新正在執(zhí)行經(jīng)轉(zhuǎn)換的指令的核的XTBA中的經(jīng)轉(zhuǎn)換的指令的 相關(guān)聯(lián)的轉(zhuǎn)換指示符,以指出經(jīng)過經(jīng)轉(zhuǎn)換的指令陳舊。監(jiān)聽還可以導(dǎo)致對(duì)與源代碼頁面相 關(guān)聯(lián)的緩存線(例如,其內(nèi)容是從源代碼頁面加載的緩存線)的轉(zhuǎn)換指示符值的更新。
[0040] 例如,在一個(gè)實(shí)施例中,在第一經(jīng)轉(zhuǎn)換的指令在處理器上的執(zhí)行開始時(shí),處理器的 XTBA將監(jiān)測(cè)源代碼頁面的轉(zhuǎn)換指示符。在有指出對(duì)源代碼頁面的修改的轉(zhuǎn)換指示符被更新 的指示時(shí),更新XTBA條目,導(dǎo)致停止現(xiàn)在陳舊的對(duì)應(yīng)的指令的執(zhí)行的錯(cuò)誤。另外,可以響應(yīng) 于更新的轉(zhuǎn)換指示符的指示,向每一個(gè)緩存生成監(jiān)聽,這會(huì)導(dǎo)致對(duì)從源頁面加載了其存儲(chǔ) 的數(shù)據(jù)的緩存線中的每一個(gè)轉(zhuǎn)換指示符的更新。特定緩存線中的已更新的轉(zhuǎn)換指示符值可 以指出,第一經(jīng)轉(zhuǎn)換的指令將不在該特定緩存線上執(zhí)行,而是將被轉(zhuǎn)移到處理程序以完成 執(zhí)行。
[0041] 現(xiàn)在參考圖5,所示是用于對(duì)從自修改代碼的執(zhí)行產(chǎn)生的沖突作出響應(yīng)的方法 500。在一個(gè)實(shí)施例中,方法500可以由諸如圖1的處理器102之類的核來執(zhí)行。
[0042] 從框510開始,存儲(chǔ)在存儲(chǔ)器的頁面A中的代碼,例如,通過二進(jìn)制轉(zhuǎn)換,從第一 編碼語言轉(zhuǎn)換為第二編碼語言。繼續(xù)框520,核0執(zhí)行經(jīng)轉(zhuǎn)換的指令A(yù)1,包括向頁面A的 STORE。移向框530,核0從轉(zhuǎn)換指示符值中檢測(cè)沖突,該轉(zhuǎn)換指示符值指出在頁面A的指令 的轉(zhuǎn)換(例如,通過執(zhí)行向頁面A的STORE)之后修改存儲(chǔ)在頁面A中的數(shù)據(jù)的意圖。繼續(xù) 到框535,核0響應(yīng)于檢測(cè)到?jīng)_突,生成錯(cuò)誤。轉(zhuǎn)到框540,核0將控制轉(zhuǎn)移到處理程序,該 處理程序更新對(duì)應(yīng)的轉(zhuǎn)換指示符的物理圖譜(例如,PhysMap),并執(zhí)行與核0相關(guān)聯(lián)的緩存 線中的轉(zhuǎn)換指示符的緩存線更新。繼續(xù)到框550,對(duì)PhysMap的更新通過核0的XTBA來檢 測(cè),導(dǎo)致向系統(tǒng)中的每一 XTBA生成監(jiān)聽,該監(jiān)聽更新對(duì)應(yīng)于當(dāng)前正在執(zhí)行的經(jīng)轉(zhuǎn)換的指令 的每一 XTBA中的存儲(chǔ)的轉(zhuǎn)換指示符值。經(jīng)轉(zhuǎn)換的指令的更新的值指出,當(dāng)前正在執(zhí)行的指 令陳舊。還更新包含從與其他核相關(guān)聯(lián)的緩存存儲(chǔ)器的頁面A復(fù)制的操作數(shù)的緩存線條目 的轉(zhuǎn)換指示符值。在方框560中,方法500結(jié)束。
[0043] 圖5的方法可以通過硬件、軟件、固件,或其組合來執(zhí)行??梢岳斫?,雖然在圖5的 實(shí)施例中以高級(jí)別示出的,但是,本發(fā)明的范圍在不受限制。
[0044] 現(xiàn)在參考圖6,所示是用于對(duì)從交叉修改代碼的執(zhí)行產(chǎn)生的沖突作出響應(yīng)的方法 600。從框602開始,存儲(chǔ)在諸如DRAM之類的存儲(chǔ)器的頁面A中的代碼被轉(zhuǎn)換(二進(jìn)制轉(zhuǎn) 換)為代碼A1。轉(zhuǎn)換可以通過諸如圖1所示出的系統(tǒng)之類的系統(tǒng)中的核來實(shí)現(xiàn),或可以通 過單獨(dú)的二進(jìn)制轉(zhuǎn)換處理器來轉(zhuǎn)換。繼續(xù)到框604,存儲(chǔ)在存儲(chǔ)器的頁面B中的代碼被轉(zhuǎn) 換為代碼B1。前進(jìn)到框606,核0開始經(jīng)轉(zhuǎn)換的指令A(yù)1的執(zhí)行,包括向存儲(chǔ)器的頁面B的 STORE。移向框608,核0從轉(zhuǎn)換指示符值,檢測(cè)由于將數(shù)據(jù)存儲(chǔ)到包括已經(jīng)被轉(zhuǎn)換的代碼 的頁面B的企圖而導(dǎo)致的沖突。轉(zhuǎn)到框610,核0響應(yīng)于檢測(cè)到?jīng)_突,生成錯(cuò)誤。繼續(xù)到框 612,核0將控制轉(zhuǎn)移到處理程序,該處理程序更新轉(zhuǎn)換指示符的物理圖譜(例如,圖1的 PhysMap 170),還更新緩存線轉(zhuǎn)換指示符值。
[0045] 前進(jìn)到框614,對(duì)PhysMap的更新生成對(duì)系統(tǒng)中的所有XTBA的監(jiān)聽。移向框616, 核1中的XTBA接收監(jiān)聽命中,該監(jiān)聽命中在核1中生成錯(cuò)誤。轉(zhuǎn)到框618,核1響應(yīng)于相關(guān) 聯(lián)的XTBA中的對(duì)應(yīng)的更新的轉(zhuǎn)換指示符值,中止經(jīng)轉(zhuǎn)換的指令B1的執(zhí)行。在方框620中, 該方法結(jié)束。
[0046] 圖6的方法可以通過硬件、軟件、固件,或其組合來執(zhí)行??梢岳斫猓m然在圖6的 實(shí)施例中以高級(jí)別示出的,但是,本發(fā)明的范圍在不受限制。
[0047] 各實(shí)施例可以在許多不同的系統(tǒng)中實(shí)現(xiàn)。例如,實(shí)施例可在諸如多核處理器之類 的處理器中實(shí)現(xiàn)?,F(xiàn)在參照?qǐng)D7,所示是根據(jù)本發(fā)明一個(gè)實(shí)施例的處理器核的框圖。如圖 7所示,核700可以是多核處理器中的一個(gè)核,并且被示為多級(jí)流水線化的無序處理器。在 圖7中利用相對(duì)簡(jiǎn)化的視圖示出處理器核700,以示出與根據(jù)本發(fā)明的實(shí)施例的數(shù)據(jù)錯(cuò)誤 糾正結(jié)合使用的多個(gè)特征。
[0048] 如圖7所示,核