亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

具有對(duì)共享資源的訪問(wèn)協(xié)調(diào)的轉(zhuǎn)換程序代碼的方法和設(shè)備的制作方法

文檔序號(hào):6567708閱讀:136來(lái)源:國(guó)知局
專(zhuān)利名稱(chēng):具有對(duì)共享資源的訪問(wèn)協(xié)調(diào)的轉(zhuǎn)換程序代碼的方法和設(shè)備的制作方法
技術(shù)領(lǐng)域
本發(fā)明總體上涉及計(jì)算機(jī)和計(jì)算機(jī)軟件領(lǐng)域,更具體地說(shuō),涉及在例如轉(zhuǎn)換程序代碼的代碼翻譯器、仿真器和加速器中使用的程序代碼轉(zhuǎn)換方法和設(shè)備。

背景技術(shù)
在嵌入式和非嵌入式CPU兩者中都具有主要指令集架構(gòu)(ISA,大型軟件因此而存在),如果它們可以透明地訪問(wèn)相關(guān)的軟件,則可“加速”性能或被 “翻譯”到能夠提供更好的性?xún)r(jià)比的各種高性能處理器。人們還發(fā)現(xiàn)主要的CPU架構(gòu)被鎖定到其ISA,并且不能提高性能或市場(chǎng)占有。這樣的CPU可從面向軟件的處理器聯(lián)合架構(gòu)中受益。
例如,在公開(kāi)的申請(qǐng)WO00/22521中公開(kāi)了用于方便這樣的加速、翻譯和聯(lián)合架構(gòu)能力的程序代碼轉(zhuǎn)換方法和設(shè)備,該申請(qǐng)的公開(kāi)合并于此,以資參考。
本發(fā)明的實(shí)施例具體地與程序代碼轉(zhuǎn)換有關(guān),其中,主題程序(subjectprogram)被轉(zhuǎn)換成可由目標(biāo)處理器在目標(biāo)計(jì)算平臺(tái)中執(zhí)行的目標(biāo)代碼。
與在主題處理器上本地執(zhí)行主題程序相比,執(zhí)行程序代碼轉(zhuǎn)換必然帶來(lái)轉(zhuǎn)換處理中的開(kāi)銷(xiāo)。通常期望減少轉(zhuǎn)換處理中的這種開(kāi)銷(xiāo)。另外,通常還期望產(chǎn)生在目標(biāo)處理器上正確和高效執(zhí)行的目標(biāo)代碼。
線程是可以獨(dú)立運(yùn)行的程序的一部分,并且與程序的其他部分并發(fā)。在多線程處理環(huán)境中,多于一個(gè)線程(或者多于一個(gè)處理器)訪問(wèn)諸如存儲(chǔ)器的共享資源。通常需要協(xié)調(diào)訪問(wèn)共享資源的機(jī)制,以便避免諸如沖突或者未預(yù)料的行為的干擾。例如,當(dāng)兩個(gè)線程獨(dú)立地更新位于特定存儲(chǔ)器位置的數(shù)據(jù)時(shí),可能出現(xiàn)無(wú)意的干擾。訪問(wèn)協(xié)調(diào)機(jī)制通常對(duì)于主題處理器的指令集架構(gòu)是特定的。在很多情況下,不容易在程序代碼轉(zhuǎn)換之后在目標(biāo)處理器上實(shí)現(xiàn)主題訪問(wèn)協(xié)調(diào)機(jī)制。首先,目標(biāo)處理器可能不具有基于硬件的協(xié)調(diào)機(jī)制。其次,目標(biāo)協(xié)調(diào)機(jī)制可能與主題機(jī)制的工作相異。在這兩種示例中,難以提供主題代碼所期待的主題訪問(wèn)協(xié)調(diào)機(jī)制的恰當(dāng)?shù)奶娲?br>

發(fā)明內(nèi)容
根據(jù)本發(fā)明,提供一種如權(quán)利要求中所闡述的設(shè)備和方法。通過(guò)從屬權(quán)利要求和以下的描述,本發(fā)明的優(yōu)選特征將很明顯。
以下是根據(jù)本發(fā)明實(shí)施例的可實(shí)現(xiàn)的各個(gè)方面和優(yōu)點(diǎn)的總結(jié)。其被提供作為幫助本領(lǐng)域的技術(shù)人員更快地了解隨后的詳細(xì)設(shè)計(jì)討論的入門(mén),而不是將以任何方式限制權(quán)利要求的范圍。
在本發(fā)明的一方面中提供一種提供共享資源的訪問(wèn)協(xié)調(diào)機(jī)制的方法,所述方法用于從具有多主題線程的主題代碼到能夠被目標(biāo)處理器執(zhí)行的目標(biāo)代碼的程序代碼轉(zhuǎn)換,所述方法包括(a)提供多個(gè)本地?cái)?shù)據(jù)結(jié)構(gòu),每個(gè)數(shù)據(jù)結(jié)構(gòu)都與多個(gè)主題線程之一相關(guān)聯(lián);以及全局令牌,對(duì)于每個(gè)主題線程是共用的;(b)對(duì)主題代碼解碼,以識(shí)別設(shè)置與共享資源相關(guān)的主題訪問(wèn)協(xié)調(diào)機(jī)制的主題設(shè)置指令和檢查主題訪問(wèn)協(xié)調(diào)機(jī)制的主題檢查指令;(c)響應(yīng)于主題設(shè)置指令,產(chǎn)生用于調(diào)整全局令牌的目標(biāo)代碼,并在當(dāng)前線程的本地?cái)?shù)據(jù)結(jié)構(gòu)中至少存儲(chǔ)本地令牌,其中,所述本地令牌從調(diào)整的全局令牌得到;(d)響應(yīng)于主題檢查指令產(chǎn)生目標(biāo)代碼,所述目標(biāo)代碼用于將至少存儲(chǔ)的本地令牌與全局令牌進(jìn)行比較以確定對(duì)共享資源的潛在干擾。
在示例性實(shí)施例中,發(fā)明者已經(jīng)開(kāi)發(fā)了用于加速程序代碼轉(zhuǎn)換的方法,所述方法在與提供主題程序代碼到目標(biāo)代碼的動(dòng)態(tài)二進(jìn)制翻譯的運(yùn)行時(shí)間翻譯器相關(guān)聯(lián)的情況下尤其有益。
本發(fā)明還擴(kuò)展到具有安排用于執(zhí)行在此限定的任何方法的翻譯器單元的翻譯器設(shè)備。另外,本發(fā)明擴(kuò)展到其上記錄有可由計(jì)算機(jī)實(shí)現(xiàn)以執(zhí)行在此限定的任何方法的指令的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)。



在此引入并構(gòu)成說(shuō)明書(shū)的一部分的附圖示出目前優(yōu)選的實(shí)現(xiàn)方式,并描述如下 圖1是示出本發(fā)明的實(shí)施例得到應(yīng)用的設(shè)備的框圖; 圖2是示出在程序代碼轉(zhuǎn)換期間的執(zhí)行控制的示例方法的示意性流程圖; 圖3是示出在程序代碼轉(zhuǎn)換之后主題指令和目標(biāo)指令之間的關(guān)系的示意圖; 圖4是具有作為面向硬件的訪問(wèn)協(xié)調(diào)機(jī)制的保留的示例主題處理器的示意圖; 圖5是在本發(fā)明的示例性實(shí)施例中采用的具有對(duì)共享資源的訪問(wèn)協(xié)調(diào)機(jī)制的目標(biāo)處理器的示意圖; 圖6是在本發(fā)明的示例性實(shí)施例中采用的方法的概述; 圖7是更詳細(xì)地示出圖6的方法的示意流程圖;以及 圖8是更詳細(xì)地示出圖6的方法的示意流程圖。

