两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

在硬件中登記用戶處理程序以用于事務(wù)存儲(chǔ)器事件處理的制作方法

文檔序號:6587905閱讀:121來源:國知局
專利名稱:在硬件中登記用戶處理程序以用于事務(wù)存儲(chǔ)器事件處理的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及處理器執(zhí)行的領(lǐng)域,并且特別地涉及指令組的執(zhí)行。
背景技術(shù)
半導(dǎo)體工藝和邏輯設(shè)計(jì)的發(fā)展使得可以在集成電路設(shè)備上存在更多的邏輯。因 此,計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)從系統(tǒng)中的單個(gè)或多個(gè)集成電路演化為在單獨(dú)的集成電路上存在多個(gè) 核心以及多個(gè)邏輯處理器。通常,處理器或集成電路包括單個(gè)處理器管芯,其中,處理器管 芯可以包括任意數(shù)量的核心或邏輯處理器。集成電路上的核心和邏輯處理器的數(shù)量的不斷增加使得更多的軟件線程能夠同 時(shí)執(zhí)行。然而,可以同時(shí)執(zhí)行的軟件線程的數(shù)量的增加導(dǎo)致對軟件線程之間共享的數(shù)據(jù)進(jìn) 行同步的問題。在多核心或多個(gè)邏輯處理器系統(tǒng)中訪問共享數(shù)據(jù)的一種常見方案包括使 用鎖來保證使對共享數(shù)據(jù)的多個(gè)訪問之間互斥。然而,不斷增強(qiáng)的執(zhí)行多個(gè)軟件線程的能 力可能導(dǎo)致錯(cuò)誤地爭用以及執(zhí)行的串行化。例如,考慮保存共享數(shù)據(jù)的散列表。利用鎖系統(tǒng),程序員可以鎖定整個(gè)散列表,從 而允許一個(gè)線程訪問整個(gè)散列表。然而,其它線程的吞吐量和性能可能會(huì)受到不利的影響, 因?yàn)樗鼈冊阪i被釋放之前不能訪問散列表中的任何條目??蛇x的,可以鎖定散列表中的每 個(gè)條目。無論使用哪種方式,當(dāng)將這個(gè)簡單示例推廣到大規(guī)模的程序之后,鎖競爭、串行化、 細(xì)粒度的同步以及避免死鎖的復(fù)雜性對于程序員來說將成為極為繁重的負(fù)擔(dān),這是顯而易 見的。近來出現(xiàn)的另一種數(shù)據(jù)同步技術(shù)包括使用事務(wù)存儲(chǔ)器(TM)。通常,事務(wù)執(zhí)行包括 執(zhí)行多個(gè)微操作、操作或指令的組。在上面的示例中,線程在散列表內(nèi)的執(zhí)行以及它們的存 儲(chǔ)器訪問都被監(jiān)視/跟蹤。如果兩個(gè)線程都訪問/更改相同的條目,那么可以執(zhí)行沖突消 除以確保數(shù)據(jù)的有效性。事務(wù)執(zhí)行的一種類型包括軟件事務(wù)存儲(chǔ)器(STM),其中,通常在沒 有硬件的支持的情況下,在軟件中執(zhí)行存儲(chǔ)器訪問的跟蹤、沖突解決、中止任務(wù)以及其它事
6務(wù)任務(wù)。事務(wù)執(zhí)行的另一種類型包括硬件事務(wù)存儲(chǔ)器(HTM)系統(tǒng),其中,包括硬件以支持訪 問跟蹤、沖突解決以及其它事務(wù)任務(wù)。事務(wù)內(nèi)的一些操作是基于由事務(wù)讀取或產(chǎn)生的數(shù)據(jù)的。如果該數(shù)據(jù)或監(jiān)視對該數(shù) 據(jù)的訪問的信息被損害,那么會(huì)產(chǎn)生無法預(yù)料的副作用。例如,假定事務(wù)向某個(gè)變量X寫入 分支目的地。由于事務(wù)存儲(chǔ)器的語義,X的值可以改變(例如,以緩沖方式寫入X并且緩沖 器丟失)。在改變以后,事務(wù)試圖基于從地址X讀取的當(dāng)前無效的值來進(jìn)行分支,因此,發(fā)生 無法預(yù)料的結(jié)果。用完全同步的軟件(OS或VMM)方法(例如,輪詢)來處理或者在事務(wù)的 結(jié)束處處理如上所述的事件可能無法及時(shí)地在未預(yù)料的結(jié)果發(fā)生之前處理改變或沖突。


