欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

可虛擬化的先進(jìn)同步設(shè)備的制作方法

文檔序號:6594766閱讀:203來源:國知局
專利名稱:可虛擬化的先進(jìn)同步設(shè)備的制作方法
可虛擬化的先進(jìn)同步設(shè)備
背景技術(shù)
共享存儲器(Shared-memory)計(jì)算機(jī)系統(tǒng)允許多個(gè)并發(fā)執(zhí)行的線程訪問共享存 儲器位置。不幸的是,由于協(xié)調(diào)并發(fā)存儲訪問的復(fù)雜性,編制正確的多線程程序是困難的。傳統(tǒng)的,為了確保程序的正確性,編程者已經(jīng)使用鎖(lock)或其他相互排除機(jī)制 來調(diào)整到共享存儲器位置的訪問。例如,使用傳統(tǒng)的鎖,一個(gè)線程可以被配置為在每一個(gè)它 需要獨(dú)占訪問的存儲器位置上請求并持有一個(gè)鎖。當(dāng)該線程持有鎖時(shí),沒有其他的線程可 以請求該鎖,并且因此,沒有其他的線程能夠訪問被該鎖保護(hù)的存儲器位置。然而,傳統(tǒng)的 鎖定機(jī)制(locking techniques)對多種缺陷來說是易攻擊的,包括死鎖、競態(tài)條件,優(yōu)先級 翻轉(zhuǎn),軟件復(fù)雜度以及性能限制。一種替代的并發(fā)控制方式是事務(wù)存儲器(transactional memory) 0在事務(wù) 存儲器編程模式下,編程者能夠指定代碼段(一條執(zhí)行路徑或一組代碼指令)作為“事 務(wù)” (transaction),該代碼段相對于其他線程的執(zhí)行應(yīng)該被原子地(atomically)執(zhí)行。舉 例來說,如果該事務(wù)包括兩個(gè)存儲器存儲操作,那么事務(wù)存儲系統(tǒng)則要確保所有的其他線 程僅僅可以或者看到這兩個(gè)存儲操作的疊加結(jié)果或者兩個(gè)操作結(jié)果都看不到,但是不會只 看到其中一個(gè)存儲操作的結(jié)果。除了簡單的編程模式之外,由于事務(wù)存儲系統(tǒng)可允許比傳 統(tǒng)的鎖更細(xì)粒度的(grained)存儲器共享,因此事務(wù)存儲系統(tǒng)也能夠提高應(yīng)用的性能。近來已經(jīng)提出了多種不同的事務(wù)存儲系統(tǒng),包括那些以硬件、軟件以及結(jié)合的方 式實(shí)現(xiàn)的。然而,許多以前的概念和實(shí)現(xiàn)被不同的限制所局限。例如,當(dāng)基于硬件的事務(wù)存 儲系統(tǒng)(HTM)可能受抑于復(fù)雜的實(shí)現(xiàn)時(shí),基于軟件的事務(wù)存儲系統(tǒng)(STM software-based transactional memory system)則需要承受令人不快的性能過載。

發(fā)明內(nèi)容
在事務(wù)存儲系統(tǒng)中執(zhí)行事務(wù)的系統(tǒng)和方法被公開。該系統(tǒng)包括耦合到共享存儲器 的多個(gè)處理器中的一個(gè)處理器。其中該處理器執(zhí)行相對于多處理器的執(zhí)行是原子(atomic) 事務(wù)的代碼段,所述代碼段包括到共享存儲器的多個(gè)存儲器訪問操作。根據(jù)一些實(shí)施例,處理器可被配置為確定存儲器訪問操作是否包括一組禁止指令 的任何一個(gè),其中,該組指令包括一個(gè)或多個(gè)在虛擬計(jì)算環(huán)境中和原生計(jì)算環(huán)境中以不同 方式操作的指令。如果任何存儲器訪問操作是上述禁止指令之一,那么處理器中止該事務(wù)。


