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

事務(wù)中止處理的制作方法

文檔序號:6534048閱讀:356來源:國知局
事務(wù)中止處理的制作方法
【專利摘要】在計算環(huán)境內(nèi)執(zhí)行的事務(wù)在完成之前結(jié)束,即,執(zhí)行被中止。根據(jù)中止執(zhí)行,退出硬件事務(wù)執(zhí)行CPU模式,并且執(zhí)行下面的部分的一個或多個:恢復(fù)選擇的寄存器;在中止時提交非事務(wù)存儲;分支到事務(wù)中止程序狀態(tài)字指定的位置;設(shè)置條件代碼和/或中止代碼;和/或保留診斷信息。
【專利說明】事務(wù)中止處理

【技術(shù)領(lǐng)域】
[0001] -個或多個方面總體上涉及多處理計算環(huán)境,并且具體地說涉及在這樣的計算環(huán) 境內(nèi)的事務(wù)處理。

【背景技術(shù)】
[0002] 在多處理器編程中的一個持久挑戰(zhàn)是由多個中央處理單元(CPU)對于同一存儲 位置的更新的持久挑戰(zhàn)。包括諸如與的甚至簡單的邏輯運算的、更新存儲位置的許多指令 通過對于該位置的多個訪問來如此進行。例如,首先,獲取存儲位置,并且然后,存儲回更新 的結(jié)果。
[0003] 為了多個CPU安全地更新同一存儲位置,對于該位置的訪問被串行化。使用由國 際商業(yè)機器公司先前提供的S/360架構(gòu)引入的一個指令TEST AND SET指令提供了存儲位 置的聯(lián)鎖更新。聯(lián)鎖更新表示,如其他CPU和輸入/輸出(I/O)子系統(tǒng)(例如,信道子系統(tǒng)) 所觀察,指令的整體存儲訪問看起來原子地出現(xiàn)。后來,由國際商業(yè)機器公司提供的S/370 架構(gòu)引入了 COMPARE AND SWAP (比較和交換)和COMPARE DOUBLE AND SWAP (比較加倍和 交換)指令,該指令提供了執(zhí)行聯(lián)鎖更新的更復(fù)雜的手段,并且允許通常被稱為鎖字(或信 號量)的部分的實現(xiàn)。近來增加的指令已經(jīng)提供了另外的聯(lián)鎖更新能力,包括COMPARE AND SWAP AND PURGE (比較和交換和清除)和COMPARE AND SWAP AND STORE (比較和交換和商 店)。然而,所有這些指令提供了僅用于單個存儲位置的聯(lián)鎖。
[0004] 更復(fù)雜的程序技術(shù)可能例如當(dāng)向雙向鏈表增加元素時要求多個存儲位置的聯(lián)鎖 更新。在這樣的操作中,正向和反向指針都看起來同時被更新,如其他CPU和1/0子系統(tǒng)所 觀察的那樣。為了進行這樣的多位置更新,強制程序使用獨立的單串行點,諸如鎖字。然而, 鎖字可以提供比所保證者更粗糙的串行水平;例如,鎖字串行化以百萬計的元素的整個隊 列,即使僅在更新兩個元素。該程序可以將數(shù)據(jù)結(jié)構(gòu)化以使用更細粒度的串行化(例如,鎖 點的分級),但是那引入了另外的問題,諸如:如果該分級被違反則導(dǎo)致的可能死鎖情況; 以及,如果在保持一個或多個鎖的同時該程序遭遇錯誤或如果不能獲取該鎖則導(dǎo)致的恢復(fù) 問題。
[0005] 除了上面的情況之外,也存在多個情況,其中,程序可以執(zhí)行可能或可能不導(dǎo)致異 常情況的指令的序列。如果未出現(xiàn)異常情況,則該程序繼續(xù);然而,如果識別了異常,則該程 序可以采取校正行為來消除異常情況。作為一個示例,Java可以在例如推測執(zhí)行、功能的 部分聯(lián)機和/或指針空檢查的重新排序中利用這樣的執(zhí)行。
[0006] 在諸如由國際商業(yè)機器公司提供的z/0S和其前任的經(jīng)典操作系統(tǒng)環(huán)境中,程序 建立恢復(fù)環(huán)境以截取它可能遇到的任何程序異常情況。通過該程序未截取到異常,則該操 作系統(tǒng)通常因為該操作系統(tǒng)未準(zhǔn)備好處理的異常而異常地結(jié)束該程序。建立和利用這樣的 環(huán)境成本大并且復(fù)雜。IBM、z/〇S、z/Ardiitecture€)(下面引用)、z/VM?(下面引用)、 Processor Resource/Systems Manager?(下面引用)、Power Systems?(下面引用)和 System X? (下面引用)是在世界上許多轄區(qū)中注冊的國際商業(yè)機器公司的商標(biāo)。
[0007] 因此,在本領(lǐng)域中需要處理上述問題。


【發(fā)明內(nèi)容】

[0008] 現(xiàn)有技術(shù)的缺陷被克服,并且通過提供用于促進在計算環(huán)境內(nèi)的處理的計算機程 序產(chǎn)品來提供優(yōu)點。該計算機程序產(chǎn)品包括計算機可讀存儲介質(zhì),其能夠被處理電路讀取, 并且存儲用于由用于執(zhí)行方法的處理電路執(zhí)行的指令。所述方法包括例如:處理器中止在 所述計算環(huán)境內(nèi)執(zhí)行的事務(wù)的執(zhí)行,所述事務(wù)有效地延遲向主存儲器提交事務(wù)存儲,直到 所選擇的事務(wù)的完成,所述中止在完成之前結(jié)束所述事務(wù)的執(zhí)行;并且,基于中止所述事務(wù) 的執(zhí)行,識別要恢復(fù)的一個或多個選擇的寄存器,所述一個或多個選擇的寄存器少于在與 所述事務(wù)相關(guān)聯(lián)的事務(wù)處理中使用的所述寄存器的全部。
[0009] 在此也描述和要求保護與一個或多個實施例相關(guān)的方法和系統(tǒng)。而且,也描述和 在此可以要求保護與一個或多個實施例相關(guān)的服務(wù)。
[0010] 從第一方面看,本發(fā)明提供了一種用于促進在計算環(huán)境中的處理的方法,所述方 法包括:處理器中止在所述計算環(huán)境內(nèi)執(zhí)行的事務(wù)的執(zhí)行,所述事務(wù)有效地延遲向主存儲 器提交事務(wù)存儲,直到所選擇的事務(wù)的完成,所述中止在完成之前結(jié)束所述事務(wù)的執(zhí)行;并 且,基于中止所述事務(wù)的執(zhí)行,識別要恢復(fù)的一個或多個選擇的寄存器,所述一個或多個選 擇的寄存器少于在與所述事務(wù)相關(guān)聯(lián)的事務(wù)處理中使用的所述寄存器的全部。
[0011] 從另一個方面看,本發(fā)明提供了一種用于用于促進在計算環(huán)境中的處理的計算機 系統(tǒng),所述計算機系統(tǒng)包括:存儲器;以及,與所述存儲器進行通信的處理器,其中,所述計 算機系統(tǒng)被配置為執(zhí)行一種方法,所述方法包括:處理器中止在所述計算環(huán)境內(nèi)執(zhí)行的事 務(wù)的執(zhí)行,所述事務(wù)有效地延遲向主存儲器提交事務(wù)存儲,直到所選擇的事務(wù)的完成,所述 中止在完成之前結(jié)束所述事務(wù)的執(zhí)行;并且,基于中止所述事務(wù)的執(zhí)行,識別要恢復(fù)的一個 或多個選擇的寄存器,所述一個或多個選擇的寄存器少于在與所述事務(wù)相關(guān)聯(lián)的事務(wù)處理 中使用的所述寄存器的全部。
[0012] 從另一個方面看,本發(fā)明提供了一種用于促進在計算環(huán)境中的處理的計算機程序 產(chǎn)品,所述計算機程序產(chǎn)品包括:計算機可讀存儲介質(zhì),其能夠被處理電路讀取并且存儲用 于由用于執(zhí)行方法的處理電路執(zhí)行的指令,所述方法包括:處理器中止在所述計算環(huán)境內(nèi) 執(zhí)行的事務(wù)的執(zhí)行,所述事務(wù)有效地延遲向主存儲器提交事務(wù)存儲,直到所選擇的事務(wù)的 完成,所述中止在完成之前結(jié)束所述事務(wù)的執(zhí)行;并且,基于中止所述事務(wù)的執(zhí)行,識別要 恢復(fù)的一個或多個選擇的寄存器,所述一個或多個選擇的寄存器少于在與所述事務(wù)相關(guān)聯(lián) 的事務(wù)處理中使用的所述寄存器的全部。
[0013] 從另一個方面看,本發(fā)明提供了一種在計算環(huán)境中促進處理的計算機程序產(chǎn)品, 所述計算機程序產(chǎn)品包括計算機可讀存儲介質(zhì),其能夠被處理電路讀取并且存儲用于由用 于執(zhí)行用于執(zhí)行本發(fā)明的步驟的方法的處理電路執(zhí)行的指令。
[0014] 從另一個方面看,本發(fā)明提供了一種計算機程序,所述計算機程序被存儲在計算 機可讀介質(zhì)上,并且可加載到數(shù)字計算機的內(nèi)部存儲器內(nèi),所述計算機程序包括軟件代碼 部分,所述軟件代碼部分當(dāng)所述程序在計算機上運行時用于執(zhí)行本發(fā)明的步驟。
[0015] 另外的特征和優(yōu)點被實現(xiàn)。其他實施例和方面在此被詳細描述,并且被看作所要 求保護的發(fā)明的一部分。

【專利附圖】

【附圖說明】
[0016] 現(xiàn)在參考在下面的附圖中圖示的優(yōu)選實施例僅通過示例來描述本發(fā)明:
[0017] 圖1描述了根據(jù)現(xiàn)有技術(shù)并且其中可以實現(xiàn)本發(fā)明的一個優(yōu)選實施例的計算環(huán) 境的一個實施例;
[0018] 圖2A描述了根據(jù)本發(fā)明的一個優(yōu)選實施例的事務(wù)開始(TBEGIN)指令的一個示 例;
[0019] 圖2B描述了根據(jù)本發(fā)明的一個優(yōu)選實施例的、圖2A的TBEGIN指令的字段的另外 的細節(jié)的一個實施例;
[0020] 圖3A描述了根據(jù)本發(fā)明的一個優(yōu)選實施例的事務(wù)開始被約束(TBEGINC)指令的 一個示例;
[0021] 圖3B描述了根據(jù)本發(fā)明的一個優(yōu)選實施例的、圖3A的TBEGINC指令的字段的另 外的細節(jié)的一個實施例;
[0022] 圖4描述了根據(jù)本發(fā)明的一個優(yōu)選實施例的事務(wù)結(jié)束(TEND)指令的一個示例;
[0023] 圖5描述了根據(jù)本發(fā)明的一個優(yōu)選實施例的事務(wù)中止(TABORT)指令的一個示 例;
[0024] 圖6描述了根據(jù)本發(fā)明的一個優(yōu)選實施例的嵌套事務(wù)的一個不例;
[0025] 圖7描述了根據(jù)本發(fā)明的一個優(yōu)選實施例的NONTRANSACTIONAL STORE (非事務(wù)存 儲)(NTSTG)指令的一個示例;
[0026] 圖8描述了根據(jù)本發(fā)明的一個優(yōu)選實施例的EXTRACT TRANSACTION NESTING DEPTH (提取事務(wù)嵌套深度)(ETND)指令的一個示例;
[0027] 圖9描述了根據(jù)本發(fā)明的一個優(yōu)選實施例的事務(wù)診斷塊的一個示例;
[0028] 圖10描述了根據(jù)本發(fā)明的一個優(yōu)選實施例的中止的示例原因連同相關(guān)聯(lián)的中止 代碼和條件代碼;
[0029] 圖11描述了根據(jù)本發(fā)明的一個優(yōu)選實施例的與事務(wù)中止處理相關(guān)聯(lián)的邏輯的一 個實施例;
[0030] 圖12描述了根據(jù)本發(fā)明的一個優(yōu)選實施例的有效程序中斷過濾控制(PIFC)和事 務(wù)執(zhí)行程序中斷類別的列表的一個示例;
[0031] 圖13A-13B描述了根據(jù)本發(fā)明的一個優(yōu)選實施例的用于各種程序異常條件的事 務(wù)執(zhí)行類別的一個示例。
[0032] 圖14描述了根據(jù)本發(fā)明的一個優(yōu)選實施例的中止條件的優(yōu)先級的一個示例;
[0033] 圖15A-15B描述了根據(jù)本發(fā)明的一個優(yōu)選實施例的程序中斷條件的優(yōu)先級的一 個示例;
[0034] 圖16A-16B描述了根據(jù)本發(fā)明的一個優(yōu)選實施例向隊列兀素的雙向鏈表內(nèi)插入 隊列元素的示例;
[0035] 圖17描述了根據(jù)現(xiàn)有技術(shù)并且其中可以實現(xiàn)本發(fā)明的優(yōu)選實施例的計算機程序 產(chǎn)品的一個實施例;
[0036] 圖18描述了根據(jù)本發(fā)明的一個優(yōu)選實施例的主計算機系統(tǒng)的一個實施例;
[0037] 圖19描述了根據(jù)現(xiàn)有技術(shù)并且其中可以實現(xiàn)本發(fā)明的優(yōu)選實施例的計算機系統(tǒng) 的另一個不例。
[0038] 圖20描述了根據(jù)現(xiàn)有技術(shù)并且其中可以實現(xiàn)本發(fā)明的一個優(yōu)選實施例的、包括 計算機網(wǎng)絡(luò)的計算機系統(tǒng)的另一個示例;
[0039] 圖21描述了根據(jù)現(xiàn)有技術(shù)并且其中實現(xiàn)本發(fā)明的一個優(yōu)選實施例的計算機系統(tǒng) 的各個元件的一個實施例;
[0040] 圖22A描述了根據(jù)現(xiàn)有技術(shù)并且其中可以實現(xiàn)本發(fā)明的一個優(yōu)選實施例的圖21 的計算機系統(tǒng)的執(zhí)行單元的一個實施例;
[0041] 圖22B描述了根據(jù)本發(fā)明的一個優(yōu)選實施例的圖21的計算機系統(tǒng)的分支單元的 一個實施例;
[0042] 圖22C描述了根據(jù)本發(fā)明的一個優(yōu)選實施例的圖21的計算機系統(tǒng)的加載/存儲 單元的一個實施例;以及
[0043] 圖23描述了根據(jù)本發(fā)明的一個優(yōu)選實施例的模擬主計算機系統(tǒng)的一個實施例。