通過示例來說明本發(fā)明,并且本發(fā)明并不旨在由附圖中的圖來限定。圖1說明了包括能夠同時(shí)執(zhí)行多個(gè)軟件線程的多個(gè)處理元件的處理器的實(shí)施例。圖2說明了處理器中的結(jié)構(gòu)的實(shí)施例,所述結(jié)構(gòu)用于支持響應(yīng)于處理程序事件而 向處理程序進(jìn)行的控制轉(zhuǎn)移。圖3說明了用于在沒有特權(quán)級軟件干預(yù)的情況下將執(zhí)行引導(dǎo)至事務(wù)處理程序的 方法流程圖的實(shí)施例。圖4說明了使用硬件將控制流轉(zhuǎn)移到軟件處理程序的方法的流程圖的另一實(shí)施 例。
具體實(shí)施例方式在以下描述中,闡述了許多具體的細(xì)節(jié),例如用于事務(wù)執(zhí)行的具體硬件結(jié)構(gòu)的例 子、訪問監(jiān)視器的具體類型和實(shí)現(xiàn)、具體的高速緩存實(shí)現(xiàn)、具體類型的高速緩存一致性模 型、具體的數(shù)據(jù)粒度以及存儲(chǔ)器訪問和位置的具體類型等,以提供對本發(fā)明的透徹理解。然 而,對于本領(lǐng)域技術(shù)人員來說,很明顯,不需要使用這些具體的細(xì)節(jié)來實(shí)現(xiàn)本發(fā)明。在其它 實(shí)例中,為了避免不必要地模糊本發(fā)明,沒有詳細(xì)描述公知的部件或方法,例如軟件中事務(wù) 的編碼、事務(wù)的劃分、具體的和可選的多核以及多線程處理器架構(gòu)、具體的編譯器方法/實(shí) 現(xiàn)以及微處理器的具體操作細(xì)節(jié)。本文描述的方法和設(shè)備用于將處理程序登記在硬件中,以支持優(yōu)化的到處理程序 的控制流轉(zhuǎn)移。具體地說,主要參照硬件事務(wù)存儲(chǔ)器系統(tǒng)來討論登記處理程序。然而,用于 登記處理程序的方法和裝置不限于此,因?yàn)榭梢葬槍π枰幚沓绦虻母深A(yù)的任何硬件執(zhí)行 來實(shí)現(xiàn)它們。參照圖1,說明了能夠同時(shí)執(zhí)行多個(gè)線程的處理器的實(shí)施例。注意,處理器100可 以包括用于硬件事務(wù)執(zhí)行的硬件支持?;蛘吲c硬件事務(wù)執(zhí)行相結(jié)合,或者單獨(dú)地,處理器 100還可以為軟件事務(wù)存儲(chǔ)器(STM)的硬件加速、STM的分開的執(zhí)行,或其組合(例如,混合 事務(wù)存儲(chǔ)器(TM)系統(tǒng))提供硬件支持。處理器100包括任何處理器,例如微處理器、嵌入 式處理器、數(shù)字信號處理器(DSP)、網(wǎng)絡(luò)處理器或執(zhí)行代碼的其它設(shè)備。如圖所示,處理器 100包括多個(gè)處理元件。在一個(gè)實(shí)施例中,處理元件指線程單元、進(jìn)程單元、上下文、邏輯處理器、硬件線 程、核心和/或任何其它元件,其能夠保持處理器的狀態(tài),例如執(zhí)行狀態(tài)或架構(gòu)狀態(tài)。換句話說,在一個(gè)實(shí)施例中,處理元件指能夠獨(dú)立地與代碼(例如,軟件線程、操作系統(tǒng)、應(yīng)用程 序或其它代碼)相關(guān)聯(lián)的任何硬件。物理處理器通常指集成電路,其可能包括任意數(shù)量的 其它處理元件,例如核心或硬件線程。核心通常指位于能夠維持獨(dú)立架構(gòu)狀態(tài)的集成電路上的邏輯,其中,每個(gè)獨(dú)立維 護(hù)的架構(gòu)狀態(tài)與至少一些專用的執(zhí)行資源關(guān)聯(lián)。與核心相反,硬件線程通常指位于能夠維 持獨(dú)立架構(gòu)狀態(tài)的集成電路上的任何邏輯,其中,獨(dú)立維護(hù)的架構(gòu)狀態(tài)共享對執(zhí)行資源的 訪問??梢?,當(dāng)一些資源被共享并且其它資源專用于架構(gòu)狀態(tài)時(shí),硬件線程與核心的命名之 間的界線相重疊。然而,通常情況下,操作系統(tǒng)將核心與硬件線程視為獨(dú)立的邏輯處理器, 其中,操作系統(tǒng)能夠獨(dú)立地調(diào)度每個(gè)邏輯處理器上的操作。如圖1所示,物理處理器100包括兩個(gè)核心核心101和102,它們共享對較高層級 的高速緩存110的訪問。盡管處理器100可以包括不對稱核心,即,具有不同配置、功能單 元和/或邏輯的核心,這里說明對稱核心。因此,將不詳細(xì)討論核心102,其被說明為與核心 101相同,以避免重復(fù)的討論。此外,核心101包括兩個(gè)硬件線程IOla和101b,而核心102 包括兩個(gè)硬件線程102a和102b。所以,軟件實(shí)體(例如,操作系統(tǒng))可以將處理器100視 為四個(gè)單獨(dú)的處理器,即,能夠同時(shí)執(zhí)行四個(gè)軟件線程的四個(gè)邏輯處理器或處理元件。這里,第一線程與架構(gòu)狀態(tài)寄存器IOla關(guān)聯(lián),第二線程與架構(gòu)狀態(tài)寄存器IOlb關(guān) 聯(lián),第三線程與架構(gòu)狀態(tài)寄存器102a關(guān)聯(lián),第四線程與架構(gòu)狀態(tài)寄存器102b關(guān)聯(lián)。如圖所 示,在架構(gòu)狀態(tài)寄存器IOlb中復(fù)制架構(gòu)狀態(tài)寄存器101a,所以能夠針對邏輯處理器IOla和 邏輯處理器IOlb存儲(chǔ)單獨(dú)的架構(gòu)狀態(tài)/上下文。還可以為線程IOla和IOlb復(fù)制其它較 小的資源,例如指令指針以及重命名分配邏輯130中的重命名邏輯??梢酝ㄟ^分區(qū)共享一 些資源,例如重排序/撤出(retirement)單元135中的重排序緩沖器、ILTB 120、加載/存 儲(chǔ)緩沖器和隊(duì)列??赡芡耆蚕砥渌Y源,例如通用內(nèi)部寄存器、頁表基址寄存器、低層級 數(shù)據(jù)高速緩存和數(shù)據(jù)TLB 115、執(zhí)行單元140和無序(out-of-order)單元135的多個(gè)部分。處理器100通常包括可以完全共享、通過分區(qū)共享或者處理元件專用的其它資 源。在圖1中,說明了具有處理器的說明性功能單元/資源的純示例性處理器的實(shí)施例。注 意,處理器可以包括或省略這些功能單元中的任何單元,并且可以包括未描述的任何其它 已知的功能單元、邏輯或固件。如圖所示,處理器100包括總線接口模塊105以與處理器100外部的設(shè)備進(jìn)行通 信,例如,系統(tǒng)存儲(chǔ)器175、芯片組、北橋或其它集成電路。存儲(chǔ)器175可以專用于處理器100 或與系統(tǒng)中的其它設(shè)備共享。較高級或更靠外的高速緩存110用于對最近從較高級高速緩 存110提取的元件進(jìn)行高速緩存。注意,較高級或更靠外指離開執(zhí)行單元的高速緩存層級。 在一個(gè)實(shí)施例中,較高級的高速緩存110是第二級數(shù)據(jù)高速緩存。然而,較高級高速緩存 110并不限于此,它可以與指令高速緩存關(guān)聯(lián)或包括指令高速緩存。蹤跡緩存(即,一種指 令緩存)可以替代地耦合在解碼器125之后以存儲(chǔ)最近解碼的蹤跡。模塊120還可以包括 分支目標(biāo)緩沖器以預(yù)測將要執(zhí)行/采用的分支,以及指令翻譯緩沖器(I-TLB)以存儲(chǔ)指令 的地址翻譯條目。解碼模塊125耦合到提取單元120以解碼提取的元素。在一個(gè)實(shí)施例中,處理器 100與指令集架構(gòu)(ISA)關(guān)聯(lián),ISA定義/指定處理器100上可執(zhí)行的指令。這里,由ISA 識別的機(jī)器代碼指令通常包括稱為操作碼的一部分指令,所述操作碼引用/指定將要執(zhí)行的指令或操作。在一個(gè)示例中,分配和重命名模塊130包括用于預(yù)定資源(例如,用于存儲(chǔ)指令處 理結(jié)果的寄存器文件)的分配器。然而,線程IOla和IOlb可能能夠亂序執(zhí)行,其中,分配 和重命名模塊130還預(yù)定其它資源,例如用于跟蹤指令結(jié)果的重排序緩沖器。單元130還 可以包括寄存器重命名器,其用于將程序/指令索引寄存器重命名為處理器100內(nèi)部的其 它寄存器。重排序/撤出單元135包括部件,例如上述重排序緩沖器、加載緩沖器和存儲(chǔ)緩 沖器,以支持亂序執(zhí)行和亂序執(zhí)行的指令的隨后的有序撤出。在一個(gè)實(shí)施例中,調(diào)度和執(zhí)行單元模塊140包括用于調(diào)度執(zhí)行單元上的指令/操 作的調(diào)度單元。例如,將浮點(diǎn)指令調(diào)度在具有可用的浮點(diǎn)執(zhí)行單元的執(zhí)行單元的端口上。還 包括與執(zhí)行單元關(guān)聯(lián)的寄存器文件以存儲(chǔ)信息指令處理結(jié)果。示例性的執(zhí)行單元包括浮點(diǎn) 執(zhí)行單元、整數(shù)執(zhí)行單元、跳轉(zhuǎn)執(zhí)行單元、加載執(zhí)行單元、存儲(chǔ)執(zhí)行單元以及其它已知的執(zhí) 行單元。較低層級的數(shù)據(jù)高速緩存和數(shù)據(jù)翻譯緩沖器(D-TLB) 150耦合到執(zhí)行單元140。數(shù) 據(jù)高速緩存用于存儲(chǔ)最近使用/操作的元素,例如數(shù)據(jù)操作數(shù),其可能被保存在存儲(chǔ)器一 致性狀態(tài)。D-TLB用于將最近的虛擬/線性存儲(chǔ)到物理地址翻譯。作為具體的示例,處理器 可以包括頁表結(jié)構(gòu)以將物理存儲(chǔ)器分成多個(gè)虛擬頁。在一個(gè)實(shí)施例中,處理器100能夠用于硬件事務(wù)執(zhí)行、軟件事務(wù)執(zhí)行或其組合或 混合。事務(wù)還可以被稱為代碼的關(guān)鍵段或原子段,其包括將作為一個(gè)原子組而被執(zhí)行的指 令、操作或微操作的分組。例如,指令或操作可以用于劃分事務(wù)或關(guān)鍵段。在一個(gè)實(shí)施例中, 以下將更為詳細(xì)的描述,這些指令是指令集(例如指令集架構(gòu)(ISA))的一部分,其可以由 處理器100的硬件(例如,上述的解碼器)來識別。通常,一旦這些指令被從高級語言編譯 為硬件可識別的匯編語言,那么這些指令包括解碼器在解碼階段期間識別的操作代碼(操 作碼)或指令的其它部分。通常,在事務(wù)的執(zhí)行期間,對存儲(chǔ)器的更新不是全局可見的,直到提交事務(wù)為止。 作為示例,對位置的事務(wù)寫入可以對本地線程可見,但是,響應(yīng)于來自另一個(gè)線程的讀取, 寫入數(shù)據(jù)不會(huì)被轉(zhuǎn)發(fā),直到提交包括事務(wù)寫入的事務(wù)為止。當(dāng)事務(wù)仍未決(pending)時(shí),跟 蹤從存儲(chǔ)器加載的和寫入其的數(shù)據(jù)項(xiàng)/元素,以下將更加詳細(xì)的討論。一旦事務(wù)到達(dá)提交 點(diǎn),如果對于所述事務(wù)沒有檢測到?jīng)_突,那么提交事務(wù)并且在使事務(wù)全局可見期間進(jìn)行更 新。然而,如果事務(wù)在其未決期間被無效,那么事務(wù)被中止并且可以在沒有使更新全 局可見的情況下重新開始。因此,如本文所使用的,事務(wù)的未決指已經(jīng)開始執(zhí)行并且還沒有 被提交或中止(即,未決)的事務(wù)。軟件事務(wù)存儲(chǔ)器(STM)系統(tǒng)通常指在軟件中或至少部分地在軟件中執(zhí)行訪問跟 蹤、沖突解決或其它事務(wù)存儲(chǔ)器任務(wù)。在一個(gè)實(shí)施例中,處理器100能夠執(zhí)行編譯器以編譯 程序代碼來支持事務(wù)執(zhí)行。這里,編譯器可以插入操作、調(diào)用、函數(shù)和其它代碼以允許事務(wù) 的執(zhí)行。編譯器通常包括用于將源文本/代碼翻譯成目標(biāo)文本/代碼的程序或程序組。通 常,在多個(gè)階段中利用編譯器來編譯程序/應(yīng)用程序代碼,并且將高級編程語言代碼轉(zhuǎn)換 為低級機(jī)器或匯編語言代碼。此外,單遍編譯器仍然可用于簡單的編譯。編譯器可以使用任何已知的編譯技術(shù)并執(zhí)行任何已知的編譯操作,例如詞法分析、預(yù)處理、語法分析、語義 分析、代碼生成、代碼轉(zhuǎn)換和代碼優(yōu)化。較大的編譯器通常包括多個(gè)階段,但是在大多數(shù)情況下這些階段包括在兩個(gè)大致 的階段中(1)前端,即通常在此階段進(jìn)行語法處理、語義處理和一些轉(zhuǎn)換/優(yōu)化,以及(2) 后端,即通常在此階段進(jìn)行分析、轉(zhuǎn)換、優(yōu)化和代碼生成。一些編譯器涉及中端,其說明了在 編譯器的前端和后端之間的描述的模糊。因此,對于編譯器的插入、關(guān)聯(lián)、生成或其它操作 可以發(fā)生在上述階段或遍(pass)以及編譯器的任何其它已知的階段或遍中的任何階段或 遍中。作為說明性的示例,編譯器在編譯的一個(gè)或多個(gè)階段中可以插入事務(wù)操作、調(diào)用、函 數(shù)等,例如在編譯的前端階段插入調(diào)用/操作,然后在事務(wù)存儲(chǔ)器轉(zhuǎn)換階段將調(diào)用/操作轉(zhuǎn) 換為較低級的代碼。然而,不管執(zhí)行環(huán)境以及編譯器的動(dòng)態(tài)或靜態(tài)特性,在一個(gè)實(shí)施例中,編譯器編譯 程序代碼以允許事務(wù)執(zhí)行。所以,在一個(gè)實(shí)施例中,對程序代碼的執(zhí)行的引用指(1)編譯程 序的執(zhí)行,或者動(dòng)態(tài)地或者靜態(tài)地,以編譯主程序代碼、維護(hù)事務(wù)結(jié)構(gòu)或執(zhí)行其它有關(guān)事務(wù) 的其它操作;(2)包括事務(wù)操作/調(diào)用的主程序代碼的執(zhí)行;(3)其它程序代碼的執(zhí)行,例 如,與主程序代碼關(guān)聯(lián)的庫;或(4)它們的組合。在一個(gè)實(shí)施例中,處理器100能夠使用硬件/邏輯(即,在硬件事務(wù)存儲(chǔ)器(HTM) 系統(tǒng)內(nèi))來執(zhí)行事務(wù)。當(dāng)實(shí)現(xiàn)HTM時(shí),從架構(gòu)或微架構(gòu)的角度看,都存在許多具體的實(shí)施細(xì) 節(jié);本文不討論其中的大部分以避免不必要地模糊本發(fā)明。然而,為了說明的目的,公開了 一些結(jié)構(gòu)和實(shí)現(xiàn)。但是,應(yīng)當(dāng)注意,這些結(jié)構(gòu)和實(shí)現(xiàn)不是必須的,并且可以增加和/或使用 具有不同實(shí)現(xiàn)細(xì)節(jié)的其它結(jié)構(gòu)來代替。作為實(shí)現(xiàn)設(shè)計(jì)選擇的示例,HTM可以以就地更新(update-in-place)的方式或?qū)?緩沖的方式來工作。在就地更新方式的HTM中,對引用的存儲(chǔ)器地址執(zhí)行事務(wù)寫入,以修改 其中之前保存的數(shù)據(jù)。然而,不將該修改的數(shù)據(jù)提供給外部的請求線程,即不使數(shù)據(jù)全局可 見,但是,為了本地存儲(chǔ)器排序的目的,將數(shù)據(jù)提供給本地讀。此外,先前的數(shù)據(jù)通常被“記 錄”,以使得當(dāng)事務(wù)中止時(shí),先前的數(shù)據(jù)能夠被恢復(fù)到事務(wù)開始執(zhí)行之前的線程的狀態(tài)。為了說明,假定數(shù)據(jù)高速緩存150包括第一級數(shù)據(jù)高速緩存以保存來自較高級的 存儲(chǔ)器(例如,高速緩存110和系統(tǒng)存儲(chǔ)器175)的數(shù)據(jù)。所以,當(dāng)遇到向數(shù)據(jù)高速緩存150 進(jìn)行事務(wù)寫入時(shí),在回寫(write-back)高速緩存的一個(gè)實(shí)施例中,將先前的數(shù)據(jù)項(xiàng)回寫到 較高級的高速緩存110。可選的,先前的數(shù)據(jù)可以被記錄在處理器100內(nèi)或其外部的另一 個(gè)單獨(dú)的存儲(chǔ)器中。在記錄了先前的數(shù)據(jù)項(xiàng)之后,執(zhí)行事務(wù)寫入以更新高速緩存150中的 數(shù)據(jù)項(xiàng)。因此,本地線程(例如本地線程101a),即與事務(wù)寫入關(guān)聯(lián)的線程可以從高速緩存 150中的修改的數(shù)據(jù)項(xiàng)進(jìn)行讀取。然而,如果包括事務(wù)寫入的事務(wù)還未提交,那么響應(yīng)于讀 取請求,另一個(gè)線程(例如,線程102b)不被提供修改的數(shù)據(jù)而是提供已記錄的數(shù)據(jù)。當(dāng)事 務(wù)提交時(shí),所記錄的數(shù)據(jù)被無效或被忽視。然而,如果事務(wù)中止,那么先前的數(shù)據(jù)被重新載 入或全局地被識別為有效的數(shù)據(jù)。相反,在寫入緩沖的HTM中,事務(wù)寫入被緩沖在寫入緩沖器中,而先前的數(shù)據(jù)駐留 在其原來的位置。如果本地線程(例如,線程102b)對事務(wù)寫入的數(shù)據(jù)執(zhí)行讀取,那么從寫 入緩沖器轉(zhuǎn)發(fā)修改的數(shù)據(jù)??梢酝浦?,當(dāng)包括事務(wù)寫入的事務(wù)仍未決時(shí),如果外部線程請求 讀取數(shù)據(jù),那么提供來自原來位置的先前的數(shù)據(jù)。此外,當(dāng)提交事務(wù)時(shí),修改的數(shù)據(jù)被復(fù)制
10到相應(yīng)的存儲(chǔ)器地址,而當(dāng)中止時(shí),緩沖的數(shù)據(jù)被忽視。從上面的討論可以看出,既可以由本地處理元件也可以由其它處理元件來訪問和 請求數(shù)據(jù)項(xiàng)。在沒有安全機(jī)制的情況下,這些訪問中的一些將可能導(dǎo)致無效的數(shù)據(jù)和執(zhí)行, 即寫入使得讀取無效的數(shù)據(jù),或讀取無效數(shù)據(jù)。因此,處理器100可以包括邏輯以跟蹤或監(jiān) 視對數(shù)據(jù)項(xiàng)進(jìn)行的存儲(chǔ)器存取,從而識別潛在的沖突。數(shù)據(jù)項(xiàng)或數(shù)據(jù)元素可以包括由硬件、軟件或其組合定義的處于任何粒度的數(shù)據(jù)。 數(shù)據(jù)、數(shù)據(jù)元素、數(shù)據(jù)項(xiàng)或?qū)ζ涞囊玫睦拥姆歉F舉列表包括存儲(chǔ)器地址、數(shù)據(jù)對象、 類、動(dòng)態(tài)語言代碼類型的域、動(dòng)態(tài)語言代碼的類型、變量、操作數(shù)、數(shù)據(jù)結(jié)構(gòu)和存儲(chǔ)器地址的 間接引用。然而,數(shù)據(jù)的任何已知分組都可以被稱為數(shù)據(jù)元素或數(shù)據(jù)項(xiàng)。以上例子中的一 些,例如動(dòng)態(tài)語言代碼類型的域和動(dòng)態(tài)語言代碼的類型指動(dòng)態(tài)語言代碼的數(shù)據(jù)結(jié)構(gòu)。為了 說明,動(dòng)態(tài)語言代碼(例如,Sim微系統(tǒng)公司的Java )是一種非常典型的語言。每個(gè)變量 都具有在編譯時(shí)已知的類型。類型被劃分為兩個(gè)類別-基本類型(布爾值和數(shù)值,例如整 型、浮點(diǎn)型)和引用類型(類、接口和數(shù)組)。引用類型的值是對對象的引用。在Java 中, 由域組成的對象可以是類的實(shí)例或數(shù)組。給定類A的對象a,習(xí)慣上使用記號A: :X來指類 型A的域X,并且a. χ指類A的對象a的域χ。例如,表達(dá)式可以表示為a. χ = a. y+a. ζ。這 里,域y和域ζ被加載從而相加,并且將結(jié)果寫入到域χ。所以,可以在任何數(shù)據(jù)層級粒度處執(zhí)行對數(shù)據(jù)項(xiàng)的存儲(chǔ)器訪問的監(jiān)視。例如,在一 個(gè)實(shí)施例中,在類型層級處監(jiān)視對數(shù)據(jù)的存儲(chǔ)器訪問。這里,對域A: :x的事務(wù)寫入和對域 A::y的非事務(wù)加載可以作為對相同數(shù)據(jù)項(xiàng)(S卩,類型A)的訪問而被監(jiān)視。在另一個(gè)實(shí)施例 中,在域?qū)蛹壛6忍巿?zhí)行存儲(chǔ)器訪問監(jiān)視。這里,對A: :x的事務(wù)寫入和對A: :y的非事務(wù)加 載不被作為對相同數(shù)據(jù)項(xiàng)的訪問而監(jiān)視,因?yàn)樗鼈円昧瞬煌挠颉W⒁?,在跟蹤對?shù)據(jù)項(xiàng) 的存儲(chǔ)器訪問中可以考慮其它數(shù)據(jù)結(jié)構(gòu)或編程技術(shù)。作為示例,假定指向類B的對象的、類 A的對象的域χ和y (即,A: :X和A: :y)被初始化為新分配的對象并且在初始化之后從不被 寫入。在一個(gè)實(shí)施例中,對由A: :x指向的對象的域B: :z的事務(wù)寫入不被作為關(guān)于由A: :y 指向的對象的域B: :z的非事務(wù)加載的、對相同數(shù)據(jù)項(xiàng)的存儲(chǔ)器訪問而監(jiān)視。由這些示例可 以類推,可以確定監(jiān)視器可以在任何數(shù)據(jù)粒度級別執(zhí)行監(jiān)視。在一個(gè)實(shí)施例中,監(jiān)視器包括讀取監(jiān)視器和寫入監(jiān)視器,從而跟蹤確定要被監(jiān)視 的加載和存儲(chǔ)。作為示例,硬件讀取監(jiān)視器和寫入監(jiān)視器將至少在數(shù)據(jù)項(xiàng)的粒度級別監(jiān)視 數(shù)據(jù)項(xiàng),不管保存數(shù)據(jù)項(xiàng)的存儲(chǔ)結(jié)構(gòu)的粒度是什么。在由Gad Sheaffer等人與本申請一同 提交的名稱為"Read and WriteMonitoring Attributes in Transactional Memory (TM) Systems”、代理方案號為P29130的共同未決申請No. 12/346,530中更詳細(xì)地討論了使用讀 取監(jiān)視器/屬性來監(jiān)視數(shù)據(jù)項(xiàng)的例子。然而,可以使用監(jiān)視器、屬性、注釋或其它跟蹤機(jī)制 來檢測與使用任何數(shù)據(jù)或結(jié)構(gòu)粒度來保存數(shù)據(jù)的事務(wù)執(zhí)行相關(guān)聯(lián)的沖突。讀或?qū)憣傩园ㄓ糜诒4媾c數(shù)據(jù)項(xiàng)相關(guān)聯(lián)的狀態(tài)的任何邏輯、固件或結(jié)構(gòu)。例如, 數(shù)據(jù)項(xiàng)的屬性包括比特矢量,其中,比特矢量中的每個(gè)比特表示數(shù)據(jù)項(xiàng)的屬性,例如事務(wù) 力口載(transactional Iy loaded)、事務(wù)寫、非事務(wù)力口載(non-transactionally loaded)、非 事務(wù)寫入、不是事物加載(nottransactionally loaded)、不是事務(wù)寫、不是非事務(wù)加載、不 是非事務(wù)寫、檢測到訪問沖突、未檢測到訪問沖突、讀請求、無讀請求、寫請求、無寫請求、所 有權(quán)請求、無所有權(quán)請求,或與數(shù)據(jù)項(xiàng)或保存數(shù)據(jù)項(xiàng)的存儲(chǔ)器位置相關(guān)聯(lián)的任何其它屬性
11或狀態(tài)。作為另一個(gè)示例,數(shù)據(jù)項(xiàng)的屬性包括編碼值。例如,使用兩個(gè)屬性比特,即四個(gè)二 進(jìn)制值00、01、11和10來編碼狀態(tài),例如四個(gè)狀態(tài)(1)事務(wù)寫;(2)事務(wù)讀;(3)不是事務(wù) 寫;(4)不是事務(wù)讀。作為另一個(gè)示例,包括屬性作為與高速緩存存儲(chǔ)器(例如,數(shù)據(jù)高速緩存150)相 關(guān)聯(lián)的一致性狀態(tài)數(shù)組的一部分。示例性的高速緩存一致性狀態(tài)的非窮舉列表包括(1) 修改的(M 420)狀態(tài),即,地址被寫入并且沒有與其關(guān)聯(lián)的屬性;(2)修改的讀取(MR 430) 狀態(tài),即,地址被寫入并且具有與其關(guān)聯(lián)的讀取屬性(例如,之前對地址讀取,然后事務(wù)寫 入地址);(3)修改的寫入(MW 425)狀態(tài),即,地址被寫入并且具有與其關(guān)聯(lián)的寫入屬性; (4)修改的讀取寫入(MRW 435)狀態(tài),即,地址被寫入并且具有與其關(guān)聯(lián)的讀取和寫入屬 性;(5)排它的(E 440)狀態(tài),即,地址被讀取并且沒有與其關(guān)聯(lián)的屬性;(6)排它的讀取 (ER 445)狀態(tài),即,地址被讀取并且具有與其關(guān)聯(lián)的讀取屬性;(7)共享(S 410),S卩,地址 被讀取并且沒有與其關(guān)聯(lián)的屬性;(8)共享讀取(SR 415)狀態(tài),即,地址被讀取并且具有與 其關(guān)聯(lián)的讀取屬性。這里,可以將額外的高速緩存一致性狀態(tài)(例如,監(jiān)視的一致性狀態(tài))加入到傳統(tǒng) 的修改、排它、共享和無效(MESI)高速緩存一致性狀態(tài)。因此,可以結(jié)合硬件監(jiān)視器/屬性 來使用現(xiàn)有已知的一致性和通信/監(jiān)聽協(xié)議來檢測沖突?;谠O(shè)計(jì),高速緩存一致性請求和高速緩存行(cache line)的監(jiān)視的一致性狀態(tài) 的不同組合導(dǎo)致潛在沖突,例如保存數(shù)據(jù)項(xiàng)的高速緩存行處于共享讀取狀態(tài)并且監(jiān)聽指示 對數(shù)據(jù)項(xiàng)的寫入請求。相反,保存數(shù)據(jù)項(xiàng)的高速緩存行處于修改的寫入狀態(tài)并且監(jiān)聽指示 對數(shù)據(jù)項(xiàng)的讀取請求可以被認(rèn)為是沖突的。在一個(gè)實(shí)施例中,為了檢測訪問請求與屬性狀 態(tài)的這種組合,監(jiān)聽邏輯耦合到?jīng)_突檢測/報(bào)告邏輯,例如監(jiān)視器和/或用于沖突檢測/報(bào) 告的邏輯。在一個(gè)實(shí)施例中,使用暫時(shí)的(印hemeral)或?qū)S玫?private)存儲(chǔ)來實(shí)現(xiàn)與高 速緩存150中保存的數(shù)據(jù)項(xiàng)相關(guān)聯(lián)的屬性。這里,屬性可以保存在高速緩存150中的任何 位置,例如高速緩存150自身的行中。例如,如上所描述的HTM的一個(gè)例子包括就地更新的 HTM。這里,事務(wù)修改的數(shù)據(jù)被保存在當(dāng)前的存儲(chǔ)器位置,而先前的數(shù)據(jù)被記錄/備份在例 如較高層級的存儲(chǔ)器中。因此,在一個(gè)實(shí)施例中,當(dāng)針對數(shù)據(jù)項(xiàng)來訪問高速緩存150時(shí),屬 性被暫時(shí)地與數(shù)據(jù)項(xiàng)存儲(chǔ)在高速緩存150中。這里,數(shù)據(jù)項(xiàng)保持在專用的或暫時(shí)的一致性 狀態(tài)中,這允許高速緩存控制邏輯確保支持事務(wù)語義。換句話說,不將保持在暫時(shí)狀態(tài)的數(shù) 據(jù)項(xiàng)提供給其它線程。然而,如果數(shù)據(jù)項(xiàng)被從高速緩存150中逐出,那么專用保存的屬性可能會(huì)丟失。實(shí) 質(zhì)上,屬性由系統(tǒng)創(chuàng)建以監(jiān)視數(shù)據(jù)項(xiàng)并且不被寫回到較高層級的存儲(chǔ)器。在屬性將消失的 情況下,即,在逐出或其它事件時(shí)丟失的情況下,如上所述,可以按照與檢測潛在的訪問沖 突類似的方式來觸發(fā)潛在的沖突。在與本申請一同提交的名稱為“Extending the MESI protocol tosupport locally buffered data”、代理方案號為 P29132 的有關(guān)申請中討論 了暫時(shí)存儲(chǔ)和專用狀態(tài)(例如,緩沖存儲(chǔ)和緩沖狀態(tài))的形式。在一個(gè)實(shí)施例中,處理程序被記錄在硬件中以支持有效地處理沖突,例如訪問沖 突、監(jiān)視器沖突的丟失、數(shù)據(jù)沖突的丟失等。作為示例,為軟件(例如事務(wù)運(yùn)行時(shí)或應(yīng)用程序代碼)提供軟件可寫寄存器,以登記事務(wù)處理程序的地址。當(dāng)檢測到關(guān)注的事件時(shí),例 如上面描述的信息的沖突或丟失,那么在一個(gè)實(shí)施例中,在無需特權(quán)軟件(例如,操作系統(tǒng) (OS))的干預(yù)的情況下,將控制流引導(dǎo)到在軟件可寫寄存器中登記的事務(wù)處理程序。在一個(gè)實(shí)施例中,關(guān)注的事件,S卩,引起事務(wù)處理程序的調(diào)用的處理程序事件,能 夠由非特權(quán)軟件(例如,事務(wù)運(yùn)行時(shí)或應(yīng)用程序代碼)來指定。在不同實(shí)施例中,關(guān)注的事 件可以是同步的、異步的或是其組合。因而,能夠在沒有OS的干預(yù)的情況下,對于同步或異 步事件,將控制轉(zhuǎn)移到軟件處理程序,這一能力可以消除了等待特權(quán)級的軟件分配進(jìn)程以 啟動(dòng)處理程序的執(zhí)行所涉及的延遲。所以,在導(dǎo)致意外的執(zhí)行和結(jié)果之前需要低延遲反應(yīng) 的處理程序事件被有效并快速地處理。如上文最初參考圖1描述的,為了討論的目的,處理器100的架構(gòu)是純說明性的。 類似地,將屬性與數(shù)據(jù)項(xiàng)/元素關(guān)聯(lián)的具體例子也是示例性的,因?yàn)榭梢允褂迷诓煌6?的數(shù)據(jù)項(xiàng)處關(guān)聯(lián)硬件監(jiān)視器/屬性的任何方法。參考圖2,描述了包括處理器的系統(tǒng)的實(shí)施例,其中,所述處理器提供將處理程序 登記在硬件中的支持。處理器205可以包括或省略參考圖1描述的任何功能單元或模塊, 并且可以包括處理器的任何其它已知的單元或邏輯。此外,還描述了存儲(chǔ)元件的集合。然 而,可以在任意數(shù)量的存儲(chǔ)元件內(nèi)組合以下關(guān)于分離的存儲(chǔ)元件所描述的操作和方法。如圖所示,處理器205通過控制器中心230耦合到系統(tǒng)存儲(chǔ)器250。系統(tǒng)存儲(chǔ)器 250包括任何存儲(chǔ)器設(shè)備,例如隨機(jī)存取存儲(chǔ)器(RAM)。這里,系統(tǒng)存儲(chǔ)器250保存應(yīng)用程 序代碼260和處理程序255,其中,所述應(yīng)用程序代碼260可以包括要在處理器205上執(zhí)行 的一個(gè)或多個(gè)事務(wù),并且如下文所描述的,可以將所述處理程序255登記在處理器205的硬 件中,以處理在應(yīng)用程序代碼260的執(zhí)行期間發(fā)生的有關(guān)事務(wù)的處理程序事件。在一個(gè)實(shí)施例中,控制器中心230包括芯片組,其通常包括兩個(gè)中心,S卩,用于與 系統(tǒng)存儲(chǔ)器250進(jìn)行通信并且可以與輸入/輸出(I/O)設(shè)備(例如,圖形處理器)連接的 存儲(chǔ)器控制中心,以及用于與其它I/O設(shè)備(例如,網(wǎng)絡(luò)接口控制器(NIC)、音頻設(shè)備或其它 已知I/O設(shè)備)進(jìn)行通信的I/O控制中心。處理器205包括存儲(chǔ)元件210。存儲(chǔ)元件指用于保存信息或元素(例如,二進(jìn)制 值、數(shù)據(jù)、代碼、指令、地址或其它已知的計(jì)算機(jī)相關(guān)信息)的任何邏輯、部件或設(shè)備。作為 常見的示例,存儲(chǔ)元件包括寄存器。處理器中的典型的寄存器包括通用寄存器、數(shù)據(jù)寄存 器、地址寄存器、條件寄存器、浮點(diǎn)寄存器、常數(shù)寄存器、矢量寄存器、專用寄存器、程序計(jì)數(shù) 器(又叫做指令指針)寄存器、狀態(tài)寄存器、指令寄存器、機(jī)器/模式專用寄存器(MSR)、控 制寄存器和普通用戶可訪問寄存器。因此,存儲(chǔ)元件210-225中的每一個(gè)在不同的實(shí)施例 中可以分別是前述寄存器中的任何一個(gè)。在一個(gè)實(shí)施例中,處理程序(例如,處理程序255)將被登記在存儲(chǔ)元件210中。 將處理程序255登記在處理器205的硬件中包括將處理程序255的任何標(biāo)識符或其位置登 記到處理器205。作為示例,將處理程序255登記在存儲(chǔ)元件210中包括將對處理程序255 的索引存儲(chǔ)到存儲(chǔ)元件210中。換句話說,一旦被登記,存儲(chǔ)元件210保存到處理程序255 的索引??梢允褂脤⑺饕怯浀酱a的任何方法來更新存儲(chǔ)元件210,從而保存對處理程 序255的索引。在一個(gè)實(shí)施例中,非特權(quán)的軟件/代碼用于將處理程序255登記到存儲(chǔ)元件210中。非特權(quán)軟件可以包括非特權(quán)級的任何代碼,例如不被允許在特定的高特權(quán)級(即, 特權(quán)級零)執(zhí)行的軟件。然而,在一個(gè)實(shí)施例中,非特權(quán)軟件包括用戶級代碼。換句話說, 事務(wù)運(yùn)行時(shí)代碼、應(yīng)用程序代碼或虛擬機(jī)代碼能夠在事務(wù)的執(zhí)行之前將處理程序255登記 到處理器205的硬件中。所以,在一個(gè)實(shí)施例中,存儲(chǔ)元件210可由用戶級或非特權(quán)級的代 碼來修改,以便被更新以保存對處理程序255的索引。例如,在執(zhí)行事務(wù)之前,應(yīng)用程序代碼將處理程序255登記到存儲(chǔ)元件210中,以 使得如果在事務(wù)的執(zhí)行期間發(fā)生了處理程序事件,那么用戶登記的處理程序255被調(diào)用以 處理所述事件。因此,在該實(shí)施例中,用戶既能夠定義在事務(wù)處理程序事件發(fā)生時(shí)要使用的 處理程序,又能夠?qū)⑻幚沓绦虻怯浀接布?,以提供到處理程序的?yōu)化的控制流轉(zhuǎn)移。然 而,在其它的實(shí)施例中,可以由特權(quán)級軟件(例如,OS)來登記處理程序。在一個(gè)實(shí)施例中,對處理程序255的索引包括對系統(tǒng)存儲(chǔ)器250中保存的處理程 序255的起始地址256的索引。由于存在在處理器中使用的多種尋址方法,所以對存儲(chǔ)器 地址的索引可以包括任何已知的針對地址的計(jì)算機(jī)索引。作為一個(gè)示例,使用虛擬地址和 偏移作為對處理程序255的起始地址256的索引。這里,處理器205的存儲(chǔ)設(shè)備中保存的 頁表和翻譯表將虛擬地址翻譯為索引基物理地址(reference base physical address), 并且將偏移加到其上以獲得物理地址,即,對處理程序255進(jìn)行索引的物理地址256。注意, 偏移或代碼段的值的省略可以將處理程序的使用限制到當(dāng)前代碼段中,這還可以將合法的 指令限制在正在執(zhí)行的事務(wù)內(nèi)。索引的另一個(gè)示例包括存儲(chǔ)元件210中保存的直接物理地 址,用于直接地弓I用處理程序255。在一個(gè)實(shí)施例中,存儲(chǔ)元件220用于指定/指示多個(gè)處理程序事件。如上所述,處 理程序事件可以包括異步處理程序事件、同步處理程序事件或它們的組合。同步處理程序 事件包括與指令關(guān)連/關(guān)聯(lián)的事件,例如合法指令/操作的執(zhí)行或?qū)o效位置的訪問。相 反,異步事件通常稱為不直接與程序或指令的控制流相關(guān)的事件。處理程序事件的例子包 括屬性信息的缺少、屬性信息的丟失、在事務(wù)的范圍內(nèi)非法的指令的執(zhí)行、非法的控制轉(zhuǎn) 移、對非檢查點(diǎn)寄存器(non-checkpointed register)的訪問、緩沖數(shù)據(jù)的丟失、對在事務(wù) 的范圍內(nèi)禁止的存儲(chǔ)器類型的訪問、異常、系統(tǒng)調(diào)用和監(jiān)視數(shù)據(jù)的丟失。這里,同步指令的 常見示例是非法指令(例如,將控制非法地轉(zhuǎn)移到受保護(hù)的域的指令)的執(zhí)行,而異步事件 的典型例子包括屬性信息的丟失。然而,處理程序事件可以包括將由軟件處理程序處理的 任何已知的事件,或者是同步的或者是異步的。在一個(gè)實(shí)施例中,存儲(chǔ)元件220用于保存比特矢量,例如比特矢量221。比特矢量 221中的每個(gè)比特對應(yīng)于處理程序事件,例如事件270-274。例如,事件270-274代表前述 事件以及本文沒有描述的任何其它公知處理程序事件的任何組合。當(dāng)比特被設(shè)置時(shí),對應(yīng) 的處理程序事件被允許,相反地,當(dāng)比特復(fù)位時(shí),那么對應(yīng)的處理程序事件被禁止。如圖所示,存儲(chǔ)元件220中保存的矢量221的第一比特被復(fù)位,S卩,設(shè)置為邏輯零, 所以處理程序事件274被禁止。注意,邏輯值是說明性的并且可以顛倒,即邏輯0表示允許 而邏輯1表示禁止。實(shí)質(zhì)上,矢量221用作掩碼。這里,事件274 (例如,對非檢查點(diǎn)寄存器 的訪問)由于被禁止了,所以,即使被檢測到,也不會(huì)導(dǎo)致調(diào)用處理程序255。在該情況下, 由于事務(wù)的不可撤銷或難抑制的特性,這種訪問可以是可允許的,即,事務(wù)被給予優(yōu)先權(quán), 所以它可能不會(huì)中止。然而,如果檢測到其它允許的事件270-273中的任意事件,那么基于
14存儲(chǔ)元件210中保存的索引來執(zhí)行處理程序255。盡管使用比特矢量作為示例,但是還可以 使用存儲(chǔ)特定事件的方法,例如通過使用編碼值或指令。在一個(gè)實(shí)施例中,可以由非特權(quán)軟件來修改存儲(chǔ)元件220的部分或全部。這里,軟 件可以既能夠?qū)⑻幚沓绦?55登記到存儲(chǔ)元件210中,還能夠指定/登記處理程序事件以 引起處理程序255的執(zhí)行。然而,在一個(gè)例子中,保留存儲(chǔ)元件220的一部分。因此,硬件 能夠定義軟件不能禁止的一些保留的處理程序事件,而其它事件能夠由軟件來允許。通常,處理程序接收關(guān)于所檢測的處理程序事件的情況的一些通信。所以,在一個(gè) 實(shí)施例中,存儲(chǔ)元件225包括狀態(tài)存儲(chǔ)元件以保存狀態(tài)值,所述狀態(tài)值用于指示將由處理 程序225處理的處理程序事件,即,被檢測的處理程序事件。繼續(xù)上面的例子,狀態(tài)存儲(chǔ)元 件225還可以保存比特矢量,例如比特矢量226。這里,不是允許或禁止處理程序事件,而是 將比特設(shè)置為第一邏輯值以指示檢測到處理程序事件,而將比特設(shè)置為第二邏輯值以指示 沒有檢測到處理程序事件。盡管只有一比特被說明為設(shè)置成邏輯1,但是多個(gè)比特可以被設(shè)置以指示發(fā)生的 并且將要被處理的多個(gè)事件。在一個(gè)實(shí)施例中,存儲(chǔ)元件225可以由用戶級或非特權(quán)的軟 件來讀取。因此,或者為了剖析(profiling)目的或者為了實(shí)際事件處理目的,應(yīng)用程序代 碼260或處理程序255能夠讀取存儲(chǔ)元件225以確定在執(zhí)行期間發(fā)生的處理程序事件。響 應(yīng)于檢測到處理程序事件,通過存儲(chǔ)元件220到存儲(chǔ)元件210的互連或者通過對處理器205 中保存的存儲(chǔ)元件210的引用,基于存儲(chǔ)元件210中保存的索引(即,地址256的表示),將 執(zhí)行從在當(dāng)前點(diǎn)處的應(yīng)用程序代碼(即,地址257處的指令)的執(zhí)行引導(dǎo)到處理程序255 的執(zhí)行(即,地址256)??梢砸砸龑?dǎo)執(zhí)行或指示程序的控制流的任何已知的方式來完成從應(yīng)用程序代碼 260到處理程序255的執(zhí)行的引導(dǎo)或控制流的轉(zhuǎn)移。如上所述,先前的系統(tǒng)通常依賴于控制 軟件(例如,OS),以將控制轉(zhuǎn)移到不同的程序(例如,處理程序)。這里,事件可以被檢測和 收集,而OS輪詢信息以確定事件是否發(fā)生。一旦OS得知事件發(fā)生,那么它就安排用于執(zhí)行 處理程序的時(shí)間。然而,如背景技術(shù)部分的示例所說明的,如果沒有以更有效的方式(即, 有更少的滑動(dòng)(skid))來處理事務(wù)事件(其可以是同步或是異步的),那么會(huì)發(fā)生意外的執(zhí) 行結(jié)果(例如,基于無效目標(biāo)地址的分支)。通常,將滑動(dòng)定義為在處理程序情況發(fā)生(即,檢測到處理程序事件)與處理程序 的實(shí)際調(diào)用之間的延遲。例如,如果由于緩沖/私有保存的讀數(shù)據(jù)的丟失而導(dǎo)致處理程序 255被調(diào)用,并且滑動(dòng)值為3,那么從緩沖的數(shù)據(jù)丟失開始直到調(diào)用處理程序?yàn)橹箷?huì)占用三 條指令。盡管使用指令計(jì)數(shù)來指滑動(dòng),還可以使用任何其它處理度量(例如,執(zhí)行周期)。 因此,可以在較少滑動(dòng)的情況下,執(zhí)行到處理程序255的控制流轉(zhuǎn)移??刂屏鬓D(zhuǎn)移的示例包括類似故障方式,即,在識別故障/事件的指令撤出之前, 這意味著滑動(dòng)級為零;類似陷阱的方式,即在下一個(gè)可中斷的窗口處,這意味著滑動(dòng)級為 1,或?qū)τ诓煌录囊陨戏绞降慕M合。有時(shí)滑動(dòng)是基于類型事件。例如,可以引起意外的 執(zhí)行結(jié)果的一些操作不撤出以確保不存在系統(tǒng)中觀察的意外的結(jié)果,即滑動(dòng)級為0。示例包 括改變先前沒有進(jìn)行檢查點(diǎn)操作的狀態(tài)的事務(wù)范圍內(nèi)的非法操作。這里,如果狀態(tài)改變發(fā) 生,那么先前的狀態(tài)丟失,并且響應(yīng)于事件中止,先前的狀態(tài)不可以被恢復(fù)。因此,在操作的 撤出之前,將執(zhí)行引導(dǎo)到處理程序,在該實(shí)例中,處理程序可以對先前的狀態(tài)進(jìn)行檢查點(diǎn)操作,然后允許要執(zhí)行的操作。在一個(gè)實(shí)施例中,使用處理器205的硬件來執(zhí)行優(yōu)化的控制流轉(zhuǎn)移,以在沒有特 權(quán)級軟件的干預(yù)的情況下將控制轉(zhuǎn)移到處理程序255。特權(quán)級軟件的示例包括OS軟件、內(nèi) 核代碼和虛擬機(jī)監(jiān)視器(VMM)代碼。這里,處理器205可以基于存儲(chǔ)元件210中登記的索 引將應(yīng)用程序代碼260的執(zhí)行引導(dǎo)至處理程序255。為了說明,假定索引保存在寄存器210 中,例如由應(yīng)用程序代碼260存儲(chǔ)在寄存器210中的、與物理地址256關(guān)聯(lián)的虛擬地址和偏 移。此外,處理程序事件已由例如用戶級代碼260在寄存器220中指定,并且這些處理程序 事件中的一事件被檢測到,通過更新寄存器225以保存狀態(tài)值來指示所述事件。因此,執(zhí)行邏輯將對當(dāng)前程序計(jì)數(shù)器的索引(即,到當(dāng)前指令地址257的指令指 針)存儲(chǔ)在寄存器215中。類似于寄存器210中保存的索引,指令指針地址可以包括虛擬 地址和偏移、或到剛好在執(zhí)行被引導(dǎo)前的當(dāng)前點(diǎn)的其它索引,例如基于指令指針實(shí)現(xiàn)的當(dāng) 前或下一指令的地址。實(shí)質(zhì)上,寄存器215以類似于寄存器210的方式作為返回寄存器來工 作。換句話說,使用寄存器210中的索引來優(yōu)化到處理程序255的控制流轉(zhuǎn)移,并且使用返 回寄存器215中保存的索引來優(yōu)化從處理程序255到應(yīng)用程序代碼260的控制流的返回。在該示例中,在程序260中的當(dāng)前點(diǎn)被記錄在寄存器215中之后,隨后基于寄存器 210中保存的索引,使用執(zhí)行應(yīng)用程序代碼260的執(zhí)行資源來將執(zhí)行引導(dǎo)至應(yīng)用程序代碼 260。這里,到地址256的索引實(shí)質(zhì)上成為新的指令指針,并且在開始處(S卩,第一指令)開 始處理程序255的執(zhí)行。執(zhí)行資源包括如上文參考圖1描述的任何執(zhí)行邏輯,或任何其它 已知的與執(zhí)行有關(guān)的邏輯。例如,事務(wù)的操作可以在應(yīng)用程序代碼260中執(zhí)行,即,被調(diào)度 在加載/存儲(chǔ)執(zhí)行單元上執(zhí)行的加載或存儲(chǔ)操作。接下來,響應(yīng)于處理程序事件,跳轉(zhuǎn)執(zhí)行 單元執(zhí)行跳轉(zhuǎn)類型的操作,從而在沒有特權(quán)級軟件的干預(yù)的情況下,將執(zhí)行從指令地址257 跳轉(zhuǎn)至地址256。這里,跳轉(zhuǎn)類型操作可以包括正常跳轉(zhuǎn)操作或遠(yuǎn)跳轉(zhuǎn)操作。使用寄存器210中索引的地址(例如,將被翻譯為地址256的虛擬地址和偏移) 作為跳轉(zhuǎn)類型操作的目標(biāo)地址,以將執(zhí)行從應(yīng)用程序代碼260引導(dǎo)至處理程序255。在該架 構(gòu)內(nèi),當(dāng)執(zhí)行完處理程序255之后,即,完成對處理程序事件的處理之后,執(zhí)行類似的跳轉(zhuǎn) 類型指令/操作以返回應(yīng)用程序代碼260。然而,此時(shí)不是將寄存器210中保存的索引作為 目標(biāo)地址,而是將使用返回寄存器215中保存的先前的指令指針?biāo)饕鳛橛糜诘綉?yīng)用程序 代碼260內(nèi)的先前點(diǎn)的返回跳轉(zhuǎn)的目標(biāo)地址。以上對處理程序255的索引包括用于處理同步或異步事件的任何已知代碼。事實(shí) 上,處理程序255可以取決于所檢測的處理程序事件來執(zhí)行不同的操作。例如,當(dāng)遇到一些 處理程序事件時(shí),處理程序255可以嘗試執(zhí)行提交或中止功能,并且執(zhí)行其它操作,例如, 當(dāng)遇到其它處理程序事件時(shí),對寄存器進(jìn)行檢查點(diǎn)操作。因此,用戶可以指定處理程序事件 并且在硬件中定義將使用的處理程序,所以當(dāng)遇到處理程序事件時(shí),硬件能夠在沒有特權(quán) 軟件的干預(yù)的延遲的情況下,將控制轉(zhuǎn)移至由用戶級代碼指定的處理程序。此外,可以提供 硬件以傳送關(guān)于處理程序事件的信息,例如,事件、與事件關(guān)聯(lián)的地址和其它的事件相關(guān)信 息。圖3-4討論了將控制引導(dǎo)至處理程序的實(shí)施例。參照圖3,描述了在沒有特權(quán)級軟件的干預(yù)的情況下,將執(zhí)行引導(dǎo)至事務(wù)處理程序 的方法的流程圖的實(shí)施例。注意,以基本上順序的方式來說明圖3和圖4中的流程。然而, 在其它實(shí)施例中可以以不同的順序、以彼此并行的或以完全不同的順序來執(zhí)行描述的流
16程。例如,在圖4中,在流程框410中指定處理程序事件之前,在流程框405中將處理程序 地址存儲(chǔ)在第一寄存器中。然而,在不背離圖4的目的的情況下,可以在將處理程序地址存 儲(chǔ)在第一寄存器之前指定事件。在流程框305中,將事務(wù)處理程序登記在處理器的硬件中??梢允褂脤⑻幚沓绦?登記在硬件中的任何方法,例如將到處理程序的索引添加到處理器中保存的表或棧中。在 一個(gè)實(shí)施例中,將到與事務(wù)處理程序關(guān)聯(lián)的地址的索引放入寄存器中。對地址的索引包括 任何已知的地址索引。作為示例,索引包括能夠由處理器中的硬件結(jié)構(gòu)(即,翻譯緩沖器和 /或頁表)翻譯的虛擬地址和偏移。如上文所述,寄存器可以是用戶可訪問的,以使得應(yīng)用 程序代碼或事務(wù)運(yùn)行時(shí)代碼在代碼初始化時(shí)或在代碼段內(nèi)(例如,在事務(wù)的開始)執(zhí)行登 記。在流程框310中確定是否檢測到處理程序事件。處理程序事件的例子包括屬性信 息的缺少、屬性信息的丟失、在事務(wù)的范圍內(nèi)非法的指令的執(zhí)行、非法的控制轉(zhuǎn)移、對非檢 查點(diǎn)寄存器的訪問、緩沖數(shù)據(jù)的丟失、在事務(wù)的范圍內(nèi)禁止的存儲(chǔ)器類型的訪問、異常、系 統(tǒng)調(diào)用、監(jiān)視數(shù)據(jù)的丟失??梢?,在該例子中,處理程序事件可以包括同步和異步的事件。然 而,如下面將更詳細(xì)地描述的,在一個(gè)實(shí)施例中,不是使用受延遲影響的軟件輪詢來處理事 件,而是可以以快速異步硬件方式來處理同步和異步事件兩者,從而提供優(yōu)化的滑動(dòng)處理。 上文參照圖2說明了實(shí)施例,其中,用戶級代碼或特權(quán)代碼與用戶級代碼的組合指定了處 理程序事件。然而,還可以由硬件、固件或其它軟件來指定處理程序事件。如果沒有檢測到事件,那么在框315中繼續(xù)正常執(zhí)行。然而,如果在框310中檢測 到事件,那么在框320中,在沒有特權(quán)級軟件干預(yù)的情況下將執(zhí)行引導(dǎo)至事務(wù)處理程序。注 意,可以使用在沒有OS、內(nèi)核或正在執(zhí)行的虛擬機(jī)監(jiān)視器代碼的情況下將執(zhí)行指引到處理 程序的任何方法。下文將參考圖4描述的示例包括基于處理器的寄存器中保存的值來引導(dǎo) 執(zhí)行。參考圖4,描述了使用硬件將控制流轉(zhuǎn)移到軟件處理程序的方法的流程圖的實(shí)施 例。在405中,將事務(wù)處理程序的處理程序地址存儲(chǔ)/寫入到第一寄存器中。這里,用戶級 軟件寫入對地址的索引,例如,虛擬地址和偏移。在410中,用戶級軟件在第二寄存器中指 定多個(gè)處理程序事件。如上所述的示例,用戶級軟件設(shè)置/復(fù)位對應(yīng)于硬件定義的處理程 序事件的比特向量中的比特。注意,處理程序事件可以是同步事件、異步事件或其組合。在415中,檢測到所述多個(gè)處理程序事件中的一處理程序事件。事件檢測可以包 括可以跨越多個(gè)功能單元的多種方法。例如,為了檢測屬性數(shù)據(jù)或監(jiān)視數(shù)據(jù)的丟失,高速緩 存控制邏輯可以檢測所監(jiān)視的行的逐出并相應(yīng)地報(bào)告其。然而,對于非法的指令,檢測與非 法操作關(guān)聯(lián)的操作碼的解碼器可以檢測并報(bào)告事件。作為另一個(gè)示例,在處理器的管線的 級中檢測到更新寄存器的狀態(tài)的操作,并且與該級關(guān)聯(lián)的邏輯檢測處理程序事件。可以使 用檢測硬件事件或處理程序相關(guān)事件的其它邏輯和方法。一旦檢測到事件,隨后在420中更新第三寄存器的狀態(tài)值以指示檢測到所述多個(gè) 處理程序事件中的處理程序事件。這里,一旦硬件檢測到事件,那么報(bào)告邏輯將事件報(bào)告給 狀態(tài)寄存器。作為示例,在第三寄存器中保存的比特矢量中設(shè)置對應(yīng)于處理程序事件的比 特以報(bào)告處理程序事件的發(fā)生。第三寄存器可以是用戶級軟件可讀的,所以處理程序能夠 確定檢測到什么處理程序事件。注意,第三寄存器或連同第三寄存器的其它寄存器可以提供關(guān)于處理程序事件的額外的信息,例如與事件關(guān)聯(lián)的操作、與事件關(guān)聯(lián)的寄存器以及與 事件關(guān)聯(lián)的地址/數(shù)據(jù)項(xiàng)。 在將執(zhí)行引導(dǎo)至處理程序之前,在425中,將當(dāng)前程序計(jì)數(shù)器值或指令指針值/地 址寫入第四寄存器中,以允許在處理程序執(zhí)行之后返回到當(dāng)前的執(zhí)行點(diǎn)。基于處理器設(shè)計(jì), 指令指針可以引用當(dāng)前指令或下一條指令。所以,在兩種實(shí)現(xiàn)方式中,對“當(dāng)前指令指針”的 索引包括當(dāng)前指令指針值,其可以是當(dāng)前或下一條指令。作為示例,用于引用適當(dāng)指令的地 址的虛擬地址和偏移被存儲(chǔ)在寄存器中。在430中,執(zhí)行跳轉(zhuǎn)到第一寄存器中保存的處理程序地址。繼續(xù)上面的示例,執(zhí)行 跳轉(zhuǎn)類型的操作以跳轉(zhuǎn)至第一寄存器中保存的虛擬地址加上偏移處。實(shí)質(zhì)上,在425中,當(dāng) 前指令指針被記錄,并且在430中,當(dāng)前指令指針被替換為指向事務(wù)處理程序的起始指令 的“指令指針”。在435中,事務(wù)處理程序被執(zhí)行以相應(yīng)地處理事件或多個(gè)事件。如上所述,處理程 序能夠訪問寄存器(例如,第三寄存器)以確定所檢測的事件、事件類型、與事件關(guān)聯(lián)的地 址或操作或其它有關(guān)處理程序的信息。當(dāng)事件被處理之后,隨后在440中,執(zhí)行跳轉(zhuǎn)回第四 寄存器中保存的指令指針地址。與以上描述相反,處理程序內(nèi)的指令指針現(xiàn)在被替換為先 前記錄的指令指針。因此,執(zhí)行被引導(dǎo)回剛好在處理程序調(diào)用前的點(diǎn)。在一個(gè)實(shí)施例中,響 應(yīng)于中止或提交,軟件處理程序可以使得執(zhí)行引導(dǎo)回不同的點(diǎn)。本文使用的模塊指任何硬件、軟件、固件或其組合。通常說明為分離的模塊邊界通 常會(huì)改變并且可能重疊。例如,第一和第二模塊可以共享硬件、軟件、固件或其組合,同時(shí)可 能保留某些獨(dú)立的硬件、軟件或固件。在一個(gè)實(shí)施例中,術(shù)語“邏輯”的使用包括硬件,例如 晶體管、寄存器或其它硬件,例如可編程邏輯設(shè)備。然而,在另一個(gè)實(shí)施例中,邏輯還包括與 硬件集成的軟件或代碼,例如固件或微代碼。本文所使用的值包括數(shù)字、狀態(tài)、邏輯狀態(tài)或二進(jìn)制邏輯狀態(tài)的任何已知的表示。 通常,邏輯電平、邏輯值或邏輯值的使用還被稱為1和0,其簡單地表示二進(jìn)制邏輯狀態(tài)。例 如,1指高邏輯電平而0指低邏輯電平。在一個(gè)實(shí)施例中,存儲(chǔ)單元(例如,晶體管或閃存單 元)能夠保存單個(gè)邏輯值或多個(gè)邏輯值。然而,已經(jīng)使用了計(jì)算機(jī)系統(tǒng)中的值的其它表示。 例如,十進(jìn)制數(shù)字十還可以表示為二進(jìn)制值1010以及十六進(jìn)制字母A。因此,值包括可以在 計(jì)算機(jī)系統(tǒng)中保存的信息的任何表示。而且,可以用值或值的部分來表示狀態(tài)。作為示例,第一值(例如,邏輯1)可以表 示缺省或初始狀態(tài),而第二值(例如,邏輯0)可以表示非缺省狀態(tài)。此外,在一個(gè)實(shí)施例中, 術(shù)語復(fù)位和設(shè)置分別地指缺省的和更新的值或狀態(tài)。例如,缺省值可以包括高邏輯值,即復(fù) 位,而更新的值可以包括低邏輯值,即設(shè)置。注意,值的任何組合可以用于表示任何數(shù)量的 狀態(tài)。可以經(jīng)由由處理元件執(zhí)行的、機(jī)器可訪問介質(zhì)或機(jī)器可讀介質(zhì)上存儲(chǔ)的指令或代 碼來實(shí)現(xiàn)以上闡述的方法、硬件、軟件、固件或代碼的實(shí)施例。機(jī)器可訪問/可讀介質(zhì)包括 以機(jī)器(例如,計(jì)算機(jī)或電子系統(tǒng))可讀的形式來提供(即,存儲(chǔ)和/或發(fā)送)信息的任 何裝置。例如,機(jī)器可訪問介質(zhì)包括隨機(jī)訪問存儲(chǔ)器(RAM),例如靜態(tài)RAM(SRAM)、或動(dòng)態(tài) RAM(DRAM) ;ROM ;磁或光存儲(chǔ)介質(zhì);閃存存儲(chǔ)設(shè)備;電子存儲(chǔ)設(shè)備、光存儲(chǔ)設(shè)備、聲存儲(chǔ)設(shè)備 或其它形式的傳播信號的(例如,載波、紅外信號、數(shù)字信號)的存儲(chǔ)設(shè)備等。例如,機(jī)器可以通過從能夠保存在傳輸信號上發(fā)送的信息的介質(zhì)接收傳輸?shù)男盘?例如,載波)來訪問 存儲(chǔ)設(shè)備。貫穿整個(gè)說明書的對“一個(gè)實(shí)施例”或“實(shí)施例”的提及意味著結(jié)合實(shí)施例描述的 特定特征、結(jié)構(gòu)或特性包括在本發(fā)明的至少一個(gè)實(shí)施例中。因此,貫穿該說明書的各處出現(xiàn) 的短語“在一個(gè)實(shí)施例中”或“在實(shí)施例中”并非必然全部指相同的實(shí)施例。此外,可以在 一個(gè)或多個(gè)實(shí)施例中,以任何適當(dāng)?shù)姆绞絹斫M合特定特征、結(jié)構(gòu)或特性。在前面的說明書中,參照具體的示例性的實(shí)施例給出了詳細(xì)的說明。然而,很明 顯,在不脫離所附的權(quán)利要求中所闡明的本發(fā)明的更廣泛的精神和范圍的情況下,可以進(jìn) 行多種變型和改變。因此,說明書和附圖被認(rèn)為是說明性的而不是限制性的。此外,前面使 用的實(shí)施例和其它示例性的語言并非必然指相同的實(shí)施例或相同的示例,而是可以指不同 的和有區(qū)別的實(shí)施例以及可以指相同的實(shí)施例。
權(quán)利要求
一種裝置,包括存儲(chǔ)元件,其可以由非特權(quán)軟件來修改,以保存對事務(wù)處理程序的索引;以及執(zhí)行資源,其耦合到所述存儲(chǔ)元件以執(zhí)行事務(wù),并且響應(yīng)于處理程序事件,基于對所述存儲(chǔ)元件中保存的到所述事務(wù)處理程序的索引,將執(zhí)行從所述事務(wù)引導(dǎo)至所述事務(wù)處理程序。
2.根據(jù)權(quán)利要求1所述的裝置,其中,所述存儲(chǔ)元件包括寄存器,并且其中,到所述事 務(wù)處理程序的索引包括虛擬地址。
3.根據(jù)權(quán)利要求2所述的裝置,其中,執(zhí)行資源將執(zhí)行從所述事務(wù)引導(dǎo)至所述事務(wù)處 理程序包括所述執(zhí)行資源利用與所述虛擬地址和偏移相關(guān)聯(lián)的目標(biāo)地址來執(zhí)行跳轉(zhuǎn)類型 的操作。
4.根據(jù)權(quán)利要求1所述的裝置,其中,所述非特權(quán)軟件包括事務(wù)運(yùn)行時(shí)代碼。
5.根據(jù)權(quán)利要求1所述的裝置,其中,所述處理程序事件包括異步處理程序事件。
6.根據(jù)權(quán)利要求1所述的裝置,其中,所述處理程序事件包括同步處理程序事件。
7.根據(jù)權(quán)利要求1所述的裝置,其中,所述處理程序事件包括從由以下各項(xiàng)構(gòu)成的組 中選擇的事件屬性信息的缺少、屬性信息的丟失、在事務(wù)的范圍內(nèi)非法的指令的執(zhí)行、對 非檢查點(diǎn)寄存器的訪問、監(jiān)視數(shù)據(jù)的丟失、緩沖數(shù)據(jù)的丟失、對在事務(wù)的范圍內(nèi)禁止的存儲(chǔ) 器類型的訪問、異常和系統(tǒng)調(diào)用。
8.根據(jù)權(quán)利要求1所述的裝置,還包括第二存儲(chǔ)元件,其也可以由所述非特權(quán)軟件來 修改,以指定包括所述處理程序事件的多個(gè)處理程序事件。
9.根據(jù)權(quán)利要求8所述的裝置,其中,所述第二存儲(chǔ)元件指定多個(gè)處理程序事件包括 所述第二存儲(chǔ)元件保存一比特向量,所述比特向量中的每一比特對應(yīng)于所述多個(gè)處理程序 事件中的一個(gè),并且其中,對應(yīng)于所述處理程序事件的比特由所述非特權(quán)軟件來設(shè)置以允 許所述執(zhí)行資源響應(yīng)于所述處理程序事件將執(zhí)行引導(dǎo)至所述事務(wù)處理程序。
10.根據(jù)權(quán)利要求8所述的裝置,還包括第三存儲(chǔ)元件,其可以由所述非特權(quán)軟件來 讀取,其中,所述第三存儲(chǔ)元件用于保存狀態(tài)值以指定相應(yīng)于所述執(zhí)行資源的所述處理程 序事件,其中,所述執(zhí)行資源響應(yīng)于所述處理程序事件,基于到所述事務(wù)處理程序的所述索 弓I,從所述事務(wù)處理程序來弓I導(dǎo)執(zhí)行。
11.根據(jù)權(quán)利要求 ο所述的裝置,還包括第四存儲(chǔ)元件,在執(zhí)行資源將執(zhí)行從所述事 務(wù)引導(dǎo)至所述事務(wù)處理程序之前,用到當(dāng)前指令指針的索引來更新所述第四存儲(chǔ)元件。
12.根據(jù)權(quán)利要求11所述的裝置,其中,響應(yīng)于所述事務(wù)處理程序處理所述處理程序 事件,所述執(zhí)行資源以所述當(dāng)前指令指針作為目標(biāo)來執(zhí)行跳轉(zhuǎn)類型指令,以將執(zhí)行返回到 所述事務(wù)。
13.一種處理器,包括寄存器,其能夠由非特權(quán)級軟件來更新以保存到事務(wù)處理程序的地址的索引;以及執(zhí)行邏輯,用于響應(yīng)于在事務(wù)執(zhí)行期間的處理程序事件,基于到所述事務(wù)處理程序的 地址的索引,在沒有特權(quán)級軟件的干預(yù)的情況下,將控制流轉(zhuǎn)移到所述事務(wù)處理程序。
14.根據(jù)權(quán)利要求13所述的處理器,其中,所述事務(wù)處理程序的地址是所述事務(wù)處理 程序的起始地址,并且其中,到所述事務(wù)處理程序的地址的所述索引包括虛擬地址。
15.根據(jù)權(quán)利要求13所述的處理器,其中,響應(yīng)于事務(wù)執(zhí)行期間的處理程序事件,基于到所述事務(wù)處理程序的地址的所述索引,在沒有特權(quán)級軟件的干預(yù)的情況下,將所述控制 流轉(zhuǎn)移到所述事務(wù)處理程序的所述執(zhí)行邏輯包括根據(jù)保存在所述寄存器中的、到所述事 務(wù)處理程序的地址的索引,使用所述事務(wù)處理程序的地址作為目標(biāo)地址來執(zhí)行第一跳轉(zhuǎn)類 型的操作的執(zhí)行邏輯。
16.根據(jù)權(quán)利要求15所述的處理器,還包括返回寄存器,其中,在所述執(zhí)行邏輯根據(jù)保 存在所述寄存器中的、到所述事務(wù)處理程序的地址的索引,使用所述事務(wù)處理程序的地址 作為所述目標(biāo)地址來執(zhí)行所述跳轉(zhuǎn)類型的操作之前,用到一指令指針地址的索引來更新所 述返回寄存器,其中,所述指令指針地址處于在所述執(zhí)行邏輯執(zhí)行所述第一跳轉(zhuǎn)類型的操 作之前的當(dāng)前點(diǎn)。
17.根據(jù)權(quán)利要求16所述的處理器,其中,所述執(zhí)行邏輯還用于響應(yīng)于執(zhí)行所述第一 跳轉(zhuǎn)類型的操作,執(zhí)行所述事務(wù)處理程序以處理所述處理程序事件,并且其中,在執(zhí)行邏輯 執(zhí)行所述事務(wù)處理程序以處理所述處理程序事件之后,所述執(zhí)行邏輯將根據(jù)所述返回寄存 器中保存的、到所述指令指針地址的索引,使用所述指令指針地址來執(zhí)行第二跳轉(zhuǎn)類型的 操作,以返回到在所述執(zhí)行邏輯執(zhí)行所述第一跳轉(zhuǎn)類型的操作之前的所述當(dāng)前點(diǎn)。
18.根據(jù)權(quán)利要求13所述的處理器,其中,所述處理程序事件包括從由以下各項(xiàng)構(gòu)成 的組中選擇的異步事件屬性信息的缺少、屬性信息的丟失和緩沖數(shù)據(jù)的丟失。
19.根據(jù)權(quán)利要求13所述的處理器,其中,所述處理程序事件包括從由以下各項(xiàng)構(gòu)成 的組中選擇的同步事件在所述事務(wù)的范圍內(nèi)的非法指令的執(zhí)行、對非檢查點(diǎn)寄存器的訪 問操作、非法的存儲(chǔ)器類型、異常和系統(tǒng)調(diào)用。
20.根據(jù)權(quán)利要求13所述的處理器,其中,非特權(quán)級軟件包括從由以下各項(xiàng)構(gòu)成的組 中選擇的軟件操作系統(tǒng)軟件、內(nèi)核軟件和虛擬機(jī)監(jiān)視器(VMM)軟件。
21.一種裝置,包括存儲(chǔ)元件,其能夠由用戶級軟件來更新以指定多個(gè)事務(wù)處理程序事件;以及執(zhí)行邏輯,用于響應(yīng)于檢測到所述多個(gè)事務(wù)處理程序事件中的事務(wù)處理程序事件,將 執(zhí)行從事務(wù)引導(dǎo)至事務(wù)處理程序。
22.根據(jù)權(quán)利要求21所述的裝置,其中,在沒有操作系統(tǒng)(OS)的干預(yù)的情況下,所述執(zhí) 行資源將執(zhí)行從所述事務(wù)引導(dǎo)至將執(zhí)行的所述事務(wù)處理程序。
23.根據(jù)權(quán)利要求22所述的裝置,其中,所述非特權(quán)軟件是從包括以下各項(xiàng)的組中選 擇的事務(wù)運(yùn)行時(shí)軟件、包括所述事務(wù)的應(yīng)用程序代碼以及虛擬機(jī)代碼。
24.根據(jù)權(quán)利要求21所述的裝置,其中,所述多個(gè)事件中的第一事務(wù)處理程序事件包 括異步處理程序事件,并且其中,所述多個(gè)事件中的第二事務(wù)處理程序事件包括同步處理 程序事件。
25.根據(jù)權(quán)利要求21所述的裝置,其中,所述多個(gè)事件中的第一事務(wù)處理程序事件包 括異步處理程序事件,并且其中,所述多個(gè)事件中的第二事務(wù)處理程序事件包括同步處理 程序事件。
26.根據(jù)權(quán)利要求21所述的裝置,其中,所述多個(gè)處理程序事件中的每一個(gè)單獨(dú)地從 包括以下各項(xiàng)的組中選擇屬性信息的缺少、屬性信息的丟失、在事務(wù)的范圍內(nèi)非法的指令 的執(zhí)行、對非檢查點(diǎn)寄存器的訪問以及監(jiān)視數(shù)據(jù)的丟失。
27.—種系統(tǒng),包括處理器,其包括用于保存到事務(wù)處理程序的索引的用戶可尋址寄存器、第二寄存器和 耦合到所述第一寄存器和所述第二寄存器的執(zhí)行邏輯,其中,響應(yīng)于在事務(wù)執(zhí)行期間的處 理程序事件,所述執(zhí)行邏輯用到所述事務(wù)內(nèi)的當(dāng)前指令位置的索引來更新所述第二寄存 器,基于在所述用戶可尋址寄存器中保存的到所述事務(wù)處理程序的所述索引,將控制流指 引到所述事務(wù)處理程序以處理所述處理程序事件,并且在執(zhí)行所述事務(wù)處理程序以處理所 述處理程序事件之后,基于所述第二寄存器中保存的到所述當(dāng)前指令位置的索引,將控制 流指引回所述當(dāng)前指令位置;以及耦合到所述處理器的輸入/輸出(I/O)設(shè)備。
28.根據(jù)權(quán)利要求27所述的系統(tǒng),其中,到所述事務(wù)處理程序的所述索引包括虛擬地 址和偏移,當(dāng)該虛擬地址和偏移當(dāng)被翻譯為物理地址時(shí),用于引用所述事務(wù)處理程序的起 始物理地址。
29.根據(jù)權(quán)利要求28所述的系統(tǒng),其中,用戶代碼包括所述事務(wù),當(dāng)所述代碼執(zhí)行時(shí), 在所述事務(wù)的執(zhí)行之前,將所述虛擬地址和所述偏移加載到所述用戶可尋址寄存器。
30.根據(jù)權(quán)利要求27所述的系統(tǒng),其中,到所述事務(wù)內(nèi)的所述當(dāng)前指令位置的所述索 引包括到與所述當(dāng)前指令位置相關(guān)聯(lián)的指令指針地址的索引,并且其中,所述執(zhí)行邏輯基 于所述第二寄存器中保存的、到指令指針地址的索引,將控制流指引回所述當(dāng)前指令位置 包括所述執(zhí)行邏輯以所述指令指針地址作為返回目標(biāo)地址來執(zhí)行返回跳轉(zhuǎn)操作。
31.根據(jù)權(quán)利要求30所述的系統(tǒng),其中,所述執(zhí)行邏輯基于所述用戶可尋址寄存器中 保存的、到所述事務(wù)處理程序的所述索引,將控制流指引到所述事務(wù)處理程序以處理所述 處理程序事件包括所述執(zhí)行邏輯使用與所述用戶可尋址寄存器中保存的、到所述事務(wù)處 理程序的所述索引相關(guān)聯(lián)的目標(biāo)地址作為目標(biāo)地址來執(zhí)行跳轉(zhuǎn)操作。
32.一種方法,包括使用非特權(quán)級軟件將事務(wù)處理程序登記在處理器的硬件中;在使用所述處理器執(zhí)行事務(wù)期間檢測處理程序事件;在沒有特權(quán)級軟件的干預(yù)的情況下,將控制流從所述事務(wù)的執(zhí)行指引到硬件中的所述 事務(wù)處理程序的執(zhí)行;以及在使用所述事務(wù)處理程序處理所述處理程序事件之后,在沒有特權(quán)級軟件的干預(yù)的情 況下,將所述控制流返回到所述事務(wù)的執(zhí)行。
33.根據(jù)權(quán)利要求32所述的方法,其中,使用非特權(quán)級軟件將事務(wù)處理程序登記在處 理器的硬件中包括使用與所述事務(wù)處理程序相關(guān)聯(lián)的地址的表示來加載第一寄存器。
34.根據(jù)權(quán)利要求33所述的方法,還包括在將控制流從所述事務(wù)的執(zhí)行指引到所述 事務(wù)處理程序的執(zhí)行之前,將指令指針地址存儲(chǔ)到第二寄存器中。
35.根據(jù)權(quán)利要求34所述的方法,其中,在沒有特權(quán)級軟件的干預(yù)的情況下,將控制流 從所述事務(wù)的執(zhí)行指引到硬件中的所述事務(wù)處理程序的執(zhí)行包括在沒有用于所述事務(wù)處 理程序的執(zhí)行的特權(quán)級軟件的干預(yù)的情況下,將執(zhí)行跳轉(zhuǎn)到與所述事務(wù)處理程序相關(guān)聯(lián)的 地址處。
36.根據(jù)權(quán)利要求35所述的方法,其中,在使用所述事務(wù)處理程序處理所述處理程序 事件之后,在沒有特權(quán)級軟件的干預(yù)的情況下,將所述控制流返回到所述事務(wù)的執(zhí)行包括 在使用所述事務(wù)處理程序處理所述處理程序事件之后,在沒有所述特權(quán)級軟件的干預(yù)的情況下,將執(zhí)行跳轉(zhuǎn)到在所述第二寄存器中存儲(chǔ)的所述指令指針地址處。
37.根據(jù)權(quán)利要求34所述的方法,還包括在檢測到所述處理程序事件之前,使用所述 非特權(quán)級軟件在第三寄存器中指定所述處理程序事件。
38.根據(jù)權(quán)利要求37所述的方法,還包括響應(yīng)于檢測到所述處理程序事件,在將所述 控制流從所述事務(wù)的執(zhí)行指引到事務(wù)硬件的執(zhí)行之前,更新第四寄存器以保存所述處理程 序事件的表示。
全文摘要
本文描述了用于將用戶處理程序登記到用于事務(wù)存儲(chǔ)器的硬件中的方法和裝置。用戶可訪問的寄存器用于保存到事務(wù)處理程序的索引。還可以提供事件寄存器以指定處理程序事件,這可以使用用戶級軟件、特權(quán)級軟件或硬件來完成。當(dāng)檢測到事件時(shí),基于用戶可訪問的寄存器中保存的、到事務(wù)處理程序的索引,將執(zhí)行引導(dǎo)至事務(wù)處理程序。事務(wù)處理程序處理事件,隨后執(zhí)行返回到正常的流程。
文檔編號G06F15/167GK101950259SQ20091100021
公開日2011年1月19日 申請日期2009年12月25日 優(yōu)先權(quán)日2008年12月30日
發(fā)明者G·謝弗, S·賴金, V·巴辛 申請人:英特爾公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會(huì)獲得點(diǎn)贊!
1
沙田区| 巩义市| 繁峙县| 酒泉市| 保定市| 广南县| 莎车县| 泌阳县| 建水县| 平山县| 五河县| 门头沟区| 桓台县| 信阳市| 天祝| 西安市| 石首市| 佛山市| 嘉祥县| 葵青区| 赞皇县| 大名县| 天津市| 宜兰市| 隆德县| 伊宁市| 车险| 汉源县| 汨罗市| 禄劝| 成都市| 南安市| 永济市| 旬阳县| 寻乌县| 抚宁县| 师宗县| 农安县| 白朗县| 刚察县| 商水县|