具體實(shí)施例方式 提供以下說(shuō)明使得本領(lǐng)域的技術(shù)人員能夠制造和使用本發(fā)明,并闡述完成本發(fā)明的發(fā)明者認(rèn)為的最佳模式。然而,由于已經(jīng)在此具體地限定了本發(fā)明的一般原理以提供改進(jìn)的程序代碼轉(zhuǎn)換方法和設(shè)備,因此各種修改對(duì)于本領(lǐng)域的技術(shù)人員仍將是很明顯的。
在下面的術(shù)語(yǔ)中,主題程序?qū)⒁诎ㄖ黝}處理器的主題計(jì)算平臺(tái)上執(zhí)行。包括目標(biāo)處理器的目標(biāo)計(jì)算平臺(tái)用于通過(guò)執(zhí)行動(dòng)態(tài)程序代碼轉(zhuǎn)換的翻譯器來(lái)執(zhí)行主題程序。翻譯器執(zhí)行從主題代碼到目標(biāo)代碼的代碼轉(zhuǎn)換,從而能夠在目標(biāo)計(jì)算平臺(tái)上執(zhí)行目標(biāo)代碼。
圖1示出了包括目標(biāo)處理器13的示例目標(biāo)計(jì)算平臺(tái)14,所述目標(biāo)處理器13包括目標(biāo)寄存器15和存儲(chǔ)多個(gè)軟件組件17、19、20、21和27的存儲(chǔ)器18。軟件組件包括操作系統(tǒng)20、待翻譯的主題代碼17、翻譯器代碼19、翻譯的代碼(目標(biāo)代碼)21和抽象寄存器組(abstract register bank)27以及其他。
在一個(gè)實(shí)施例中,翻譯器代碼19是仿真器,用于將主題指令集架構(gòu)(ISA)的主題代碼翻譯成另一ISA的翻譯的目標(biāo)代碼(經(jīng)過(guò)或不經(jīng)過(guò)優(yōu)化)。也就是說(shuō),翻譯器19對(duì)主題處理器進(jìn)行仿真,同時(shí)在目標(biāo)處理器13上執(zhí)行作為目標(biāo)代碼21的主題程序17。在另一實(shí)施例中,翻譯器19用于通過(guò)執(zhí)行代碼程序優(yōu)化來(lái)作為將主題代碼翻譯成目標(biāo)代碼(主題代碼和目標(biāo)代碼是相同ISA)的加速器。
概括說(shuō)來(lái),目標(biāo)計(jì)算平臺(tái)14是一種翻譯器設(shè)備,其包括翻譯單元19以及其他。在示例實(shí)施例中,翻譯器19是實(shí)現(xiàn)翻譯器的源代碼的編譯版本。翻譯器19和由翻譯器19產(chǎn)生的翻譯的代碼21結(jié)合操作系統(tǒng)20在目標(biāo)處理器13上運(yùn)行,所述目標(biāo)處理器13通常是微處理器或其他合適的計(jì)算機(jī)。
應(yīng)理解在圖1中示出的結(jié)構(gòu)僅是示例性的,并且例如本發(fā)明的實(shí)施例可以通過(guò)駐留在操作系統(tǒng)中或駐留在操作系統(tǒng)之下的代碼實(shí)現(xiàn)。主題代碼17、翻譯器代碼19、操作系統(tǒng)20和存儲(chǔ)器18的存儲(chǔ)機(jī)制可以是如本領(lǐng)域的技術(shù)人員所知的多種類(lèi)型中的任意一種。
在圖1的設(shè)備中,優(yōu)選地,在目標(biāo)代碼21運(yùn)行的同時(shí),程序代碼轉(zhuǎn)換在運(yùn)行時(shí)間被動(dòng)態(tài)執(zhí)行。翻譯器19與翻譯的程序21協(xié)調(diào)運(yùn)行。在這種情況下,翻譯器是動(dòng)態(tài)二進(jìn)制翻譯器。在另一示例實(shí)施例中,翻譯器19是按順序?qū)⒏鱾€(gè)主題指令翻譯并執(zhí)行為一個(gè)或多個(gè)相應(yīng)的目標(biāo)代碼指令的解譯器。
優(yōu)選地翻譯器19被采用作為用于目標(biāo)架構(gòu)編譯的應(yīng)用程序。在運(yùn)行時(shí)間主題程序17被翻譯器19翻譯以在目標(biāo)架構(gòu)14上執(zhí)行。在運(yùn)行時(shí)間主題程序被翻譯器19翻譯以在目標(biāo)架構(gòu)上直接執(zhí)行。翻譯器19還變換主題程序17做出的主題操作系統(tǒng)(OS)調(diào)用,從而使它們?cè)诒粋鬟f到目標(biāo)OS 20時(shí)正確地工作。
通過(guò)翻譯器19運(yùn)行主題程序17包括以交織的方式執(zhí)行的兩種不同類(lèi)型的代碼翻譯器代碼19;以及目標(biāo)代碼21?;诜g器19的高級(jí)源代碼實(shí)現(xiàn),在運(yùn)行時(shí)間之前由諸如編譯器產(chǎn)生翻譯器代碼19。相反地,基于正被翻譯的程序的存儲(chǔ)的主題代碼17,在運(yùn)行時(shí)間期間由翻譯器代碼19產(chǎn)生目標(biāo)代碼21。
在示例實(shí)施例中,提供至少一個(gè)抽象寄存器組27(還被稱(chēng)為主題寄存器組27或全局寄存器存儲(chǔ)27)。在多處理器環(huán)境中,根據(jù)主題處理器的架構(gòu)可選地提供多于一個(gè)抽象寄存器組27。
由翻譯器19和目標(biāo)代碼21的組件來(lái)提供主題處理器狀態(tài)的表示。也就是說(shuō),翻譯器19以多種明確的編程語(yǔ)言裝置(諸如變量和/或?qū)ο?來(lái)存儲(chǔ)主題處理器狀態(tài)。用于編譯翻譯器19的編譯器確定如何以翻譯器代碼來(lái)實(shí)現(xiàn)狀態(tài)和操作。作為比較,目標(biāo)代碼21在由目標(biāo)代碼21的目標(biāo)指令操縱的目標(biāo)寄存器15中和存儲(chǔ)器位置18中隱含地提供主題處理器狀態(tài)。例如,全局寄存器存儲(chǔ)27的低級(jí)表示是簡(jiǎn)單的分配的存儲(chǔ)器的區(qū)。然而,在翻譯器19的源代碼中,全局寄存器存儲(chǔ)27是可在較高級(jí)別訪問(wèn)和操縱的數(shù)據(jù)陣列或?qū)ο蟆?br> 圖2是示出在程序代碼轉(zhuǎn)換期間的執(zhí)行控制的示例方法的示意性流程圖。
如圖2所示,控制最初駐留于翻譯器控制環(huán)190。在步驟201,控制環(huán)190調(diào)用翻譯器代碼19的代碼產(chǎn)生函數(shù)192,其將主題代碼17的塊翻譯成翻譯的代碼21的相應(yīng)塊。然后,在步驟202,在目標(biāo)處理器13上執(zhí)行翻譯的代碼21的所述塊。方便地,翻譯的代碼21的每個(gè)塊的末端包含將控制返回到控制環(huán)的指令201。換句話說(shuō),翻譯和執(zhí)行主題代碼的步驟被交織,從而主題程序17的各部分被翻譯并按順序地執(zhí)行。
這里,術(shù)語(yǔ)“基本塊(basic block)”對(duì)于本領(lǐng)域的技術(shù)人員應(yīng)是很熟悉的。基本塊是具有準(zhǔn)確的一個(gè)入口點(diǎn)和準(zhǔn)確的一個(gè)出口點(diǎn)的代碼段,其將塊代碼限制為單個(gè)的控制路徑。為此,基本塊是有用的控制流的基本單元。合適地,翻譯器19將主題代碼17劃分為多個(gè)基本塊,其中,每個(gè)基本塊都是位于單個(gè)入口點(diǎn)的第一指令和位于單個(gè)出口點(diǎn)的最后指令之間的有序的一系列指令(例如跳轉(zhuǎn)、調(diào)用或分支指令)。翻譯器可只選擇這些基本塊中的一個(gè)(塊模式)或選擇一組基本塊(組塊模式)。組塊適當(dāng)?shù)匕▽⒈蛔鳛橐粋€(gè)單元一起對(duì)待的兩個(gè)或多個(gè)基本塊。此外,翻譯器可形成表示主題代碼的相同基本塊但在不同入口條件下的相同塊(iso-block)。
在示例實(shí)施例中,作為從原始主題程序17產(chǎn)生目標(biāo)代碼21的處理的部分,基于主題指令序列產(chǎn)生中間表示(IR)的樹(shù)。IR樹(shù)是由主題程序計(jì)算的表達(dá)式和由主題程序執(zhí)行的操作的抽象表示。稍后,基于IR樹(shù)產(chǎn)生目標(biāo)代碼21。IR節(jié)點(diǎn)的集合實(shí)際是有向無(wú)回路圖(DAG),但通常被稱(chēng)為“樹(shù)”。
如本領(lǐng)域的技術(shù)人員可能知道的,在一個(gè)實(shí)施例中,使用面向?qū)ο缶幊陶Z(yǔ)言(如C++)來(lái)實(shí)現(xiàn)翻譯器19。例如,IR節(jié)點(diǎn)被實(shí)現(xiàn)為C++對(duì)象,對(duì)其他節(jié)點(diǎn)的引用被實(shí)現(xiàn)為對(duì)與所述其他節(jié)點(diǎn)相應(yīng)的C++對(duì)象的C++引用。因此IR樹(shù)被實(shí)現(xiàn)為IR節(jié)點(diǎn)對(duì)象的集合,包含彼此的各種引用。
此外,在以下討論的實(shí)施例中,IR產(chǎn)生使用一系列與主題程序1 7將被運(yùn)行的主題架構(gòu)的特定特征相應(yīng)的抽象寄存器定義。例如,具有對(duì)于主題架構(gòu)上的每個(gè)物理寄存器(“主題寄存器”)的唯一抽象寄存器定義。如此,翻譯器中的抽象寄存器定義可被實(shí)現(xiàn)為包含對(duì)IR節(jié)點(diǎn)對(duì)象(即,IR樹(shù))的引用的C++對(duì)象。由所述的系列的抽象寄存器定義引用的所有IR樹(shù)的集合被稱(chēng)為工作IR樹(shù)林(被稱(chēng)為“樹(shù)林”是因?yàn)槠浒鄠€(gè)抽象寄存器根,每個(gè)都引用IR樹(shù))。這些IR樹(shù)和其他處理恰當(dāng)?shù)匦纬煞g器代碼產(chǎn)生函數(shù)192的部分。
圖3是示出在本發(fā)明的示例實(shí)施例中的程序代碼轉(zhuǎn)換之后主題程序中的指令和目標(biāo)程序中的指令之間的示例關(guān)系的示意圖。
在此示例中,主題指令S1-S3形成功能相同的目標(biāo)指令T1-T3。主題指令S1已通過(guò)諸如死代碼消除優(yōu)化被移除,并且在產(chǎn)生的目標(biāo)代碼中沒(méi)有對(duì)等部分。主題指令S2形成一個(gè)相同的目標(biāo)指令T3。相反,主題指令S3形成兩個(gè)目標(biāo)指令T1和T2。在目標(biāo)和主題代碼指令之間可能具有一對(duì)無(wú)、一對(duì)一、一對(duì)多或多對(duì)一的關(guān)系。
如圖3所示,另一通常使用的優(yōu)化是執(zhí)行代碼重排,從而在目標(biāo)代碼中的指令順序與主題代碼中的原始順序不相同。這里,第二主題指令S2已被重排為第三目標(biāo)指令T3。
主題訪問(wèn)協(xié)調(diào) 圖4是示例主題處理器400的示意圖。主題處理器400對(duì)存儲(chǔ)器401進(jìn)行存取,并包括至少一個(gè)通用目的寄存器402,對(duì)于本領(lǐng)域的技術(shù)人員是很熟悉的。示出的主題處理器400是典型的RISC處理器。
在此示例中,主題處理器還包括保留403形式的訪問(wèn)協(xié)調(diào)機(jī)制。通常,保留403是主題處理器400的物理硬件的一部分。保留403提供對(duì)諸如存儲(chǔ)器401的共享資源的訪問(wèn)協(xié)調(diào)機(jī)制。通常在處理器400中僅提供一個(gè)保留403。
保留403用于檢測(cè)是否發(fā)生了與共享資源(即,存儲(chǔ)器401)相關(guān)的潛在干擾。
在此示例中,保留403包括保留標(biāo)志404和特殊用途保留寄存器405。保留標(biāo)志404通常是顯示是已經(jīng)設(shè)置保留還是已經(jīng)清除保留的一比特標(biāo)志。保留寄存器405用于存儲(chǔ)存儲(chǔ)器地址。
最通常地,保留403與“加載-鏈接”和“存儲(chǔ)-條件”類(lèi)型指令組合使用。加載-鏈接指令用于設(shè)置(或密封(seal))訪問(wèn)協(xié)調(diào)機(jī)制。存儲(chǔ)-條件指令用于檢查訪問(wèn)協(xié)調(diào)機(jī)制,以檢測(cè)對(duì)共享資源的潛在的干擾。
這些指令的每一個(gè)都與指定地址相關(guān)聯(lián),以這樣的示例形式 retry load-link [MEM LL] ...perform operations on the loaded data store-conditional[MEM SC] branch if store-conditional failsretry ... 當(dāng)遇到加載-鏈接類(lèi)型指令時(shí),從與該指令相關(guān)聯(lián)的存儲(chǔ)器地址(即,[MEM LL])讀取數(shù)據(jù),將地址[MEM LL]寫(xiě)入保留寄存器404,并且保留標(biāo)志405被設(shè)置。
從存儲(chǔ)器地址讀取的數(shù)據(jù)可用于一個(gè)或多個(gè)操作(即,一個(gè)或多個(gè)插入(intervening)主題指令)。例如,對(duì)讀取的數(shù)據(jù)執(zhí)行遞增、相加或移位操作。通常在相應(yīng)的加載-鏈接指令和存儲(chǔ)-條件指令之間僅執(zhí)行少量的操作,如一條、兩條或三條指令。這是為了減少干擾的可能性。然而通常不限制可在一對(duì)加載-鏈接指令和存儲(chǔ)-條件指令之間執(zhí)行的指令的數(shù)量。
存儲(chǔ)-條件指令用于將那些插入的操作的結(jié)果寫(xiě)回到存儲(chǔ)器401,通常寫(xiě)到與該數(shù)據(jù)被讀取的存儲(chǔ)器地址相同的存儲(chǔ)器地址。也就是說(shuō),通常以匹配的配對(duì)來(lái)創(chuàng)建加載-鏈接指令和存儲(chǔ)-條件指令,從而使[MEM LL]是與[MEMSC]相同的地址。
存儲(chǔ)-條件指令將給定的存儲(chǔ)地址[MEM SC]與存儲(chǔ)在保留寄存器404中的地址(其仍應(yīng)是MEM LL)進(jìn)行比較。如果比較的地址相等(即,MEM SC等于存儲(chǔ)的MEM LL),則保留標(biāo)志405仍被設(shè)置,隨后執(zhí)行存儲(chǔ)。
在多線程環(huán)境中,潛在的干擾事件可能在主題系統(tǒng)中(即,在另一主題線程或在另一主題處理器上)的其他地方發(fā)生。這里,潛在的干擾事件通過(guò)以下條件中的任何一個(gè)來(lái)檢測(cè)(a)當(dāng)寄存器標(biāo)志405仍應(yīng)被設(shè)置時(shí)其已被清除;或者(b)在保留寄存器404中保持的地址與存儲(chǔ)-條件指令中指定的地址(即,[MEM SC])不相同。
如果存儲(chǔ)-條件指令成功(即,未檢測(cè)到干擾),則保留標(biāo)志405被清除并繼續(xù)執(zhí)行程序。然而,如果存儲(chǔ)-條件失敗,則程序通常重復(fù)地循環(huán)回到加載-鏈接指令,直到?jīng)]有干擾地執(zhí)行該指令。
作為潛在的干擾事件的示例,保留標(biāo)志405通常被中斷、系統(tǒng)調(diào)用或?qū)Ρ4嬖诒A艏拇嫫?04中的存儲(chǔ)器地址的任何存儲(chǔ)清除。
作為另一示例,第二加載-鏈接指令(即,另一線程)將設(shè)置保留標(biāo)志405,并將存儲(chǔ)在保留寄存器404中的地址改變?yōu)榕c第二加載-鏈接指令相關(guān)聯(lián)的地址(例如,[MEM LL2])。因此第二加載-鏈接指令將使得第一存儲(chǔ)-條件指令失敗。
為了允許保留403高效工作,通常將用于設(shè)置和檢查保留寄存器404和保留標(biāo)志405的邏輯門(mén)硬線連接到主題處理器405中。相似地,通常將用于清除保留標(biāo)志405的邏輯門(mén)硬線連接到主題處理器中。這樣的特殊改造的硬件使與這些過(guò)程相關(guān)聯(lián)的計(jì)算開(kāi)銷(xiāo)最小化。
作為特定的示例,PowerPC類(lèi)型處理器提供了保留,并具有支持已知為“l(fā)warx”和“stwcx”的加載-鏈接和存儲(chǔ)-條件功能的一對(duì)指令的指令集結(jié)構(gòu)。作為此示例的進(jìn)一步的背景技術(shù),可在http://www-128.ibm.com/developerworks/library/pa-atom得到更詳細(xì)的討論。
在這種基于主題硬件的保留系統(tǒng)中,當(dāng)接收到中斷或執(zhí)行系統(tǒng)調(diào)用時(shí),保留被熔固(blown)(即,標(biāo)志405被清除或保留寄存器404被改變)。在線程之間發(fā)生上下文切換的情況下,如果OS選擇重排任務(wù)(通常在中斷或系統(tǒng)調(diào)用時(shí)執(zhí)行),則在執(zhí)行的一個(gè)線程中的加載-鏈接將不與另一線程中的存儲(chǔ)-條件相匹配(這可能造成發(fā)生錯(cuò)誤的存儲(chǔ))。如此,在硬件層,為每個(gè)處理器提供一個(gè)保留,而不是為每個(gè)軟件任務(wù)提供一個(gè)保留。
目標(biāo)訪問(wèn)協(xié)調(diào) 圖5是在本發(fā)明的示例實(shí)施例中采用的包括用于協(xié)調(diào)對(duì)共享資源的訪問(wèn)的機(jī)制的目標(biāo)計(jì)算平臺(tái)14的示意圖。
安排翻譯器19以支持一個(gè)或多個(gè)主題程序17中的多個(gè)線程。翻譯器19協(xié)調(diào)所述多個(gè)線程對(duì)諸如存儲(chǔ)器18的共享資源的訪問(wèn),并允許檢測(cè)潛在的干擾。
參照?qǐng)D5,翻譯器19提供全局令牌501,和一個(gè)或多個(gè)系列的本地?cái)?shù)據(jù)502,全局令牌501和本地?cái)?shù)據(jù)502被一起采用以協(xié)調(diào)對(duì)存儲(chǔ)器18的訪問(wèn)。
在示例實(shí)施例中,翻譯器19為主題程序17的每個(gè)線程提供一個(gè)本地?cái)?shù)據(jù)結(jié)構(gòu)502。圖5示出與第一線程171和第二線程172分別相關(guān)聯(lián)的第一數(shù)據(jù)結(jié)構(gòu)502a和第二數(shù)據(jù)結(jié)構(gòu)502b。
如圖5所示,訪問(wèn)協(xié)調(diào)機(jī)制(即,全局令牌501和每個(gè)本地?cái)?shù)據(jù)機(jī)構(gòu)502)被方便地存儲(chǔ)在存儲(chǔ)器18中?;蛘撸绻捎?,則所有或部分?jǐn)?shù)據(jù)被存儲(chǔ)在目標(biāo)處理器13的合適的寄存器15中。也就是說(shuō),目標(biāo)代碼21可在目標(biāo)寄存器中保持一個(gè)或多個(gè)訪問(wèn)協(xié)調(diào)數(shù)據(jù)的元素。具體地,在目標(biāo)寄存器15中按期望地保持全局令牌501。
如圖5所示,每個(gè)本地?cái)?shù)據(jù)結(jié)構(gòu)502都包括本地令牌521、本地值522和本地存儲(chǔ)器地址523。本地令牌521存儲(chǔ)從全局令牌501得到的令牌。本地值522存儲(chǔ)從共享資源讀取(即,從存儲(chǔ)器18讀取)的數(shù)據(jù)值。本地地址523存儲(chǔ)從其讀取數(shù)據(jù)的地址。
本地地址523被適當(dāng)?shù)馗袷交癁楸硎局黝}地址空間的主題地址(例如,對(duì)于圖4的主題系統(tǒng)的存儲(chǔ)器401合適的地址)。主題指令17引用主題地址空間。翻譯器19將主題地址翻譯成對(duì)于目標(biāo)計(jì)算系統(tǒng)14和目標(biāo)存儲(chǔ)器18合適的目標(biāo)地址?;蛘撸瑢⒋鎯?chǔ)的本地地址523格式化為翻譯的目標(biāo)地址。
圖6是在本發(fā)明的實(shí)施例中采用的提供訪問(wèn)協(xié)調(diào)機(jī)制的優(yōu)選方法的概述。在翻譯器19中適當(dāng)?shù)貓?zhí)行該方法,翻譯器19產(chǎn)生目標(biāo)代碼21從而在目標(biāo)處理器13上實(shí)現(xiàn)該方法。
參考圖6,該方法包括步驟601,提供如上面參照?qǐng)D5討論的全局令牌501和至少一個(gè)本地?cái)?shù)據(jù)結(jié)構(gòu)502。
步驟602包括對(duì)主題程序17解碼以識(shí)別引用主題訪問(wèn)協(xié)調(diào)機(jī)制(即,在圖4的主題處理器400中提供的訪問(wèn)協(xié)調(diào)機(jī)制403)的指令。具體地說(shuō),該步驟包括識(shí)別以下項(xiàng)(a)主題設(shè)置指令,設(shè)置主題訪問(wèn)協(xié)調(diào)機(jī)制,例如加載-鏈接指令;和(b)主題檢查指令,檢查主題訪問(wèn)協(xié)調(diào)機(jī)制,例如存儲(chǔ)-條件指令。
步驟603包括(a)響應(yīng)于主題設(shè)置指令,調(diào)整全局令牌501,并存儲(chǔ)用于第一線程171的全局?jǐn)?shù)據(jù)結(jié)構(gòu)502。這里,當(dāng)遇到主題加載-鏈接指令時(shí),由目標(biāo)代碼將本地令牌521、本地值522和本地地址523寫(xiě)入到本地?cái)?shù)據(jù)結(jié)構(gòu)502中(例如,存儲(chǔ)器18中)。
步驟604包括(b)響應(yīng)于主題檢查指令,將存儲(chǔ)的本地?cái)?shù)據(jù)結(jié)構(gòu)502與全局令牌501的至少當(dāng)前值進(jìn)行比較,以確定對(duì)共享資源18的潛在干擾。比較步驟還將在檢查指令中提供的數(shù)據(jù)與本地?cái)?shù)據(jù)結(jié)構(gòu)502進(jìn)行比較。此外,步驟604包括調(diào)整全局令牌501。
圖7是更詳細(xì)地示出圖6的步驟603的示意流程圖; 翻譯器19識(shí)別主題設(shè)置指令,諸如對(duì)主題保留403進(jìn)行操作的主題代碼加載-鏈接指令load-link[MEM LL]。由翻譯器產(chǎn)生的相應(yīng)的目標(biāo)代碼21執(zhí)行圖7中示出的步驟。圖7主要示出了調(diào)整全局令牌501的步驟701、從共享資源讀取數(shù)據(jù)的步驟703、以及存儲(chǔ)本地?cái)?shù)據(jù)結(jié)構(gòu)502的步驟702、704和705。
步驟701包括調(diào)整全局令牌501。適當(dāng)?shù)?,全局令牌是?shù)字值(例如64位數(shù)字計(jì)數(shù)器),調(diào)整全局令牌是算術(shù)運(yùn)算。更方便地,調(diào)整全局令牌501包括遞增計(jì)數(shù)器。在很多目標(biāo)處理器13中,執(zhí)行遞增指令相對(duì)便宜?;蛘撸?jì)數(shù)器遞減。其他形式的調(diào)整也是可行的。所述調(diào)整顯示全局令牌已經(jīng)從其先前的形式或值改變。另外,全局令牌將響應(yīng)于后續(xù)的調(diào)整再次改變。
理想地,調(diào)整全局令牌501的一個(gè)操作或多個(gè)操作不受干擾地自己執(zhí)行。否則,不能保證全局令牌501被正確地調(diào)整。具體地,翻譯器19其自身可能作為多個(gè)目標(biāo)線程中的一個(gè)線程在目標(biāo)處理器上運(yùn)行。
適當(dāng)?shù)?,使用適合于目標(biāo)處理器的機(jī)制不受干擾地調(diào)整全局令牌501。理想地,如果在指令集架構(gòu)目標(biāo)處理中存在原子操作,則使用原子操作,如果存在目標(biāo)處理器自身的加載-鏈接和存儲(chǔ)-條件機(jī)制,則使用該機(jī)制。
一些指令集架構(gòu)支持將從存儲(chǔ)器讀取數(shù)據(jù)、操作數(shù)據(jù)和將結(jié)果寫(xiě)回到存儲(chǔ)器作為單個(gè)步驟的操作。這樣的操作不包括單獨(dú)的子步驟,因此不會(huì)崩潰。這種類(lèi)型的操作已知為“原子”,這是由于它們的邏輯不可分性。通常,原子操作在處理器中的單個(gè)總線周期中發(fā)生。邏輯上,其他任何操作數(shù)據(jù)的嘗試必須在原子操作之前或之后發(fā)生。
通常在CISC處理器上提供原子操作。在目標(biāo)處理器作為包括x86系列處理器的具體的示例中,調(diào)整全局令牌501的步驟包括使用原子比較-交換類(lèi)型指令(例如,“cmpxchg”指令)遞增全局令牌計(jì)數(shù)器。
步驟702包括將全局令牌501的當(dāng)前值存儲(chǔ)為本地?cái)?shù)據(jù)結(jié)構(gòu)502的本地令牌521。
步驟703包括從主題加載-鏈接指令中指定的存儲(chǔ)器位置(即,與主題地址[MEM LL]相關(guān)的目標(biāo)存儲(chǔ)器18中的位置)加載數(shù)據(jù)。也就是說(shuō),主題設(shè)置指令提供與共享資源相關(guān)的設(shè)置地址,并響應(yīng)于該設(shè)置地址(即,如果需要?jiǎng)t利用合適的地址變換)從共享資源讀取數(shù)據(jù)值。
步驟704和705包括將加載的數(shù)據(jù)和設(shè)置地址(例如,MEM LL)的復(fù)制作為本地值522和本地地址分別存儲(chǔ)在本地?cái)?shù)據(jù)結(jié)構(gòu)502中。
用于實(shí)現(xiàn)步驟701至705的一般偽碼為 [atomically]adjust global token load[MEM LL] local_token=global token local_mem=MEM LL local_value=value in MEM LL 圖8是更詳細(xì)地示出圖6的步驟604的示意流程圖。
如圖8所示,主題代碼存儲(chǔ)-條件指令被方便地劃分為目標(biāo)代碼中的若干子步驟。
步驟801包括將從主題存儲(chǔ)-條件指令中指定的地址得到的檢查地址(即,MEM SC)與存儲(chǔ)在本地?cái)?shù)據(jù)結(jié)構(gòu)502中的本地地址523進(jìn)行比較。如果需要,再次執(zhí)行地址變換。成功的比較(其中,檢查地址和存儲(chǔ)的本地地址相同)顯示主題存儲(chǔ)-條件指令與先前的加載-鏈接指令相匹配。失敗的比較(其中,地址不相同)指示在當(dāng)前線程171中已經(jīng)執(zhí)行了另一加載-鏈接指令。這樣的情況可能在編寫(xiě)不佳的主題代碼中無(wú)意地出現(xiàn)。這里,不能保證已經(jīng)不受干擾地執(zhí)行了第一加載-鏈接和相應(yīng)的存儲(chǔ)-條件之間的插入指令。
步驟802包括將存儲(chǔ)的本地令牌521與全局令牌501的當(dāng)前值進(jìn)行比較。如果本地令牌521不等于全局令牌501,則全局令牌501有可能已被另一線程172中(或者甚至在當(dāng)前線程171中)的潛在的干擾指令調(diào)整。例如,另一線程可能已經(jīng)執(zhí)行了干擾加載-鏈接類(lèi)型設(shè)置指令。在這種情況下,由于存儲(chǔ)了本地令牌521,因此不能保證已經(jīng)不受干擾地執(zhí)行了插入操作。
可建立其他目標(biāo)代碼指令以調(diào)整全局令牌501,理想地使用原子操作,諸如上面討論的[atomically]adjust global token。例如,主題處理器上的存儲(chǔ)、系統(tǒng)調(diào)用或中斷正常地將清除主題處理器的保留標(biāo)志405。理想地,這些主題處理器事件和指令被翻譯成調(diào)整全局令牌501的目標(biāo)代碼。
在步驟803,將存儲(chǔ)為local value的值522與當(dāng)前存儲(chǔ)在主題檢查指令(存儲(chǔ)-條件指令)中指定的存儲(chǔ)器地址([MEM SC])中的值進(jìn)行比較。如果兩個(gè)值不相同,則顯示在該存儲(chǔ)器位置上已經(jīng)發(fā)生了另一存儲(chǔ)。因此,檢測(cè)到已經(jīng)不受干擾地執(zhí)行了主題設(shè)置指令和檢查指令之間的插入指令。
同時(shí),也有可能local value的值522與最后寫(xiě)到相關(guān)存儲(chǔ)器地址的另一存儲(chǔ)指令的值對(duì)應(yīng)。然而,此附加檢查意味著僅在全局令牌已被調(diào)整到預(yù)料值并且已經(jīng)存儲(chǔ)了相同的值的情況下獲得錯(cuò)誤肯定。
理想地,以組合的形式執(zhí)行步驟801-803的檢查。這三個(gè)檢查一起提供一種強(qiáng)壯但相對(duì)便宜的機(jī)制,用于在多線程環(huán)境中檢測(cè)與諸如存儲(chǔ)器的共享資源相關(guān)的潛在干擾。
步驟804包括執(zhí)行主題檢查指令(即,存儲(chǔ)-條件指令)所請(qǐng)求的存儲(chǔ)。也就是說(shuō),在步驟801、802和803的每一個(gè)的比較都成功的情況下,插入操作的結(jié)果被存儲(chǔ)到主題檢查指令中指定的位置([MEM SC])。
如步驟701的討論,步驟805包括調(diào)整諸如使用原子遞增(例如,比較-交換)指令的全局令牌。
步驟806包括指示檢查和存儲(chǔ)操作成功,從而主題程序的操作現(xiàn)在可以繼續(xù)。例如,提供成功/失敗標(biāo)志并且被目標(biāo)代碼21或翻譯器19引用。
在步驟801-803中的任意比較操作不成功(失敗)的情況下,到達(dá)步驟807和808。
如步驟701的討論,步驟807包括調(diào)整諸如使用原子遞增(例如,比較-交換)指令的全局令牌。
步驟808包括指示檢查和存儲(chǔ)操作失敗。例如,成功/失敗標(biāo)志被設(shè)置為指示失敗并被目標(biāo)代碼21或翻譯器19引用。理想地,成功/失敗標(biāo)志用于從相應(yīng)的加載-鏈接指令分支返回和重試整個(gè)序列。
在以下的一般偽碼中示出步驟801-808的示例程序指令 If((local mem==MEM SC) and(local token==global token) and(local value==contents of MEM SC)) then perform store[MEM SC] [atomically] adjust global token Set success flag else [atomically] adjust global token set failure flag 在此討論的示例實(shí)施例具有多種好處和優(yōu)點(diǎn)。在此討論的實(shí)施例有利地提供了一種用于訪問(wèn)協(xié)調(diào)的面向軟件的方法,該方法相對(duì)高效和高性?xún)r(jià)比地在翻譯器中實(shí)現(xiàn)并作為目標(biāo)代碼執(zhí)行。
在此給出的示例是一般性的,本發(fā)明的原理應(yīng)用于主題處理器和目標(biāo)處理器的組合,其中主題代碼設(shè)置指令和檢查指令(例如,加載-鏈接指令和存儲(chǔ)-條件指令)將在使用不同訪問(wèn)協(xié)調(diào)機(jī)制的架構(gòu)或者不提供這樣的機(jī)制的架構(gòu)上執(zhí)行。具體地,示例實(shí)施例允許與面向硬件的保留相同的行為在不提供對(duì)保留的硬件支持的目標(biāo)處理器上有效地執(zhí)行。
具體來(lái)說(shuō),非限制類(lèi)型(例如PowerPC)和MIPS類(lèi)型處理器提供使用硬件支持的保留的加載-鏈接和存儲(chǔ)-條件機(jī)制。相反地,x86、Itanium和Sparc類(lèi)型處理器不提供保留。在優(yōu)選的實(shí)施例中,這些處理器能夠相對(duì)便宜地對(duì)存儲(chǔ)器執(zhí)行原子操作。
在此討論的原理也可應(yīng)用于主題處理器和目標(biāo)處理器都具有加載-鏈接和存儲(chǔ)-條件機(jī)制但是不具有機(jī)制之間的直接映射的情況。此外,在主題處理器和目標(biāo)處理器都具有加載-鏈接和存儲(chǔ)-條件機(jī)制的情況下,仍需要保持目標(biāo)處理器的保留獨(dú)立于主題代碼中的加載-鏈接和存儲(chǔ)-條件指令。這是因?yàn)榉g器也在目標(biāo)處理器上運(yùn)行,并且其自身將利用目標(biāo)處理器的保留。通過(guò)這種方式,翻譯器和翻譯的目標(biāo)代碼之間的干擾可以被減少。
如上面討論的,本發(fā)明的示例實(shí)施例是基于這樣的觀察在軟件層,檢測(cè)諸如中斷或系統(tǒng)調(diào)用的重排事件可能很困難或很昂貴。然而,存儲(chǔ)每個(gè)線程的信息比較便宜。優(yōu)選的設(shè)計(jì)基于每線程存儲(chǔ)三條信息,即指示設(shè)置了訪問(wèn)協(xié)調(diào)機(jī)制的標(biāo)志、從何處加載的地址和加載的值。如果在此線程內(nèi)發(fā)生系統(tǒng)調(diào)用,或通過(guò)翻譯器處理的中斷發(fā)生,則標(biāo)志應(yīng)被清除(即,設(shè)置為指示失敗的情況)。
所述值用于在加載-鏈接設(shè)置指令之后的存儲(chǔ)-條件檢查指令的點(diǎn)處檢測(cè)相關(guān)的存儲(chǔ)器內(nèi)容何時(shí)被改變。理想地,該系統(tǒng)不應(yīng)只檢測(cè)所述值在存儲(chǔ)-條件是否與其在加載-鏈接的點(diǎn)處相同,還應(yīng)檢測(cè)任何的插入改變。從軟件檢測(cè)潛在地抑制昂貴。
在實(shí)際中,通常僅由原子指令或非原子指令訪問(wèn)給定的存儲(chǔ)器地址。如此,足以使得存儲(chǔ)-條件指令使系統(tǒng)中的所有訪問(wèn)協(xié)調(diào)機(jī)制無(wú)效。這將潛在地造成訪問(wèn)協(xié)調(diào)機(jī)制被不必要地?zé)o效,但是這種情況總會(huì)發(fā)生(例如,線程接收到加載-鏈接和存儲(chǔ)-條件之間的硬件中斷,但是沒(méi)有插入事件干擾操作發(fā)生的原子性)。為了使存儲(chǔ)-條件指令在系統(tǒng)的其他地方中斷訪問(wèn)協(xié)調(diào)機(jī)制,本發(fā)明的示例實(shí)施例從上述的純每線程模型(該模型只用一位標(biāo)志指示保留保持)變?yōu)橐肴至钆频哪P?。提供每線程標(biāo)志作為每線程本地令牌。這樣的優(yōu)點(diǎn)在于只通過(guò)修改單個(gè)全局令牌就使得所有其他線程中的所有訪問(wèn)協(xié)調(diào)機(jī)制失敗,而不是嘗試更新系統(tǒng)中的所有線程的標(biāo)志。
雖然已經(jīng)示出和描述了若干優(yōu)選實(shí)施例,但是本領(lǐng)域的技術(shù)人員將理解,在不脫離權(quán)利要求所限定的本發(fā)明的范圍的情況下,可以做出各種改變和修改。
注意到連同本申請(qǐng)一起與本說(shuō)明書(shū)同時(shí)提交或在此之前提交的以及公開(kāi)用于公眾檢查本發(fā)明書(shū)的所有紙件和文檔,所有紙件和文檔的內(nèi)容合并于此以資參考。
在說(shuō)明書(shū)(包括任何權(quán)利要求、摘要和附圖)中公開(kāi)的所有特征和/或公開(kāi)的任何方法或處理的所有步驟可組成任意的組合,除非在組合中的至少一些這種特征和/或步驟互相排斥。
在本說(shuō)明書(shū)中公開(kāi)的每個(gè)特征(包括任何權(quán)利要求、摘要和附圖)可由起到相同、等同或相似作用的可選的特征替代,除非特別說(shuō)明。因此,除非特別說(shuō)明,公開(kāi)的每個(gè)特征僅是一般系列的等同或相似特征的一個(gè)示例。
本發(fā)明不限于前述實(shí)施例的細(xì)節(jié)。本發(fā)明擴(kuò)展到本說(shuō)明書(shū)(包括任何權(quán)利要求、摘要和附圖)中公開(kāi)的特征的任何的創(chuàng)新或任何的創(chuàng)新組合,或者擴(kuò)展到公開(kāi)的任何方法或處理的步驟的創(chuàng)新或任何的創(chuàng)新組合。
權(quán)利要求
1.一種提供共享資源的訪問(wèn)協(xié)調(diào)機(jī)制的方法,用于在從具有多個(gè)主題線程(171、172)的主題代碼(17)到能夠被目標(biāo)處理器(13)執(zhí)行的目標(biāo)代碼(21)的程序代碼轉(zhuǎn)換,所述方法的特征在于以下步驟
(a)提供以下項(xiàng)多個(gè)本地?cái)?shù)據(jù)結(jié)構(gòu)(502a、502b),每個(gè)本地?cái)?shù)據(jù)結(jié)構(gòu)都與多個(gè)主題線程(171、172)中的一個(gè)相關(guān)聯(lián);以及全局令牌(501),對(duì)于主題線程(171、172)中的每一個(gè)都是共用的;
(b)對(duì)主題代碼(17)解碼,以識(shí)別設(shè)置與共享資源(401)相關(guān)的主題訪問(wèn)協(xié)調(diào)機(jī)制的主題設(shè)置指令和檢查主題訪問(wèn)協(xié)調(diào)機(jī)制的主題檢查指令;
(c)響應(yīng)于主題設(shè)置指令,產(chǎn)生用于調(diào)整全局令牌(501)的目標(biāo)代碼(21),并在當(dāng)前線程的本地?cái)?shù)據(jù)結(jié)構(gòu)(502)中至少存儲(chǔ)本地令牌(521),其中,所述本地令牌(521)是從調(diào)整的全局令牌(501)得到;
(d)響應(yīng)于主題檢查指令產(chǎn)生目標(biāo)代碼,所述目標(biāo)代碼用于將至少存儲(chǔ)的所述本地令牌(521)與全局令牌(501)進(jìn)行比較以確定對(duì)共享資源(401)潛在干擾。
2.如權(quán)利要求1所述的方法,還包括以下步驟響應(yīng)于對(duì)共享資源(401)的潛在干擾的事件調(diào)整全局令牌(501)。
3.如權(quán)利要求2所述的方法,還包括
從主題代碼或影響主題代碼(17)的中斷檢測(cè)系統(tǒng)調(diào)用,并作為響應(yīng)地調(diào)整全局令牌(501)以顯示對(duì)共享資源(401)的潛在干擾。
4.如權(quán)利要求1所述的方法,還包括
執(zhí)行關(guān)于第一主題線程(171)的步驟(c);
調(diào)整關(guān)于第二主題線程(172)的全局令牌(501);以及
執(zhí)行關(guān)于第一主題線程(171)的步驟(d),從而確定第二主題線程(172)對(duì)共享資源(401)的潛在干擾。
5.如權(quán)利要求1所述的方法,其中
步驟(c)還包括將從主題設(shè)置指令獲得的數(shù)據(jù)存儲(chǔ)到本地?cái)?shù)據(jù)結(jié)構(gòu)(502)中;以及
步驟(d)還包括將從主題檢查指令獲得的數(shù)據(jù)與從本地?cái)?shù)據(jù)結(jié)構(gòu)(502)獲得的數(shù)據(jù)(523、522)進(jìn)行比較。
6.如權(quán)利要求1所述的方法,其中
步驟(c)還包括將本地地址存儲(chǔ)在本地?cái)?shù)據(jù)結(jié)構(gòu)(502)中,所述本地地址從用于從共享資源進(jìn)行讀取的主題設(shè)置指令中指定的主題設(shè)置地址獲得;以及
步驟(d)還包括將本地地址(523)與從主題檢查指令獲得的檢查地址進(jìn)行比較。
7.如權(quán)利要求1所述的方法,其中
步驟(c)還包括將本地值(522)存儲(chǔ)在本地?cái)?shù)據(jù)結(jié)構(gòu)(502)中,所述本地值存儲(chǔ)從關(guān)于主題設(shè)置指令中指定的設(shè)置地址的共享資源(401)讀取的數(shù)據(jù)值;以及
步驟(d)還包括將本地值(522)與從關(guān)于主題檢查指令中指定的檢查地址的共享資源(401)讀取的數(shù)據(jù)值進(jìn)行比較。
8.如權(quán)利要求1所述的方法,其中
步驟(c)還包括
在本地?cái)?shù)據(jù)結(jié)構(gòu)(502)中存儲(chǔ)以下項(xiàng)從用于從共享資源(401)進(jìn)行讀取的主題設(shè)置指令中指定的設(shè)置地址獲得的本地地址(523);和存儲(chǔ)從關(guān)于所述設(shè)置地址的共享資源(401)讀取的數(shù)據(jù)值的本地值(522);以及
步驟(d)還包括
將本地地址(523)與從主題檢查指令獲得的檢查地址進(jìn)行比較;以及
將本地值(522)與從關(guān)于檢查地址的共享資源讀取的數(shù)據(jù)值進(jìn)行比較。
9.如權(quán)利要求1所述的方法,其中,步驟(d)還包括響應(yīng)于主題檢查指令將新的數(shù)據(jù)值存儲(chǔ)到共享資源(401)。
10.如權(quán)利要求1所述的方法,其中,步驟(d)還包括調(diào)整全局令牌(501)。
11.如權(quán)利要求1所述的方法,其中,全局令牌(501)是數(shù)字計(jì)數(shù)器值。
12.如權(quán)利要求11所述的方法,其中,存儲(chǔ)本地令牌(521)的步驟包括復(fù)制全局令牌(501)的當(dāng)前值。
13.如權(quán)利要求11所述的方法,其中,調(diào)整全局令牌(501)的步驟包括遞增計(jì)數(shù)器。
14.如權(quán)利要求11所述的方法,包括在目標(biāo)處理器(13)上原子調(diào)整全局令牌(501)。
15.如權(quán)利要求1所述的方法,包括將能夠被主題處理器(400)執(zhí)行的主題代碼(17)翻譯成能夠被目標(biāo)處理器(13)執(zhí)行的目標(biāo)代碼(21)。
16.如權(quán)利要求15所述的方法,包括執(zhí)行從主題代碼(17)到目標(biāo)代碼(21)的動(dòng)態(tài)二進(jìn)制翻譯。
17.如權(quán)利要求15所述的方法,其中,目標(biāo)處理器(13)包括與主題處理器(400)類(lèi)型不同的處理器。
18.一種執(zhí)行從能夠被主題處理器(400)執(zhí)行的主題代碼(17)到能夠被目標(biāo)處理器(13)執(zhí)行的目標(biāo)代碼(21)的程序代碼轉(zhuǎn)換的翻譯器設(shè)備,所述設(shè)備包括翻譯單元(19),將主題代碼(17)翻譯成用于在目標(biāo)處理器(13)上執(zhí)行的翻譯的目標(biāo)代碼(21),其中,主題代碼(17)包括多個(gè)主題線程;其特征在于翻譯器單元(19)
(a)提供以下項(xiàng)多個(gè)本地?cái)?shù)據(jù)結(jié)構(gòu),每個(gè)本地?cái)?shù)據(jù)結(jié)構(gòu)都與所述多個(gè)主題線程中的一個(gè)相關(guān)聯(lián);以及全局令牌,對(duì)于主題線程中的每一個(gè)都是共用的;
(b)對(duì)主題代碼解碼,以識(shí)別設(shè)置與共享資源相關(guān)的主題訪問(wèn)協(xié)調(diào)機(jī)制的主題設(shè)置指令和檢查主題訪問(wèn)協(xié)調(diào)機(jī)制的主題檢查指令;
(c)響應(yīng)于主題設(shè)置指令,產(chǎn)生用于調(diào)整全局令牌的目標(biāo)代碼,并在當(dāng)前線程的本地?cái)?shù)據(jù)結(jié)構(gòu)中至少存儲(chǔ)本地令牌,其中,所述本地令牌(521)從調(diào)整的全局令牌得到;
(d)響應(yīng)于主題檢查指令產(chǎn)生目標(biāo)代碼,所述目標(biāo)代碼用于將至少存儲(chǔ)的本地令牌與全局令牌進(jìn)行比較以確定對(duì)共享資源的潛在干擾。
19.如權(quán)利要求18所述的翻譯器設(shè)備,其中,翻譯單元(19)被安排用于響應(yīng)于對(duì)共享資源(401)潛在干擾的事件調(diào)整全局令牌(501)。
20.如權(quán)利要求19所述的翻譯器設(shè)備,其中,翻譯單元(19)被安排用于從主題代碼或影響主題代碼(17)的中斷檢測(cè)系統(tǒng)調(diào)用,并作為響應(yīng)地調(diào)整全局令牌(501)以顯示對(duì)共享資源(401)的潛在干擾。
21.如權(quán)利要求18所述的翻譯器設(shè)備,其中,翻譯單元(19)被安排用于執(zhí)行關(guān)于第一主題線程(171)的步驟(c);調(diào)整關(guān)于第二主題線程(172)的全局令牌(501);以及執(zhí)行關(guān)于第一線程(171)的步驟(d),從而確定第二主題線程(172)對(duì)共享資源(401)的干擾。
22.如權(quán)利要求18所述的翻譯器設(shè)備,其中,翻譯單元(19)被安排用于將從主題設(shè)置指令獲得的數(shù)據(jù)存儲(chǔ)到本地?cái)?shù)據(jù)結(jié)構(gòu)(502)中;以及將從主題檢查指令獲得的數(shù)據(jù)與從本地?cái)?shù)據(jù)結(jié)構(gòu)(502)獲得的數(shù)據(jù)(523、522)進(jìn)行比較。
23.如權(quán)利要求18所述的翻譯器設(shè)備,其中,翻譯單元(19)被安排用于將本地地址存儲(chǔ)在本地?cái)?shù)據(jù)結(jié)構(gòu)(502)中,所述本地地址從用于從共享資源進(jìn)行讀取的主題設(shè)置指令中指定的主題設(shè)置地址獲得;以及將本地地址(523)與從主題檢查指令獲得的檢查地址進(jìn)行比較。
24.如權(quán)利要求18所述的翻譯器設(shè)備,其中,翻譯單元(19)被安排用于將本地值(522)存儲(chǔ)在本地?cái)?shù)據(jù)結(jié)構(gòu)(502)中,所述本地值存儲(chǔ)從關(guān)于主題設(shè)置指令中指定的設(shè)置地址的共享資源(401)讀取的數(shù)據(jù)值;以及將本地值(522)與從關(guān)于主題檢查指令中指定的檢查地址的共享資源(401)讀取的數(shù)據(jù)值進(jìn)行比較。
25.如權(quán)利要求18所述的翻譯器設(shè)備,其中,翻譯單元(19)被安排用于在本地?cái)?shù)據(jù)結(jié)構(gòu)(502)中存儲(chǔ)以下項(xiàng)從用于從共享資源(401)進(jìn)行讀取的主題設(shè)置指令中指定的設(shè)置地址獲得的本地地址(523);和存儲(chǔ)從關(guān)于所述設(shè)置地址的共享資源(401)讀取的數(shù)據(jù)值的本地值(522);將本地地址(523)與從主題檢查指令獲得的檢查地址進(jìn)行比較;以及將本地值(522)與從關(guān)于檢查地址的共享資源讀取的數(shù)據(jù)值進(jìn)行比較。
26.如權(quán)利要求18所述的翻譯器設(shè)備,其中,翻譯單元(19)被安排用于響應(yīng)于主題檢查指令翻譯器設(shè)備將新的數(shù)據(jù)值存儲(chǔ)到共享資源(401)。
27.如權(quán)利要求18所述的翻譯器設(shè)備,其中,翻譯單元(19)被安排用于在步驟(d)調(diào)整全局令牌(501)。
28.如權(quán)利要求18所述的翻譯器設(shè)備,其中,全局令牌(501)是數(shù)字計(jì)數(shù)器值。
29.如權(quán)利要求28所述的翻譯器設(shè)備,其中,翻譯單元(19)被安排用于通過(guò)復(fù)制全局令牌(501)的當(dāng)前值來(lái)存儲(chǔ)本地令牌(521)。
30.如權(quán)利要求28所述的翻譯器設(shè)備,其中,翻譯單元(19)被安排用于通過(guò)遞增計(jì)數(shù)器來(lái)調(diào)整全局令牌(501)。
31.如權(quán)利要求18所述的翻譯器設(shè)備,其中,翻譯單元(19)被安排用于在目標(biāo)處理器(13)上原子調(diào)整全局令牌(501)。
32.如權(quán)利要求18所述的翻譯器設(shè)備,其中,翻譯單元(19)被安排用于執(zhí)行從主題代碼(17)到目標(biāo)代碼(21)的動(dòng)態(tài)二進(jìn)制翻譯。
33.如權(quán)利要求18所述的翻譯器設(shè)備,其中,目標(biāo)處理器(13)包括與主題處理器(400)類(lèi)型不同的處理器。
34.一種其上記錄有通過(guò)計(jì)算機(jī)實(shí)現(xiàn)的指令的計(jì)算機(jī)可讀介質(zhì),所述指令執(zhí)行提供共享資源的訪問(wèn)協(xié)調(diào)機(jī)制的方法,所述方法用于在從具有多個(gè)主題線程(171、172)的主題代碼(17)到能夠被目標(biāo)處理器(13)執(zhí)行的目標(biāo)代碼(21)的程序代碼轉(zhuǎn)換,所述方法的特征在于以下步驟
(a)提供以下項(xiàng)多個(gè)本地?cái)?shù)據(jù)結(jié)構(gòu)(502a、502b),每個(gè)本地?cái)?shù)據(jù)結(jié)構(gòu)都與多個(gè)主題線程(171、172)中的一個(gè)相關(guān)聯(lián);以及全局令牌(501),對(duì)于主題線程(171、172)中的每一個(gè)都是共用的;
(b)對(duì)主題代碼(17)解碼,以識(shí)別設(shè)置與共享資源(401)相關(guān)的主題訪問(wèn)協(xié)調(diào)機(jī)制的主題設(shè)置指令和檢查主題訪問(wèn)協(xié)調(diào)機(jī)制的主題檢查指令;
(c)響應(yīng)于主題設(shè)置指令,產(chǎn)生用于調(diào)整全局令牌(501)的目標(biāo)代碼(21),并在當(dāng)前線程的本地?cái)?shù)據(jù)結(jié)構(gòu)(502)中至少存儲(chǔ)本地令牌(521),其中,所述本地令牌(521)從調(diào)整的全局令牌(501)得到;
(d)響應(yīng)于主題檢查指令產(chǎn)生目標(biāo)代碼,所述目標(biāo)代碼用于將至少存儲(chǔ)的本地令牌(521)與全局令牌(501)進(jìn)行比較以確定對(duì)共享資源(401)的潛在干擾。
35.一種本地?cái)?shù)據(jù)結(jié)構(gòu),包括一個(gè)或多個(gè)本地令牌、本地地址和本地值。
全文摘要
一種動(dòng)態(tài)二進(jìn)制翻譯器(19),將主題程序(17)翻譯成目標(biāo)處理器(13)上的目標(biāo)代碼(21)。對(duì)于多線程主題環(huán)境,翻譯器19提供對(duì)每個(gè)線程(171、172)共用的全局令牌(501),以及一個(gè)或多個(gè)系列的本地?cái)?shù)據(jù)(502),全局令牌和本地?cái)?shù)據(jù)一起被采用以協(xié)調(diào)對(duì)作為共享資源的存儲(chǔ)器(18)的訪問(wèn)。調(diào)整全局令牌(501)允許每個(gè)線程中的本地?cái)?shù)據(jù)結(jié)構(gòu)(502a、502b)檢測(cè)對(duì)共享資源(18)的潛在干擾。
文檔編號(hào)G06F9/45GK101194230SQ200680020005
公開(kāi)日2008年6月4日 申請(qǐng)日期2006年6月5日 優(yōu)先權(quán)日2005年6月6日
發(fā)明者保羅·諾爾斯, 加文·巴拉克勞 申請(qǐng)人:特蘭斯蒂有限公司
網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1