【具體實施方式】
[0044] 根據(jù)一個方面,提供了一種事務(wù)執(zhí)行(TX)設(shè)施。該設(shè)施提供了用于指令的事務(wù)處 理,并且在一個或多個實施例中,提供了如下所述的不同執(zhí)行模式以及事務(wù)處理的嵌套層。
[0045] 事務(wù)執(zhí)行能力引入了被稱為事務(wù)執(zhí)行(TX)模式的CPU狀態(tài)。在CPU復(fù)位后,CPU 不在TX模式中。CPU通過TRANSACTION BEGIN (事務(wù)開始)指令進入TX模式。CPU通過下 述方式通過下述部分來離開TX模式:(a)最外TRANSACTION END (事務(wù)結(jié)束)指令(關(guān)于 內(nèi)部和外部的更多的細節(jié)在下面),或(b)事務(wù)被中止。在TX模式中,如其他CPU和I/O子 系統(tǒng)所看到的那樣,由CPU進行的存儲訪問看起來是同時阻擋的。該存儲訪問或者(a)當(dāng) 最外事務(wù)結(jié)束而沒有被中止時被提交到存儲器(即,例如,在CPU本地的高速緩存或緩沖器 中進行的更新被傳播并且被存儲在真實存儲器中并且為其他CPU可見),或者(b)如果事務(wù) 被中止則被丟棄。
[0046] 可以嵌套事務(wù)。即,在CPU在TX模式中的同時,它可以執(zhí)行另一個TRANSACTION BEGIN指令。使得CPU進入TX模式中的指令被稱為最外TRANSACTION BEGIN;類似地, 該程序被稱為在最外事務(wù)中。TRANSACTION BEGIN的隨后執(zhí)行被稱為內(nèi)部指令;并且,該 程序在執(zhí)行內(nèi)部事務(wù)。該模型提供最小嵌套深度和模型相關(guān)的最大嵌套深度。EXTRACT TRANSACTION NESTING DEPTH(提取事務(wù)嵌套深度)指令返回當(dāng)前嵌套深度值,并且在 另一個實施例中,可以返回最大嵌套深度值。該技術(shù)使用被稱為"扁平嵌套"的模型,其 中,在任何嵌套深度處的中止條件使得中止所有的事務(wù)水平,并且將控制返回到在最外 TRANSACTION BEGIN 之后的指令。
[0047] 在事務(wù)的處理期間,如果下述兩個訪問是對于在同一高速緩存線內(nèi)的任何位置并 且該訪問之一或兩者是存儲,由一個CPU進行的事務(wù)訪問被稱為與下述部分沖突:(a)由另 一個CPU作出的事務(wù)訪問或非事務(wù)訪問,或者(b)由1/0子系統(tǒng)進行的非事務(wù)訪問。換句 話說,為了事務(wù)執(zhí)行是生產(chǎn)性的,CPU不被觀察為進行事務(wù)訪問,直到它提交。該編程模型 可以在特定實施例中是高度有效的;例如,在一百萬元素的雙向鏈表中的兩個點的更新。然 而,如果存在在事務(wù)上被訪問的存儲位置的許多競爭,則可能是低效的。
[0048] 在事務(wù)執(zhí)行的一個模型中(在此被稱為未約束事務(wù)),當(dāng)中止事務(wù)時,程序可以或 者懷著中止條件不再存在的希望而試圖重新驅(qū)動事務(wù),或者,該程序可以"落回"到等同的 非事務(wù)路徑。在事務(wù)執(zhí)行的另一個模型(在此被稱為被約束事務(wù))中,CPU自動地重新驅(qū) 動被中止的事務(wù);在沒有約束違反的情況下,對于被約束的事務(wù)保證最后的完成。
[0049] 當(dāng)開始事務(wù)時,程序可以指定各種控件,諸如(a)如果事務(wù)被中止,則哪些一般寄 存器被恢復(fù)到它們的原始內(nèi)容,(b)是否允許事務(wù)修改浮點寄存器環(huán)境,包括例如浮點寄存 器和浮點控制寄存器,(c)是否允許事務(wù)修改訪問寄存器(AR),以及(d)是否阻擋特定的程 序異常條件引起中斷。如果中止未約束事務(wù),則可以提供各種診斷信息。例如,開始未約束 的事務(wù)的最外TBEGIN指令可以指定程序指定的事務(wù)診斷塊(TDB)。而,如果分別因為程序 中斷或使得解釋性執(zhí)行結(jié)束的條件而中止事務(wù),也可以使用在CPU的前綴區(qū)域中的或被主 機的狀態(tài)描述指定的IDB。
[0050] 上面指示了各種類型的寄存器。在此進一步更詳細地描述這些。通用寄存器可以 被用作在一般的算術(shù)和邏輯運算中的累加器。在一個實施例中,每一個寄存器包含64比特 的位置,并且存在16個通用寄存器。通過標(biāo)號0-15來標(biāo)識該通用寄存器,并且通過在指令 中的四比特R字段來指定該通用寄存器。一些指令提供用于通過具有幾個R字段來尋址多 個通用寄存器。對于一些指令,特定通用寄存器的使用被暗示,而不是被指令的R字段明確 地指定。
[0051] 除了它們作為在一般算術(shù)和邏輯運算中的累加器的使用,該16個通用寄存器的 15個也被用作在地址產(chǎn)生中的基地址和索引寄存器。在這些情況下,該寄存器被在指令中 的四比特B字段或X字段指定。在B或X字段中的值0指定不應(yīng)用基或索引,并且因此,不 將通用寄存器〇指定為包含基地址或索引。
[0052] 浮點指令使用一組浮點寄存器。在一個實施例中,CPU具有16個浮點寄存器。該 浮點寄存器被標(biāo)號0-15標(biāo)識,并且被在浮點指令中的四比特R字段指定。每一個浮點寄存 器有64比特長,并且可以包含短(32比特)或長(64比特)浮點操作數(shù)。
[0053] 浮點控制(FPC)寄存器是32位寄存器,其包含屏蔽位、標(biāo)志位、數(shù)據(jù)異常代碼和舍 入模式位,并且在浮點操作的處理期間被使用。
[0054] 而且,在一個實施例中,CPU具有16個控制寄存器,每一個具有64比特位置。
[0055] 在寄存器中的比特位置被分配到在系統(tǒng)中的特定設(shè)施,諸如程序事件記錄(PER) (下述),并且用于或者指定操作可以發(fā)生,或者提供由該設(shè)施所需的特殊信息。在一個實 施例中,對于事務(wù)設(shè)施,使用CRO (比特8和9)和CR2(比特61-63),如下所述。
[0056] CPU具有例如被編號為0-15的16個訪問寄存器。訪問寄存器由32個比特位置構(gòu) 成,該32個比特位置包含地址空間控制元素(ASCE)的間接指定。地址空間控制元素是由 動態(tài)在轉(zhuǎn)換(DAT)機制使用來將參考轉(zhuǎn)換為對應(yīng)的地址空間的參數(shù)。當(dāng)CPU在被稱為訪問 寄存器模式(被在程序狀態(tài)字(PSW)中的比特控制)的模式中時,用于指定用于存儲器操 作數(shù)參考的邏輯地址的指令B字段指定訪問寄存器,并且由該訪問寄存器指定的地址空間 控制元素被DAT使用來用于所進行的參考。對于一些指令,使用R字段來取代B字段。指 令被提供來安裝和存儲訪問寄存器的內(nèi)容,并且將一個訪問寄存器的內(nèi)容向另一個移動。
[0057] 訪問寄存器1-15的每一個可以指定任何地址空間。訪問寄存器0指定主指令空 間。當(dāng)通用寄存器1-15之一用于指定地址空間時,CPU通過轉(zhuǎn)換訪問寄存器的內(nèi)容來確定 指定哪個地址空間。當(dāng)訪問寄存器〇用于指定地址空間時,CPU將該訪問寄存器看作指定 主指令空間,并且它不檢查該訪問寄存器的實際內(nèi)容。因此,該16個訪問寄存器可以在任 何一個時間指定主指令空間和最多15個其他空間。
[0058] 在一個實施例中,存在多個類型的地址空間。地址空間是整數(shù)編號(虛擬地址) 的連續(xù)序列連同允許每一個編號與在存儲器中的字節(jié)位置相關(guān)聯(lián)的特定轉(zhuǎn)換參數(shù)。該序列 在〇處開始,并且從左向右進行。
[0059] 在例如z/Architecture中,當(dāng)CPU使用虛擬地址來訪問主存儲器(也稱為主內(nèi) 存)時,它首先通過動態(tài)地址轉(zhuǎn)換(DAT)被轉(zhuǎn)換為真實地址,并且然后通過加前綴被轉(zhuǎn)換為 絕對地址。DAT可以使用表格的從1至5級(頁、段、第三區(qū)、第二區(qū)和第一區(qū))作為轉(zhuǎn)換參 數(shù)。用于特定地址空間的最高級表格的指定(原點和深度)被稱為地址空間控制元素,并 且它被發(fā)現(xiàn)在控制寄存器中或如方法指定由DAT使用。
[0060] 替代地,用于地址空間的地址空間控制元素可以是真實空間指定,其指示DAT要 通過將虛擬地址看作真實地址來簡單地轉(zhuǎn)換虛擬地址,而不使用任何表格。
[0061] DAT在不同的時間使用在不同的控制寄存器中或由地址寄存器指定的地址空間控 制元素。通過在當(dāng)前PSW中指定的轉(zhuǎn)換模式來確定該選擇??色@得四個轉(zhuǎn)換模式:主空間 模式、輔助空間模式、訪問寄存器模式和原籍空間模式。能夠根據(jù)轉(zhuǎn)換模式來尋址不同的地 址空間。
[0062] 在當(dāng)CPU在主空間模式或輔助空間模式中時的任何時刻,CPU可以轉(zhuǎn)換屬于兩個 地址空間一主地址空間和輔助地址空間一的虛擬地址。在當(dāng)CPU在地址寄存器模式中 時的任何時刻,它可以轉(zhuǎn)換多達16個地址空間--主地址空間和多達15個AR指定的地址 空間--的虛擬地址。在當(dāng)CPU在原籍空間模式中時的任何時刻,它可以轉(zhuǎn)換原籍地址空 間的虛擬地址。
[0063] 主地址空間被如此標(biāo)識,因為它由主虛擬地址構(gòu)成,該主虛擬地址通過主地址空 間控制元素(ASCE)被轉(zhuǎn)換。類似地,輔助地址空間由通過輔助ASCE轉(zhuǎn)換的輔助虛擬地址 構(gòu)成;AR指定的地址空間由通過AR指定的ASCE轉(zhuǎn)換的AR指定虛擬地址構(gòu)成;并且,原籍 地址空間由通過原籍ASEC轉(zhuǎn)換的原籍虛擬地址構(gòu)成。主和輔助ASCE分別在控制寄存器1 和7中。AR指定的ASCE是通過使用控制寄存器2、5和8的被稱為訪問寄存器轉(zhuǎn)換(ART) 的處理定位的ASN第二表格條目中。原籍ASCE在控制寄存器13中。
[0064] 在此參考圖1來描述用于包含和使用在此描述的事務(wù)設(shè)施的一個或多個方面的 計算環(huán)境的一個實施例。
[0065] 參見圖1,在一個示例中,計算環(huán)境100基于由IBM提供的z/Architecture。 在下文中描述了該 z/Architecture :IBM Publication entitled "z/Architecture - Principles of Operation,''Publication No. SA22-7932-08, 9th Edition, August2010。 [0066] 在此使用的其他名稱可以是國際商業(yè)機器公司或其他公司的注冊商標(biāo)、商標(biāo)或產(chǎn) 品名稱。
[0067] 作為一個示例,計算環(huán)境100包括中央處理器復(fù)合體(CPC) 102,其經(jīng)由一個或多 個控制單元108耦合到一個或多個輸入/輸出(1/0)裝置106。中央處理器復(fù)合體102包 括例如一個或多個中央處理器110、一個或多個分區(qū)112(例如,邏輯分區(qū)(LP))、邏輯分區(qū) 管理程序114和輸入/輸出子系統(tǒng)115,其每一個在下面被描述。
[0068] 中央處理器110是向邏輯分區(qū)分配的物理處理器資源。具體地說,每一個邏輯分 區(qū)112具有一個或多個邏輯處理器,其每一個表示向該分區(qū)分配的物理處理器110的全部 或部分。特定分區(qū)112的邏輯處理器可以:或者專用于該分區(qū),以便對于那個分區(qū)保留基礎(chǔ) 處理器資源110 ;或者被與另一個分區(qū)共享,使得基礎(chǔ)處理器可能可用于另一個分區(qū)。
[0069] 邏輯分區(qū)作為獨立的系統(tǒng),并且具有一個或多個應(yīng)用,并且選用地在其中具有駐 留的操作系統(tǒng),該操作系統(tǒng)可以對于每一個邏輯分區(qū)不同。在一個實施例中,該操作系統(tǒng)是 由紐約的阿蒙克市的國際商業(yè)機器公司提供的z/OS操作系統(tǒng)、z/VM操作系統(tǒng)、z/Linux操 作系統(tǒng)或TPF操作系統(tǒng)。
[0070] 邏輯分區(qū)112被通過在處理器110上運行的固件實現(xiàn)的邏輯分區(qū)管理程序114管 理。如在此使用,固件包括例如處理器的微碼和/或毫碼。它包括例如在高級機器碼的實 現(xiàn)中使用的硬件級指令和/或數(shù)據(jù)結(jié)構(gòu)。在一個實施例中,它包括例如專有代碼,它一般作 為包括可信軟件的微碼或?qū)τ诨A(chǔ)硬件特定的微碼被輸送,并且控制對于系統(tǒng)硬件的操作 系統(tǒng)訪問。
[0071] 邏輯分區(qū)和邏輯分區(qū)管理程序每一個包括在與中央處理器相關(guān)聯(lián)的中央存儲器 的相應(yīng)的分區(qū)中駐留的一個或多個程序。邏輯分區(qū)管理程序114的一個示例是由由紐約的 阿蒙克市的國際商業(yè)機器公司提供的處理器資源/系統(tǒng)管理器(PR/SM)。
[0072] 輸入/輸出子系統(tǒng)115引導(dǎo)在輸入/輸出裝置106和主存儲器(也稱為主內(nèi)存) 之間的信息的流動。它耦合到中央處理復(fù)合體:它可以是中央處理復(fù)合體的一部分或與其 分離。I/O子系統(tǒng)減輕中央處理器的直接與輸入/輸出裝置進行通信的任務(wù),并且允許數(shù)據(jù) 處理與輸入/輸出處理同時地進行。為了提供通信,I/O子系統(tǒng)使用I/O通信適配器。存 在各種類型的通信適配器,包括例如信道、I/O適配器、PCI卡、以太網(wǎng)卡、小型計算機存儲 接口(SCSI)卡等。在在此所述的特定示例中,該I/O通信適配器是信道,并且因此,該I/O 子系統(tǒng)在此被稱為信道子系統(tǒng)。然而,這僅是一個示例。可以使用其他類型的I/O子系統(tǒng)。
[0073] 該I/O子系統(tǒng)使用一個或多個輸入/輸出路徑作為在管理去往或來自輸入/輸出 裝置106的信息的流動中的通信鏈路。在這個特定示例中,這些路徑被稱為信道路徑,因為 通信適配器是信道。
[0074] 如上所述的計算環(huán)境所述的可以使用的計算環(huán)境的一個示例??梢允褂闷渌h(huán) 境,包括但是不限于未分區(qū)的環(huán)境、其他分區(qū)的環(huán)境和/或模擬的環(huán)境;實施例不限于任何 一個環(huán)境。
[0075] 根據(jù)一個或多個方面,設(shè)置執(zhí)行設(shè)施是CPU增強,其提供了一種手段,通過該手 段,CPU可以執(zhí)行被稱為事務(wù)的、可以訪問多個存儲位置指令的序列,包括那些位置的更新。 如其他CPU和I/O子系統(tǒng)所觀察,該事務(wù)或者(a)作為單個原子操作整體地被完成,或者 (b)被中止,可能未留下它曾經(jīng)被執(zhí)行(除了在此所述的特定情況之外)的任何證明。因此, 成功地完成的事務(wù)可以更新多個存儲位置,而不用在經(jīng)典多處理模型中需要的任何特殊鎖 定。
[0076] 事務(wù)執(zhí)行設(shè)施包括例如一個或多個控件、一個或多個指令、包括被約束和未約束 的執(zhí)行的事務(wù)處理和中止處理,其每一個在下面被進一步描述。
[0077] 在一個實施例中,使用下面的部分來控制事務(wù)執(zhí)行設(shè)施:三個專用控件,包括事務(wù) 中止程序狀態(tài)字(PSW)、事務(wù)診斷塊(TDB)地址和事務(wù)嵌套深度;5個控制寄存器比特;已 經(jīng),6個一般指令,包括TRANSACTION BEGIN(事務(wù)開始)(被約束和未約束)、TRANSACTION END(事務(wù)結(jié)束)、EXTRACT TRANSACTION NESTING DEPTH(調(diào)整事務(wù)嵌套深度)、TRANSACTION ABORT (事務(wù)中止)和NONTRANSACTIONAL STORE (非事務(wù)中止)。當(dāng)安裝設(shè)施時,它被安裝 在了在配置中的所有CPU中。設(shè)施指示在一種實現(xiàn)方式中的比特73當(dāng)為1時指示安裝了 事務(wù)執(zhí)行設(shè)施。
[0078] 當(dāng)安裝事務(wù)執(zhí)行設(shè)施時,該配置提供了未約束的事務(wù)執(zhí)行設(shè)施,并且選用地提供 被約束的事務(wù)執(zhí)行設(shè)施,其每一個在下面被描述。當(dāng)作為示例的設(shè)施指示50和73都是1 時,安裝被約束的事務(wù)執(zhí)行設(shè)施。兩個設(shè)施位置被存儲在存儲器中的指定位置處。
[0079] 如在此使用,指令名稱TRANSACTION BEGIN (事務(wù)開始)指的是具有助記符 TBEGIN (用于未約束的事務(wù)的事務(wù)開始)和TBEGINC (用于被約束的事務(wù)的事務(wù)開始)的指 令。通過指令名稱后隨在圓括號或方括號中的助記符或僅通過助記符來指示與特定指令相 關(guān)的討論。
[0080] 在圖2A-2B中描述了 TRANSACTION BEGIN(TBEGIN)指令的格式的一個實施例。作 為一個示例,TBEGIN指令200包括:操作碼字段202,其包括用于指定事務(wù)開始未約束操作 的操作碼;基本字段(B1) 204 ;位移字段(D1) 206 ;以及,立即字段(I2) 208。當(dāng)B1字段不是 零時,向Di206加上由&204指定的通用寄存器的內(nèi)容以獲得第一操作數(shù)地址。
[0081] 當(dāng)B1字段不是零時,下面的部分適用:
[0082] ?當(dāng)事務(wù)嵌套深度初始為0時,第一操作數(shù)地址指定被稱為TBEGIN指定的 TDB (下面進一步描述)的256字節(jié)事務(wù)診斷塊的位置,如果事務(wù)被中止,則可以向該TDB內(nèi) 存儲各種診斷信息。當(dāng)CPU在主空間模式或訪問寄存器模式中時,第一操作數(shù)地址指定在 主地址空間中的位置。當(dāng)CPU在輔助空間或原籍空間模式中時,第一操作數(shù)地址分別指定 在輔助或原籍地址空間中的位置。當(dāng)DAT關(guān)斷時,事務(wù)診斷塊(TDB)地址(TDBA)指定在真 實存儲器中的位置。
[0083] 確定對于第一操作數(shù)的存儲器可訪問能力。如果可訪問,則將該操作數(shù)的邏輯地 址布置到事務(wù)診斷塊地址(TDBA)內(nèi),并且TDBA有效。
[0084] ?當(dāng)CPU已經(jīng)在未約束事務(wù)執(zhí)行模式中時,不修改TDBA,并且不可預(yù)測第一操作 數(shù)是否被測試可訪問性。
[0085] 當(dāng)B1字段是0時,對于第一操作數(shù)不檢測訪問異常,并且,對于最外TBEGIN指令, IDBA無效。
[0086] 在一個示例中,I2字段的比特被定義如下:
[0087] 通用寄存器存儲屏蔽(GRSM) 210 (圖2B) :12字段的比特0-7包含通用寄存器存儲 掩蔽(GRSM)。GRSM的每一個比特表示偶數(shù)奇數(shù)對的通用寄存器,其中,比特0表示寄存器0 和1,并且比特1表示寄存器2和3,等等。當(dāng)在最外TBEGIN指令的GRSM中的比特是0時, 不存儲對應(yīng)的寄存器對。當(dāng)在最外TBEGIN指令的GRSM中的比特是1時,在程序不能直接 訪問的模型相關(guān)位置中存儲對應(yīng)的寄存器對。
[0088] 如果事務(wù)中止,則當(dāng)執(zhí)行最外TBEGIN指令時,存儲的寄存器對恢復(fù)到它們的內(nèi) 容。當(dāng)事務(wù)中止時,不恢復(fù)所有其他(未存儲)的通用寄存器的內(nèi)容。
[0089] 除了最外的一個之外,在所有的TBEGIN上存儲通用寄存器存儲掩蔽。
[0090] 允許AR修改(A) 212 :A控件I2字段的比特12控制是否允許事務(wù)修改訪問寄存器。 有效允許AR修改控件是在用于當(dāng)前嵌套層和用于所有外層的TBEGIN指令中的A控件的邏 輯與。
[0091] 如果有效A控件是0,則如果進行嘗試修改任何訪問寄存器,則使用中止代碼 11 (受限指令)中止事務(wù)。如果有效A控件是1,則如果修改了訪問寄存器(沒有任何其他 中止條件),則將不中止事務(wù)。
[0092] 允許浮點操作(F) 214 :F控件I2字段的比特13控制是否允許事務(wù)執(zhí)行指定的浮 點指令。該有效允許浮點操作控件是在用于當(dāng)前嵌套層和用于所有外層的TBEGIN指令中 的F控件的邏輯與。
[0093] 如果該有效F控件是0,則(a)如果試圖執(zhí)行浮點指令,則使用中止代碼11(受限 指令)來中止事務(wù),并且(b)將不通過任何數(shù)據(jù)異常程序異常條件來設(shè)置在浮點控制寄存 器(FPCR)的字節(jié)2中的數(shù)據(jù)異常代碼(DXC)。如果該有效F控件是1,則(a)如果嘗試執(zhí) 行浮點指令(沒有任何其他中止條件),則不中止事務(wù),并且(b)通過數(shù)據(jù)異常程序異常條 件來設(shè)置在FPCR中的DXC。
[0094] 程序中斷過濾控件(PIFC) 216 :12字段的比特14-15是程序中斷過濾控件(PIFC)。 PIFC控制在CPU在事務(wù)執(zhí)行模式中的同時出現(xiàn)的某些類別的程序異常條件(例如,尋址異 常、數(shù)據(jù)異常、操作異常、保護異常等)導(dǎo)致中斷。
[0095] 該有效PIFC是在用于當(dāng)前嵌套層和用于所有外層的TBEGIN指令中的PIFC的最 高值。當(dāng)有效PIFC是0時,所有的程序異常條件導(dǎo)致中斷。當(dāng)有效PIFC是1時,具有事務(wù) 執(zhí)行類別1和2的程序異常條件導(dǎo)致中斷。(根據(jù)異常的嚴重性,每一個程序異常條件被 指配至少一個事務(wù)執(zhí)行類別。嚴重性基于在事務(wù)的重復(fù)執(zhí)行期間的恢復(fù)的可能性和操作系 統(tǒng)是否需要看到中斷。)當(dāng)有效PIFC是2時,具有事務(wù)執(zhí)行類別1的程序異常條件導(dǎo)致中 斷。保留PIFC 3。
[0096] I2字段的比特8-11(指令的比特40-43)被保留,并且應(yīng)當(dāng)包含0 ;否則,程序可能 在未來不兼容地運行。
[0097] 參考圖3A-3B描述被約束的事務(wù)開始(TBEGINC)指令的格式的一個實施例。在一 個示例中,TBEGINC 300包括:操作碼字段302,其包括用于指定被約束的事務(wù)開始操作的 操作碼;基本字段(B1) 304 ;位移字段(D1) 306 ;以及,立即字段(I2) 308。由&304指定的通 用寄存器的內(nèi)容被加到〇1306以獲得第一操作數(shù)地址。然而,使用事務(wù)控制約束指令,第一 操作數(shù)地址不用于訪問存儲器。相反,該指令的B1字段包括0 ;否則,識別指定異常。
[0098] 在一個實施例中,I2字段包括各種控件,在圖3B中描述了其示例。
[0099] 在一個示例中,I2字段的比特被定義如下:
[0100] 通用寄存器存儲掩蔽(GRSM) 310 :12字段的比特0-7包含通用寄存器存儲掩蔽 (GRSM)。GRSM的每一個比特表示偶數(shù)奇數(shù)對的通用寄存器,其中,比特0表示寄存器0和1, 并且比特1表示寄存器2和3,等等。當(dāng)在GRSM中的比特是0時,不存儲對應(yīng)的寄存器對。 當(dāng)在GRSM中的比特是1時,在程序不能直接訪問的模型相關(guān)位置中存儲對應(yīng)的寄存器對。
[0101] 如果事務(wù)中止,則當(dāng)執(zhí)行最外TRANSACTION BEGIN指令時,存儲的寄存器對恢復(fù)到 它們的內(nèi)容。當(dāng)被約束事務(wù)中止時,不恢復(fù)所有其他(未存儲)的通用寄存器的內(nèi)容。
[0102] 當(dāng)TBEGINC用于繼續(xù)在未約束事務(wù)執(zhí)行模式中的執(zhí)行時,忽略通用寄存器存儲掩 蔽。
[0103] 允許AR修改(A) 312 :A控件I2字段的比特12控制是否允許事務(wù)修改訪問寄存 器。有效允許AR修改控件是在用于當(dāng)前嵌套層和用于任何其他外TBEGIN或TBEGINC指令 的TBEGINC指令中的A控件的邏輯與。
[0104] 如果有效A控件是0,則如果進行嘗試修改任何訪問寄存器,則使用中止代碼 11 (受限指令)中止事務(wù)。如果有效A控件是1,則如果修改了訪問寄存器(沒有任何其他 中止條件),則將不中止事務(wù)。
[0105] I2字段的比特8-11和13-15(指令的比特40-43和45-47)被保留,并且應(yīng)當(dāng)包含 0〇
[0106] 通過其格式在圖4中被描述的TRANSACTION END (TEND)指令來指定事務(wù)開始指令 的結(jié)束。作為一個示例,TEND指令400包括操作碼字段402,該操作碼字段402包括用于指 定事務(wù)結(jié)束操作的操作碼。
[0107] 相對于事務(wù)執(zhí)行設(shè)施使用多個術(shù)語,并且因此,完全為了方便,在下面以字母順序 提供術(shù)語的列表。在一個實施例中,這些術(shù)語具有下面的定義:
[0108] 中止:當(dāng)在導(dǎo)致0的事務(wù)嵌套深度的TRANSACTION END (事務(wù)結(jié)束)指令之前事務(wù) 結(jié)束時,事務(wù)中止。在一個實施例中,當(dāng)事務(wù)中止時,下面的部分出現(xiàn)。
[0109] ?丟棄(即,不提交)由事務(wù)的任何和全部級進行的事務(wù)存儲訪問。
[0110] ?提交由事務(wù)的任何和全部級進行的非事務(wù)存儲訪問。
[0111] ?由最外TRANSACTION BEGIN指令的通用寄存器存儲掩蔽(GRSM)指定的寄存器 恢復(fù)到在事務(wù)執(zhí)行之前的它們的內(nèi)容(即,到在最外TRANSACTION BEGIN指令的執(zhí)行時的 它們的內(nèi)容)。不恢復(fù)未被最外TRANSACTION BEGIN指令的通用寄存器存儲掩蔽指定的通 用寄存器。
[0112] ?不恢復(fù)訪問寄存器、浮點寄存器和浮點控制寄存器。當(dāng)事務(wù)中止時,保留在事務(wù) 執(zhí)行期間對于這些寄存器進行的任何改變。
[0113] 可能因為多種原因而中止事務(wù),該多種原因包括受限指令的嘗試執(zhí)行、受限資源 的嘗試修改、事務(wù)沖突、超過各種CPU資源、任何解釋執(zhí)行中斷條件、任何中斷、TRANSACTION ABORT(事務(wù)中止)指令和其他原因。事務(wù)中止代碼提供了為什么可以將事務(wù)中止的特定原 因。
[0114] 參考圖5來描述TRANSACTION ABORT (TABORT)指令的格式的一個示例。作為一個 示例,TABORT指令500包括:操作碼字段502,其包括用于指定事務(wù)中止操作的操作碼;基 本字段(B2) 504;以及,位移字段(D2) 506。當(dāng)B2字段不是0時,由B2504指定的通用寄存器 的內(nèi)容被加到D2506以獲得第二操作數(shù)地址;否則,從D2字段唯一地形成第二操作數(shù)地址, 并且忽略B2字段。第二操作數(shù)地址不用于尋址數(shù)據(jù);相反,該地址形成在中止處理期間被 布置在事務(wù)診斷塊中的設(shè)置中止代碼。用于第二操作數(shù)地址的地址計算遵循地址算術(shù)的規(guī) 貝U :在24比特尋址模式中,將比特0-29設(shè)置為0 ;在31比特尋址模式中,比特0-32被設(shè)置 為〇。
[0115] 提交:在最外TRANSACTION END指令的完成時,CPU提交由事務(wù)進行的存儲訪問, 使得(即,最外事務(wù)和任何嵌套層)它們?yōu)槠渌鸆PU和1/0子系統(tǒng)可見。如其他CPU和1/0 子系統(tǒng)所觀察,由事務(wù)的所有嵌套層進行的所有獲取和存儲訪問看起來當(dāng)提交出現(xiàn)時作為 單個同時操作出現(xiàn)。
[0116] 提交處理不修改通用寄存器、訪問寄存器、浮點寄存器和浮點控制寄存器的內(nèi)容。 當(dāng)提交事務(wù)的存儲時保留在事務(wù)執(zhí)行期間對于這些寄存器作出的任何改變。
[0117] 沖突:如果下述兩個訪問是對于在同一高速緩存線中的任何位置并且該訪問的一 個或多個是存儲,則由一個CPU進行的事務(wù)訪問與下述部分的任何一個沖突:(a)由另一個 CPU進行的事務(wù)訪問或非事務(wù)訪問,或者(b)由I/O子系統(tǒng)進行的非事務(wù)訪問。
[0118] 可以通過指令的CPU的推測執(zhí)行來檢測沖突,即使可能在概念序列中檢測不到?jīng)_ 關(guān)。
[0119] 被約束事務(wù):被約束事務(wù)是在被約束事務(wù)執(zhí)行模式中執(zhí)行并且受到下面的限制的 事務(wù):
[0120] ?可獲得一般指令的子集。
[0121] ?可以執(zhí)行有限數(shù)量的指令。
[0122] ?可以訪問有限數(shù)量的存儲器操作數(shù)位置。
[0123] ?該事務(wù)限于單個嵌套層。
[0124] 在沒有重復(fù)的中斷與其他CPU或I/O子系統(tǒng)的沖突的情況下,被約束事務(wù)最終完 成,因此,不要求中止處理器例程。下面詳細描述被約束事務(wù)。
[0125] 當(dāng)在CPU已經(jīng)在未約束事務(wù)執(zhí)行模式中的同時執(zhí)行被約束的事務(wù)開始 (TBEGINCC)指令時,執(zhí)行作為嵌套未約束事務(wù)繼續(xù)。
[0126] 被約束設(shè)置執(zhí)行模式:當(dāng)設(shè)置嵌套深度是0,并且通過TBEGINC指令來開始事務(wù) 時,CPU進入被約束事務(wù)執(zhí)行模式。在CPU在被約束事務(wù)執(zhí)行模式中的同時,事務(wù)嵌套深度 是1。
[0127] 嵌套事務(wù):當(dāng)在CPU在未約束設(shè)置執(zhí)行模式中的同時發(fā)出事務(wù)開始指令時,該事 務(wù)被嵌套。
[0128] 設(shè)置執(zhí)行設(shè)施使用被稱為扁平嵌套的模型。在扁平嵌套模式中,由內(nèi)部事務(wù)進行 的存儲不能被其他CPU和I/O子系統(tǒng)觀察到,直到最外事務(wù)提交其存儲。類似地,如果事務(wù) 中止,則所有嵌套的事務(wù)中止,并且丟棄所有嵌套的事務(wù)的所有事務(wù)存儲。
[0129] 在圖6中描述了嵌套事務(wù)的一個示例。如所示,第一 TBEGIN 600開始最外事務(wù) 601 ,TBEGIN 602開始第一嵌套事務(wù),并且TBEGIN 604開始第二嵌套事務(wù)。在這個示例中, TBEGIN 604和TEND 606限定了最內(nèi)事務(wù)608。當(dāng)TEND 610執(zhí)行時,對于最外事務(wù)和所有 內(nèi)部事務(wù)提交612事務(wù)存儲。
[0130] 未約束事務(wù):未約束事務(wù)是在未約束事務(wù)執(zhí)行模式中執(zhí)行的事務(wù)。雖然未以與被 約束事務(wù)一樣的方式限制未約束事務(wù),但是仍然可能因為多種原因而將未約束事務(wù)中止。
[0131] 未約束事務(wù)執(zhí)行模式:當(dāng)通過TBEGIN指令來開始事務(wù)時,CPU進入未約束事務(wù)執(zhí) 行模式。在CPU在未約束事務(wù)執(zhí)行模式中的同時,事務(wù)嵌套深度可以從1向最大事務(wù)嵌套 深度改變。
[0132] 非事務(wù)訪問:非事務(wù)訪問是由CPU當(dāng)它不在事務(wù)執(zhí)行模式中時進行的存儲器操作 數(shù)訪問(即,在事務(wù)之外的經(jīng)典存儲器訪問)。而且,由I/O子系統(tǒng)進行的訪問是非事務(wù)訪 問。另外,NONTRANSACTIONAL STORE(非事務(wù)存儲)指令可以用于在CPU在未約束事務(wù)執(zhí) 行模式中的同時引起非事務(wù)存儲訪問。
[0133] 參考圖7描述非事務(wù)存儲指令的格式的一個實施例。作為一個示例,非事務(wù)存儲 指令700包括:多個操作碼字段702a、702b,用于指定用于指定非事務(wù)存儲操作的操作碼; 寄存器字段RJ04,用于指定寄存器,其內(nèi)容被稱為第一操作數(shù);索引字段(X2) 706 ;基本字 段(B2) 708 ;第一位移字段(DL2) 710 ;以及,第二位移字段(DH2) 712。由XjPB2字段指定的 通用寄存器的內(nèi)容被加到DH2和DL2字段的級聯(lián)的內(nèi)容,以形成第二操作數(shù)地址。當(dāng)X2或 B2字段的任何一個或兩者是0時,對應(yīng)的寄存器不參與該相加。
[0134] 該64比特第一操作數(shù)被不變地、非事務(wù)處理地布置在第二操作數(shù)位置處。
[0135] 通過DH2和DL2字段的級聯(lián)形成的位移被看作20比特帶符號二進制整數(shù)。
[0136] 第二操作數(shù)要在雙字邊界上對齊;否則,識別指定異常,并且抑制操作。
[0137] 外/最外事務(wù):具有低編號的事務(wù)嵌套深度的事務(wù)是外事務(wù)。具有1的事務(wù)嵌套 深度值的事務(wù)是最外事務(wù)。
[0138] 最外事務(wù)開始指令是當(dāng)事務(wù)嵌套深度初始為0時執(zhí)行的那個。最外事務(wù)結(jié)束指令 是使得事務(wù)嵌套深度從1向〇轉(zhuǎn)換的那個。在這個實施例中,被約束事務(wù)是最外事務(wù)。
[0139] 程序中斷過濾:當(dāng)因為某些程序異常條件導(dǎo)致事務(wù)中止時,該程序可以選用地防 止中斷出現(xiàn)。該技術(shù)被稱為程序中斷過濾。程序中斷過濾受到中斷的事務(wù)類別、來自事務(wù) 開始指令的有效程序中斷過濾控制和在控制寄存器〇中的事務(wù)執(zhí)行程序中斷過濾覆蓋的 支配。
[0140] 事務(wù):事務(wù)包括在CPU在事務(wù)執(zhí)行模式中的同時進行存儲器操作數(shù)訪問和改變所 選擇的通用寄存器。對于未約束事務(wù),存儲器操作數(shù)訪問可以包括事務(wù)訪問和非事務(wù)訪問。 對于被約束事務(wù),存儲器操作數(shù)訪問限于事務(wù)訪問。如其他CPU和I/O子系統(tǒng)所觀察,由CPU 在事務(wù)執(zhí)行模式中的同時進行的所有存儲器操作數(shù)訪問看起來作為單個同時操作出現(xiàn)。如 果中止事務(wù),則丟棄事務(wù)存儲訪問,并且由最外事務(wù)開始指令的通用寄存器存儲掩蔽指定 的任何寄存器被恢復(fù)到在事務(wù)執(zhí)行之前的它們的內(nèi)容。
[0141] 事務(wù)訪問:事務(wù)訪問是除了由非事務(wù)存儲指令進行的訪問之外的、在CPU在事務(wù) 執(zhí)行模式中的同時進行的存儲器操作數(shù)訪問。
[0142] 事務(wù)執(zhí)行模式:術(shù)語事務(wù)執(zhí)行模式(也稱為事務(wù)執(zhí)行模式)描述了未約束和被約 束事務(wù)執(zhí)行模式兩者的共同操作。因此,當(dāng)描述該操作時,使用術(shù)語未約束和被約束來限制 事務(wù)執(zhí)行模式。
[0143] 當(dāng)事務(wù)嵌套深度為0時,CPU不在事務(wù)執(zhí)行模式(也稱為非事務(wù)執(zhí)行模式)中。
[0144] 如CPU所觀察,在事務(wù)執(zhí)行模式中進行的獲取和存儲與在不在事務(wù)執(zhí)行模式中的 同時進行的那些不同。
[0145] 在z/Architecture的一個實施例中,事務(wù)執(zhí)行設(shè)施在控制器寄存器0的比特8-9、 控制寄存器2的比特61-63、事務(wù)嵌套深度、事務(wù)診斷塊地址和事務(wù)中止程序狀態(tài)字(PSW) 的控制下。
[0146] 在初始CPU復(fù)位后,控制寄存器的比特位置8-9、控制寄存器2的比特位置62-63 和事務(wù)嵌套深度的內(nèi)容被設(shè)置為0。當(dāng)事務(wù)執(zhí)行控件控制寄存器0的比特8是0時,不能將 CPU置于事務(wù)執(zhí)行模式內(nèi)。
[0147] 下面描述關(guān)于各個控件的另外的細節(jié)。
[0148] 如所示,通過在控制寄存器0中的兩個比特和在控制寄存器2中的三個比特來控 制事務(wù)執(zhí)行設(shè)施。例如:
[0149] 控制寄存器0比特:在一個實施例中。比特指配如下:
[0150] 事務(wù)執(zhí)行控件(TXC):控制寄存器0的比特8是事務(wù)執(zhí)行控件。該比特提供了一 種機制,通過其,控制程序(例如,操作系統(tǒng))可以指示事務(wù)執(zhí)行設(shè)施是否能夠被該程序使 用。比特8要是1,以成功地進入事務(wù)執(zhí)行模式。
[0151] 當(dāng)控制寄存器0的比特8是0時,EXTRACT TRANSACTION NESTING DEPTH(提取事 務(wù)嵌套深度)、TRANSACTI0N BEGIN(事務(wù)開始)和TRANSACTION END (事務(wù)結(jié)束)指令的嘗 試執(zhí)行導(dǎo)致特殊的操作執(zhí)行。
[0152] 參考圖8描述EXTRACT TRANSACTION NESTING DEPTH (提取事務(wù)嵌套深度)指令 的格式的一個實施例。作為一個示例,EXTRACT TRANSACTION NESTING DEPTH(指令800包 括:操作碼字段802,用于指定操作碼,該操作碼指示提取事務(wù)嵌套深度操作;以及,寄存器 字段RW04,其指定通用寄存器。
[0153] 當(dāng)前的事務(wù)嵌套深度被布置在通用寄存器R1的比特48-63中。寄存器的比特0-31 保持不變,并且寄存器的比特32-47被設(shè)置為0。
[0154] 在另一個實施例中,最大事務(wù)嵌套深度也被布置在通用寄存器R1中,諸如在比特 16-31 中。
[0155] 事務(wù)執(zhí)行程序中斷過濾覆蓋(PIFO):控制寄存器0的比特9是事務(wù)執(zhí)行程序中斷 過濾覆蓋。該比特提供了一種記住,通過其,控制程序可以保證在CPU在事務(wù)執(zhí)行模式中的 同時出現(xiàn)的任何程序異常條件導(dǎo)致中斷,而與由事務(wù)開始指令指定或暗示的有效程序中斷 過濾控制無關(guān)。
[0156] 控制寄存器2比特:在一個實施例中,該指配如下:
[0157] 事務(wù)診斷范圍(TDS):控制寄存器2的比特61控制在寄存器的比特62-63中的事 務(wù)診斷控制(TDC)的適用性如下:
[0158] TDS
[0159] 值含義
[0160] OTDC與CPU是否在問題或管理者狀態(tài)中無關(guān)地適用
[0161] 1僅當(dāng)CPU在問題狀態(tài)中時TDC適用。當(dāng)CPU在管理者狀態(tài)中時,處理就像TDC包 含0那樣。
[0162] 事務(wù)診斷控制(TDC):控制寄存器2的比特62-63是2比特?zé)o符號整數(shù),其可以用 于使得任意中止事務(wù)以用于診斷目的。在一個示例中,TDC的編碼如下:
[0163] TDC
[0164] 值含義
[0165] 0正常操作;作為TDC的結(jié)果不中止事務(wù)。
[0166] 1在任意指令下但是在最外事務(wù)結(jié)束指令的執(zhí)行之前中止每一個事務(wù)。
[0167] 2在任意指令下中止任意事務(wù)。
[0168] 3 保留
[0169] 當(dāng)因為非零TDC而中止事務(wù)時,則下面的部分的任何一個可能出現(xiàn):
[0170] ?中止代碼被設(shè)置為代碼7-11、13-16或255的任何一個,并且該代碼的值被CPU 任意選擇;與中止代碼對應(yīng)地設(shè)置條件代碼。下面進一步描述中止代碼。
[0171] ?對于未約束事務(wù),條件代碼被設(shè)置為1。在該情況下,中止代碼不適用。
[0172] 是否實現(xiàn)TDC值是模型相關(guān)的。如果未實現(xiàn),則1的值就像指定2那樣作為。
[0173] 對于被約束事務(wù),處理1的TDC值,就像指定TDC值2。
[0174] 如果指定TDC值3,則結(jié)果不可預(yù)測。
[0175] 事務(wù)診斷塊地址(TDBA)
[0176] 當(dāng)指令的B1字段不是0時,從最外事務(wù)開始(TBEGIN)指令的第一操作數(shù)地址設(shè) 置有效事務(wù)診斷塊地址(TDM)。當(dāng)CPU在主空間或訪問寄存器模式中時,TDBA指定在主地 址空間中的位置。當(dāng)CPU在輔助空間或原籍空間模式中時,TDBA分別指定在輔助或原籍地 址空間中的位置。當(dāng)DAT (動態(tài)地址轉(zhuǎn)換)關(guān)斷時,TDBA指定在真實存儲器中的位置。
[0177] 如果隨后中止事務(wù),則CPU使用TDBA來定位被稱為TBEGIN指定的TDB的事務(wù)診 斷塊。TDBA的最右三個比特是0,意味著TBEGIN指定的TDB在雙字邊界上。
[0178] 當(dāng)最外事務(wù)開始(TBEGIN)指令的B1字段是0時,事務(wù)診斷塊地址無效,并且如果 隨后中止事務(wù),則不存儲TBEGIN指定的TDB。
[0179] 事務(wù)中止 PSW (TAPSW)
[0180] 在當(dāng)嵌套深度初始為0時的事務(wù)開始(TBEGIN)指令的執(zhí)行期間,該設(shè)置中止PSW 被設(shè)置為當(dāng)前PSW的內(nèi)容;并且,事務(wù)中止PSW的指令地址指定下一個順序指令(即,在 最外TBEGIN后的指令)。在當(dāng)嵌套深度初始為0時的被約束的事務(wù)開始(TBEGINC)指令 的執(zhí)行期間,事務(wù)中止PSW被設(shè)置為當(dāng)前PSW的內(nèi)容,除了事務(wù)中止PSW的指令地址指定 TBEGINC指令(而不是在TBEGINC后的下一個順序指令)。
[0181] 當(dāng)中止事務(wù)時,將在事務(wù)中止PSW中的條件代碼替換為用于指示中止條件的嚴重 性的代碼。隨后,如果因為不導(dǎo)致中斷的情況而中止事務(wù),則從事務(wù)中止psw加載pswdn 果因為導(dǎo)致中斷的起因而中止事務(wù),則事務(wù)中止PSW被存儲為中斷舊PSW。
[0182] 在任何內(nèi)部事務(wù)開始指令的執(zhí)行期間不改變事務(wù)中止PSW。
[0183] 事務(wù)嵌套深度(TND)
[0184] 事務(wù)嵌套深度例如是每次使用條件代碼0來完成事務(wù)開始指令時遞增并且每次 完成事務(wù)結(jié)束指令時遞減的16比特?zé)o符號值。當(dāng)中止事務(wù)時或通過CPU復(fù)位來將事務(wù)嵌 套深度復(fù)位為〇。
[0185] 在一個實施例中,實現(xiàn)最大TND 15。
[0186] 在一種實現(xiàn)方式中,當(dāng)CPU在被約束事務(wù)執(zhí)行模式中時,事務(wù)嵌套深度是1。另外, 雖然最大TND可以被表示為4比特值,TND被定義為16比特值,以促進在事務(wù)診斷塊中的 其檢查。
[0187] 事務(wù)診斷塊(TDB)
[0188] 當(dāng)中止事務(wù)時,可以在事務(wù)診斷塊(TDB)中存儲各種狀態(tài)信息如下:
[0189] I. TBEGIN指定TDB :對于未約束事務(wù),當(dāng)最外TBEGIN指令的B1字段不是0時,該 指令的第一操作數(shù)地址指定TBEGIN指定的TDB。這是可以被應(yīng)用的中止處理器查看的應(yīng)用 程序指定位置。
[0190] 2.程序中斷(PI)TDB :如果因為未過濾的程序執(zhí)行條件而中止未約束事務(wù),或者 如果因為任何程序異常條件(即,導(dǎo)致程序中斷被識別的任何條件)導(dǎo)致中止被約束事務(wù), 則PI-TDB被存儲到在前綴區(qū)域中的位置內(nèi)。這可用于操作系統(tǒng)查看和退出它可以提供的 任何診斷報告。
[0191] 3.中斷TDB :如果因為導(dǎo)致中斷的任何程序異常條件(S卩,使得解釋執(zhí)行結(jié)束并且 使得控制返回到主程序的條件)導(dǎo)致事務(wù)中止,則將TDB存儲到在用于客戶操作系統(tǒng)的狀 態(tài)描述塊中指定的位置內(nèi)。
[0192] 在一個實施例中,當(dāng)TDB地址有效時(也就是說,當(dāng)最外TBEGIN指令的B1字段非 零時),僅存儲TBEGIN指定的TDB。
[0193] 對于因為未過濾的程序異常條件導(dǎo)致的中止,僅存儲PI-TDB或中斷TDB之一。因 此,可以有對于中止存儲的〇、1或2個TDB。
[0194] 下面描述關(guān)于TDB的每一個的一個示例的另外的細節(jié):
[0195] TBEGIN指定的TDB :由有效事務(wù)診斷塊地址指定的256字節(jié)的位置。當(dāng)事務(wù)診斷 塊地址有效時,在事務(wù)中止上存儲TBEGIN指定的TDB。TBEGIN指定的TDB受到在最外事務(wù) 開始指令的執(zhí)行時有效的所有存儲保護機制的支配。在最外TBEGIN的執(zhí)行期間而不在在 事務(wù)中止處理期間檢測用于TBEGIN指定的TDB的任何部分的PER(程序事件記錄)存儲改 變事件。
[0196] PER的一個目的是幫助調(diào)試程序。它允許向作為示例的下面類型的事件警告程 序:
[0197] ?成功分支指令的執(zhí)行。提供了僅當(dāng)分支目標(biāo)位置在指定的存儲區(qū)域內(nèi)時使得事 件出現(xiàn)的選擇。
[0198] ?從指定的存儲區(qū)域獲取指令。
[0199] ?指定存儲區(qū)域的內(nèi)容的改變。提供了僅當(dāng)存儲區(qū)域在指定的存儲空間內(nèi)時使得 事件出現(xiàn)的選擇。
[0200] ? STORE USING REAL ADDRESS(使用真實地址存儲)指令的執(zhí)行。
[0201] ? TRANSACTION END (事務(wù)結(jié)束)指令的執(zhí)行
[0202] 程序可以選擇性地指定要識別的上面類型的事件的一個或多個,除了可以僅僅可 以與存儲改變事件一起指定用于STORE USING REAL ADDRESS的事件。通過程序中斷來向 程序提供關(guān)于PER事件的信息,并且在中斷代碼中識別中斷的起因。
[0203] 當(dāng)事務(wù)診斷塊地址無效時,不存儲TBEGIN指定的TDB。
[0204] 程序中斷TDB :真實位置6, 144-6, 399 (16進制1800-18FF)。當(dāng)因為程序中斷導(dǎo)致 事務(wù)中止時存儲程序中斷TDB。當(dāng)因為其他原因?qū)е率聞?wù)中止時,程序中斷TDB的內(nèi)容不可 預(yù)測。
[0205] 程序中斷TDB不受到任何保護機制的支配。當(dāng)程序中斷TDB在程序中斷期間被存 儲時未對于其檢測到PER存儲改變事件。
[0206] 截取TDB :由狀態(tài)說明的位置488-495指定的256字節(jié)的主真實位置。當(dāng)中止的 事務(wù)導(dǎo)致客戶程序中斷截取(即,截取代碼8)時,存儲截取TDB。當(dāng)因為其他原因?qū)е率聞?wù) 中止時,截取TDB的內(nèi)容不可預(yù)測。截取TDB不受到任何保護機制的支配。
[0207] 如圖9中所述,在一個實施例中,事務(wù)診斷塊900的字段如下:
[0208] 格式902 :字節(jié)0包含有效性和格式指示如下:
[0209] 值含義
[0210] OTDB的剩余字段不可預(yù)測。
[0211] 1其剩余字段在下面被描述的格式-ITDB
[0212] 2-255 保留
[0213] 其中格式字段是0的TDB被稱為空TDB。
[0214] 標(biāo)記904 :字節(jié)1包含各種指示如下:
[0215] 沖突權(quán)標(biāo)有效性(CTV):當(dāng)因為獲取或存儲沖突(S卩,分別地,中止代碼9或10)導(dǎo) 致事務(wù)中止時,字節(jié)1的比特〇是沖突權(quán)標(biāo)有效性指示。當(dāng)CTV指示是1時,在TDB的字節(jié) 16-23中的沖突權(quán)標(biāo)910包含在其檢測到?jīng)_突的邏輯地址。當(dāng)CTV指示是0時,TDB的字節(jié) 16-23不可預(yù)測。
[0216] 當(dāng)因為出了獲取或存儲沖突之外的任何其他原因而將事務(wù)中止時,字節(jié)1的比特 〇被存儲為〇。
[0217] 被約束事務(wù)指示(CTI):當(dāng)CPU在被約束事務(wù)執(zhí)行模式中時,字節(jié)1的比特1被設(shè) 置為1。當(dāng)CPU在未約束事務(wù)執(zhí)行模式中時,字節(jié)1的比特1被設(shè)置為0。
[0218] 保留:字節(jié)1的比特2-7被保留,并且被存儲為0。
[0219] 事務(wù)嵌套深度(TND) 906 :當(dāng)事務(wù)中止時字節(jié)6-7包含事務(wù)嵌套深度。
[0220] 事務(wù)中止代碼(TAC) 908 :字節(jié)8-15包含64比特的無符號事務(wù)中止代碼。每一個 代碼點指示事務(wù)中止的原因。
[0221] 當(dāng)因為除了程序中斷之外的條件導(dǎo)致事務(wù)中止時,是否在程序中斷TDB中存儲事 務(wù)中止代碼是模型相關(guān)的。
[0222] 沖突權(quán)標(biāo)910 :對于因為獲取或存儲沖突(即,分別地,代碼9和10)導(dǎo)致中止的 事務(wù),字節(jié)16-23包含在其檢測到?jīng)_突的存儲位置的邏輯地址。當(dāng)字節(jié)1的CTV比特比特 〇是1時,沖突權(quán)標(biāo)有意義。
[0223] 當(dāng)CTV比特是0時,字節(jié)16-23不可預(yù)測。
[0224] 因為CPU進行的推測執(zhí)行,沖突權(quán)標(biāo)可以指定存儲位置,該存儲位置不必然事務(wù) 的概念執(zhí)行序列訪問。
[0225] 中止的事務(wù)指令地址(ATIA) 912 :字節(jié)24-31包含指令地址,該指令地址標(biāo)識當(dāng)檢 測到中止時在執(zhí)行的指令。當(dāng)因為中止代碼2、5、6、11、13或256或更大導(dǎo)致事務(wù)中止時, 或者當(dāng)因為中止代碼4或13導(dǎo)致事務(wù)中止并且程序異常條件無效時,ATIA直接指向在被 執(zhí)行的指令。當(dāng)因為中止代碼4或12導(dǎo)致事務(wù)中止,并且程序異常條件不是無效時,ATIA 指過在被執(zhí)行的指令。
[0226] 當(dāng)因為中止代碼7-10、14-16或255導(dǎo)致事務(wù)中止時,ATIA不必然指示引起中止 的精確的指令,但是可以指向在事務(wù)內(nèi)的更早或更晚的指令。
[0227] 如果因為作為執(zhí)行類型指令的目標(biāo)的指令導(dǎo)致事務(wù)中止時,ATIA根據(jù)如上所述的 中止代碼來識別或者指向指令或指過它的執(zhí)行類型指令。ATIA不指示執(zhí)行類型指令的目 標(biāo)。
[0228] 當(dāng)事務(wù)中止時,ATIA受到尋址模式的支配。在24比特尋址模式中,字段的比特 0-40包含0。在31比特尋址模式中,字段的比特0-32包含0。
[0229] 當(dāng)因為除了程序中斷之外的條件導(dǎo)致事務(wù)中止時,是否在程序中斷TDB中存儲中 止的事務(wù)指令地址是模型相關(guān)的。
[0230] 當(dāng)因為中止代碼4或12導(dǎo)致事務(wù)中止,并且程序異常條件不是無效的時,ATIA不 指向引起中止的指令。通過從ATIA減去由中斷長度代碼(ILC)指示的半字的數(shù)量,可以在 抑制或結(jié)束的條件中或?qū)τ谠谕瓿傻姆荘ER事件識別引起中止的指令。當(dāng)因為PER事件而 中止事務(wù),并且不存在其他程序異常條件時,ATIA不可預(yù)測。
[0231] 當(dāng)事務(wù)診斷塊地址有效時,可以在TBEGIN指定的TDB的字節(jié)36-39中的程序中斷 標(biāo)識(PIID)中查看ILC。當(dāng)過濾不適用時,可以在真實存儲器中的位置140-143處的PIID 中查看ILC。
[0232] 異常訪問標(biāo)識(EAID)914 :對于因為某些過濾的程序異常條件導(dǎo)致中止的事務(wù), TBEGIN指定的TDB的字節(jié)32包含異常訪問標(biāo)識。在z/Architecture的一個示例中,EAID 的格式和它被存儲的情況與如在上面的操作原理中所述的、當(dāng)異常條件導(dǎo)致中斷時在真實 位置160中描述的那些相同。
[0233] 對于因為包括導(dǎo)致程序中斷的任何異常條件的其他原因中止的事務(wù),字節(jié)32不 可預(yù)測。字節(jié)32在程序中斷TDB中不可預(yù)測。
[0234] 該字段僅被存儲在由事務(wù)診斷塊地址指定的TDB中;否則,該字段被保留。僅對于 訪問列表控制的或DAT保護、ASCE類型、頁面轉(zhuǎn)換、第一區(qū)域轉(zhuǎn)換、第二區(qū)域轉(zhuǎn)換、第三區(qū)域 轉(zhuǎn)換和分段轉(zhuǎn)換程序異常條件存儲EAID。
[0235] 數(shù)據(jù)異常代碼(DXC)916 :對于因為被過濾的數(shù)據(jù)異常程序異常條件導(dǎo)致中止的 事務(wù),TBEGIN指定的TDB的字節(jié)33包含數(shù)據(jù)異常代碼。在z/Architecture的一個示例中, DXC的格式和其被存儲的情況與在上面的操作原理中所述的、當(dāng)異常條件導(dǎo)致中斷時在真 實位置147中描述的那些相同。在一個示例中,位置147包括DXC。
[0236] 對于因為包括導(dǎo)致程序中斷的任何異常條件的其他原因中止的事務(wù),字節(jié)33不 可預(yù)測。字節(jié)33在程序中斷TDB中不可預(yù)測。
[0237] 該字段僅被存儲在由事務(wù)診斷塊地址指定的TDB中;否則,該字段被保留。僅對于 數(shù)據(jù)程序異常條件存儲DXC。
[0238] 程序中斷標(biāo)識(PIID)918 :對于因為被過濾的數(shù)據(jù)異常條件導(dǎo)致中止的事務(wù), TBEGIN指定的IDB的字節(jié)36-39包含數(shù)據(jù)中斷標(biāo)識。在z/Architecture的一個示例中, PIID的格式與(在上面的操作原理中所述的)當(dāng)條件導(dǎo)致中斷時在真實位置140-143中描 述的那個相同,除了在PIID的比特13-14中的指令長度代碼對于在其檢測到異常條件的指 令是各自的。
[0239] 對于因為包括導(dǎo)致程序中斷的異常條件的其他原因中止的事務(wù),字節(jié)36-39不可 預(yù)測。字節(jié)36-39在程序中斷TDB中不可預(yù)測。
[0240] 該字段僅被存儲在由事務(wù)診斷塊地址指定的TDB中;否則,該字段被保留。僅對于 數(shù)據(jù)程序異常條件存儲程序中斷標(biāo)識。
[0241] 轉(zhuǎn)換異常標(biāo)識(TEID)920 :對于因為下面的被過濾的程序異常條件導(dǎo)致中止的事 務(wù),TBEGIN指定的TDB的字節(jié)40-47包含轉(zhuǎn)換異常標(biāo)識。
[0242] ?訪問列表控制的或DAT保護
[0243] ? ASCE 類型
[0244] ?頁面轉(zhuǎn)換
[0245] 籲第一區(qū)域轉(zhuǎn)換
[0246] 籲第二區(qū)域轉(zhuǎn)換
[0247] 籲第三區(qū)域轉(zhuǎn)換
[0248] ?分段轉(zhuǎn)換異常
[0249] 在z/Architecture的一個示例中,TEID的格式與在上面的操作原理中所述的、當(dāng) 該條件導(dǎo)致中斷時在真實位置168-175中描述的那個相同。
[0250] 對于因為包括導(dǎo)致程序中斷的異常條件的其他原因中止的事務(wù),字節(jié)40-47不可 預(yù)測。字節(jié)40-47在程序中斷TDB中不可預(yù)測。
[0251] 該字段僅被存儲在由事務(wù)診斷塊地址指定的TDB中;否則,該字段被保留。
[0252] 斷開的事件地址922 :對于因為被過濾的數(shù)據(jù)異常條件導(dǎo)致中止的事務(wù),TBEGIN 指定的TDB的字節(jié)48-55包含斷開的事件地址。在z/Architecture的一個示例中,斷開的 事件地址的格式與在上面的操作原理中所述的、當(dāng)該條件導(dǎo)致中斷時在真實位置272-279 中描述的那個相同。
[0253] 對于因為包括導(dǎo)致程序中斷的異常條件的其他原因中止的事務(wù),字節(jié)48-55不可 預(yù)測。字節(jié)48-55在程序中斷TDB中不可預(yù)測。
[0254] 該字段僅被存儲在由事務(wù)診斷塊地址指定的TDB中;否則,該字段被保留。
[0255] 下面描述與斷開的事件相關(guān)的另外的細節(jié)。
[0256] 在z/Architecture的一個實施例中,當(dāng)安裝PER-3設(shè)施時,它向程序提供最后指 令的地址,以引起在CPU的順序執(zhí)行中的斷開。斷開的事件地址記錄可以被用作用于野分 支檢測的調(diào)試輔助。該設(shè)施提供了例如被稱為斷開的事件地址寄存器的、在CPU中的64比 特寄存器。每次除了事務(wù)中止之外的指令在順序指令執(zhí)行中引起斷開時(即,在PSW中的 指令地址被更換,而不是遞增指令的長度),將那個指令的地址布置在斷開的事件地址寄存 器中。么激蕩程序中斷出現(xiàn)時,不論是否指示PER,在真實存儲器位置272-279中布置斷開 的事件地址寄存器的當(dāng)前內(nèi)容。
[0257] 如果引起斷開的事件的指令是執(zhí)行類型指令(EXE⑶TE (執(zhí)行)或EXECUTE RELATIVE LONG(執(zhí)行較長))的目標(biāo),則用于獲取執(zhí)行類型的指令的指令地址被布置在斷 開的事件地址寄存器中。
[0258] 在z/Architecture的一個實施例中,將斷開的事件看作每當(dāng)下面的指令之一引 起分支時出現(xiàn) BRANCH AND LINK (BAUBALR) ;BRANCH AND SAVE (BAS、BASR) ;BRANCH AND SAVE AND SET MODE (BASSM) ;BRANCH AND SET MODE(BSM) ;BRANCH AND STACK (BAKR); BRANCH ON CONDITION (BC、BCR) ;BRANCH ON COUNT (BCT、BCTR、BCTG、BCTGR) ;BRANCH ON INDEX HIGH(BXH、BXHG) ;BRANCH ON INDEX LOW OR EQUAL(BXLE、BXLEG) ;BRANCH RELATIVE ON CONDITION (BRC) ;BRANCH RELATIVE ON CONDITION LONG(BRCL) ;BRANCH RELATIVE ON COUNT(BRCT, BRCTG) ;BRANCH RELATIVE ON INDEX HIGH(BRXH, BRXHG) ;BRANCH RELATIVE ON INDEX LOW OR EQUAL (BRXLE, BRXLG) ;COMPARE AND BRANCH (CRB, CGRB) ;COMPARE AND BRANCH RELATIVE(CRJ, CGRJ) ;C0MPARE IMMEDIATE AND BRANCH(CIB, CGIB) ;C0MPARE IMMEDIATE AND BRANCH RELATIVE(ClJ, CGIJ) ;C0MPARE LOGICAL AND BRANCH (CLRB, CLGRB) !COMPARE LOGICAL AND BRANCH RELATIVE(CLRJ、CLGRJ) !COMPARE LOGICAL IMMEDIATE AND BRANCH(CLIB、CLGIB);以及COMPARE LOGICAL IMMEDIATE AND BRANCH RELATIVE (CU J, CLGIJ) 〇
[0259] 也將斷開的事件看作每當(dāng)下面的指令之一完成時出現(xiàn):BRANCH AND SET AUTHORITY (BSA) ;BRANCH IN SUBSPACE GROUP (BSG) ;BRANCH RELATIVE AND SAVE(BRAS); BRANCH RELATIVE AND SAVE LONG (BRASL) ;L0AD PSff(LPSff) ;L0AD PSff EXTENDED(LPSffE); PROGRAM CALL(PC) ; PROGRAM RETURN(PR) ; PROGRAM TRANSFER(PT) ; PROGRAM TRANSFER WITH INSTANCE (PTI) ;RESUME PROGRAM(RP);以及 TRAP (TRAP2、TRAP4)。
[0260] 作為事務(wù)中止的結(jié)果(例如,隱含地或作為事務(wù)中止指令的結(jié)果),不將斷開的事 件看作出現(xiàn)。
[0261] 模型相關(guān)的診斷信息924 :字節(jié)112-127包含模型相關(guān)的診斷信息。
[0262] 對于除了 12之外的所有中止代碼(過濾的程序中斷),在被存儲的每一個TDB中 存儲該模型相關(guān)的診斷信息。
[0263] 在一個實施例中,該模型相關(guān)的診斷信息包括下面的內(nèi)容:
[0264] ?字節(jié)112-119包含被稱為事務(wù)執(zhí)行分支指示(TXBI)的64比特的向量。該向量 的前63比特的每一個指示在CPU在事務(wù)執(zhí)行模式中的同時執(zhí)行分支指令的結(jié)果如下:
[0265] 值含義
[0266] 0沒有分支地完成指令
[0267] 1具有分支地完成指令
[0268] 比特0表示第一這樣的分支指令的結(jié)果,并且,比特1表示第二這樣的指令的結(jié) 果7等等。
[0269] 如果在CPU在事務(wù)執(zhí)行模式中的同時執(zhí)行少于63個分支指令,則將不對應(yīng)于分支 指令的最后的比特被設(shè)置為〇(包括比特63)。當(dāng)執(zhí)行超過63個分支指令時,TXBI的比特 63被設(shè)置為1。
[0270] 通過能夠引起斷開的事件的指令來設(shè)置在TXBI中的比特,如上列出,除了下面的 內(nèi)容之外:
[0271] -任何受限指令不使得在TXBI中設(shè)置比特。
[0272] -對于例如 z/Architecture 的指令,當(dāng) BRANCH ON CONDITION、BRANCH RELATIVE ON CONDITION 或 BRANCH RELATIVE ON CONDITION LONG 指令的 M1 字段是 0 時,或者當(dāng)下面 的指令的R2字段是〇時,它是模型相關(guān)的,不論指令的執(zhí)行是否申請在TXBI中設(shè)置比特。
[0273] ? BRANCH AND LINK(BALR) ;BRANCH AND SAVE(BASR) ;BRANCH AND SAVE AND SET MODE (BASSM) ;BRANCH AND SET MODE(BSM) ;BRANCH ON CONDITION(BCR) ;and BRANCH ON COUNT(BCTR、BCTGR)
[0274] ?對于由主機訪問異常引起的中止條件,字節(jié)127的比特位置0被在為1。對于所 有其他中止條件,字節(jié)127的比特位置0被設(shè)置為0。
[0275] ?對于被加載/存儲單元(LSU)檢測的中止條件,字節(jié)127的最右5個比特包含 起因的指示。對于未被LSU檢測到的中止條件,保留字節(jié)127。
[0276] -般寄存器930 :字節(jié)128-255包含在中止事務(wù)時的通用寄存器0-15的內(nèi)容。以 在字節(jié)128-135中的通用寄存器0和在字節(jié)136-143中的通用寄存器1等開始,以升序來 存儲寄存器。
[0277] 保留:保留所有其他的字段。除非另外指示,保留的字段的內(nèi)容不可預(yù)測。
[0278] 如其他CPU和1/0子系統(tǒng)所觀察,在事務(wù)中止期間的TDB的存儲是在任何非事務(wù) 存儲后出現(xiàn)的多訪問參考。
[0279] 可能因為在其中事務(wù)執(zhí)行的立即配置的范圍之外的起因?qū)е轮兄乖撌聞?wù)。例如, 由管理程序(諸如LPAR或z/VM)識別的瞬態(tài)事件可能使得事務(wù)中止。
[0280] 在事務(wù)診斷塊中提供的信息意欲用于診斷目的,并且大體正確。然而,因為中止可 能被在立即配置的范圍之外的事件引起,所以諸如中止代碼或程序中斷標(biāo)識的信息可能未 正確地反映在該配置內(nèi)的條件,并且因此,不應(yīng)當(dāng)用在確定程序行為中。
[0281] 除了在TDB中存儲的診斷信息之外,當(dāng)因為任何數(shù)據(jù)異常程序異常條件導(dǎo)致事務(wù) 中止并且APF寄存器控制控制寄存器0的比特45和有效允許浮點操作控制(F)都是1時, 將數(shù)據(jù)異常代碼(DXC)布置到浮點控制寄存器(FPCR)的字節(jié)2內(nèi),而與過濾是否適用于程 序異常條件無關(guān)。當(dāng)事務(wù)中止,并且APF寄存器控制或有效允許浮點操作控制兩者都是0 時,不將DXC布置到FPCR內(nèi)。
[0282] 在一個實施例中,如在此所示,當(dāng)安裝事務(wù)執(zhí)行設(shè)施時,提供了下面的一般指令。
[0283] ? EXTRACT TRANSACTION NESTING DEPTH
[0284] ? NONTRANSACTIONAL STORE
[0285] ? TRANSACTION ABORT
[0286] ? TRANSACTION BEGIN
[0287] ? TRANSACTION END
[0288] 當(dāng)CPU在事務(wù)執(zhí)行模式中時,特定指令的嘗試執(zhí)行被限制,并且使得事務(wù)中止。
[0289] 當(dāng)在被約束的事務(wù)執(zhí)行模式中被發(fā)出時,受限指令的嘗試執(zhí)行也可能導(dǎo)致設(shè)置約 束程序中斷,或者可能導(dǎo)致執(zhí)行進行,就像事務(wù)未約束。
[0290] 在z/Architecture的一個示例中,受限指令包括作為示例的下面的非特權(quán)指令: COMPARE AND SWAP AND STORE ;M0DIFY RUNTIME INSTRUMENTATION CONTROLS ;PERF0RM LOCKED OPERATION;當(dāng)在 M1 字段中的代碼是6 或7 時,PREFETCH DATA (RELATIVE LONG); 當(dāng)M3字段是0并且在R1字段中的代碼是6或7時,STORE CHARACTERS UNDER MASK HIGH ; STORE FACILITY LIST EXTENDED ;ST0RE RUNTIME INSTRUMENTATION CONTROLS SUPERVISOR CALL;以及 TEST RUNTIME INSTRUMENTATION CONTROLS。
[0291] 在上面的列表中,COMPARE AND SWAP AND STORE和PERFORM LOCKED OPERATION是 可以通過利用在TX模式中的基本指令更有效地實現(xiàn)的復(fù)雜指令。當(dāng)代碼6和7釋放高速 緩存線時,PREFETCH DATA和PREFETCH DATA RELATIVE LONG的情況被限制,使得在事務(wù)完 成之前的數(shù)據(jù)的提交可能必要化。SUPERVISOR CALL當(dāng)它引起中斷(其引起中止事務(wù))時 被限制。
[0292] 在下面列出的條件下,限制下面的指令:
[0293] ?當(dāng)指令的R2字段不是零并且使能分支跟蹤時,BRANCH AND LINK(BALR)、BRANCH AND SAVE(BASR)和 BRANCH AND SAVE AND SET MODE。
[0294] ?當(dāng)指令的R2字段不是零并且使能分支跟蹤時,RANCH AND SAVE AND SET MODE 和 BRANCH AND SET MODE ;當(dāng)使能模式跟蹤時,SET ADDRESSING MODE。
[0295] ?當(dāng)識別監(jiān)控器事件條件時,MONITOR CALL。
[0296] 上面的列表包括可以形成跟蹤條目的指令。如果允許這些指令執(zhí)行事務(wù)處理地和 形成的跟蹤條目,并且隨后中止事務(wù),則在控制寄存器12中的跟蹤表格指針將被向前,但 是向跟蹤表格的存儲將被丟棄。這將在跟蹤表格中留下不一致的間隙;因此,在指令將形成 跟蹤條目的情況下限制該指令。
[0297] 當(dāng)CPU在事務(wù)執(zhí)行模式中時,它是模型相關(guān)的,而不論是否限制下面的指 令:CIPHER MESSAGE ;CIPHER MESSAGE WITH CFB ;CIPHER MESSAGE WITH CHAINING ; CIPHER MESSAGE WITH COUNTER ;CIPHER MESSAGE WITH OFB ;⑶MPRESSION CALL ; COMPUTE INTERMEDIATE MESSAGE DIGEST ;⑶MPUTE LAST MESSAGE DIGEST ;⑶MPUTE MESSAGE AUTHENTICATION CODE ;CONVERT UNIC0DE-16T0 UNICODE-32 ;CONVERT UNIC0DE-16T0 UNICODE-8 !CONVERT UNIC0DE-32T0 UNICODE-16 !CONVERT UNIC0DE-32T0 UNICODE-8 ;⑶NVERT UNIC0DE-8T0 UNI⑶DE-16 ;⑶NVERT UNIC0DE-8T0 UNICODE-32 ; PERFORM CRYPTOGRAPHIC COMPUTATION ;RUNHME INSTRUMENTATION OFF ;以及,RUNTIME INSTRUMENTATION ON。
[0298] 上面的指令的每一個或者當(dāng)前被硬件協(xié)處理器實現(xiàn),或者已經(jīng)在過去的機器中, 并且因此被看作受限。
[0299] 當(dāng)有效允許AR修改(A)控件是0時,限制下面的指令:COPY ACCESS ;L0AD ACCESS MULTIPLE ;L0AD ADDRESS EXTENDED ;以及,SET ACCESS。
[0300] 上面的指令的每一個使得修改訪問寄存器的內(nèi)容。如果在事務(wù)控制指令中的A控 件是〇,則該程序已經(jīng)明確地指示,不允許訪問寄存器修改。
[0301] 當(dāng)有效允許浮點操作(F)控件是0時,浮點指令被限制。
[0302] 在特定情況下,可以限制下面的指令:EXTRACT CPU TME EXTRACT PSW ;ST0RE CLOCK ;STORE CLOCK EXTENDED ;以及,STORE CLOCK FAST。
[0303] 上面的指令的每一個受到在解釋執(zhí)行狀態(tài)描述中的增強控件的支配。如果管理程 序已經(jīng)對于這些指令設(shè)置了中斷控件,則可能因為管理程序?qū)崿F(xiàn)方式而延長它們的執(zhí)行; 因此,如果中斷出現(xiàn),則它們被看作受限。
[0304] 當(dāng)因為受限指令的嘗試執(zhí)行導(dǎo)致未約束事務(wù)被中止時,在事務(wù)診斷塊中的事務(wù)中 止代碼被設(shè)置為11 (受限指令),并且條件代碼被設(shè)置為3,除了下面的部分:當(dāng)因為否咱導(dǎo) 致特權(quán)的操作異常的指令的嘗試執(zhí)行導(dǎo)致中止未約束事務(wù)時,不可預(yù)測的是,中止代碼是 否被設(shè)置為11 (受限指令)或4(源自特權(quán)操作程序中斷的識別的未過濾程序中斷)。當(dāng) 因為當(dāng)在M1字段中的代碼是6或7時的PREFETCH DATA (RELATIVE LONG)或當(dāng)M3字段是0 并且在R1字段中的代碼是6或7時的STORE CHARACTERS UNDER MASK HIGH的嘗試執(zhí)行導(dǎo) 致未約束事務(wù)被中止時,不可預(yù)測的是,中止代碼是否被設(shè)置為11 (受限指令)或16 (高速 緩存其他)。當(dāng)因為MONITOR CALL的嘗試執(zhí)行導(dǎo)致將未約束事務(wù)中止并且監(jiān)控器事件條件 和指定異常條件兩者都存在時,不可預(yù)測的是,中止代碼是否被設(shè)置為11或4,或者如果程 序中斷被過濾,則是否被設(shè)置為12。
[0305] 可以在被約束事務(wù)中限制另外的指令。雖然這些指令當(dāng)前未被定義為在未約束事 務(wù)中被限制,但是可以在未來的處理器上的未約束事務(wù)中在特定情況下限制它們。
[0306] 可以在未來處理器上的事務(wù)執(zhí)行模式中允許特定的受限指令。因此,程序不應(yīng)當(dāng) 依賴于因為受限指令的嘗試執(zhí)行導(dǎo)致中止的事務(wù)。TRANSACTION ABORT指令應(yīng)當(dāng)用于可靠 地使得事務(wù)被中止。
[0307] 在未約束事務(wù)中,程序應(yīng)當(dāng)提供替代的非事務(wù)代碼路徑,以容納因為受限指令導(dǎo) 致中止的事務(wù)。
[0308] 在運行中,當(dāng)事務(wù)嵌套深度是0時,導(dǎo)致條件代碼0的事務(wù)開始(TBEGIN)指令的 執(zhí)行使得CPU進入未約束事務(wù)執(zhí)行模式。當(dāng)事務(wù)嵌套深度是0時,導(dǎo)致條件代碼0的被約 束的事務(wù)開始(TBEGINC)指令的執(zhí)行使得CPU進入被約束事務(wù)執(zhí)行模式。
[0309] 除了另外明確地指示,索引非事務(wù)執(zhí)行的所有規(guī)則也適用于事務(wù)執(zhí)行。下面是在 CPU在事務(wù)執(zhí)行模式中的同時的處理的另外的特性。
[0310] 當(dāng)CPU在未約束事務(wù)執(zhí)行模式中時,導(dǎo)致條件代碼0的事務(wù)開始指令的執(zhí)行使得 (PU保持在未約束事務(wù)執(zhí)行模式中。
[0311] 如CPU所觀察,在事務(wù)執(zhí)行模式中進行的獲取和存儲與在不在事務(wù)執(zhí)行模式中的 同時進行的那些不是不同。如其他CPU和I/O子系統(tǒng)所觀察,在CPU在事務(wù)執(zhí)行模式中的 同時進行的所有存儲器操作數(shù)訪問看起來是單個塊同時訪問。即,對于在半字、字、雙字或 四倍長字內(nèi)的所有字節(jié)的訪問被指定為看起來是塊同時的,如其他CPU和I/O (例如,信道) 程序所觀察。半字、字、雙字或四倍長字在該部分中被稱為塊。當(dāng)獲取類型參考被指定為看 起來在塊內(nèi)是同時的時,在正在獲取在塊中包含的字節(jié)的時間期間不允許由另一個CPU或 I/O程序?qū)τ趬K的存儲訪問。當(dāng)存儲類型參考被指定為看起來在塊內(nèi)同時時,在塊內(nèi)的字節(jié) 正在被存儲的時間期間另一個CPU或I/O程序不允許對于塊的訪問,或者是獲取或者是存 儲。
[0312] 對于指令的存儲訪問和DAT和ART (訪問寄存器表格)表格獲取遵循非事務(wù)規(guī)則。
[0313] CPU通過TRANSACTION END (事務(wù)結(jié)束)指令正常地離開事務(wù)執(zhí)行模式,該指令使 得事務(wù)嵌套深度轉(zhuǎn)換為〇,在該情況下,事務(wù)完成。
[0314] 當(dāng)CPU通過TRANSACTION END (事務(wù)結(jié)束)指令的完成離開事務(wù)執(zhí)行模式時,當(dāng)在 事務(wù)執(zhí)行模式中的同時進行的所有存儲被提交;即,存儲看起來作為單個塊同時操作而出 現(xiàn),如其他CPU和I/O子系統(tǒng)所觀察。
[0315] 下面提供關(guān)于與被約束和未約束事務(wù)相關(guān)聯(lián)的處理的另外的細節(jié),該處理包括與 方把捏經(jīng)由TBEGINC和TBEGIN棄大相關(guān)聯(lián)的處理。
[0316] 在一個示例中,與經(jīng)由例如TBEGINC啟動被約束事務(wù)相關(guān)聯(lián)的處理如下:
[0317] ?如果已經(jīng)在被約束的TX模式中,識別事務(wù)被約束的異常。
[0318] ?如果當(dāng)前TND (事務(wù)嵌套深度)>0,執(zhí)行進行,就像未約束事務(wù)那樣
[0319] 〇被有效F控件被設(shè)置為0
[0320] 〇有效PIFC不變
[0321] 〇允許外部未約束TX調(diào)用可以或可以不使用被約束TX的服務(wù)功能。
[0322] ?如果當(dāng)前 TND = 0 :
[0323] 〇事務(wù)診斷塊地址無效
[0324] _在中止時不存儲指令指定的TDB
[0325] 〇事務(wù)中止PSW被設(shè)置為TBEGINC的地址
[0326] _不是下一個順序指令
[0327] 〇被在程序不可訪問的模型相關(guān)位置中存儲的GRSM指定的通用寄存器對
[0328] 〇(從仏操作數(shù))選用地形成的事務(wù)權(quán)標(biāo)。事務(wù)權(quán)標(biāo)是事務(wù)的標(biāo)識符。它可以 等于存儲器操作數(shù)地址或另一個專利。
[0329] ?有效A = TBEGINC和任何外部A
[0330] ?遞增 TND
[0331] 〇如果TND從0轉(zhuǎn)換為1,則CPU進入被約束的TX模式
[0332] 〇否則,CPU保持在未約束的TX模式中
[0333] ?指令使用CCO完成
[0334] ?異常:
[0335] 〇如果B1字段不是0,指定異常(PIC(程序中斷代碼)0006)
[0336] 〇如果事務(wù)執(zhí)行控件(CR0. 8)是0,特殊操作異常(PIC十六進制0013)
[0337] 〇如果在被約束的TX模式中被發(fā)出,事務(wù)約束異常(PIC十六進制0018)
[0338] 〇如果未安裝被約束事務(wù)執(zhí)行設(shè)施,操作異常(PIC 0001)
[0339] 〇如果指令是執(zhí)行類型指令的目標(biāo),執(zhí)行異常(PIC 0003)
[0340] 〇如果超過嵌套深度,中止代碼13
[0341] ?在被約束事務(wù)中的中止條件:
[0342] 〇中止PSW指向TBEGINC指令
[0343] -不是跟隨它的指令
[0344] -中止條件使得整個TX被重新驅(qū)動
[0345] *沒有失敗路徑
[0346] 〇CPU采取特殊措施來保證在重新驅(qū)動時的成功完成
[0347] 〇假定沒有永久的沖突、中斷或被約束的違反,事務(wù)保證最終的完成。
[0348] ?約束違反
[0349] 〇PIC十六進制0018 _指示事務(wù)約束的違反
[0350] 〇或者,事務(wù)就像未約束那樣運行
[0351] 而且,在一個實施例中,與經(jīng)由例如TBEGIN啟動未約束事務(wù)相關(guān)聯(lián)的處理如下:
[0352] ?如果 TND = O:
[0353] 〇如果B1尹0,從第一操作數(shù)地址設(shè)置的事務(wù)診斷塊地址。
[0354] 〇被設(shè)置為下一個順序指令地址的事務(wù)中止PSW。
[0355] 〇在模型相關(guān)位置中存儲由I2字段指定的通用寄存器對。
[0356] -程序不能直接地可訪問
[0357] ?計算有效PIFC、A和F控件
[0358] 〇有效A = TBEGIN A和任何外部A
[0359] 〇有效F = TBEGIN F和任何外部F
[0360] 〇有效 PIFC = max (TBEGIN PIFC,任何外部 PIFC)
[0361] ?事務(wù)嵌套深度(TND)被遞增
[0362] ?如果TND從0轉(zhuǎn)換為1,則CPU進入事務(wù)執(zhí)行模式
[0363] ?條件代碼被設(shè)置為0
[0364] 〇當(dāng)在TBEGIN后的指令接收控制時:
[0365] -由CCO指示的TBEGIN成功
[0366] -由非零CC指示的中止的事務(wù)
[0367] ?異常:
[0368] 〇如果超過嵌套深度,中止代碼13
[0369] 〇如果B1字段不是零并且不能對于存儲操作訪問存儲器操作數(shù)的,訪問異常(各 個PIC之一),
[0370] 〇如果TBEGIN指令是執(zhí)行類型指令的目標(biāo),執(zhí)行異常(PIC 0003)
[0371] 〇如果未安裝事務(wù)執(zhí)行設(shè)施,操作異常(PIC 0003)
[0372] 〇如果下述的任何一種,PIC 0006
[0373] -PIFC 有效(3 的值)
[0374] _第二操作數(shù)地址不雙字對齊
[0375] 〇如果事務(wù)執(zhí)行控件(CR0. 8)是9, PIC十六進制0013
[0376] 〇如果在被約束的TM模式中發(fā)出,PIC十六進制0018
[0377] 可能因為多種原因隱含地中止事務(wù),或者,可能通過事務(wù)中止指令來明確地中止 事務(wù)。下面描述事務(wù)中止、對應(yīng)的中止代碼和被布置到事務(wù)中止PSW內(nèi)的條件代碼的示例 可能原因。
[0378] 外部中斷:事務(wù)中止代碼被設(shè)置為2,并且在事務(wù)中止PSW中的條件代碼被設(shè)置為 2。事務(wù)中止PSW被存儲為作為外部中斷處理的一部分的外部舊PSW。
[0379] 程序中斷(未過濾):導(dǎo)致中斷的程序異常條件(即,未過濾條件)使得使用代碼 4將事務(wù)中止。對于程序中斷代碼特定地設(shè)置在事務(wù)中止PSW中的條件代碼。事務(wù)中止PSW 被存儲為作為程序中斷處理的一部分的程序舊PSW。
[0380] 否則導(dǎo)致因為操作異常而將事務(wù)中止的指令可以獲得替代的結(jié)果:對于未約束事 務(wù),事務(wù)可以取代使用中止代碼11 (受限指令)中止;對于被約束事務(wù),可以取代操作異常 而識別事務(wù)約束程序中斷。
[0381] 當(dāng)與任何其他未過濾程序異常條件相結(jié)合地識別PER(程序事件記錄)時,條件代 碼被設(shè)置為3。
[0382] 機器查看中斷:事務(wù)中止代碼被設(shè)置為5,并且在事務(wù)中止PSW中的條件代碼被設(shè) 置為2。事務(wù)中止PSW被存儲為作為機器查看中斷處理的一部分的機器查看舊PSW。
[0383] I/O中斷:事務(wù)中止代碼被設(shè)置為6,并且,在事務(wù)中止PSW中的條件代碼被設(shè)置為 2。事務(wù)中止PSW被存儲為作為I/O中斷處理的一部分的I/O舊PSW。
[0384] 獲取溢出:當(dāng)事務(wù)試圖從比CPU支持的更多的位置獲取時檢測到獲取溢出條件。 事務(wù)中止代碼被設(shè)置為7,并且條件代碼被設(shè)置為2或3。
[0385] 存儲溢出:當(dāng)事務(wù)嘗試存儲到比CPU支持的更多的位置時,檢測到存儲溢出條件。 事務(wù)中止代碼被設(shè)置為8,并且條件代碼被設(shè)置為2或3。
[0386] 響應(yīng)于獲取或存儲溢出中止而允許條件代碼是2或3允許CPU指示可能可重試的 情況(例如,條件代碼2指示事務(wù)的重新執(zhí)行可以是生產(chǎn)性的;而條件3不推薦重新執(zhí)行)。
[0387] 獲取沖突:當(dāng)另一個CPU或I/O子系統(tǒng)嘗試存儲到已經(jīng)被這個CPU事務(wù)處理地獲 取的位置內(nèi)時檢測到獲取沖突條件。事務(wù)中止代碼被設(shè)置為9,并且條件代碼被設(shè)置為2。
[0388] 存儲沖突:當(dāng)另一個CPU或I/O子系統(tǒng)嘗試訪問已經(jīng)被這個CPU在事務(wù)執(zhí)行期間 存儲的位置時檢測到存儲沖突條件。事務(wù)中止代碼被設(shè)置為10,并且條件代碼被設(shè)置為2。
[0389] 受限指令:當(dāng)CPU在事務(wù)執(zhí)行模式中時,受限指令的嘗試執(zhí)行使得事務(wù)被中止。事 務(wù)中止代碼被設(shè)置為11,并且條件代碼被設(shè)置為3。
[0390] 當(dāng)CPU在被約束事務(wù)執(zhí)行模式中時,不可預(yù)測的是,受限指令的嘗試執(zhí)行是否導(dǎo) 致因為受限指令導(dǎo)致的事務(wù)約束程序中斷或中止。事務(wù)仍然被中止,但是該中止代碼可以 指示任何一種原因。
[0391] 程序執(zhí)行條件(被過濾):不導(dǎo)致中斷的程序異常條件(即,被過濾的條件)使得 使用事務(wù)中止代碼12來將事務(wù)中止。條件代碼被設(shè)置為3。
[0392] 超過嵌套深度:當(dāng)事務(wù)嵌套深度在該配置的最大可允許值處并且執(zhí)行事務(wù)開始指 令時檢測到超過嵌套深度條件。使用事務(wù)中止代碼13來將事務(wù)中止,并且條件代碼被設(shè)置 為3。
[0393] 高速緩存獲取相關(guān)條件:通過CPU的高速緩存電路來檢測與由事務(wù)獲取的存儲位 置相關(guān)的條件。使用事務(wù)中止代碼14來將事務(wù)中止,并且條件代碼被設(shè)置為2或3。
[0394] 高速緩存存儲相關(guān)條件:通過CPU的高速緩存電路來檢測與由事務(wù)存儲的存儲位 置相關(guān)的條件。使用事務(wù)中止代碼15來將事務(wù)中止,并且條件代碼被設(shè)置為2或3。
[0395] 高速緩存其他條件:通過CPU的高速緩存電路來檢測高速緩存其他條件。使用事 務(wù)中止代碼16來將事務(wù)中止,并且條件代碼被設(shè)置為2或3。
[0396] 在事務(wù)執(zhí)行期間,如果CPU使用被映射到同一絕對地址的不同邏輯地址來訪問指 令或存儲器操作數(shù)時,是否中止事務(wù)是模型相關(guān)的。如果因為使用被映射到同一絕對地址 的不同邏輯地址的訪問導(dǎo)致事務(wù)被中止,則根據(jù)條件來設(shè)置中止代碼14、15或16。
[0397] 其他條件:其他條件是使得事務(wù)中止的由CPU識別的任何其他條件。事務(wù)中止代 碼被設(shè)置為255,并且條件代碼被設(shè)置為2或3。
[0398] 當(dāng)多個配置在同一機器(例如,邏輯分區(qū)或虛擬機)中執(zhí)行時,可能因為在不同的 配置中出現(xiàn)的外部機器查看或I/O中斷導(dǎo)致事務(wù)被中止。
[0399] 雖然上面提供了示例,但是可以提供使用對應(yīng)的中止代碼和條件代碼的事務(wù)中止 的其他原因。例如,原因可以是重啟中斷,其中,事務(wù)中止代碼被設(shè)置為1,并且在事務(wù)中止 PSW中的條件代碼被設(shè)置為2。作為另一個示例,原因可以是管理程序調(diào)用條件,其中,中止 代碼被設(shè)置為3,并且在事務(wù)中止PSW中的條件代碼被設(shè)置為3。其他或不同的示例也是可 能的。
[0400] 注釋:
[0401] 1.該其他條件可能源自下面部分的任何一種:
[0402] ?指令,諸如在z/Architecture中的、由在該配置中的另一個CPU執(zhí)行的COMPARE AND REPLACE DAT TABLE ENTRY, COMPARE AND SWAP AND PURGE, INVALIDATE DAT TABLE ENTRY、INVALIDATE PAGE TABLE ENTRY、其中 NQ 控件是 0 并且 SK 控件是 I 的 PERFORM FRAME MANAGEMENT FUNCTION、、其中 NQ 控件是 0 的 SET STORAGE KEY EXTENDED;條件代碼被設(shè)置 為2。
[0403] ?在CPU上執(zhí)行操作員功能,諸如復(fù)位、重啟或停止或者等同的信號處理器命令。
[0404] ?上面未枚舉的任何其他條件;條件代碼被設(shè)置為2或3
[0405] 2.在其檢測到獲取和存儲沖突的位置可以是在同一高速緩存線內(nèi)的任何位置。
[0406] 3.在特定條件下,CPU可能不能在類似的中止條件之間區(qū)分。例如,不能從相應(yīng)的 獲取或存儲沖突區(qū)分獲取或存儲溢出。
[0407] 4.由CPU進行的多個指令路徑的推測執(zhí)行可能導(dǎo)致因為沖突或溢出條件導(dǎo)致事 務(wù)被中止,即使這樣的條件在概念序列中不出現(xiàn)。在被約束事務(wù)執(zhí)行模式中的同時,CPU可 能暫時禁止推測執(zhí)行,允許事務(wù)嘗試完成,而不推測地檢測這樣的沖突或溢出。
[0408] 當(dāng)多個中止條件適用時,不可預(yù)測CPU報告哪個中止代碼。
[0409] 如上所述,可以隱含地中止或明確地中止事務(wù)。如果CPU在未約束執(zhí)行模式中,則 可以通過事務(wù)中止指令的執(zhí)行來明確地中止事務(wù)。當(dāng)B2字段不是0時通過組合由B2字段 和D2指定的寄存器的內(nèi)容而形成的指令的第二操作數(shù)地址不用于將數(shù)據(jù)尋址;相反,由B2和D2字段指定的地址形成事務(wù)中止代碼,事務(wù)中止代碼在中止處理期間被布置在事務(wù)診斷 塊中。當(dāng)B2字段是0時,完全從D2字段形成第二操作數(shù)地址。第二操作數(shù)地址的地址計算 遵循地址算術(shù)的規(guī)則:在24比特尋址模式中,將比特0-39設(shè)置為0 ;在31比特尋址模式中, 比特0-32被設(shè)置為0。根據(jù)第二操作數(shù)地址的比特53是否分別是0或1,在事務(wù)中止PSW 中的條件代碼被設(shè)置為2或3。
[0410] 當(dāng)事務(wù)中止是執(zhí)行類型指令的目標(biāo)時,抑制操作,并且識別執(zhí)行異常。
[0411] 如果第二操作數(shù)地址在0和255之間,則識別指定異常,并且抑制操作。
[0412] 如果CPU在指令的開始時在事務(wù)執(zhí)行模式中,則識別特殊操作異常,并且抑制操 作。
[0413] 如果CPU在被約束的受限指令中,則識別事務(wù)約束程序異常條件。
[0414] 條件代碼:代碼保持不變。然而,通過隨后的事務(wù)中止處理來設(shè)置事務(wù)中止PSW的 條件代碼。
[0415] 程序異常:
[0416] 籲執(zhí)行
[0417] ?操作(未安裝事務(wù)執(zhí)行設(shè)施)
[0418] ?特殊操作
[0419] ?中斷
[0420] ?事務(wù)約束(因為被限制的指令)
[0421] 注釋:
[0422] 1.如果事務(wù)執(zhí)行控件控制寄存器0的比特8是0,則CPU不能在事務(wù)執(zhí)行模式中; 在這個情況下的事務(wù)中止的嘗試執(zhí)行導(dǎo)致特殊的操作異常。
[0423] 2.對于由CPU隱含地中止的事務(wù)保留中止代碼0-255。如果程序指定指定在事務(wù) 中止指令中的這些代碼的任何一個,則識別指定異常,并且使用結(jié)果產(chǎn)生的中止代碼來將 事務(wù)中止,該結(jié)果產(chǎn)生的中止代碼用于指示程序中斷(代碼4)或程序中斷條件(代碼12)。
[0424] 3?程序中斷進行有效程序中斷過濾控制。
[0425] 4. TABORT的執(zhí)行可以引起高的競爭,其繼而可以導(dǎo)致中止條件。
[0426] 5.在TABORT指令后,程序執(zhí)行在由事務(wù)中止PSW指定的指令處繼續(xù)。
[0427] 圖10匯總了在事務(wù)診斷塊中存儲的示例中止代碼和對應(yīng)的條件代碼(CC)。在圖 10中的說明圖示了一種具體實現(xiàn)方式。其他實現(xiàn)方式和值的編碼是可能的。
[0428] 如圖10中所示,在一個實施例中,對于可能的增強保留中止代碼1、3和17-254。 這樣的增強可能導(dǎo)致條件代碼2或3的設(shè)置。而且,在這個實施例中,中止代碼0被保留, 并且將不被指配到有意義的中止指示。根據(jù)模型,CPU可能不能在特定的中止原因之間區(qū) 分。例如,在所有的情況下,CPU可能不能區(qū)分獲取/存儲溢出和獲取/存儲沖突。
[0429] 通過TABORT或其他來中止(即,異常地結(jié)束)事務(wù)包括執(zhí)行多個步驟。通常,參 考圖11來描述用于中止處理的步驟的示例。如果在是否基于TABORT或其他啟動中止的處 理上存在差別,則在下面的描述中指示它。在一個示例中,處理器(例如,CPU)執(zhí)行圖11的 邏輯。
[0430] 參見圖11,初始,基于TABORT指令或隱含中止的執(zhí)行,提交在CPU在事務(wù)執(zhí)行模式 中的同時進行的非事務(wù)存儲訪問,步驟1100。丟棄在CPU在事務(wù)執(zhí)行模式中的同時進行的 其他存儲(例如,事務(wù)存儲),步驟1102。
[0431] CPU離開事務(wù)執(zhí)行模式,步驟1104,并且隨后的存儲非事務(wù)處理地出現(xiàn)。當(dāng)前的 PSW被替換為事務(wù)中止PSW的內(nèi)容,除了如上所述設(shè)置條件代碼(除了下面的情況之外,其 中,如果TDBA有效,但是該塊不可訪問,則CC = 1),步驟1106。作為在中止處理之后的部 分,處理分支到事務(wù)中止PSW指定的位置以執(zhí)行行為。在其中事務(wù)是被約束事務(wù)的一個示 例中,位置是TBEGINC指令,并且行為是那個指令的重新執(zhí)行;并且在其中事務(wù)是未約束事 務(wù)的另一個示例中,位置是在TBEGIN后的指令,并且行為是那個指令的執(zhí)行,其可以例如 是到中止處理器的分支。
[0432] 接下來,進行確定關(guān)于事務(wù)診斷塊地址是否有效,查詢1108。當(dāng)事務(wù)診斷塊地址有 效時,向TBEGIN指定的事務(wù)診斷塊內(nèi)存儲用于識別中止的原因的診斷信息和通用寄存器 的內(nèi)容,步驟1110。參考事務(wù)診斷塊上述了所存儲的TDB字段和在其下存儲它們的條件。
[0433] 如果事務(wù)診斷塊地址有效,但是該塊已經(jīng)變得不可訪問,則在最外TBEGIN指令的 執(zhí)行之后,不訪問該塊,并且條件代碼1適用。
[0434] 對于因為導(dǎo)致中斷的程序中斷條件導(dǎo)致中止的是,存儲程序中斷TDB。
[0435] 返回到查詢1108,如果事務(wù)診斷塊地址不有效,則根據(jù)中止的原因,不存儲 TBEGIN指定的TDB,并且條件代碼2或3適用。
[0436] 除了上面的內(nèi)容之外,事務(wù)嵌套深度被設(shè)置得等于0,步驟1112。而且,恢復(fù)被 追瓦TBEGIN指令指定存儲的任何通用寄存器,步驟1114。當(dāng)事務(wù)中止時,不恢復(fù)由最外 TBEGIN指令不指定為存儲的通用寄存器對。
[0437] 而且,執(zhí)行串行化功能,步驟1116。串行化功能或操作包括在該概念上隨后的存 儲器訪問(和相關(guān)的參考比特和改變比特設(shè)置)出現(xiàn)之前,CPU完成所有概念上在前的存 儲器訪問(病人,對于z/Architecture,作為示例,相關(guān)的參考比特和改變比特設(shè)置),如其 他CPU和I/O子系統(tǒng)所觀察。串行化影響對于存儲器和對于存儲器鍵的所有CPU訪問的持 續(xù),除了與ART表格條目和DAT表格條目獲取相關(guān)聯(lián)的那些之外。
[0438] 如CPU在事務(wù)執(zhí)行模式中觀察,串行化正常地運行(如上所述)。如其他⑶和1/ 0子系統(tǒng)觀察,或者作為將事務(wù)嵌套深度遞減為0 (正常結(jié)束)的事務(wù)結(jié)束指令的結(jié)果或者 作為事務(wù)被中止的結(jié)果,當(dāng)CPU離開事務(wù)執(zhí)行模式時,在CPU在事務(wù)執(zhí)行模式中的同時執(zhí)行 的串行化操作出現(xiàn)。
[0439] 對于除了由TABORT啟動的之外的中止處理,如果因為導(dǎo)致中斷的異常條件導(dǎo)致 事務(wù)被中止,查詢1118,則在與中斷的類型對應(yīng)的所指配存儲器位置處存儲與中斷相關(guān)聯(lián) 的中斷代碼或參數(shù),步驟1120。而且,如上設(shè)置的當(dāng)前PSW被存儲到中斷舊PSW內(nèi),步驟 1122。其后,或者如果因為導(dǎo)致中斷的異常條件導(dǎo)致事務(wù)不中止,則指令以條件代碼0結(jié) 束。
[0440] 除了上面之外,在用于z/Architecture的解釋執(zhí)行的一個實施例中,當(dāng)CPU在事 務(wù)執(zhí)行模式中,并且通常導(dǎo)致截取代碼4、12、44、56、64、68或72的客戶條件出現(xiàn)時,截取不 出現(xiàn)。而是,CPU保持在解釋執(zhí)行模式中,并且在客戶指示中止條件如下:
[0441] ?對于未約束事務(wù),因為受限指令導(dǎo)致事務(wù)被中止(中止代碼11)。如果檢測到同 時PER事件和對于PER使能CPU,則程序中斷以中斷代碼十六進制0280來出現(xiàn)。
[0442] ?對于被約束事務(wù),識別事務(wù)約束異常。如果檢測到同時PER事件和對于PER使 能CPU,則程序中斷以中斷代碼十六進制0298來出現(xiàn)。
[0443] 當(dāng)因為程序中斷條件導(dǎo)致事務(wù)被中止時,程序中斷過濾可以禁止中斷的呈現(xiàn)。對 于可以導(dǎo)致截取的程序中斷,過濾也禁止截取。
[0444] 對于除了由TABORT啟動的之外的中止處理,對于所有其他的截取條件,使用中止 代碼255和條件代碼2來將事務(wù)中止。
[0445] 另外,在z/Architecture的一個實施例中,下面的部分適用:
[0446] 1.對于除了由TABORT啟動的之外的中止處理,在事務(wù)執(zhí)行模式中的同時的 SUPERVISOR CALL指令的嘗試執(zhí)行導(dǎo)致因為受限指令導(dǎo)致事務(wù)被中止。SVC中斷在該情況 下不出現(xiàn)。
[0447] 2.當(dāng)事務(wù)中止時不恢復(fù)訪問寄存器、浮點寄存器、浮點控制寄存器和未被最外事 務(wù)開始指令的通用寄存器存儲掩蔽指定的任何通用寄存器。
[0448] 3.當(dāng)CPU在未約束事務(wù)執(zhí)行模式中時,事務(wù)中止PSW的指令地址按照最外事務(wù)開 始(TBEGIN)指令指定存儲器位置。在該位置處的指令的序列應(yīng)當(dāng)能夠容納所有四個條件 代碼,即使失敗的事務(wù)僅使得設(shè)置代碼1、2和3。條件代碼含義的總結(jié)如下:
[0449] CC 含義
[0450] 0成功地啟動事務(wù)
[0451] 1因為其他條件導(dǎo)致事務(wù)被中止。不能存儲事務(wù)診斷塊。事務(wù)的重新執(zhí)行不可能 是生產(chǎn)性的。
[0452] 2因為瞬時條件導(dǎo)致事務(wù)被中止。事務(wù)的重新執(zhí)行可以是生產(chǎn)性的。
[0453] 3因為永久條件導(dǎo)致事務(wù)被中止。在當(dāng)前條件下的事務(wù)的重新執(zhí)行不可能是生產(chǎn) 性的。如果條件改變,例如,重新布置被事務(wù)處理地操縱的數(shù)據(jù),則重新執(zhí)行可以更有生產(chǎn) 性。
[0454] 對于除了由TABORT啟動的之外的中止處理,當(dāng)CPU在被約束的事務(wù)執(zhí)行模式中 時,事務(wù)中止PSW的指令地址指定事務(wù)開始被約束(TBEGINC)指令。通過定義,被約束事務(wù) 不提供中止處理器例程(而不是返回到TBEGINC指令)。
[0455] 4.當(dāng)使用嵌套事務(wù)時,內(nèi)部事務(wù)可以使得否則不在最外事務(wù)中出現(xiàn)的中止條件出 現(xiàn)。這樣的條件的示例包括下面的部分:
[0456] ?內(nèi)部事務(wù)可以發(fā)出事務(wù)中止指令,用于指定意料之外的中止代碼。
[0457] ?該內(nèi)部事務(wù)可以導(dǎo)致意料之外的程序中斷條件。
[0458] ?內(nèi)部事務(wù)可以過濾未被最外事務(wù)過濾的程序中斷條件,因此導(dǎo)致不同的中止代 碼。
[0459] 任何事務(wù)中止處理器例程能夠適應(yīng)于在內(nèi)部事務(wù)內(nèi)出現(xiàn)的意料之外中止和異常 條件,即使它們從未在最外事務(wù)中出現(xiàn)。
[0460] 在事務(wù)中止時的程序中斷過濾
[0461] 當(dāng)在事務(wù)執(zhí)行模式中的同時識別的程序異常條件導(dǎo)致事務(wù)被中止。對于未約束事 務(wù),程序可以選用地指定某些程序異常條件不導(dǎo)致中斷。該行為被稱為程序中斷過濾。在 一個實施例中,程序中斷過濾受到下面的控制:
[0462] ?事務(wù)執(zhí)行程序中斷過濾覆蓋,控制寄存器0的比特9。
[0463] ?有效程序中斷過濾控件(PIFC)。
[0464] ?出現(xiàn)的異常條件。
[0465] 當(dāng)事務(wù)執(zhí)行程序中斷過濾覆蓋是0時,程序指定要通過程序中斷過濾控件(PIFC) 事務(wù)開始(TBEGIN)指令的I2字段的比特14-15來過濾哪些類別的異常條件。有效PIFC是 在用于當(dāng)前的嵌套水平和用于所有外層的TBEGIN指令中的PIFC中的最高值。
[0466] 對于大多數(shù)程序異常條件,存在對于異常條件定義并且使用處理器存儲的對應(yīng)的 事務(wù)執(zhí)行類別。作為示例,有效PIFC和事務(wù)執(zhí)行類別交互如下:
[0467] 有效
[0468] PIFC基于事務(wù)執(zhí)行類別的結(jié)果
[0469] 0不出現(xiàn)程序中斷過濾。具有類1、2或3的異常條件導(dǎo)致中斷
[0470] 1有限的程序中斷過濾出現(xiàn)。具有類1或2的異常條件導(dǎo)致中斷;具有類3的條 件不導(dǎo)致中斷。
[0471] 2中等程序中斷過濾出現(xiàn)。僅具有類1的異常條件導(dǎo)致中斷;具有類2或3的條 件不導(dǎo)致中斷。
[0472] 被約束事務(wù)開始(TBEGINC)指令不提供明確地程序中斷過濾控件;對于TBEGINC 假定暗示的0的PIFC。因此,當(dāng)CPU作為TBEGINC的結(jié)果進入被約束的事務(wù)執(zhí)行模式時, 有效PIFC是0 ;當(dāng)CPU作為TBEGINC的結(jié)果保持在未約束事務(wù)執(zhí)行模式中時,有效PIFC不 變。
[0473] 圖12匯總了有效PIFC、程序中斷過濾的類型、事務(wù)執(zhí)行類別和異常是否導(dǎo)致中斷 的關(guān)系的一個示例。另外,圖13A-13B列出了程序異常條件、對應(yīng)的事務(wù)執(zhí)行類別和當(dāng)因為 程序中斷條件導(dǎo)致事務(wù)被中止時設(shè)置的條件代碼的一個示例。
[0474] 當(dāng)程序異常條件不導(dǎo)致中斷(即,條件被過濾)時,不安裝程序新PSW,并且不存 儲與程序中斷相關(guān)聯(lián)的所指配存儲器位置;這些位置包括程序中斷標(biāo)識、斷開的事件地址、 程序舊PSW和當(dāng)適用時的數(shù)據(jù)異常代碼、PER代碼、PER地址、異常訪問標(biāo)識、PER訪問標(biāo)識、 操作數(shù)訪問標(biāo)識和轉(zhuǎn)換異常標(biāo)識。當(dāng)程序異常條件導(dǎo)致中斷(將,條件未被過濾)時,象通 常那樣存儲與程序中斷相關(guān)聯(lián)的大多數(shù)指配的存儲器位置;然而,在程序中斷標(biāo)識的比特 13-14中的指令長度代碼對應(yīng)于在其檢測到異常條件的指令,并且將事務(wù)中止PSW存儲為 程序舊PSW。
[0475] 當(dāng)與任何其他被過濾的程序異常條件相結(jié)合地識別PER事件時,在一個示例中, 下面的部分適用:
[0476] ?用于PEWR事件的事務(wù)類別和條件代碼適用。在該情況下,不能過濾PER異常條 件,并且,條件代碼被設(shè)置為3。
[0477] ?在前綴區(qū)域中的程序中斷代碼不包括非PER異常條件,也不在前綴區(qū)域存儲任 何其他非PER程序中斷參數(shù)。
[0478] 當(dāng)事務(wù)執(zhí)行程序中斷過濾覆蓋(控制寄存器0的比特9)是1時,程序執(zhí)行條件不 進行程序中斷過濾。在該情況下,執(zhí)行進行得就像有效PIFC是0。
[0479] 在一個實施例中,在指令的獲取期間識別的訪問異常條件不進行程序中斷過濾。 在這些情況下,異常條件導(dǎo)致事務(wù)被中止和程序中斷兩者。
[0480] 除了表示中斷的引起的程序中斷代碼之外,在真實位置142-143處的程序中斷代 碼的比特6被設(shè)置為1,用于指示在事務(wù)執(zhí)行期間出現(xiàn)的程序中斷。如上所述設(shè)置程序舊 PSW的字段。
[0481] 而且,在一個實施例中:
[0482] 1.否則引起監(jiān)控器事件的MONITOR CALL指令是受限指令。因此,監(jiān)控器事件程 序中斷不在CPU在事務(wù)執(zhí)行模式中的同時出現(xiàn),因此,當(dāng)事務(wù)被中止時不存儲在真實位置 176-183處的監(jiān)控器代碼。
[0483] 類似地,限制在具有不適用的事務(wù)類別(_)的在圖13A-13B中列出的任何其他程 序異常條件和條件代碼不能作為引起這些異常的指令出現(xiàn)。因此,在前綴區(qū)域中的真實位 置中不存儲程序中斷標(biāo)識,也不存儲其他輔助程序中斷信息的任何一個。
[0484] 2.下面的示例說明了用于啟動和結(jié)束事務(wù)的指令。注意,如果事務(wù)被中止,則在一 個示例中,在最后分支到在標(biāo)簽無重試處的非事務(wù)落回路徑它被重試幾次。

