對二進制轉(zhuǎn)換的自修改代碼以及交叉修改代碼的處理的制作方法
【技術(shù)領(lǐng)域】
[0001] 發(fā)明領(lǐng)域是對二進制轉(zhuǎn)換的自修改代碼以及交叉修改代碼的處理。
[0002] 背景
[0003] 可以設(shè)計處理器核,以執(zhí)行以特定編碼語言編寫的代碼。為了讓程序由一個特定 核執(zhí)行,程序代碼可能需要從與該特定核不兼容的第一編碼語言轉(zhuǎn)換到與該特定核兼容的 第二編碼語言,被稱為二進制轉(zhuǎn)換。
[0004] 自修改代碼(SMC)是指在執(zhí)行過程中被修改的代碼,例如,在執(zhí)行時SMC的一個或 多個指令修改SMC的其他指令。交叉修改代碼(XMC)是指可在第一處理器核執(zhí)行的,并且 當(dāng)執(zhí)行時導(dǎo)致對可在第二處理器核上執(zhí)行的第二代碼的修改的第一代碼。SMC或XMC可以 在執(zhí)行之前被部分轉(zhuǎn)換或完全轉(zhuǎn)換。與在前進到下一指令之前轉(zhuǎn)換并執(zhí)行每一指令相比, 在執(zhí)行之前轉(zhuǎn)換多個指令可能會在轉(zhuǎn)換的代碼中帶來異常。轉(zhuǎn)換的代碼中的異常會導(dǎo)致輸 出中的錯誤。
[0005] 附圖簡述
[0006] 圖1是根據(jù)本發(fā)明的一個實施例的包括多個處理器核的處理器的框圖。
[0007] 圖2包括包括根據(jù)本發(fā)明的各實施例的存儲代碼的存儲器的一部分的框圖。
[0008] 圖3是根據(jù)本發(fā)明的一個實施例的轉(zhuǎn)換指示符代理(XTBA)的框圖。
[0009] 圖4是根據(jù)本發(fā)明一實施例的與處理器相關(guān)聯(lián)的緩存存儲器的框圖。
[0010] 圖5是根據(jù)本發(fā)明的一個實施例的處理自修改代碼(SMC)的方法的流程圖。
[0011] 圖6是根據(jù)本發(fā)明的一個實施例的處理交叉修改代碼(XMC)的方法的流程圖。
[0012] 圖7是根據(jù)本發(fā)明的一個實施例的處理器核的框圖。
[0013] 圖8是根據(jù)本發(fā)明的實施例的處理器的框圖。
[0014] 圖9是根據(jù)本發(fā)明的另一實施例的多域處理器的框圖。
[0015] 圖10是包括多個核的處理器的實施例的框圖。
[0016] 圖11是根據(jù)本發(fā)明的實施例的系統(tǒng)的框圖。
【具體實施方式】
[0017] 在各實施例中,提供了用于執(zhí)行包括SMC或XMC的經(jīng)轉(zhuǎn)換代碼的方法和設(shè)備。在 一個實施例中,處理器包括執(zhí)行經(jīng)轉(zhuǎn)換的第一指令的核,所述經(jīng)轉(zhuǎn)換的第一指令是從存儲 在存儲器的一個頁面中的第一指令轉(zhuǎn)換的。核還包括轉(zhuǎn)換指示代理(XTBA),例如,存儲第一 轉(zhuǎn)換指示符的專用的緩存存儲器,所述第一轉(zhuǎn)換指示符指出在第一指令的轉(zhuǎn)換完成之后頁 面的內(nèi)容是否被修改。
[0018] 現(xiàn)在參照圖1,其中示出了根據(jù)本發(fā)明一實施例的包括多個核的處理器100的框 圖。在一個實施例中,處理器100可包括核102、120、130以及140。核102可包括用于執(zhí)行 指令的執(zhí)行單元104,該指令可以存儲在緩存存儲器或可以被從系統(tǒng)存儲器160(例如,動 態(tài)隨機存取存儲器(DRAM))中檢索;用于存儲一個或多個轉(zhuǎn)換指示符的XTBA 106;-級數(shù) 據(jù)緩存0$)1〇8;二級(中間)數(shù)據(jù)緩存(MLC)llO;以及三級(末級)數(shù)據(jù)緩存(LLC)112。 核120、130以及140中的每一個都可以具有對應(yīng)的XTBA以及對應(yīng)的一級緩存、二級緩存以 及三級緩存。
[0019]每一核102、120、130、140都可以耦合到物理圖譜緩存(physical map cache PM$) 150,該物理圖譜緩存150存儲多個轉(zhuǎn)換指示符。PM$150可包括從轉(zhuǎn)換指示符的物理圖 譜(PhysMap) 170復(fù)制的條目的一部分,PhysMap 170中的每一轉(zhuǎn)換指示符都與存儲器160 中的多個頁面180中的對應(yīng)的頁面相關(guān)聯(lián)。例如,與頁面A相關(guān)聯(lián)的并且存儲在PhysMap 170中的轉(zhuǎn)換指示符可以指出存儲在頁面A中的第一指令是否已經(jīng)被轉(zhuǎn)換為第一經(jīng)轉(zhuǎn)換的 指令,例如,從第一編碼語言到第二編碼語言。第一經(jīng)轉(zhuǎn)換的指令可以被存儲在系統(tǒng)存儲器 160的另一頁面中。
[0020] 在操作中,XTBA 106可以存儲對應(yīng)于頁面A并且與第一經(jīng)轉(zhuǎn)換的指令相關(guān)聯(lián)的 第一轉(zhuǎn)換指示符??苫冢?,第一經(jīng)轉(zhuǎn)換的指令的標(biāo)記信息,從,例如,PM$150,或從 PhysMap 170,檢索到第一轉(zhuǎn)換指示符。在一個示例中,XTBA 106中的第一轉(zhuǎn)換指示符可能 具有值1,并且指出已經(jīng)發(fā)生第一指令的轉(zhuǎn)換。
[0021] 如果在第一指令轉(zhuǎn)換到第一經(jīng)轉(zhuǎn)換的指令之后頁面A被修改,則轉(zhuǎn)換指示符的值 可以從1更新到〇,以指出在轉(zhuǎn)換第一指令之后頁面A已經(jīng)被修改。如果在轉(zhuǎn)換之后頁面A 被修改,則經(jīng)轉(zhuǎn)換的第一指令可以被視為陳舊的,例如,第一經(jīng)轉(zhuǎn)換的指令被視為它不再是 有效指令。盡管有可能出現(xiàn)這樣的情況:當(dāng)頁面A被修改時第一指令沒有改變,但是,在此 實施例中,轉(zhuǎn)換指示符圖的粒度是每個頁面一個轉(zhuǎn)換指示符。因此,對頁面A的修改被視為 第一指令已經(jīng)被修改。響應(yīng)于第一經(jīng)轉(zhuǎn)換的指令被標(biāo)識為陳舊,核可以中止第一經(jīng)轉(zhuǎn)換的 指令的執(zhí)行。
[0022] 在第一經(jīng)轉(zhuǎn)換的指令的執(zhí)行過程中,XTBA106被配置成監(jiān)測與頁面A相關(guān)聯(lián)的并 且存儲在PhysMap170中的轉(zhuǎn)換指示符的值。如果PhysMap170中的第一轉(zhuǎn)換指示符由于 例如在經(jīng)轉(zhuǎn)換的第一指令的執(zhí)行開始至執(zhí)行完成("提交")之間的任何時間向頁面A內(nèi)的 一個地址的STORE指令的執(zhí)行,從值1更新到值0,則可以中止第一經(jīng)轉(zhuǎn)換的指令的執(zhí)行。
[0023] XTBA106可以在物理上被標(biāo)記,以允許監(jiān)聽對PhysMap170的更新。對PhysMap 170的更新會導(dǎo)致向系統(tǒng)100中的所有XTBA生成監(jiān)聽。所生成的監(jiān)聽會發(fā)生作用,以警告 XTBA中的每一個,第一經(jīng)轉(zhuǎn)換的指令陳舊,且第一經(jīng)轉(zhuǎn)換的指令的執(zhí)行將在執(zhí)行第一經(jīng)轉(zhuǎn) 換的指令的每一核中停止。
[0024] 核102中的數(shù)據(jù)緩存108、110以及112中的每一個的每一緩存線都將存儲數(shù)據(jù) (對于核120,130以及140中的數(shù)據(jù)緩存,類似),例如,從存儲器160的一個或多個頁面檢 索到的操作數(shù)。在一個實施例中,每一緩存線都可包括被添加到緩存線的標(biāo)記部分的轉(zhuǎn)換 指示符,分別被描繪成緩存存儲器108,110以及112中的每一個中的添加的列114,116以 及118。可以從PhysMap 170或從PM$150復(fù)制緩存線內(nèi)的轉(zhuǎn)換指示符。給定緩存線的轉(zhuǎn)換 指示符可以與存儲器160中的從其中加載緩存線中的數(shù)據(jù)的特定頁面相關(guān)聯(lián)。
[0025] 在操作中,可以從存儲器160的頁面A中檢索操作數(shù),并可以將其存儲在核102內(nèi) 的緩存存儲器108的第一緩存線中。由于源頁面A包括已經(jīng)被轉(zhuǎn)換的代碼而頁面A隨后沒 有被改變,因此,與頁面A相關(guān)聯(lián)的轉(zhuǎn)換指示符具有表示轉(zhuǎn)換的值(例如,值1)。如果要由 核102執(zhí)行的經(jīng)轉(zhuǎn)換的指令包括要對第一緩存線中的操作數(shù)執(zhí)行的STORE,則該緩存線中 的轉(zhuǎn)換指示符值向核102指出STORE的執(zhí)行將導(dǎo)致沖突,例如,經(jīng)轉(zhuǎn)換的指令的源頁面的修 改。因此,可能會生成錯誤,執(zhí)行控制可以轉(zhuǎn)移到停止STORE執(zhí)行的處理程序??梢允箒碓?于存儲在頁面A中的代碼的所有經(jīng)轉(zhuǎn)換的指令作廢。在通過處理程序?qū)Σ僮鲾?shù)執(zhí)行STORE 之后,可以重新轉(zhuǎn)換或以別的方式處理隨后的程序指令。
[0026] 現(xiàn)在參考圖2,所示是根據(jù)本發(fā)明的各實施例的存儲代碼和數(shù)據(jù)的存儲器的存儲 器部分的兩個實施例的框圖。存儲器部分可以被包括在圖1的系統(tǒng)存儲器160中。
[0027] 在一個實施例中,存儲器部分210包括數(shù)據(jù)頁面C和D 212、代碼頁面A 214、代碼 頁面B 216、存儲經(jīng)轉(zhuǎn)換的指令A(yù)1的線220、存儲經(jīng)轉(zhuǎn)換的指令B1的線222,以及轉(zhuǎn)換指示 符物理圖譜(PhysMap)226。頁面A 214可包括第一自修改代碼(SMC),該SMC被轉(zhuǎn)換為包 括經(jīng)轉(zhuǎn)換的指令A(yù)1的轉(zhuǎn)換的代碼,并存儲在線220中。頁面B 216可包括第二SMC,它可 以被轉(zhuǎn)換為經(jīng)轉(zhuǎn)換的指令B1并存儲在線222中。PhysMap 226將存儲包括數(shù)據(jù)頁面C和 D 212以及代碼頁面A 214和B 216的頁面的轉(zhuǎn)換指示符值。數(shù)據(jù)頁面212中每一個都具 有指出沒有發(fā)生數(shù)據(jù)頁面212的內(nèi)容的轉(zhuǎn)換的轉(zhuǎn)換指示符值,而代碼頁面214和216中每 一個都具有指出頁面214和216中的指令已經(jīng)被轉(zhuǎn)換的對應(yīng)的轉(zhuǎn)換指示符值。在一個示例 中,轉(zhuǎn)換指示符值1與指令的轉(zhuǎn)換相關(guān)聯(lián),而值〇與沒有轉(zhuǎn)換相關(guān)聯(lián)。其他實施例可以使用 不同的值來指出指令的轉(zhuǎn)換或無轉(zhuǎn)換。
[0028] 在操作中,線220中的經(jīng)轉(zhuǎn)換的指令A(yù)1可包括要對操作數(shù)執(zhí)行的STORE指令(例 如,微操作(uop)),例如,將寄存器內(nèi)容存儲到頁面A 214中的地址。由于STORE指令的執(zhí) 行將改變頁面A 214的內(nèi)容,因此,執(zhí)行STORE的核可以在STORE的執(zhí)行之前,基于與操作 數(shù)相關(guān)聯(lián)的轉(zhuǎn)換指示符,生成錯誤,并且執(zhí)行控制可以轉(zhuǎn)移到更新經(jīng)轉(zhuǎn)換的指令A(yù)1或使其 無效的處理程序。即,由于緩存線的標(biāo)記部分的轉(zhuǎn)換指示符可以向核指出,頁面A內(nèi)的代碼 已經(jīng)被轉(zhuǎn)換,執(zhí)行STORE將改變經(jīng)轉(zhuǎn)換的指令的源頁面。錯誤可以觸發(fā)PhysMap 170中的 與代碼頁面A 214相關(guān)聯(lián)的轉(zhuǎn)換指示符的更新(例如,通過向PhysMap 170的WRITE),例 如,從值1更新為值〇,以指出經(jīng)轉(zhuǎn)換的指令A(yù)1陳舊,并且,在執(zhí)行STORE之后,將發(fā)生重新 轉(zhuǎn)換。
[0029] 在另一個實施例中,存儲器部分230包括數(shù)據(jù)頁面C和D 232、代碼頁面A 234和 代碼頁面B 236、經(jīng)轉(zhuǎn)換的代碼行238和240,以及轉(zhuǎn)換指示符物理圖譜PhysMap 236。線 238和240