圖1是根據(jù)不同實(shí)施例,說明被配置為實(shí)現(xiàn)ASF的多處理器計(jì)算機(jī)系統(tǒng)組件的方 塊圖。圖2是根據(jù)一個(gè)實(shí)施例,說明組成處理器的更詳細(xì)的組件視圖的方塊圖。圖3是根據(jù)不同實(shí)施例,說明利用ASF執(zhí)行事務(wù)的方法大致流程圖。圖4是根據(jù)一個(gè)實(shí)施例,說明嵌套事務(wù)(nested transaction)例子的方塊圖。圖5是根據(jù)一些實(shí)施例,說明預(yù)測(SPE⑶LATE)指令實(shí)現(xiàn)在回退模式(rollbackmode)下開始預(yù)測段的流程圖。圖6是根據(jù)一些實(shí)施例,說明在條件存儲模式下執(zhí)行開始(BEGIN)指令以開始預(yù) 測段的步驟的流程圖。圖7是根據(jù)一些實(shí)施例,一組定義了各種ASF實(shí)現(xiàn)如何處理數(shù)據(jù)競爭的規(guī)則組成 的表。圖8是根據(jù)不同實(shí)施例,說明在回退模式下ASF機(jī)制可執(zhí)行事務(wù)的方法流程圖。圖9是根據(jù)一些實(shí)施例,說明諸如通過執(zhí)行提交(COMMIT)指令提交事務(wù)的方法。圖10是根據(jù)一些實(shí)施例,說明在條件存儲模式下執(zhí)行事務(wù)的方法流程圖。圖11是根據(jù)一個(gè)實(shí)施例,說明用于配置基于ASF的事務(wù)以用鎖代碼進(jìn)行互操作的 方法流程圖。圖12是說明被配置為實(shí)現(xiàn)不同ASF實(shí)施例的計(jì)算機(jī)系統(tǒng)的一個(gè)實(shí)施例,如此處所 述。盡管此處通過不同的實(shí)施例以及所示附圖描述本發(fā)明,本領(lǐng)域技術(shù)人員應(yīng)該意識 到本發(fā)明不限于所描述的實(shí)施例或附圖??梢员焕斫獾氖?,此處的附圖和詳細(xì)的說明書并 不試圖將本發(fā)明限定在所公開的特定形式上,相反地,應(yīng)涵蓋所附權(quán)利要求所限定的所有 落于本發(fā)明的精神與領(lǐng)域的修改、相等物與替代形式。此處使用的任何標(biāo)題僅用于組織目 的而不意味著限制說明書或權(quán)利要求的范圍。申請中所使用的單詞“可/可以(may)”用來 表示許可的意思(也就是可能可以)而不是強(qiáng)制的意思(也就是必須)。同樣的,單詞“包 括(include, including, includes),,意味著包括而不限于。優(yōu)選實(shí)施方式的詳細(xì)描述事務(wù)存儲系統(tǒng)可允許在多線程系統(tǒng)中的軟件線程相對于其他線程原子地 (atomically)訪問(讀和/或?qū)?一組共享存儲器位置,而不需要與諸如使用鎖的互斥排 他的傳統(tǒng)同步機(jī)制相關(guān)的額外系統(tǒng)開銷和復(fù)雜編程。然而,為了提高事務(wù)存儲系統(tǒng)的性能, 更進(jìn)一步的技術(shù)是必須的。根據(jù)一些實(shí)施例,不同的硬件機(jī)制可用來實(shí)現(xiàn)高效的事務(wù)存儲機(jī)制,如此處描述。 在一些實(shí)施例中,在計(jì)算上很便宜的元語(primitivies)(例如程序指令)可被定義成命令 硬件執(zhí)行不同的同步功能,這些元語可被用來合成更高級的同步機(jī)制。此處的硬件機(jī)制和 /或程序指令可被統(tǒng)稱為高級同步工具(ASF =Advanced Synchronization Facility)。在一些實(shí)施例中,一種現(xiàn)有的處理器架構(gòu)(例如x86)可被擴(kuò)充來實(shí)現(xiàn)ASF機(jī)制。 為了清楚的解釋這一點(diǎn),本發(fā)明的其余部分會描述公知的64位x86構(gòu)架AMD64如何用ASF 機(jī)制擴(kuò)充來實(shí)現(xiàn)事務(wù)存儲器。然而,這些示例性實(shí)施例并不是為了將ASF機(jī)制僅限于這種 架構(gòu)中,根據(jù)發(fā)明的優(yōu)點(diǎn),在其他處理器架構(gòu)中實(shí)現(xiàn)ASF機(jī)制對本領(lǐng)域技術(shù)人員是顯而易 見的。圖1是根據(jù)不同實(shí)施例,說明被配置來實(shí)現(xiàn)ASF的多處理器計(jì)算機(jī)系統(tǒng)組件的方 塊圖。根據(jù)所示的實(shí)施例,計(jì)算機(jī)系統(tǒng)100可包括多個(gè)處理器,如處理器IlOa和110b。在 一些實(shí)施例中,處理器110可包括多個(gè)物理或邏輯(例如,SMT)的內(nèi)核并且它們彼此耦合和 /或通過互聯(lián)(interconnect)諸如140耦合到共享存儲器150上。在不同的實(shí)施例中,可 使用不同的互聯(lián)(interconnect),比如處于不同的拓?fù)浣Y(jié)構(gòu)(例如,全連接,環(huán)形鏈接等) 的共享存儲器總線或點(diǎn)到點(diǎn)網(wǎng)絡(luò)。
根據(jù)所示的實(shí)施例,每一個(gè)處理器110可包括一層或多層存儲器緩存(memory cache) 130。存儲器緩存的層數(shù)可被分層設(shè)置(例如,Ll緩存,L2緩存,L3緩存等)并且用 來緩存存儲在共享存儲器150中的值的本地副本。在不同的實(shí)施例中,存儲器緩存130可包括多種緩存一致性機(jī)制132。在一個(gè)實(shí) 施例中,緩存一致性機(jī)制132可在互聯(lián)的處理器之間實(shí)現(xiàn)緩存一致性通信協(xié)議以確保包 含在每一個(gè)處理器110的存儲器緩存130中的值與存儲在共享存儲器和/或其他處理器 的存儲器緩存中的值相一致。一些這樣的協(xié)議已經(jīng)存在(包括MESI (Illinois協(xié)議)和 MOESI協(xié)議)并且可由多種的實(shí)施方式來實(shí)現(xiàn)。緩存一致性協(xié)議可定義一組消息和規(guī)則, 通過這些消息和規(guī)則處理器可相互通知對共享的數(shù)據(jù)的修改并因此來確保緩存的一致性。 例如,根據(jù)MESI協(xié)議,每一個(gè)存儲在緩存中的塊必須被標(biāo)記為四種狀態(tài)中的一種修改 (modified)、互斥(exclusive)、共享(shared)或無效(invalid)。給定的協(xié)議定義一組發(fā) 送和解釋這些狀態(tài)的消息和規(guī)則,通過這些定義處理器維護(hù)在每一個(gè)塊上的正確標(biāo)記?;?于給定的緩存塊的狀態(tài),處理器可被限制不能執(zhí)行一些操作。例如,處理器不可以執(zhí)行依賴 于被標(biāo)記為無效的緩存塊的程序指令。在不同的實(shí)施例中,緩存一致性機(jī)制可通過硬件、軟 件或其結(jié)合來實(shí)現(xiàn)。緩存一致性消息可通過互聯(lián)140來被通信并且可被廣播或點(diǎn)到點(diǎn)傳 播。根據(jù)所示的實(shí)施例,每一個(gè)處理器110也可以包括實(shí)現(xiàn)事務(wù)存儲的多種ASF機(jī)制, 如此處所述。在不同的實(shí)施例中,更多的處理器110被連接到互聯(lián)140,并且多種分層的存 儲器緩存可在多個(gè)這樣的處理器和/或每一個(gè)處理器的多個(gè)內(nèi)核之間共享。圖2是根據(jù)一個(gè)實(shí)施例,說明組成處理器諸如處理器110的組件的更詳細(xì)視圖的 方塊圖。根據(jù)圖2所示的實(shí)施例,處理器200包括寄存器文件210,該文件可包括各種寄存 器,其中每個(gè)寄存器可以是任意大小的(例如,16-位,32-位,64-位,128-位等等)。例如, 寄存器文件210可包括多種現(xiàn)有的x86寄存器,諸如rSP寄存器212(堆棧指針),rIP寄存 器214 (指令指針),rAX寄存器216 (累加器寄存器),和/或rFLAGS寄存器218 (指示處 理器狀態(tài)的標(biāo)志寄存器)。在一些實(shí)施例中,寄存器文件210可進(jìn)一步包括任意數(shù)量的通用 目的寄存器220和/或浮點(diǎn)指針寄存器222。在一些實(shí)施例中,寄存器文件210可包括一個(gè) 或多個(gè)128-位寄存器,諸如XMM寄存器224。在不同的實(shí)施例中,寄存器文件210可包括任 意數(shù)量的其他具有各種大小的寄存器226。根據(jù)所示的實(shí)施例,處理器200可包括用來在共享存儲器中存儲本地副本的存儲 器緩存230和用來維持分布在共享存儲器、緩存和其他緩存中的多個(gè)副本的數(shù)值的一致性 的緩存一致性機(jī)制232。處理器200也可包括用來實(shí)現(xiàn)事務(wù)同步機(jī)制的ASF機(jī)制M0,如 此處所述。根據(jù)不同的實(shí)施例,ASF機(jī)制240可包括數(shù)據(jù)結(jié)構(gòu)和/或邏輯來實(shí)現(xiàn)此處所述 的存儲器事務(wù)。在一些實(shí)施例中,ASF機(jī)制240可包括一個(gè)鎖定線緩沖器(locked line buffer) 242,其可被用在發(fā)生中止(abort)時(shí)回退由部分已執(zhí)行的事務(wù)對存儲器造成的改 變,如下所述。在一些實(shí)施例中,ASF機(jī)制240可包括嵌套層寄存器M4,其可存儲指示當(dāng)前 事務(wù)被嵌套到其他事務(wù)中的深度值,如下詳細(xì)描述。在一些實(shí)施例中,ASF機(jī)制可包括指示 事務(wù)是否處于有效狀態(tài)的標(biāo)志,諸如事務(wù)有效狀態(tài)標(biāo)志(transaction active flag) 2460 在一些實(shí)施例中,ASF機(jī)制可包括指示事務(wù)模式的標(biāo)志,諸如條件存儲模式標(biāo)志M8,設(shè)置 該標(biāo)志來指示執(zhí)行中的事務(wù)是否處于條件存儲模式或其他模式下。在進(jìn)一步的實(shí)施例中,其他標(biāo)志和/或寄存器可在ASF機(jī)制中實(shí)現(xiàn)以支持事務(wù)的執(zhí)行。圖3是根據(jù)不同實(shí)施例說明利用ASF來執(zhí)行事務(wù)的方法流程圖。根據(jù)所示的實(shí) 施例,ASF可允許軟件(例如,線程)通過執(zhí)行表示事務(wù)開始的給定指令(或多個(gè)指令) 來開始一個(gè)事務(wù)(關(guān)鍵段代碼),如步驟310所示。如后討論的,在不同的實(shí)施例中,諸如 SPECTULATE或BEGIN的ASF指令可用來指示關(guān)鍵段(critical section)的開始。在一個(gè)事務(wù)開始之后,線程可執(zhí)行包括事務(wù)實(shí)體的一系列指令,如步驟320所示。 該系列指令可包括多個(gè)存儲器訪問(讀和/或?qū)?操作,一些存儲器訪問操作可指定被訪 問的存儲器位置應(yīng)該是受保護(hù)(protected)的。線程可指定給定的存儲器位置應(yīng)該通過使 用由ASF提供的一個(gè)或多個(gè)特定說明符(declarator)指令來被保護(hù)。ASF機(jī)制可確保到 受保護(hù)存儲器(由說明符指令所指定的)的訪問相對于系統(tǒng)中所有其他同時(shí)執(zhí)行的線程原 子地(atomically)發(fā)生(所有的訪問同時(shí)發(fā)生或沒有訪問發(fā)生)。例如,如果事務(wù)包括多 個(gè)到存儲器的受保護(hù)的寫操作,那么ASF機(jī)制可確保沒有其他線程可看到那些到存儲器的 受保護(hù)的寫操作的僅子集的結(jié)果。又例如,根據(jù)一些實(shí)施例,如果事務(wù)包括一個(gè)或多個(gè)受保 護(hù)的存儲器讀操作,那么ASF機(jī)制可確保只有在這樣的情況下,即在事務(wù)完成之前沒有其 他線程已修改受保護(hù)的讀位置,事務(wù)才成功地完成。在多個(gè)實(shí)施例中,被說明符操作保護(hù)的 “存儲器位置”可以具有不同的大小,諸如取決于系統(tǒng)的緩存塊或其他大小。根據(jù)這樣的實(shí)施例,ASF可被配置為僅保護(hù)已利用指定的說明符指令指定的存儲 器線。在這樣的實(shí)施例中,所有其他存儲器位置可保持為未受保護(hù)的并且可使用標(biāo)準(zhǔn)的x86 指令在關(guān)鍵段內(nèi)被修改。這些到未保護(hù)的存儲器的修改對其他CPU是在執(zhí)行時(shí)(例如,以 程序順序(program order))即時(shí)可見的。在一些實(shí)施例中,事務(wù)實(shí)體(例如,在步驟320 中執(zhí)行的指令)可包括一個(gè)或多個(gè)其他事務(wù)(即,嵌套事務(wù))。根據(jù)多個(gè)實(shí)施例,如果事務(wù)執(zhí)行的一個(gè)或多個(gè)條件已經(jīng)被違背,那么該事務(wù)可中 止(如步驟330的肯定指向所示)。在不同的實(shí)施例中,事務(wù)嘗試可在任何點(diǎn)由于與其他處 理器的競爭、遠(yuǎn)程控制傳輸(far control transfer)(諸如由中斷或錯(cuò)誤引起的)、明確的 軟件指令A(yù)BORT的執(zhí)行、不足的硬件資源、其他特定的實(shí)現(xiàn)條件等等而中止。在不同的實(shí)施例中,當(dāng)事務(wù)嘗試中止時(shí),不同的恢復(fù)動作可基于事務(wù)執(zhí)行的模式 而被采用。在不同的實(shí)施例中,ASF可支持回退(rollback)模式的執(zhí)行和/或條件存儲 (store-conditional)模式的執(zhí)行。在一些實(shí)施例中,響應(yīng)于事務(wù)嘗試的中止,事務(wù)執(zhí)行的 模式可確定采取什么樣的動作。例如,在一些實(shí)施例中,中止回退模式下的事務(wù)可造成事務(wù) 的執(zhí)行被回退到事務(wù)的開始,而中止在條件存儲模式下的事務(wù)嘗試可使得事務(wù)繼續(xù)執(zhí)行但 是事務(wù)存儲操作卻不被執(zhí)行(即,在沒有被中止的事務(wù)上執(zhí)行事務(wù)存儲是有條件的)。根據(jù)所示的實(shí)施例,當(dāng)執(zhí)行在回退模式下的事務(wù)中止時(shí)(如步驟340的肯定指向 所示),ASF機(jī)制可被配置為執(zhí)行恢復(fù)動作,如步驟350,其包括丟棄(discard)對受保護(hù)線 的內(nèi)容的修改。通過丟棄這樣的修改,如步驟350,ASF機(jī)制可使得該修改對系統(tǒng)中的其他 線程是不可見的,因此符合了事務(wù)的原子特性。然而,ASF機(jī)制可被配置為不回退對未受保 護(hù)的存儲器的修改,諸如那些使用傳統(tǒng)x86存儲器指令來執(zhí)行的。在這些實(shí)施例中,應(yīng)用的 編程者可提供用于適應(yīng)這些未受保護(hù)的修改的軟件,諸如被配置為再次輸入通向關(guān)鍵段的 初始化序列的軟件恢復(fù)例程(routine)。在不同的實(shí)施例中,恢復(fù)動作350可被配置為僅回退系統(tǒng)寄存器(例如rIP和rSP)的子集而不是回退所有寄存器。在這樣的實(shí)施例中,不依賴于不同寄存器的內(nèi)容,當(dāng)進(jìn) 入到事務(wù)執(zhí)行中時(shí),軟件因此可被寫入(例如,通過忽略中止事件之后某些寄存器的原始 內(nèi)容和/或在事務(wù)執(zhí)行期間不修改多個(gè)寄存器)。在一些示例中,在中斷或異常處理程序(exception handler)返回前,操作系統(tǒng)代 碼或其他進(jìn)程可在該間歇執(zhí)行。進(jìn)一步,在一些示例中,其他進(jìn)程甚至已經(jīng)執(zhí)行ASF事務(wù), 該ASF事務(wù)觀察和修改作為中斷事務(wù)目標(biāo)的位置。在一些實(shí)施例中,通過在上下文轉(zhuǎn)換過 程中不需要維持任何ASF相關(guān)狀態(tài),ASF機(jī)制從而可排除這些顧慮。而是,在這樣的實(shí)施例 中,當(dāng)被中斷的線程返回到處理器時(shí),ASF機(jī)制可被配置為自動中止并重試該事務(wù)。根據(jù)所示的實(shí)施例,在執(zhí)行某個(gè)或一些恢復(fù)動作后,線程可重試事務(wù),如從步驟 350到步驟310所示的反饋循環(huán)。在一些實(shí)施例中,在條件存儲模式下執(zhí)行的事務(wù)中止(如步驟340的否定指向所 示)與在回退模式下執(zhí)行的事務(wù)中止(如步驟340的肯定指向所示)是以不同方式處理的。 例如,回退模式事務(wù)的中止可自動重置到關(guān)鍵段的開始部分(或到其他恢復(fù)代碼)的執(zhí)行 流程,而條件存儲模式下事務(wù)的中止可通過如下操作被處理,即撤消(undo)或以其他方 式丟棄由關(guān)鍵段對受保護(hù)存儲器位置中的數(shù)值的造成的修改然后“無效(deactivate) ”該 事務(wù),如步驟360中所示。在不同實(shí)施例中,無效該事務(wù)可包括設(shè)置指示中止已經(jīng)發(fā)生和/ 或事務(wù)不再有效的狀態(tài)代碼。在條件存儲模式下,在事務(wù)已經(jīng)被無效之后(步驟360),系統(tǒng) 可繼續(xù)執(zhí)行關(guān)鍵段而不需要執(zhí)行任何到受保護(hù)存儲器位置的存儲操作(步驟370)。例如, 在事務(wù)被無效后,隨后的到受保護(hù)存儲位置的操作可被看作無操作(no-op)。在一些實(shí)施例中,當(dāng)中止的事務(wù)完成時(shí),狀態(tài)代碼可被設(shè)置在寄存器(諸如rAX寄 存器216)中以指示事務(wù)已經(jīng)被中止。在一些實(shí)施例中,線程可被配置為檢測中止?fàn)顟B(tài)代碼 已經(jīng)被設(shè)置并且執(zhí)行一個(gè)或多個(gè)恢復(fù)操作,如從步驟370到步驟350的反饋循環(huán)所示。在 不同的實(shí)施例中,恢復(fù)動作350對在條件存儲模式下(即,從步驟370)中止的事務(wù)和在回 退模式下(即,從步驟340)中止的事務(wù)可以是不同的。在回退和條件存儲模式下事務(wù)的更 詳細(xì)的討論將在下面論述。根據(jù)所示的實(shí)施例,一旦事務(wù)實(shí)體已經(jīng)被完成,線程可執(zhí)行一個(gè)或多個(gè)指示到ASF 機(jī)制的事務(wù)結(jié)束的指令,如在步驟380中所示,諸如提交(COMMIT)指令,將會在下面討論。 在提交事務(wù)之后,如在步驟380中,線程可繼續(xù)執(zhí)行,如在步驟390中。在一些實(shí)施例中,ASF可支持一個(gè)或多個(gè)事務(wù)與一個(gè)或多個(gè)其他事務(wù)的嵌套。例 如,在步驟310中,在一個(gè)事務(wù)開始之后(例如,通過執(zhí)行預(yù)測(SPE⑶LATE)命令),在步驟 320中被執(zhí)行的事務(wù)實(shí)體的指令在第一個(gè)事務(wù)完成之前可開始另一個(gè)事務(wù)(例如,通過執(zhí) 行另一個(gè)預(yù)測(SPECTULATE)命令)。在這種情況下,第二個(gè)(“子”)事務(wù)可被稱作“嵌套” 在第一個(gè)(“父”)事務(wù)中。不嵌套在任何其他事務(wù)中的事務(wù)此處可被稱作“頂層”事務(wù)。圖4是根據(jù)一個(gè)實(shí)施例說明嵌套事務(wù)的例子。根據(jù)圖4所示,頂層父事務(wù)400是 一個(gè)包括兩個(gè)嵌套事務(wù)的回退模式事務(wù)同樣處于回退模式的嵌套父事務(wù)410和處于條件 存儲模式的嵌套事務(wù)440。根據(jù)所示的實(shí)施例,嵌套父事務(wù)400包括兩個(gè)嵌套事務(wù),包括嵌 套事務(wù)420和嵌套事務(wù)430,上述兩個(gè)事務(wù)分別處于回退模式和條件存儲模式。在一些實(shí)施例中,ASF機(jī)制可被配置為平滑(flatten)嵌套事務(wù)(例如,由多個(gè)預(yù) 測-提交對(SPE⑶LATE-C0MMIT pair)組成的)為單一事務(wù)。在一些實(shí)施例中,嵌套事務(wù)可共享ASF硬件資源。也就是說,在一些實(shí)施例中,在嵌套事務(wù)的執(zhí)行過程中,受父事務(wù)保 護(hù)的存儲器位置對子事務(wù)也是受保護(hù)的。進(jìn)一步的,在一些實(shí)施例中,即使在嵌套事務(wù)已經(jīng) 被完成之后,在嵌套事務(wù)中被保護(hù)的存儲器位置可依然在父事務(wù)中被保護(hù)。這樣,在一些實(shí) 施例中,當(dāng)處理被子事務(wù)保護(hù)的存儲器位置時(shí),父事務(wù)可能需要繼續(xù)使用保護(hù)存儲器操作。 因此,在這樣的實(shí)施例中,由父事務(wù)在被子事務(wù)保護(hù)的存儲器位置上執(zhí)行的常規(guī)存儲器寫 操作的使用可導(dǎo)致常見的保護(hù)錯(cuò)誤被引起(#GP異常)。在一些實(shí)施例中,一個(gè)或多個(gè)條件存儲事務(wù)可被嵌套在一個(gè)或多個(gè)回退事務(wù)中, 在一些實(shí)施例中,由于嵌套事務(wù)的平滑化,ASF機(jī)制可被配置為通過執(zhí)行頂層父事務(wù)的恢復(fù) 操作來響應(yīng)于嵌套的條件存儲事務(wù)的中止(如在步驟350中)。然而,根據(jù)一些實(shí)施例,在 條件存儲事務(wù)內(nèi)部,嵌套事務(wù)可能被禁止。為了使能事務(wù)執(zhí)行,ASF機(jī)制可定義并公開可以被軟件線程調(diào)用(invoke)的多個(gè) 一致性控制指令。由于這些指令在不同實(shí)施例中可能被不同地命名,因此多個(gè)實(shí)施例可公 開與下述一個(gè)或多個(gè)相匹配或相似的一致性控制指令。圖5是根據(jù)一些實(shí)施例說明預(yù)測(SPE⑶LATE)指令的實(shí)現(xiàn)。如上所討論的,在一 些實(shí)施例中,預(yù)測(SPE⑶LATE)指令可通過線程被執(zhí)行以指示回退模式中事務(wù)的開始。根 據(jù)所示的實(shí)施例,執(zhí)行預(yù)測(SPECTULATE)操作可包括檢查事務(wù)的嵌套是否超過了系統(tǒng)所 支持的最大嵌套深度,如在步驟505中。在不同的實(shí)施例中,不同的寄存器和/或存儲器位 置可被用來存儲(hold)當(dāng)前執(zhí)行事務(wù)的深度。如果該事務(wù)比系統(tǒng)定義的最大嵌套深度還 深的話,如步驟505否定指向所示,那么ASF機(jī)制可產(chǎn)生通用保護(hù)錯(cuò)誤(#GPW]),如在步驟 515 中。根據(jù)所示的實(shí)施例,執(zhí)行預(yù)測(SPECULATE)指令可進(jìn)一步包括確定事務(wù)是否被嵌 套到條件存儲事務(wù)中,如在步驟510中。在一些事務(wù)不能被嵌套到條件存儲事務(wù)中的實(shí)施 例中,為了響應(yīng)于檢測到父事務(wù)是條件存儲事務(wù),如步驟510中肯定指向所示,則ASF機(jī)制 可被配置為產(chǎn)生一個(gè)通用保護(hù)錯(cuò)誤(或采取其他動作),如在步驟515中。在不同的實(shí)施例 中,可讀出用于指示當(dāng)前執(zhí)行模式的寄存器或存儲器位置的內(nèi)容,以此來判斷父事務(wù)是否 在條件存儲模式下執(zhí)行。在進(jìn)一步的實(shí)施例中,事務(wù)合法性的其他不同檢查也被執(zhí)行并且 如果其中一個(gè)或多個(gè)條件被違反的話,則產(chǎn)生GP錯(cuò)誤。根據(jù)所示的實(shí)施例,如果事務(wù)是合法的(例如,沒有超出最大嵌套深度并且沒有 嵌套在條件存儲事務(wù)中),那么rAX寄存器(或其他相應(yīng)的寄存器)可被重置,諸如將其設(shè) 置為零值。在一些實(shí)施例中,rAX寄存器可存儲(hold)不同的數(shù)值和代碼以指示事務(wù)執(zhí)行 的狀態(tài),如下所述。根據(jù)所示的實(shí)施例,預(yù)測(SPECULATE)的執(zhí)行可確定該事務(wù)是否是頂層事務(wù),如 在步驟530中。在一些實(shí)施例中,這種確定包括根據(jù)檢查到的增加的嵌套層數(shù)的數(shù)值來確 定當(dāng)前的事務(wù)是否被嵌套。如果該事務(wù)是頂層事務(wù),如步驟530中肯定指向所示,則執(zhí)行預(yù) 測(SPE⑶LATE)可包括記錄檢查點(diǎn)(checkpoint),該檢查點(diǎn)包括能夠在事務(wù)被中止時(shí)由處 理器使用以返回到給定的回退點(diǎn)的信息。在一些實(shí)施例中,記錄檢查點(diǎn)可包括記錄在預(yù)測 (SPECULATE)指令已經(jīng)被執(zhí)行之后指令指針(例如,rIP214)和堆棧指針(例如,rSP212)的 即時(shí)值,如在步驟535和MO中。這樣,一旦事務(wù)被中止,該記錄的檢查點(diǎn)可被用來傳輸控 制到緊跟在預(yù)測(SPE⑶LATE)指令之后的指令上。在一些實(shí)施例中,執(zhí)行預(yù)測(SPE⑶LATE)可進(jìn)一步包括設(shè)置或修改一個(gè)或多個(gè)寄存器中的值以指示處理器狀態(tài),諸如在rFLAGS寄 存器218中的值。在一些實(shí)施例中,預(yù)測(SPE⑶LATE)指令可開始回退模式下的事務(wù),而不同的指 令(例如,開始(BEGIN))可在開始條件存儲模式下的事務(wù)。圖6是根據(jù)一些實(shí)施例說明執(zhí)行開始(BEGIN)指令的步驟。通過確定事務(wù)的 一個(gè)或多個(gè)合法性條件來開始方法600。在一些實(shí)施例中,上述合法性條件與執(zhí)行預(yù)測 (SPE⑶LATE)事務(wù)時(shí)檢查的條件是相似的。例如,在方法600中,執(zhí)行開始(BEGIN)包括確 定是否已達(dá)到最大嵌套深度(如在步驟605中)并確定當(dāng)前事務(wù)是否被嵌套在另一個(gè)條件 存儲段內(nèi)(如在步驟610中)。如果任何一個(gè)條件成立(如步驟605和步驟610各自的肯 定指向所示),那么ASF機(jī)制產(chǎn)生GP或其他錯(cuò)誤,如在步驟615中。另外,根據(jù)方法600,執(zhí) 行開始(BEGIN)可包括重置rAX或其他寄存器(例如,設(shè)為0),如在步驟620中,增加嵌套 層數(shù)(如在步驟625中),并設(shè)置當(dāng)前事務(wù)是在條件存儲模式下的標(biāo)志(如在步驟630中), 繼續(xù)事務(wù)實(shí)體的事務(wù)執(zhí)行(如在步驟635中)。在不同的實(shí)施例中,在步驟630中設(shè)置的標(biāo) 志可用來確定當(dāng)前事務(wù)是否處于條件存儲模式下,諸如在步驟510和610中。在一些實(shí)施例中,ASF機(jī)制可定義不同存儲器-引用(memory-reference)指令,被 稱作說明符(delcarators),這些指令用來指定哪些存儲器位置應(yīng)該被保護(hù)為事務(wù)的一部 分(需要原子訪問的存儲器位置)。例如,在一些實(shí)施例中,ASF機(jī)制可公開與標(biāo)準(zhǔn)的x86 MOV指令相似的用于讀取存儲器的說明符存儲器訪問指令。類似于傳統(tǒng)的MOV指令,ASF-定 義的LOCK MOV指令可被用來從存儲器中加載數(shù)據(jù)。然而,根據(jù)一些實(shí)施例,如果一個(gè)線程 使用LOCK MOV指令讀取事務(wù)內(nèi)部的存儲器位置,則ASF機(jī)制可增加包含引用存儲器位置的 第一字節(jié)的存儲器緩存塊到受保護(hù)的緩存塊組。在一些實(shí)施例中,軟件機(jī)制可確保未對準(zhǔn) (unaligned)的存儲器訪問不會跨越(span)受保護(hù)和不受保護(hù)的緩存線。根據(jù)一些實(shí)施 例,引用受保護(hù)的緩存塊的說明符指令可像通用存儲器引用一樣來操作并且不會改變塊的 受保護(hù)狀態(tài)。在一些實(shí)施例中,說明符在關(guān)鍵段外是被禁止的(例如,發(fā)生異常)。在一些 實(shí)施例中,關(guān)鍵段外的說明符可被看作是通用的存儲器操作。在一些條件存儲模式是可用 的實(shí)施例中可能會出現(xiàn)這種情況。在一些實(shí)施例中,ASF機(jī)制可定義說明符而不是LOCK MOV指令。例如,與x86 PREFETCH和/或PREFETC冊類似的指令可被使用(例如,LOCK PREFETCH,LOCK PREFETC冊)。 與x86指令相似的是,LOCK PREFETCH和LOCK PREFETCHW被用來從存儲器中提取數(shù)值以 讀(PREFETCH)或?qū)?PREFETCHW)到緩存中。然而,與沒有LOCK前綴的標(biāo)準(zhǔn)預(yù)取不同的是, L0CKPREFETCH和LOCK PREFETCHW可使得存儲器位置被保護(hù)。此外,在一些實(shí)施例中,LOCK PREFETCH和LOCK PREFETCHW也可校驗(yàn)特定存儲器地址的翻譯錯(cuò)誤和存儲器訪問權(quán)限(讀 或?qū)?,分別地),并在校驗(yàn)不成功的情況時(shí)生成頁面錯(cuò)誤。在一些實(shí)施例中,當(dāng)引用已經(jīng)被數(shù) 據(jù)斷點(diǎn)配置的存儲器地址時(shí),LOCK PREFETCH和LOCK PREFETCHW可生成#DB異常。在一些實(shí)施例中,一旦存儲器位置已經(jīng)使用說明符而被保護(hù)時(shí),則它在事務(wù)中不 是以非預(yù)測方式而是以預(yù)測方式被再次修改。例如,在一些實(shí)施例中,在存儲器位置已經(jīng)使 用LOCK MOV讀指令被讀取后,存儲在該位置的數(shù)值可使用ASF定義的LOCK MOV存儲指令 被以預(yù)測方式修改。根據(jù)一些實(shí)施例,這種預(yù)測的更新可僅在事務(wù)被提交時(shí)可見。根據(jù)這 樣的實(shí)施例,如果事務(wù)嘗試中止,那么預(yù)測的更新則被回退和/或以其他方式丟棄。在一些實(shí)施例中,在事務(wù)執(zhí)行期間,已經(jīng)使用說明符來保護(hù)的存儲器位置可僅被預(yù)測的存儲指令 修改。在這樣的實(shí)施例中,如果在事務(wù)模式下的線程試圖使用傳統(tǒng)的非預(yù)測存儲操作來修 改受保護(hù)的存儲器位置的數(shù)值時(shí),則ASF機(jī)制可產(chǎn)生異常/錯(cuò)誤(例如,#GP (0))。在一些實(shí)施例中,如果預(yù)測的存儲指令(例如,LOCK MOV)在關(guān)鍵段外被執(zhí)行,那 么異常則可能發(fā)生。在其他諸如條件存儲模式下是可用的實(shí)施例中,關(guān)鍵段外部的預(yù)測存 儲操作可被看作是無操作(no-op)。在不同的實(shí)施例中,說明符存儲器指令可參與到系統(tǒng)緩存一致性協(xié)議中。例如,如 果讀取存儲器位置的LOCK MOV或L0CKPREFETCH指令在緩存中不中(miss in the cache) 時(shí),它可發(fā)送非無效探測(probe)到其他處理器,如由系統(tǒng)緩存一致性協(xié)議所示。在另一個(gè) 例子中,如果給定的緩存線沒有在本地緩存中以排他/獨(dú)占狀態(tài)駐留,則使用LOCM MOV指 令修改該緩存線會導(dǎo)致發(fā)送無效探測(invalidating probe)到其他處理器,如在系統(tǒng)緩存 一致性協(xié)議所示。在一些實(shí)施例中,執(zhí)行LOCK PREFETCHW指令可也導(dǎo)致發(fā)送無效探測等等。不同的ASF機(jī)制可被用來監(jiān)測和/或加強(qiáng)受保護(hù)的存儲器位置(例如,受保護(hù)緩 存塊)。在一些實(shí)施例中,ASF機(jī)制可包括到一個(gè)或多個(gè)系統(tǒng)緩存的擴(kuò)展(例如,存儲器緩 存230),該擴(kuò)展用來指示哪些緩存線(塊)被保護(hù)。例如,在一個(gè)實(shí)施例中,在給定緩存中 的每一個(gè)緩存線可包括“被保護(hù)”標(biāo)志,如果在當(dāng)前執(zhí)行的事務(wù)中緩存線被保護(hù)時(shí)則設(shè)置該 標(biāo)志,反之則不設(shè)置。在一些實(shí)施例中,被保護(hù)的標(biāo)志可包括一個(gè)或多個(gè)位。在一些實(shí)施例中,跟蹤被保護(hù)緩存線的ASF機(jī)制可包括鎖定線緩沖器(locked line buffer)。在這樣的實(shí)施例中,當(dāng)被保護(hù)存儲器中的數(shù)值被修改時(shí)(例如,使用LOCK MOV指令),在鎖定線緩沖器上增加條目(entry)以指示修改之前的緩沖器所具有的緩存塊 和數(shù)值。在這樣的實(shí)施例中,當(dāng)事務(wù)中止發(fā)生時(shí),鎖定緩沖器的條目可被用來將每一個(gè)受保 護(hù)緩存線的事務(wù)前(pre-transaction)的數(shù)值恢復(fù)到本地緩存中。在這樣的實(shí)施例中,鎖 定線緩沖器可參與到系統(tǒng)緩存一致性協(xié)議中,如下所述。在另一個(gè)實(shí)施例中,不是如上面所述的利用鎖定線緩沖器來撤消(undo)存儲器 存儲,而是在事務(wù)被提交之前,不同的ASF實(shí)現(xiàn)可防止到關(guān)鍵段中的受保護(hù)存儲器位置的 存儲指令被寫入到緩存和/或存儲器中。例如,ASF可用來將所有存儲器修改保留在內(nèi)部 存儲緩沖器中并轉(zhuǎn)發(fā)這些緩沖的數(shù)值到事務(wù)中隨后的加載操作。在這樣的實(shí)施例中,一旦 事務(wù)被提交,則ASF機(jī)制可允許將內(nèi)部存儲緩沖器中被緩沖的存儲操作寫回到緩存中。在一些實(shí)施例中,由于不同ASF硬件組件的固定容量,可在事務(wù)(或嵌套的事務(wù) 組)執(zhí)行期間被同時(shí)保護(hù)的存儲器位置的數(shù)量上存在不同限制。例如,如上所述,根據(jù)一些 實(shí)施例,在關(guān)鍵段的時(shí)間段中,實(shí)現(xiàn)可能要求所有被保護(hù)存儲器位置同時(shí)駐留在一個(gè)數(shù)據(jù) 緩存中(例如,存儲器緩存230)。在這樣的實(shí)施例中,如果一個(gè)受保護(hù)的緩存線在事務(wù)執(zhí)行 期間被從緩存中逐出的話(例如,由于容量限制),則關(guān)鍵段被中止。例如,當(dāng)被保護(hù)存儲器 位置N+1 (其中所有N+1個(gè)存儲器位置被映射到N路關(guān)聯(lián)數(shù)據(jù)緩存中的相同的組)被訪問 時(shí),因?yàn)橹辽僖粋€(gè)被保護(hù)的緩存線被從緩存逐出,則碰巧引用N+1存儲器位置的關(guān)鍵段可 能失敗。然而,如果事務(wù)執(zhí)行更加分布的引用模式的話,那么在任何一個(gè)緩存索引被超出以 及受保護(hù)緩存線從數(shù)據(jù)緩存中被替換之前,事務(wù)能夠并發(fā)保護(hù)多于N個(gè)的存儲器位置。在不同的實(shí)施例中,可能存在不同于緩存關(guān)聯(lián)的容量限制。例如,在使用鎖定線緩 沖器的實(shí)施例中,并發(fā)的被保護(hù)修改存儲器位置的最大數(shù)量可由鎖定線緩沖器的容量來確定。在另一個(gè)采用存儲緩沖器機(jī)制的實(shí)施例中,ASF硬件容量可依賴于存儲緩沖器的容量 (由系統(tǒng)流水線(pipeline)支持的最大數(shù)量的剩余(outstanding)存儲)。在不同的實(shí)施例中,只要受保護(hù)位置的數(shù)量沒有超過給定的最小保證容量的話, 則ASF機(jī)制可保證關(guān)鍵段不會由于硬件容量的問題而失敗。在不同的實(shí)施例中,不管受保 護(hù)存儲器位置駐留在可緩存的地址空間的何處,上述保證都可實(shí)現(xiàn)。例如,在需要所有受保 護(hù)存儲器位置同時(shí)駐留在一個(gè)數(shù)據(jù)緩存的實(shí)施例中,最小保證容量可依賴于數(shù)據(jù)緩存的關(guān) 聯(lián)性(關(guān)聯(lián)組的大小)。在不同的實(shí)施例中,如果事務(wù)超出了硬件容量,那么事務(wù)嘗試可中 止。在一些實(shí)施例中,ASF機(jī)制可允許執(zhí)行事務(wù)的線程從事務(wù)的受保護(hù)存儲器位置 組中刪除未修改的受保護(hù)存儲器位置。在一些實(shí)施例中,通過執(zhí)行由ASF提供的明確的 RELEASE指令,線程可完成上述刪除操作。在一些實(shí)施例中,當(dāng)受保護(hù)的存儲器位置被釋放 時(shí)(例如,使用RELEASE指令),則不再監(jiān)視該位置與其他線程的競爭。例如,在使用受保護(hù) 標(biāo)志的實(shí)施例中,可修改與被釋放的緩存塊相關(guān)的受保護(hù)標(biāo)志的數(shù)值以指示該緩存塊不再 被保護(hù)。因此,通過從受保護(hù)存儲器位置組中刪除未修改的受保護(hù)存儲器位置,線程可避免 與其他線程不必要的數(shù)據(jù)沖突和/或超出ASF實(shí)現(xiàn)的硬件容量,上述沖突和超出容量可導(dǎo) 致事務(wù)中止。在一些實(shí)施例中,RELEASE指令可保證或不保證特定的受保護(hù)存儲器位置將 會被釋放。在一些實(shí)施例中,只有未被修改的受保護(hù)緩存線可被釋放。如上所述,在一些實(shí)施例中,如果事務(wù)試圖保護(hù)(利用說明符)比ASF實(shí)現(xiàn)容量能 夠支持的存儲器位置更多的存儲器位置(例如,緩存塊)的話,那么事務(wù)可被中止。在另一 實(shí)施例中,響應(yīng)于錯(cuò)誤的生成,中止也可被執(zhí)行。在不同的實(shí)施例中,事務(wù)中止可由不足的硬件容量之外的其它條件引起。例如,中 止可由存儲器競爭引起,也就是,是由其他試圖訪問受保護(hù)存儲器位置的處理器引起的沖 突。在不同的實(shí)施例中,ASF機(jī)制可被配置為檢測與一個(gè)或多個(gè)受保護(hù)緩存線相關(guān)的各種緩 存一致性消息(例如,無效和/或非無效(non-invalidating)探測)并確定該探測是否指 示存在數(shù)據(jù)沖突。響應(yīng)于檢測到的數(shù)據(jù)沖突,ASF機(jī)制可中止事務(wù)嘗試。例如,假定第一線 程是在事務(wù)模式下執(zhí)行并保護(hù)存儲器位置(使用說明符指令讀取存儲器位置)。如果隨后 第二線程試圖對上述被保護(hù)的存儲器位置進(jìn)行存儲,那么執(zhí)行第二線程的處理器可發(fā)送無 效探測到執(zhí)行第一線程的處理器,依照系統(tǒng)采用的特定緩存一致性協(xié)議。如果當(dāng)存儲器位 置依然被保護(hù)時(shí)(例如,在第一線程提交它的事務(wù)或以其他方式釋放存儲器位置之前)第 一處理器接收到了該無效探測,那么數(shù)據(jù)沖突則可能存在。在這樣一個(gè)例子中,ASF機(jī)制可 被配置為檢測無效探測是與被保護(hù)存儲器位置相關(guān)的并且響應(yīng)于該檢測,中止第一線程的 事務(wù)。根據(jù)不同的實(shí)施例,如果ASF機(jī)制檢測到與被保護(hù)緩存線相關(guān)的無效探測被接收 時(shí),則中止事務(wù)。在一些實(shí)施例中,如果ASF機(jī)制檢測到與被保護(hù)緩存線相關(guān)的非無效探測 被接收時(shí),則事務(wù)也被中止。圖7是根據(jù)一些實(shí)施例,由一組定義不同的ASF實(shí)現(xiàn)如何處理數(shù)據(jù)沖突的規(guī)則組 成的表。圖7的表描述了如下沖突的結(jié)果,S卩,當(dāng)在第一處理器(CPU Α)上執(zhí)行的第一線程 在給定存儲器位置上執(zhí)行給定存儲器訪問操作時(shí),第二處理器(CPU B)上的第二線程正在 執(zhí)行已經(jīng)保護(hù)該位置的事務(wù)。如上所述,不同緩存一致性協(xié)議允許存儲器緩存具有不同的狀態(tài)的緩存存儲器的值,諸如只讀訪問的“共享”狀態(tài),或者寫訪問的“獨(dú)占,,或“排他”狀 態(tài)?!氨Wo(hù)共享”和“保護(hù)獨(dú)占”列各自對應(yīng)于共享和獨(dú)占狀態(tài)的受保護(hù)緩存線。例如,根據(jù)一個(gè)實(shí)施例,在圖7的表中的頂層條目詳細(xì)描述了如何處理這種狀況, 其中CPU A正在任意模式中(關(guān)鍵段的內(nèi)部或外部)執(zhí)行并且執(zhí)行對CPU B保護(hù)的處于共 享或獨(dú)占狀態(tài)之一的存儲器位置的讀操作。根據(jù)所示的實(shí)施例,如果CPU B保護(hù)的位置處于 獨(dú)占狀態(tài),那么CPU B的事務(wù)中止,反之則CPU B的事務(wù)不中止。如果CPU A已經(jīng)在任意模 式中執(zhí)行預(yù)取操作或它已經(jīng)從事務(wù)內(nèi)部執(zhí)行LOCK MOV或LOCK PREFETCH操作,那么將生成 類似的結(jié)果。然而,根據(jù)所示的實(shí)施例,如果CPU A將在任意模式中執(zhí)行寫或PREFETCHW操 作到存儲器位置或者在事務(wù)模式中執(zhí)行LOCK PREFETCHW操作到存儲器位置的話,那么CPU B將中止事務(wù)而不管它所持有的存儲器位置是獨(dú)占還是共享狀態(tài)。在一些實(shí)施例中,事務(wù)可利用ASF定義的ABORT指令被明確的中止。在一些實(shí)施 例中,由于其試圖執(zhí)行禁止指令(諸如導(dǎo)致遠(yuǎn)程控制傳輸?shù)闹噶?,事務(wù)可被中止。在不同 的實(shí)施例中,遠(yuǎn)程控制傳輸可包括傳輸控制到另一段中的位置的指令,諸如通過改變x86 實(shí)現(xiàn)中的CS寄存器的內(nèi)容來實(shí)現(xiàn)。遠(yuǎn)程控制傳輸可包括陷阱(trap),錯(cuò)誤,匪Is,SMIs, 未遮罩(unmasked)和未延遲(nondeferred)的中斷,被轉(zhuǎn)化為異常的禁止指令,等等。在 一些實(shí)施例中,禁止指令可包括特權(quán)化指令,諸如那些必須在高特權(quán)層(例如,CPL = 0)被 執(zhí)行的、導(dǎo)致遠(yuǎn)程控制傳輸或異常的指令以及任何可被安全虛擬機(jī)(SVMuecure virtual machine)管理程序(hypervisor)解釋的指令。在不同的實(shí)施例中,禁止指令可包括參 FAR JMP,F(xiàn)AR CALL, FAR RET· SYSCALL, SYSRET, SYSENTER, SYSEXIT· INT, INTx, I RET, RSM· BOUND, UD2· PUSHF, POPF, PAUSE, HLT, CPUID, MONITOR, MWAIT, RDTSC, RDTSCP, RDPMC· IN, OUT 所有特權(quán)化指令(All privileged instructions) 所有 SVM 指令(All SVM instructions)此處所使用的術(shù)語SVM指令指的是虛擬機(jī)監(jiān)視程序和/或虛擬機(jī)可用來在虛擬機(jī) 的邊界進(jìn)行交互的任何指令。在不同的實(shí)施例中,這樣的指令可包括,但不限于,VMRUN(運(yùn) 行虛擬機(jī)),VML0AD/VMSAVE(加載/保存不同的虛擬機(jī)狀態(tài)到處理器中和/或存儲器中的 保存區(qū)域),和/或VMCALL (執(zhí)行對虛擬機(jī)監(jiān)視程序的調(diào)用)。在不同的實(shí)施例中,虛擬機(jī)監(jiān)視程序可諸如通過截取操作來阻止處理器上一組可 配置指令的執(zhí)行。此處這樣的指令被稱作“可截取的”。根據(jù)一些實(shí)施例,多個(gè)或所有的SVM 指令可以是可截取的。在一些實(shí)施例中,事務(wù)內(nèi)部任何可截取的指令的執(zhí)行會導(dǎo)致事務(wù)被 中止。在一些實(shí)施例中,ASF機(jī)制可禁止事務(wù)中的指令在虛擬環(huán)境中(例如,虛擬機(jī))和 在原生環(huán)境中執(zhí)行不同的操作。通過強(qiáng)加這樣的限制,實(shí)施例可被完全虛擬化并可被用在 虛擬機(jī)環(huán)境中而不需要忍受來自當(dāng)在虛擬環(huán)境中被執(zhí)行時(shí)這樣的指令可能會造成的不可 預(yù)測或不正確的行為。例如,在一些實(shí)施例中,所有可截取的指令在事務(wù)內(nèi)部是被禁止的。 在一些實(shí)施例中,虛擬機(jī)特定指令和/或特權(quán)化指令被禁止。
在一些實(shí)施例中,試圖執(zhí)行禁止指令或在關(guān)鍵段中弓I發(fā)遠(yuǎn)程控制傳輸?shù)闹噶羁缮?成異常(例如,#GP異常),這會造成事務(wù)嘗試被中止。在一些實(shí)施例中,遠(yuǎn)程控制傳輸可在 中止之后執(zhí)行。在這樣的實(shí)施例中,軟件修復(fù)規(guī)則可基于從遠(yuǎn)程控制傳輸(或被禁止事務(wù) 所引起的異常所調(diào)用的錯(cuò)誤處理程序)的返回而被執(zhí)行。如上所述,在不同的實(shí)施例中,基于硬件容量限制,與其他線程的存儲器沖突,執(zhí) 行禁止指令的線程(例如,遠(yuǎn)程控制傳輸),和/或如果該線程執(zhí)行明確的ABORT指令,ASF 機(jī)制可中止事務(wù)嘗試。圖8是根據(jù)不同實(shí)施例說明ASF機(jī)制在回退模式下執(zhí)行事務(wù)的方法流程圖。根 據(jù)方法800,線程可首先通過執(zhí)行SPE⑶LATE指令來開始在回退模式下的事務(wù)。如圖5中 所詳細(xì)描述的,執(zhí)行SPECULATE可包括檢查點(diǎn)(保存)指令和堆棧寄存器值以供以后使 用。然而,在一些實(shí)施例中,如果事務(wù)被嵌套到其他事務(wù)中,那么檢查點(diǎn)可能已存在并且 SPECULATE指令將不會導(dǎo)致其他檢查點(diǎn)被記錄,如圖5所示。執(zhí)行SPE⑶LATE指令之后,線程可確定是否已設(shè)置中止?fàn)顟B(tài),如在步驟810中,并 且如果已經(jīng)設(shè)置的話,則跳轉(zhuǎn)并執(zhí)行恢復(fù)例程,諸如步驟815。在一些實(shí)施例,軟件可通過檢 查一個(gè)或多個(gè)放置多個(gè)中止?fàn)顟B(tài)代碼的寄存器(例如,rAX寄存器)來確定中止?fàn)顟B(tài)代碼 是否已被設(shè)置。在一些實(shí)施例中,不同的中止?fàn)顟B(tài)代碼指示之前的事務(wù)嘗試是否以及因?yàn)?什么原因被中止。在不同的實(shí)施例中,不同的中止?fàn)顟B(tài)代碼可被設(shè)置,諸如那些指示之前的 事務(wù)嘗試的中止或不中止是由競爭,容量限制,禁止指令的執(zhí)行,遠(yuǎn)程控制傳輸或其他原因 而引起的。在一些實(shí)施例中,恢復(fù)例程815可根據(jù)確定的中止?fàn)顟B(tài)代碼來采取不同的恢復(fù) 操作。例如,在一些例子中,恢復(fù)例程815可確定線程不應(yīng)該使用ASF來重試事務(wù)的執(zhí)行。根據(jù)方法800,線程然后可開始執(zhí)行事務(wù)主體,其可包括保護(hù)一定數(shù)量的被保護(hù)的 存儲器位置,如在步驟820中。在一些實(shí)施例中,保護(hù)存儲器位置可使用如上描述的不同的 說明符指令來實(shí)現(xiàn),諸如LOCK MOV。在一些實(shí)施例中,對應(yīng)于每一個(gè)受保護(hù)存儲器位置的緩 存塊的受保護(hù)的標(biāo)志可被設(shè)置以指示該位置已被保護(hù)。根據(jù)圖8所示的例子,執(zhí)行事務(wù)實(shí) 體可進(jìn)一步包括向一個(gè)或多個(gè)受保護(hù)的存儲器位置進(jìn)行寫操作,如在步驟825中。在一些 實(shí)施例中,寫操作可通過如上描述的多個(gè)預(yù)測存儲操作來實(shí)現(xiàn),諸如L0CKM0V。在利用鎖定 線緩沖器的實(shí)施例中,向受保護(hù)存儲器位置的寫操作可包括存儲未被修改的數(shù)值到鎖定線 緩沖器上然后執(zhí)行寫操作到本地緩存上。根據(jù)方法800,中止條件可在方法執(zhí)行中被滿足,如由步驟830的肯定指向所示。 如上所述,在不同的例子中,中止條件可由與其他線程的沖突,容量限制,遠(yuǎn)程控制傳輸,禁 止指令,和/或由線程執(zhí)行的明確的ABORT指令來引起。如果中止條件被檢測到(步驟830 中的肯定指向),那么ASF機(jī)制可被配置為丟棄由部分執(zhí)行的事務(wù)造成的到所有受保護(hù)存 儲器位置的修改。在不同的實(shí)施例中,丟棄對所有受保護(hù)的存儲器位置的修改,如在步驟835中,可 以不同的形式來完成,其依賴于所使用的特定的可預(yù)測執(zhí)行機(jī)制。例如,在一些實(shí)施例中, 其中ASF利用存儲緩沖器來延遲如上描述的到受保護(hù)存儲器的存儲操作的寫回階段,丟棄 修改(如在步驟835中)可包括丟棄正在存儲緩沖器中等待的、對受保護(hù)存儲器位置的任 何存儲操作。在利用鎖定線緩沖器的實(shí)施例中,丟棄修改(如在步驟835中)可包括將存 儲在鎖定線緩沖器中的每一個(gè)存儲器位置的舊值(被事務(wù)修改之前的每一個(gè)存儲器位置處的數(shù)值)寫回到本地緩存中。根據(jù)方法800,在回退模式下中止事務(wù)可進(jìn)一步包括釋放所有受保護(hù)的存儲器位 置,如在步驟840中,這樣這些位置就不再被保護(hù)。例如,釋放受保護(hù)的存儲器位置可包括 重置與被中止的事務(wù)保護(hù)的每一個(gè)存儲器位置相關(guān)的一個(gè)或多個(gè)受保護(hù)標(biāo)志。在利用鎖定 線緩沖器的實(shí)施例中,釋放受保護(hù)存儲器位置可進(jìn)一步包括刪除與事務(wù)中修改的被保護(hù)存 儲器位置相對應(yīng)的鎖定線緩沖器的條目。根據(jù)所示的實(shí)施例,ASF機(jī)制然后可確定中止的原因以確定相應(yīng)的中止?fàn)顟B(tài)代碼。 在一些實(shí)施例中,ASF機(jī)制可通過編碼狀態(tài)代碼到狀態(tài)寄存器中(例如,rAX寄存器216中) 來將中止?fàn)顟B(tài)代碼與軟件機(jī)制相通信,如在步驟845中。在一些實(shí)施例中,狀態(tài)寄存器(例如,rAX寄存器)可用來同時(shí)存儲多個(gè)狀態(tài)代 碼。例如,狀態(tài)寄存器位的一些子集可用來存儲中止?fàn)顟B(tài)代碼,同時(shí)其他一個(gè)或多個(gè)子集也 可用來存儲其他信息。例如,如果中止是由執(zhí)行ABORT指令的線程造成的,那么狀態(tài)寄存器 位的子集可存儲一個(gè)或多個(gè)由被調(diào)用時(shí)線程傳送給ABORT指令的數(shù)值。在一些實(shí)施例中, 狀態(tài)寄存器位的子集也可存儲當(dāng)前事務(wù)嵌套深度的指示。在進(jìn)一步的實(shí)施例中,不同的狀 態(tài)寄存器位的子集可存儲其他組不同的狀態(tài)信息。根據(jù)方法800,ASF機(jī)制然后可回退操作到事務(wù)的開始,諸如通過回退指令和堆棧 指針到檢查點(diǎn)值,如在步驟850中。在一些例子中,如果事務(wù)是頂層事務(wù),那么檢查點(diǎn)可能 已經(jīng)作為執(zhí)行SPE⑶LATE指令的一部分而被記錄(如在步驟805中)并且回退執(zhí)行可導(dǎo)致 將控制流程返回到事務(wù)實(shí)體的開始部分,如從步驟850到步驟810的反饋循環(huán)。在另一實(shí) 施例中,如果事務(wù)是嵌套事務(wù),那么檢查點(diǎn)可能已被記錄在頂層事務(wù)中并且回退執(zhí)行可導(dǎo) 致將控制流程返回到頂層事務(wù)的實(shí)體的開始部分。這樣,在一些實(shí)施例中,中止嵌套的事務(wù) 可包括中止所有該嵌套事務(wù)嵌套在其中的父事務(wù)。根據(jù)方法800,事務(wù)實(shí)體可被嘗試直到它在沒有檢測到中止條件的情況下完成。如 果事務(wù)嘗試在沒有中止的情況下而完成,如步驟830的否定指向所示,那么該線程提交該 事務(wù),如在步驟855中。在一些實(shí)施例中,提交事務(wù)可包括執(zhí)行COMMIT指令。圖9是根據(jù)一些實(shí)施例,說明提交事務(wù)的方法(諸如通過COMMIT指令)。圖9是根據(jù)一些實(shí)施例說明ASF機(jī)制可中止在條件存儲模式下執(zhí)行的事務(wù)的方法 流程圖。根據(jù)所示的實(shí)施例,方法900可通過確定事務(wù)是否是有效的(active)來開始,如 在步驟905中。如果事務(wù)是有效的,如步驟905的肯定指向所示,那么事務(wù)在執(zhí)行過程中不 中斷。這樣,在一些實(shí)施例中,指示成功執(zhí)行的代碼可被存儲在狀態(tài)寄存器中。例如,在一 些實(shí)施例中,rAX寄存器可如在步驟910中被清空(諸如通過存儲0值到該寄存器中)。根據(jù)方法900提交事務(wù)可進(jìn)一步包括設(shè)置指示該執(zhí)行不是在條件存儲模式下的 標(biāo)志,如在步驟915中,并遞減指示有效事務(wù)的嵌套層數(shù)的計(jì)數(shù)器,如在步驟920中。在一 些實(shí)施例中,如果被提交的事務(wù)是嵌套事務(wù),如步驟925的否定指向所示,那么事務(wù)可被結(jié) 束,如在步驟940中。因此,在這樣的實(shí)施例中,即使在嵌套事務(wù)已被提交之后,被執(zhí)行在嵌 套事務(wù)內(nèi)部的預(yù)測存儲可依然是可預(yù)測的(并且是對沖突敏感的)。根據(jù)圖9中的實(shí)施例,如果事務(wù)是頂層事務(wù),如步驟925的肯定指向所示,那么ASF 機(jī)制可提交所有的修改到受保護(hù)的存儲器位置這樣它們對系統(tǒng)中的其他線程是全局可見 的,如在步驟930中。在不同的實(shí)施例中,提交修改到受保護(hù)的存儲器位置可涉及不同的動作,其依賴于使用的預(yù)測機(jī)制。例如,在到受保護(hù)存儲器的預(yù)測存儲操作在存儲緩沖器中 被延遲直到事務(wù)提交時(shí)的實(shí)施例中,提交修改可意味著執(zhí)行寫回這些數(shù)值到存儲器中(例 如,到本地緩存和/或主存儲器)。在不同的實(shí)施例中,提交頂層事務(wù)可進(jìn)一步包括釋放所 有受保護(hù)的存儲器位置,如在步驟935中,這樣,這些位置就不再被ASF機(jī)制所保護(hù)。例如, 在受保護(hù)標(biāo)志被用來指示受保護(hù)緩存塊的實(shí)施例中,設(shè)置與受保護(hù)的緩存塊相關(guān)的標(biāo)志的 值以指示緩存塊不再被保護(hù)。這樣,ASF機(jī)制就不需要確保相對于被釋放的存儲器位置的 原子性了。在一些實(shí)施例中,線程試圖提交無效(not active)的事務(wù),如步驟905的否定指 向所示,那么接下來的操作則依賴于執(zhí)行的模式是否是條件存儲模式還是回退模式。如果 執(zhí)行模式是回退模式,如步驟945的否定指向所示,那么ASF機(jī)制可被配置為產(chǎn)生諸如#GP 異常的異常。否則,如果執(zhí)行模式是條件存儲(如步驟945的肯定指向所示),那么ASF機(jī) 制可被配置為存儲中止?fàn)顟B(tài)代碼到狀態(tài)寄存器(諸如rAX)中(如在步驟955中)并跳轉(zhuǎn) 到恢復(fù)例程,如在步驟960中。該事務(wù)然后可在需要時(shí)被再次嘗試。圖10是根據(jù)一些實(shí)施例說明在條件存儲模式下執(zhí)行事務(wù)的方法流程圖。根據(jù)方 法1000,在條件存儲模式下執(zhí)行事務(wù)可由執(zhí)行一個(gè)BEGIN指令開始,如在步驟1005中。在 一些實(shí)施例中,執(zhí)行BEGIN指令可包括執(zhí)行圖6中的方法600。在不同的實(shí)施例中,BEGIN 指令可設(shè)置一個(gè)或多個(gè)確定執(zhí)行在條件存儲模式下的事務(wù)是否是有效的標(biāo)志。根據(jù)所示的實(shí)施例,事務(wù)然后可使用說明符指令來保護(hù)一個(gè)或多個(gè)存儲器位置, 如在步驟1010中。在一些例子中,事務(wù)也可試圖寫入到一個(gè)或多個(gè)在步驟1010中被保護(hù) 的存儲器位置,如在步驟1015中。根據(jù)方法1000,如果ASF機(jī)制沒有檢測到中止條件(例如,競爭、容量限制超出,遠(yuǎn) 程控制傳輸,禁止指令,等等),如步驟1025的否定指向所示,那么線程可提交該事務(wù),如在 步驟1040中。在一些實(shí)施例中,提交事務(wù),如在步驟1025中,可包括執(zhí)行一個(gè)諸如圖9中 所示的提交指令。在一些實(shí)施例中,如果中止條件在事務(wù)執(zhí)行過程中被檢測到,如在步驟1025的肯 定指向所示的,那么事務(wù)被中止,如在步驟1030中。在一些實(shí)施例中,中止事務(wù)可包括撤銷 或丟棄由事務(wù)的存儲操作造成的到受保護(hù)的存儲器位置上的任何修改。在一些實(shí)施例中, 指示導(dǎo)致中止的原因的中止?fàn)顟B(tài)代碼(例如,沖突,容量,禁止事務(wù),等等)可被作為中止事 務(wù)的一部分而記錄,如在步驟1030中。根據(jù)所示的實(shí)施例,事務(wù)被中止之后(如在步驟1030中),控制流程可依然保留 在事務(wù)實(shí)體中并且該事務(wù)通過排除到受保護(hù)存儲器位置的預(yù)測存儲可繼續(xù)執(zhí)行,如在步驟 1035中。在一些實(shí)施例中,在事務(wù)嘗試被中止之后,在事務(wù)實(shí)體中出現(xiàn)的說明符指令可被作 為常規(guī)存儲器引用來執(zhí)行(例如,沒有為存儲器位置設(shè)置保護(hù)標(biāo)志的讀取指令)和/或到 受保護(hù)存儲器位置的訪問可被忽略(例如,被認(rèn)為是無操作指令)。根據(jù)一些實(shí)施例,在條件存儲模式下執(zhí)行事務(wù)的線程可被配置為驗(yàn)證事務(wù)是否被 中斷。例如,在一些實(shí)施例中,線程可執(zhí)行VALIDATE指令,如在步驟1040中,來確定事務(wù)是 否是有效的(即,還沒被中止)。在一些實(shí)施例中,該VALIDATE指令是通過拷貝當(dāng)前中止?fàn)?態(tài)代碼到軟件可讀取的程序可讀狀態(tài)寄存器(例如,到rAX寄存器中)而能執(zhí)行。如果事 務(wù)還沒有被中止,那么該VALIDATE指令則通過給狀態(tài)寄存器設(shè)置說明該事務(wù)依然是有效的值(例如,設(shè)置rAX為0值)而能執(zhí)行。根據(jù)所示的實(shí)施例,如果線程執(zhí)行VALIDATE指令,則線程然后可檢查狀態(tài)寄存器 (例如,rAX)來確定事務(wù)是否已經(jīng)被中止。如果事務(wù)不是有效的,如在步驟1045的否定指 向所示,那么線程可執(zhí)行一些恢復(fù)動作,如在步驟1055中。根據(jù)不同的實(shí)施例,執(zhí)行恢復(fù)動 作可包括釋放任何受保護(hù)存儲器位置和/或?qū)⒊绦虻目刂品祷氐绞聞?wù)開始以重新執(zhí)行。如 果事務(wù)依然是有效的,如在步驟1045的肯定指向所示,那么線程可繼續(xù)執(zhí)行事務(wù)和/或提 交事務(wù),如在步驟1050中。根據(jù)所示的實(shí)施例,一旦線程完成了執(zhí)行事務(wù),它可試圖提交該事務(wù),如在步驟 1050中。如上所示,提交事務(wù)可包括執(zhí)行提交指令,如圖9中所示的那樣。作為執(zhí)行提交指 令的一部分,ASF機(jī)制可檢測事務(wù)是否是有效的(如在步驟905中)并且如果事務(wù)不是有 效的,則存儲一個(gè)中止?fàn)顟B(tài)到軟件可讀寄存器中(例如,如在步驟955中的rAX)并且跳轉(zhuǎn) 到恢復(fù)例程(如在步驟960中),該規(guī)則與步驟1055中的恢復(fù)動作相似或相同。執(zhí)行恢復(fù) 例程可包括釋放任何受保護(hù)存儲器位置和/或?yàn)閷⒊绦蚩刂品祷氐绞聞?wù)再次執(zhí)行的開始。 在一些實(shí)施例中,如果該段(section)被嵌套到一個(gè)或多個(gè)回退模式的事務(wù)中,那么父事 務(wù)可被中止并且控制可被返回到最高級的SPECULATIVE指令所采用的檢查點(diǎn),參見如上的 圖8中所描述的。在不同的實(shí)施例中,編程者可創(chuàng)建利用ASF使能系統(tǒng)的事務(wù)存儲編程模式的應(yīng) 用。在這樣的實(shí)施例中,編程者可配置程序以執(zhí)行事務(wù)開始指令(例如,SPE⑶LATE,BEGIN 等)來開始事務(wù),執(zhí)行一個(gè)或多個(gè)到受保護(hù)存儲器的訪問(例如,LOCK M0V,等),然后執(zhí)行 一個(gè)或多個(gè)指令來提交事務(wù)(例如,COMMIT)。在一些實(shí)施例中,可編制程序來使得ASF使能的事務(wù)存儲器編程模式與其他同時(shí) 存在的諸如非ASF、基于鎖代碼的控制機(jī)制協(xié)同工作。例如,假定有一個(gè)諸如B-tree的數(shù) 據(jù)結(jié)構(gòu)。共享存儲器應(yīng)用中的并行線程可頻繁地執(zhí)行到B-tree的插入和刪除操作,其是 在利用基于ASF的事務(wù)存儲器的事務(wù)性且無鎖的方式下的。B-tree可能偶爾的由于性能 問題需要重新平衡,操作可包括在B-tree的多個(gè)存儲器位置上的原子性操作。然而,既然 這些操作可包括保護(hù)多個(gè)存儲器位置,那么試圖作為一個(gè)事務(wù)完成該操作可導(dǎo)致頻繁的中 止。例如,沖突中止可能是因?yàn)榕c其他當(dāng)前正在執(zhí)行的向B-tree刪除和/或插入操作的線 程的沖突所導(dǎo)致的。在另一例子中,同時(shí)保護(hù)如此多的存儲器位置可能超出了 ASF實(shí)現(xiàn)的 容量,因此造成事務(wù)的容量中止。在這種情況中,如果使用傳統(tǒng)的、基于鎖的互斥排除操作 而不是采用事務(wù)存儲器來執(zhí)行重新平衡的操作,則該操作可能會更加有效。例如,鎖可能與 整個(gè)B-treee相關(guān)并且可在對該B-tree的互斥訪問時(shí)需要。在這個(gè)例子中,重新平衡操作 可通過請求B-tree鎖開始,然后執(zhí)行重新平衡操作,然后釋放鎖。然而,在這樣的例子中, 必須謹(jǐn)慎以確保利用基于鎖的互斥排除語義的代碼與利用基于ASF事務(wù)存儲器語義的代 碼安全地互操作。圖11是根據(jù)一個(gè)實(shí)施例,說明配置基于ASF事務(wù)與基于鎖代碼的互操作方法流程 圖。根據(jù)所示實(shí)施例,線程可通過執(zhí)行諸如SPECULATE或BEGIN指令來開始事務(wù),如在步驟 1110中,如前所述。被保護(hù)在事務(wù)內(nèi)部的存儲器位置組在此可被稱作事務(wù)的讀出組(read-set)。在基 于鎖代碼的表現(xiàn)中,事務(wù)的讀出組可包括一個(gè)或多個(gè)與鎖相關(guān)的存儲器位置。任何與鎖相關(guān)并由鎖保護(hù)的存儲器位置在此被稱作鎖保護(hù)(lock-protected)。根據(jù)所示的實(shí)施例,線程可被配置為原子地讀取(例如,使用說明符操作)與在事 務(wù)讀出組中每一個(gè)鎖保護(hù)存儲器位置相關(guān)的每一個(gè)鎖的值,如在步驟1120中。因此,通過 原子地讀出鎖的值,線程增加鎖到事務(wù)的讀取組(ASF機(jī)制監(jiān)視鎖并將其作為事務(wù)的一部 分加以保護(hù))。例如,在上述的B-tree例子中,事務(wù)的插入操作可首先通過原子地讀出與整 個(gè)B-tree結(jié)構(gòu)相關(guān)的鎖值來開始。在一些實(shí)施例中,原子地讀出鎖值可包括利用說明符操 作來讀取鎖值。根據(jù)所示的實(shí)施例,線程然后可確定是否保持(hold) 了在步驟1120中被讀取的 任意一個(gè)鎖。如果保持了鎖的話,如步驟1130肯定指向所示,那么線程可再試事務(wù)。在一 些實(shí)施例中,線程可繼續(xù)重讀每個(gè)鎖的值直到所有的鎖都被釋放,如步驟1130的否定指向 所示。在一些實(shí)施例中,如果具有任意一個(gè)鎖,那么線程可中止事務(wù)(例如,通過執(zhí)行ABORT 指令)并再次試圖執(zhí)行事務(wù)。在其他實(shí)施例中,如果保存了任何一個(gè)鎖,則線程可試圖回退 事務(wù)已經(jīng)在受保護(hù)的存儲器位置上造成的修改然后提交該事務(wù)。根據(jù)所示的實(shí)施例,一旦線程檢測到未保持從步驟1120中讀取的鎖,如步驟1130 的否定指向所示,則線程可繼續(xù)執(zhí)行事務(wù),如在步驟1140中。在所示實(shí)施例中,由于不同鎖 的存儲器位置通過說明符操作被保護(hù),任何對鎖的值的改變(例如,不同的線程請求鎖)可 導(dǎo)致事務(wù)的沖突中止。因此,中止條件在事務(wù)執(zhí)行過程中被檢測到(例如,由于被請求鎖的 沖突中止),然后ASF機(jī)制和/或線程可中止事務(wù)并執(zhí)行一些恢復(fù)動作(如在步驟1160中) 并再次嘗試事務(wù)(如從步驟1160到步驟1120的反饋循環(huán))。例如,繼續(xù)上述的B-tree的 例子,如果不同的線程試圖請求與B-tree相關(guān)的鎖時(shí)(例如,作為執(zhí)行重新平衡操作的一 部分),那么緩存一致性消息可被發(fā)送到正在執(zhí)行的線程,引起插入操作事務(wù)的沖突中止。根據(jù)所示實(shí)施例,如果沒有中止條件被檢測到(如步驟1150的否定指向所示),那 么線程可提交事務(wù),如在步驟1160中。圖12說明被配置為實(shí)現(xiàn)此處所描述的ASF不同實(shí)施例的計(jì)算機(jī)系統(tǒng)的一個(gè)實(shí)施 例。計(jì)算機(jī)系統(tǒng)1200可是任何類型的裝置,包括但不限于,個(gè)人計(jì)算機(jī)系統(tǒng),桌面電腦,膝 上型電腦或筆記本計(jì)算機(jī),主機(jī)計(jì)算機(jī)系統(tǒng),手持計(jì)算機(jī),工作,網(wǎng)絡(luò)計(jì)算機(jī),用戶裝置,應(yīng) 用服務(wù)器,存儲裝置,串行裝置(比如交換機(jī)),調(diào)制解調(diào)器,或者任何類型的通用計(jì)算機(jī)系 統(tǒng)。計(jì)算機(jī)系統(tǒng)1200可包括多個(gè)處理器1270,每一個(gè)處理器都包括多個(gè)內(nèi)核,每一個(gè) 內(nèi)核可是單線程或多線程的(例如,并行多處理,Hyperthreading ,等等)。在一些實(shí)施例 中,處理器1270可包括動態(tài)調(diào)度機(jī)制1272,像那些能夠?yàn)閷?shí)現(xiàn)預(yù)測存儲緩沖器在加載/存 儲隊(duì)列1274中延遲預(yù)測存儲,如此描述的。在一些實(shí)施例中,處理器1270可包括多個(gè)加載、 存儲、和/或加載/存儲隊(duì)列,比如1274,以用于在處理器流水線中保持飛行(in-flight) 存儲器操作。處理器1270可包括諸如rAX,rFLAGS或其他特定目的寄存器1276,這樣的寄 存器用來記錄事務(wù)的嵌套深度,事務(wù)模式或狀態(tài)(有效或無效的)。在一些實(shí)施例中,處理 器1270可包括任意數(shù)量的ASF硬件事務(wù)存儲器機(jī)制1278,如此處描述的。例如,ASF機(jī)制 1278可包括用于監(jiān)視被活動事務(wù)保護(hù)的存儲器位置的鎖定線緩沖器和/或硬件邏輯。在一 些實(shí)施例中,處理器1270可包括多個(gè)緩存一致性機(jī)制1279,該機(jī)制可被用來實(shí)現(xiàn)不同的緩 存一致性協(xié)議(例如,MESI, M0ESI,等等)以及可通過ASF機(jī)制用來檢查沖突中止,如此處描述的。計(jì)算機(jī)系統(tǒng)1200還可包括一個(gè)或多個(gè)永久存儲裝置1沈0(例如,光盤存儲,磁盤 存儲,硬盤驅(qū)動器,磁帶驅(qū)動器,固體存儲器,等等),其可存儲文件,例如通過如文件系統(tǒng) 1262的文件系統(tǒng)。計(jì)算機(jī)系統(tǒng)1200可包括被多處理器共享的一個(gè)或多個(gè)存儲器1210 (例 如,緩存,SRAM, DRAM, RDRAM, EDO RAM, DDR 10RAM, SDRAM, Rambus RAM, EEPROM,等等中的一 個(gè)或多個(gè))。不同的實(shí)施例可包括更少或更多的未示在圖12中的組件(例如,顯卡,聲卡, 附加網(wǎng)絡(luò)接口,串行設(shè)備,類似ATM接口,以太網(wǎng)接口,幀延遲接口的網(wǎng)絡(luò)接口,等等。)處理器1270,存儲裝置1260以及共享存儲器1210可被耦合到系統(tǒng)互聯(lián) (interconnect) 1250上。一個(gè)或多個(gè)系統(tǒng)存儲器1210可包含程序指令1220。程序指令 1220可以平臺原生二進(jìn)制碼,任何解釋性語言,諸如Java 字節(jié)_代碼,或任何諸如C/C++, Java 等其他語言或它們的任何組合被編碼。程序指令1220可包括實(shí)現(xiàn)一個(gè)或多個(gè)基于ASF事務(wù)存儲器應(yīng)用1222的可執(zhí)行程 序指令。每一個(gè)應(yīng)用1222可以是多線程的并且可被配置為利用ASF事務(wù)存儲機(jī)制。在一 些實(shí)施例中,一個(gè)或多個(gè)應(yīng)用1222可被配置為既使用ASF事務(wù)存儲指令又使用互斥鎖來操 作,如此所述。在這樣的實(shí)施例中,共享存儲器1210可包括多種數(shù)據(jù)結(jié)構(gòu)和變量1230,任何 數(shù)據(jù)結(jié)構(gòu)和變量可與一個(gè)或多個(gè)互斥鎖1240相關(guān)。在一些實(shí)施例中,程序指令1220和/或基于ASF事務(wù)存儲器應(yīng)用1222可作為一種 計(jì)算機(jī)可讀存儲介質(zhì)的產(chǎn)品而被提供,其中計(jì)算機(jī)可讀存儲介質(zhì)中具有存儲在其上的指令 并且這些指令可在計(jì)算機(jī)系統(tǒng)(或其他電子設(shè)備)上編程以根據(jù)多個(gè)實(shí)施例執(zhí)行不同的操 作。計(jì)算機(jī)可讀存儲介質(zhì)包括任何以機(jī)器(例如,計(jì)算機(jī))可讀形式(例如,軟件,處理應(yīng) 用)存儲信息的介質(zhì)。機(jī)器可讀存儲介質(zhì)可包括,但并不限于,磁性存儲介質(zhì)(例如,軟盤); 光盤存儲介質(zhì)(例如,CD-ROM),磁-光存儲介質(zhì);只讀存儲器(ROM);隨機(jī)存儲器(RAM) ’易 擦除可編程存儲器(例如,EPROM和EEPROM);閃存,電子,或適于存儲程序指令的其他有形 介質(zhì)。除此之外,程序指令可使用無形媒介-光,聲或其他傳輸信號的模式(例如,載波,紅 外信號,數(shù)字信號等等)來通信。盡管上面的實(shí)施例已經(jīng)被盡可能詳細(xì)描述,但以上所公開的內(nèi)容一旦理解后,多 種變化及修改對本領(lǐng)域技術(shù)人員將變得很明顯。接下來的權(quán)利要求應(yīng)當(dāng)被解釋為涵蓋所有 這種變化和修改。工業(yè)實(shí)用性本發(fā)明一般可應(yīng)用于共享存儲器計(jì)算機(jī)系統(tǒng)中。
權(quán)利要求
1.一種裝置,包括能夠耦合到被一個(gè)或多個(gè)其他處理器共享的共享存儲器的處理器,其中所述處理器被 配置為執(zhí)行相對于所述一個(gè)或多個(gè)其他處理器是原子事務(wù)的代碼段,所述代碼段包括對所 述共享存儲器的多個(gè)存儲器訪問操作;其中所述處理器被配置為確定所述多個(gè)存儲器訪問操作是否包括一組禁止指令中的 至少一個(gè),其中所述組禁止指令包括一個(gè)或多個(gè)在虛擬計(jì)算環(huán)境和原生計(jì)算環(huán)境中以不同 能夠方式操作的指令;其中所述處理器被配置為響應(yīng)于所述多個(gè)存儲器訪問操作之一包括所述組禁止指令 中的至少一個(gè)而中止所述事務(wù)。
2.根據(jù)權(quán)利要求1所述的裝置,其中所述組禁止指令包括根據(jù)是否在虛擬機(jī)內(nèi)而在所 述處理器上以不同方式執(zhí)行的至少一個(gè)指令。
3.根據(jù)權(quán)利要求1所述的裝置,其中所述組禁止指令包括遠(yuǎn)程控制傳輸指令,其中所 述遠(yuǎn)程控制傳輸指令能夠執(zhí)行以通過修改所述處理器的區(qū)段寄存器內(nèi)的值而傳輸程序控 制到不是包含所述指令的存儲器區(qū)段的存儲器區(qū)段。
4.根據(jù)權(quán)利要求1所述的裝置,其中所述組禁止指令包括一個(gè)或多個(gè)僅在所述處理器 的最高特權(quán)級執(zhí)行的指令。
5.根據(jù)權(quán)利要求1所述的裝置,其中所述處理器被配置為通過丟棄由所述多個(gè)存儲器 訪問操作中的一個(gè)或多個(gè)的執(zhí)行對所述共享存儲器中的一個(gè)或多個(gè)值的任何修改來中止 所述事務(wù)。
6.一種方法,包括與共享存儲器耦合的、多個(gè)處理器中的第一處理器執(zhí)行相對于所述多個(gè)處理器是原子 事務(wù)的代碼段,所述代碼段包括對共享存儲器的多個(gè)存儲器訪問操作;所述第一處理器確定所述多個(gè)存儲器訪問操作是否包括一組禁止指令中的至少一個(gè), 其中所述組禁止指令包括根據(jù)是否在虛擬機(jī)內(nèi)執(zhí)行而以不同方式操作的一個(gè)或多個(gè)指令; 以及響應(yīng)于所述多個(gè)存儲器訪問操作包括所述組禁止指令中的至少一個(gè),所述第一處理器 中止所述事務(wù)。
7.根據(jù)權(quán)利要求6所述的方法,所述組禁止指令包括遠(yuǎn)程控制傳輸指令,其中所述遠(yuǎn) 程控制傳輸指令能夠執(zhí)行以通過修改所述處理器的區(qū)段寄存器內(nèi)的值而傳輸程序控制到 不是包含所述指令的存儲器區(qū)段的存儲器區(qū)段。
8.根據(jù)權(quán)利要求6所述的方法,其中所述組禁止指令包括僅在所述第一處理器最高特 權(quán)級執(zhí)行的指令
9.根據(jù)權(quán)利要求6所述的方法,其中所述中止操作包括丟棄由所述多個(gè)存儲器訪問操 作中的一個(gè)或多個(gè)的執(zhí)行對所述共享存儲器中的一個(gè)或多個(gè)值的任何修改。
10.一種系統(tǒng),包括共享存儲器;與所述共享存儲器耦合的多個(gè)處理器;其中所述多個(gè)處理器的第一處理器被配置為執(zhí)行包括對所述共享存儲器的多個(gè)存儲 器訪問操作,其中所述第一處理器被配置為相對于所述多個(gè)處理器中的其他處理器作為原子事務(wù)執(zhí)行所述多個(gè)存儲器訪問操作;其中所述第一處理器被配置為確定所述多個(gè)存儲器訪問操作是否包括一組禁止指令 中的至少一個(gè)指令,其中所述組禁止指令中的至少一個(gè)指令的執(zhí)行是基于所述第一處理器 的特權(quán)級的;其中所述第一處理器被配置為響應(yīng)于所述多個(gè)存儲器訪問操作之一包括所述組禁止 指令中的至少一個(gè)而中止所述事務(wù)。
11.根據(jù)權(quán)利要求10所述的系統(tǒng),其中所述組禁止指令包括根據(jù)是否在虛擬機(jī)內(nèi)執(zhí)行 而在所述處理器上以不同方式執(zhí)行的指令。
12.根據(jù)權(quán)利要求10所述的系統(tǒng),其中所述組禁止指令包括特權(quán)指令。
13.根據(jù)權(quán)利要求10所述的系統(tǒng),其中所述組禁止指令包括遠(yuǎn)程控制傳輸指令。
14.根據(jù)權(quán)利要求10所述的系統(tǒng),其中所述第一處理器被配置為通過丟棄由所述多個(gè) 存儲器訪問操作中的一個(gè)或多個(gè)的執(zhí)行對所述共享存儲器中的一個(gè)或多個(gè)值的任何修改 來中止所述事務(wù)。
15.根據(jù)權(quán)利要求10所述的系統(tǒng),其中所述組禁止指令包括一個(gè)或多個(gè)與管理程序相 關(guān)的指令。
全文摘要
本發(fā)明公開了一種在事務(wù)存儲系統(tǒng)中執(zhí)行事務(wù)的系統(tǒng)和方法。該系統(tǒng)包括耦合到共享存儲器的多個(gè)處理器中的一個(gè)處理器,其中該處理器執(zhí)行相對于多處理器的執(zhí)行是原子(atomic)事務(wù)的代碼段,該代碼段包括到共享存儲器的多個(gè)存儲器訪問操作。根據(jù)實(shí)施例,處理器確定存儲器訪問操作是否包括任何一組禁止指令,其中,該組指令包括一個(gè)或多個(gè)在虛擬計(jì)算環(huán)境中和現(xiàn)實(shí)計(jì)算環(huán)境中操作不同的指令。如果任何一個(gè)存儲器訪問操作是上述禁止操作之一,那么處理器中止該事務(wù)。
文檔編號G06F9/455GK102144218SQ200980135774
公開日2011年8月3日 申請日期2009年7月28日 優(yōu)先權(quán)日2008年7月28日
發(fā)明者斯特凡·迪特爾赫斯特, 米夏埃爾·P·赫姆斯, 達(dá)維德·S·克里斯蒂 申請人:超威半導(dǎo)體公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1
郎溪县| 图木舒克市| 永春县| 绥德县| 赤水市| 旅游| 增城市| 贵溪市| 石柱| 林西县| 汝城县| 长丰县| 米易县| 博乐市| 安平县| 开远市| 漳州市| 长白| 舒兰市| 祥云县| 乳源| 刚察县| 江油市| 枝江市| 宝清县| 临泽县| 宣恩县| 肃南| 孟津县| 旬阳县| 龙南县| 永靖县| 新绛县| 双牌县| 东宁县| 江达县| 绥江县| 霍山县| 昌江| 龙游县| 连平县|