【權(quán)利要求】
1. 一種用于促進在計算環(huán)境中的處理的方法,所述方法包括: 處理器中止在所述計算環(huán)境內(nèi)執(zhí)行的事務(wù)的執(zhí)行,所述事務(wù)有效地延遲向主存儲器提 交事務(wù)存儲,直到所選擇的事務(wù)的完成,所述中止在完成之前結(jié)束所述事務(wù)的執(zhí)行;并且, 基于中止所述事務(wù)的執(zhí)行,識別要恢復(fù)的一個或多個選擇的寄存器,所述一個或多個 選擇的寄存器少于在與所述事務(wù)相關(guān)聯(lián)的事務(wù)處理中使用的所述寄存器的全部。
2. 根據(jù)權(quán)利要求1所述的方法,其中,所述方法進一步包括恢復(fù)所述一個或多個選擇 的寄存器。
3. 根據(jù)在前的權(quán)利要求的任何一項所述的方法,其中,在啟動所述事務(wù)的指令中或者 在啟動另一個事務(wù)的指令中指示所述一個或多個選擇的寄存器,所述另一個事務(wù)和所述事 務(wù)是嵌套的指令。
4. 根據(jù)在前的權(quán)利要求的任何一項所述的方法,其中,所述方法進一步包括:基于中 止提交非事務(wù)存儲。
5. 根據(jù)在前的權(quán)利要求的任何一項所述的方法,其中,所述方法進一步包括:基于所 述中止進行到事務(wù)中止程序狀態(tài)字指定的位置以執(zhí)行動作。
6. 根據(jù)權(quán)利要求5所述的方法,其中,所述事務(wù)包括被約束事務(wù),并且其中,所述事務(wù) 中止程序狀態(tài)字指定的位置包括所述被約束事務(wù)的開始。
7. 根據(jù)權(quán)利要求5所述的方法,其中,所述事務(wù)包括未約束事務(wù),并且其中,所述事務(wù) 中止程序狀態(tài)字指定的位置包括在所述未約束事務(wù)的開始后的指令。
8. 根據(jù)在前的權(quán)利要求的任何一項所述的方法,其中,基于中止執(zhí)行,所述方法進一步 包括設(shè)置條件代碼,所述條件代碼用于指示是否推薦所述事務(wù)的重新執(zhí)行。
9. 根據(jù)在前的權(quán)利要求的任何一項所述的方法,其中,基于中止執(zhí)行,提供中止代碼, 所述中止代碼用于指示用于中止執(zhí)行的原因。
10. 根據(jù)在前的權(quán)利要求的任何一項所述的方法,其中,所述方法進一步包括:基于中 止執(zhí)行來存儲診斷信息。
11. 根據(jù)在前的權(quán)利要求的任何一項所述的方法,其中,所述中止基于事務(wù)沖突的檢 測。
12. -種用于用于促進在計算環(huán)境中的處理的計算機系統(tǒng),所述計算機系統(tǒng)包括: 存儲器;以及, 與所述存儲器進行通信的處理器,其中,所述計算機系統(tǒng)被配置為執(zhí)行一種方法,所述 方法包括: 處理器中止在所述計算環(huán)境內(nèi)執(zhí)行的事務(wù)的執(zhí)行,所述事務(wù)有效地延遲向主存儲器提 交事務(wù)存儲,直到所選擇的事務(wù)的完成,所述中止在完成之前結(jié)束所述事務(wù)的執(zhí)行;并且, 基于中止所述事務(wù)的執(zhí)行,識別要恢復(fù)的一個或多個選擇的寄存器,所述一個或多個 選擇的寄存器少于在與所述事務(wù)相關(guān)聯(lián)的事務(wù)處理中使用的所述寄存器的全部。
13. 根據(jù)權(quán)利要求12所述的計算機系統(tǒng),其中,所述方法進一步包括恢復(fù)所述一個或 多個選擇的寄存器,并且基于所述中止提交非事務(wù)存儲。
14. 根據(jù)權(quán)利要求12或13的任何一項所述的計算機系統(tǒng),其中,在啟動所述事務(wù)的指 令中或者在啟動另一個事務(wù)的指令中指示所述一個或多個選擇的寄存器,所述另一個事務(wù) 和所述事務(wù)是嵌套的指令。
15. 根據(jù)權(quán)利要求12至14的任何一項所述的計算機系統(tǒng),其中,所述方法進一步包括: 基于所述中止進行到事務(wù)中止程序狀態(tài)字指定的位置以執(zhí)行行為,并且其中,所述事務(wù)包 括被約束事務(wù),并且其中,所述事務(wù)中止程序狀態(tài)字指定的位置包括所述被約束事務(wù)的開 始。
16. 根據(jù)權(quán)利要求12至15的任何一項所述的計算機系統(tǒng),其中,所述方法進一步包括: 基于所述中止進行到事務(wù)中止程序狀態(tài)字指定的位置以執(zhí)行行為,并且其中,所述事務(wù)包 括未約束事務(wù),并且其中,所述事務(wù)中止程序狀態(tài)字指定的位置包括在所述未約束事務(wù)的 開始后的指令。
17. 根據(jù)權(quán)利要求12至16的任何一項所述的計算機系統(tǒng),其中,所述方法進一步包括 設(shè)置條件代碼,所述條件代碼用于指示是否推薦所述事務(wù)的重新執(zhí)行,并且提供中止代碼, 所述中止代碼用于指示用于中止執(zhí)行的原因。
18. -種計算機程序產(chǎn)品,用于在計算環(huán)境中執(zhí)行與事務(wù)執(zhí)行相關(guān)聯(lián)的處理,所述計算 機程序產(chǎn)品包括: 計算機可讀存儲介質(zhì),其能夠被處理電路讀取,并且存儲用于由用于執(zhí)行根據(jù)權(quán)利要 求1至11的任何一項所述的方法的所述處理電路執(zhí)行的指令。
19. 一種計算機程序,其被存儲在計算機可讀介質(zhì)上并且能夠被安裝到數(shù)字計算機的 內(nèi)部存儲器內(nèi),包括軟件代碼部分,所述軟件代碼部分當(dāng)所述程序在計算機上運行時用于 執(zhí)行權(quán)利要求1至11的任何一項所述的方法。
【文檔編號】G06F9/30GK104335164SQ201380027489
【公開日】2015年2月4日 申請日期:2013年5月21日 優(yōu)先權(quán)日:2012年6月15日
【發(fā)明者】D.格雷納, C.雅各比, T.斯萊格爾 申請人:國際商業(yè)機器公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1