促进事务重复中止之后的事务完成的方法和计算机系统的制作方法

文档序号:6504247阅读:170来源:国知局
促进事务重复中止之后的事务完成的方法和计算机系统的制作方法
【专利摘要】本发明涉及一种促进事务重复中止之后的事务完成的方法和计算机系统。通过采取操作以增加成功执行事务的机会,促进计算环境中的事务处理。维护提供事务中止频率的计数的计数器。每次中止所述事务时,所述计数器递增计数,并且当成功完成所述事务,或者出现导致不再重新执行所述事务的中断时,将所述计数器重置为0。如果所述计数达到阈值,则呈现中断并且事务执行不成功。但是,在所述计数达到所述阈值之前,可以采取多个操作以增加成功执行所述事务的机会。这些操作包括要在执行所述事务的处理器中执行的操作,和/或要针对冲突处理器执行的操作。
【专利说明】促进事务重复中止之后的事务完成的方法和计算机系统
【技术领域】
[0001]一个或多个方面一般地涉及多处理计算环境,具体地说,涉及此类计算环境中的
事务处理。
【背景技术】
[0002]多处理器编程中的一项持久挑战是多个中央处理单元(CPU)更新同一存储位置的挑战。许多更新存储位置的指令,甚至包括简单的逻辑运算(例如“与”),都通过多次访问位置进行更新。例如,首先取回存储位置,然后存储回更新后的结果。
[0003]为使多个CPU安全地更新同一存储位置,序列化对位置的访问。一个指令一TESTAND SET指令(在国际商业机器公司以前提供的S/360架构中引入)一提供存储位置的互锁更新。互锁更新意味着如其它CPU和输入/输出(I/O)子系统(例如,通道子系统)所观察到的那样,该指令的整个存储访问看似以原子方式发生。随后,国际商业机器公司提供的S/370架构引入了 COMPARE AND SWAP和COMPARE DOUBLE AND SWAP指令,它们提供执行互锁更新的更完善的手段,并允许实现通常所谓的锁字(或信号量(semaphore ))。最近增加的指令提供了附加互锁更新能力,包括COMPARE AND SWAP AND PURGE和COMPARE AND SWAPAND STORE。但是,所有这些指令仅为单个存储位置提供互锁。
[0004]更复杂的程序技术可能需要多个存储位置的互锁更新,例如将元素添加到双向链表时。在此类操作中,正向和反向指针看似同时更新,如其它CPU和1/0子系统所观察到的那样。为了实现此类多位置更新,强制程序使用单独的单一序列化点,例如锁字。但是,锁字可能提供比所需级别粗略得多的序列化;例如,即使只是更新两个元素,锁字也可能序列化包含数百万个元素的整个队列。程序可以构造数据以使用更细粒度的序列化(例如,锁点层次结构),但这会带来其它问题,例如潜在的死锁情况(如果违反层次结构)和恢复问题(如果程序在持有一个或多个锁时遇到错误,或者如果无法获得锁)。
[0005]除了上述情况,还存在多种情形,其中程序可以执行指令序列,这些指令可能导致也可能不导致异常条件。如果不出现异常条件,则程序继续;但是,如果识别到异常,则程序可以采取更正操作以消除异常条件。作为一个实例,Java可以例如在推测性执行、函数的部分内联和/或指针空值检查的重新排序中利用此类执行。
[0006]在传统的操作系统环境(例如国际商业机器公司提供的ζ/OS及其先前版本)中,程序建立恢复环境以便拦截可能遇到的任何程序异常条件。如果程序没有拦截异常,则操作系统通常针对操作系统未准备处理的异常,异常地终止程序。建立和利用此类环境成本高昂并且复杂。

【发明内容】

[0007]通过提供一种用于促进计算环境中的处理的计算机程序产品,克服了现有技术的缺点并提供了优点。所述计算机程序产品包括计算机可读存储介质,所述计算机可读存储介质可由处理电路读取并存储由所述处理电路运行以执行一种方法的指令。所述方法例如包括:由所述计算环境的处理器跟踪在所述处理器内执行的事务的中止次数,所述事务有效地延迟将事务性存储提交到主存储器,直到完成选定事务,并且所述跟踪采用所述处理器内的计数器来跟踪所述中止次数;判定所述事务是否已成功完成,并且根据所述事务成功完成,自动将所述计数器重置为预定值;以及根据所述事务中止,基于以下情况之一而自动将所述计数器重置为所述预定值:所述计数器达到所述事务的阈值中止次数,从而导致针对所述事务呈现中断;或者呈现所述事务的中断,其中未重新执行所述事务。
[0008]在此还描述并要求保护涉及一个或多个方面的方法和系统。此外,在此还描述并可要求保护涉及一个或多个方面的服务。
[0009]通过在此描述的技术实现其它特性和优点。在此详细描述了其它实施例和方面,并且这些实施例和方面被视为要求保护的发明的一部分。
【专利附图】

【附图说明】
[0010]在说明书结尾处的权利要求中具体指出并明确要求保护了一个或多个方面。从下面结合附图的详细描述,上述和其它目标、特性和优点将变得显而易见,这些附图是:
[0011]图1示出了计算环境的一个实施例;
[0012]图2A 不出了 Transaction Begin (TBEGIN)指令的一个实例;
[0013]图2B示出了图2A的TBEGIN指令的字段的进一步细节的一个实施例;
[0014]图 3A 不出了 Transaction Begin constrained (TBEGINC)指令的一个实例;
[0015]图3B示出了图3A的TBEGINC指令的字段的进一步细节的一个实施例;
[0016]图4 不出了 Transaction End (TEND)指令的一个实例;
[0017]图5 不出了 Transaction Abort (TABORT)指令的一个实例;
[0018]图6示出了嵌套事务的一个实例;
[0019]图7 示出 了 N0NTRANSACT10NAL STORE 指令的一个实例;
[0020]图 8 示出了 EXTRACT TRANSACTION NESTING DEPTH (ETND)指令的一个实例;
[0021]图9示出了事务诊断块的一个实例;
[0022]图10示出了实例中止原因以及关联的中止码和条件码;
[0023]图11示出了与执行TBEGINC指令关联的逻辑的一个实施例;
[0024]图12示出了与执行TBEGIN指令关联的逻辑的一个实施例;
[0025]图13示出了与执行TEND指令关联的逻辑的一个实施例;
[0026]图14示出了与事务中止处理关联的逻辑的一个实施例;
[0027]图15示出了与采取操作以促进完成受限事务关联的逻辑的一个实施例;
[0028]图16A-16C示出了用于在事务中止之后促进事务执行的逻辑的实施例;
[0029]图17A-17B示出了将队列元素插入队列元素的双向链表的实例;
[0030]图18示出了计算机程序产品的一个实施例;
[0031]图19示出了主计算机系统的一个实施例;
[0032]图20示出了计算机系统的另一实例;
[0033]图21示出了包括计算机网络的计算机系统的另一个实例;
[0034]图22示出了计算机系统的各种元素的一个实施例;
[0035]图23A示出了图22的计算机系统的执行单元的一个实施例;[0036]图23B示出了图22的计算机系统的分支单元的一个实施例;
[0037]图23C示出了图22的计算机系统的加载/存储单元的一个实施例;以及
[0038]图24示出了仿真的主计算机系统的一个实施例。
【具体实施方式】
[0039]在一个方面,提供了一种事务执行(TX)工具。该工具为指令提供事务处理,并且在一个或多个实施例中,提供不同的执行模式(如下所述)以及事务处理的嵌套级别。
[0040]事务性执行工具引入一种CPU状态,被称为事务执行(TX)模式。在CPU重置之后,CPU未处于TX模式。CPU通过TRANSACTION BEGIN指令进入TX模式。CPU通过以下方式离开TX模式:(a)最外层TRANSACTION END指令(下面提供有关内部和外部的更多细节),或者(b)事务被中止。当处于TX模式时,CPU进行的存储访问看似为块并发,如其它CPU和I/O子系统所观察到的那样。存储访问(a)当最外层事务在没有中止的情况下结束时(即,例如在CPU本地的高速缓存或缓冲器中进行的更新被传播并存储在实存储器中,并且对其它CPU可见)被提交到存储器,或者(b)如果事务中止,则被丢弃。
[0041]可以嵌套事务。S卩,当CPU处于TX模式时,它可以执行另一个TRANSACTION BEGIN指令。导致CPU进入TX模式的指令被称为最外层TRANSACTION BEGIN ;同样,程序被称为最外层事务。TRANSACTION BEGIN的后续执行被称为内部指令;并且程序执行内部事务。模型提供最小嵌套深度和模型相关最大嵌套深度。EXTRACT TRANSACTION NESTING DEPTH指令返回当前嵌套深度值,并且在进一步实施例中,可以返回最大嵌套深度值。此类技术使用一种被称为“平面化嵌套”的模型,其中在任何嵌套深度处的中止条件均导致中止所有级别的事务,并且在最外层TRANSACTION BEGIN之后将控制返回到指令。
[0042]在事务处理期间,一个CPU进行的事务性访问被称为与以下访问冲突:(a)另一个CPU进行的事务性访问或非事务性访问,或者(b) 1/0子系统进行的非事务性访问,前提是这两个访问针对同一高速缓存线中的任何位置,并且两个访问之一或全部是存储。换言之,为了提高事务性执行的效率,直到提交之前,不应观察CPU进行的事务性访问。此编程模型可能在某些环境中非常有效,例如,更新包含数百万个元素的双向链表中的两个点。但是,如果对其进行事务性访问的存储位置存在大量争用,则该模型可能不太有效。
[0043]在一种事务性执行模型(在此被称为非受限事务)中,当中止事务时,程序可能尝试重新驱动事务以希望不再存在中止条件,或者程序可能“回退”到等效的非事务性路径。在另一种事务性执行模型(在此称为受限事务)中,CPU自动重新驱动中止后的事务;如果未出现约束违规,则确保最终完成受限事务。
[0044]当启动事务时,程序可以指定各种控制,例如(a)如果中止事务,则哪些通用寄存器恢复到其原始内容,(b)是否允许事务修改浮点寄存器上下文,例如包括浮点寄存器和浮点控制寄存器,(c)是否允许事务修改存取寄存器(AR),以及(d)是否阻止某些程序异常条件导致中断。如果中止非受限事务,则可以提供各种诊断信息。例如,启动非受限事务的最外层TBEGIN指令可以指定程序指定的事务诊断块(TDB)。此外,如果分别由于导致解释执行结束的程序中断或条件而中止事务,则还可以使用CPU的前缀区中的TDB或者由主机的状态描述指定的TDB。
[0045]上面指示了各种类型的寄存器。在此进一步详细解释这些寄存器。通用寄存器可以在通用算术和逻辑运算中用作累加器。在一个实施例中,每个寄存器包含64位位置,并且具有16个通用寄存器。通用寄存器由数字0-15标识,并且由指令中的四位R字段指定。某些指令通过具有若干R字段而对多个通用寄存器进行寻址。对于某些指令,将暗示使用特定的通用寄存器,而不是由指令的R字段显式指定。
[0046]除了在通用算术和逻辑运算中用作累加器之外,16个通用寄存器中的15个还在地址生成中用作基址和变址寄存器。在这些情况下,寄存器由指令中的四位B字段或X字段指定。B或X字段中的O值指定不应用基址或变址,因此通用寄存器O不应被指定为包含基址或变址。
[0047]浮点指令使用一组浮点寄存器。在一个实施例中,CPU具有16个浮点寄存器。浮点寄存器由数字0-15标识,并且由浮点指令中的四位R字段指定。每个浮点寄存器的长度为64位,并且可以包含短(32位)或长(64位)浮点操作数。
[0048]浮点控制(FPC)寄存器是32位寄存器,其包含掩码位、标志位、数据异常码和舍入模式位,并且用于处理浮点运算。
[0049]此外,在一个实施例中,CPU具有16个控制寄存器,每个具有64个位位置。为寄存器中的位位置分配系统中的特定工具(例如下面讨论的程序事件记录(PER)),并且这些位位置用于指定可以进行操作,或者用于提供工具所需的特殊信息。在一个实施例中,对于事务性工具,使用CRO (位8和9)和CR2 (位61-63),如下所述。
[0050]CPU例如具有16个存取寄存器,编号为0-15。存取寄存器包括32个位位置,其中包含地址空间控制元素(ASCE)的间接指定。地址空间控制元素是一个参数,动态地址转换(DAT)机制使用它将引用转换为对应的地址空间。当CPU处于一种被称为存取寄存器模式(由程序状态字(PSW)中的位控制)的模式时,指令B字段(用于为存储操作数引用指定逻辑地址)指定存取寄存器,并且DAT将该存取寄存器指定的地址空间控制元素用于所做出的引用。对于某些指令,使用R字段替代B字段。提供了用于加载和存储存取寄存器的内容并用于将一个存取寄存器的内容移动到另一个存取寄存器的指令。
[0051]每个存取寄存器1-15可以指定任何地址空间。存取寄存器O指定主指令空间。当存取寄存器1-15之一用于指定地址空间时,CPU通过转换存取寄存器的内容,确定指定了哪个地址空间。当使用存取寄存器O指定地址空间时,CPU将存取寄存器视为指定主指令空间,并且它不会检查存取寄存器的实际内容。因此,在任一时间,16个存取寄存器可以指定主指令空间和最多15个其它空间。
[0052]在一个实施例中,具有多种类型的地址空间。地址空间是连续的整数序列(虚拟地址)以及特定的转换参数,这些参数允许每个数字与存储器中的字节位置关联。序列在O开始,并且从左到右。
[0053]例如,在z/Architecture中,当CPU使用虚拟地址访问主存储设备(也被称为主存储器)时,首先通过动态地址转换(DAT)将虚拟地址转换为实地址,然后通过加前缀转换为绝对地址。DAT可以使用从一到五个级别的表(页、段、区域第三、区域第二和区域第一)作为转换参数。特定地址空间的最高级别表的指定(起始地址和长度)被称为地址空间控制元素,并且由DAT用于控制寄存器或者按照存取寄存器的指定而使用。备选地,地址空间的地址空间控制元素可以是实空间指定,其指示DAT只需将虚拟地址视为实地址而不使用任何表,即可转换虚拟地址。[0054]在不同的时间,DAT使用不同控制寄存器中的地址空间控制元素,或者使用存取寄存器指定的地址空间控制元素。通过当前PSW中指定的转换模式确定选择。提供四种转换模式:主空间模式、辅助空间模式、存取寄存器模式和归属空间(home space)模式。可以根据转换模式,对不同的地址空间进行寻址。
[0055]在任何时刻,当CPU处于主空间模式或辅助空间模式时,CPU可以转换属于两个地址空间一主地址空间和辅助地址空间一的虚拟地址。在任何时刻,当CPU处于存取寄存器模式时,它可以转换最多16个地址空间一主地址空间和最多15个AR的指定地址空间一的虚拟地址。在任何时刻,当CPU处于归属空间模式时,它可以转换归属地址空间的虚拟地址。
[0056]主地址空间被如此标识是因为它包括通过主地址空间控制元素(ASCE)转换的主虚拟地址。同样,辅助地址空间包括通过辅助ASCE转换的辅助虚拟地址;AR指定的地址空间包括通过AR指定的ASCE转换的AR指定的虚拟地址;以及归属地址空间包括通过归属ASCE转换的归属虚拟地址。主ASCE和辅助ASCE分别在控制寄存器I和7中。AR指定的ASCE在ASN第二表项中,这些表项使用控制寄存器2、5和8通过被称为存取寄存器转换(ART)的过程定位。归属ASCE在控制寄存器13中。
[0057]参考图1描述结合和使用在此描述的事务性工具的一个或多个方面的计算环境的一个实施例。
[0058]参考图1,在一个实例中,计算环境100基于z/Architecture,其由位于纽约阿
蒙克的国际商业机器(IBM? )公司提供。在标题为“z/Architecture - Principles of
Operation” (z/Architecture一操作原理)的 IBM 出版物(第 SA22-7932-08 号出版物第 9版,2010年8月,在此整体引入以便作为参考)中描述了 z/Architecture。
[0059]Z/ARCHITECTURE、IBM以及Ζ/OS和Z/VM (在下面引用)是位于纽约阿蒙克的国际商业机器公司的注册商标。在此使用的其它名称可能是国际商业机器公司或其它公司的注册商标、商标或产品名称。
[0060]作为一个实例,计算环境100包括中央处理器复合体(CPC) 102,其通过一个或多个控制单元108耦合到一个或多个输入/输出(1/0)设备106。中央处理器复合体102例如包括一个或多个中央处理器110、一个或多个分区112 (例如,逻辑分区(LP))、逻辑分区系统管理程序114以及输入/输出子系统115,下面将描述其中的每一个。
[0061]中央处理器110是分配给逻辑分区的物理处理器资源。具体地说,每个逻辑分区112具有一个或多个逻辑处理器,每个逻辑处理器表示分配给该分区的物理处理器110的全部或部分。特定分区112的逻辑处理器可以专用于该分区,以便针对该分区保留底层处理器资源110 ;或者与另一个分区共享,以便底层处理器资源可能用于另一个分区。
[0062]逻辑分区用作单独的系统并具有一个或多个应用,并且其中可选地具有常驻操作系统,每个逻辑分区的常驻操作系统可能不同。在一个实施例中,操作系统是位于纽约阿蒙克的国际商业机器公司提供的ζ/OS操作系统、z/VM操作系统、z/Linux操作系统或TPF操作系统。逻辑分区112由逻辑分区系统管理程序114管理,逻辑分区系统管理程序114由在处理器110上运行的固件实现。如在此使用的,固件例如包括处理器的微代码和/或毫代码。它例如包括用于实现更高级机器代码的硬件级别指令和/或数据结构。在一个实施例中,它例如包括典型地作为微代码提供的专用代码,专用代码包括特定于底层硬件的可信软件或微代码,并控制操作系统对系统硬件的访问。
[0063]逻辑分区和逻辑分区系统管理程序均包括一个或多个程序,这些程序驻留在与中央处理器关联的中央存储设备的相应分区中。逻辑分区系统管理程序114的一个实例是位于纽约阿蒙克的国际商业机器公司提供的Processor Resource/Systems Manager (PR/SM)。
[0064]输入/输出子系统115在输入/输出设备106和主存储设备(也被称为主存储器)之间定向信息流。它耦合到中央处理复合体,其中它可以是中央处理复合体的一部分或与其分离。I/O子系统减轻中央处理器直接与输入/输出设备通信的任务,并允许数据处理与输入/输出处理同时进行。为了提供通信,I/O子系统采用I/O通信适配器。具有各种类型的通信适配器,例如包括通道、I/O适配器、PCI卡、以太网卡、小型计算机存储接口(SCSI)卡等。在此处描述的特定实例中,I/O通信适配器是通道,因此I/O子系统在此被称为通道子系统。但是,这只是一个实例。可以使用其它类型的I/O子系统。
[0065]I/O子系统使用一个或多个输入/输出路径作为通信链路,以便管理进出输入/输出设备106的信息流。在该特定实例中,这些路径被称为通道路径,因为通信适配器是通道。
[0066]上述计算环境只是可以使用的计算环境的一个实例。可以使用其它环境,包括但不限于非分区环境、其它分区环境和/或仿真环境,并且并不限于任何一个环境。
[0067]根据一个或多个方面,事务性执行工具是CPU增强,其提供CPU可以用于执行指令序列(被称为事务)的手段,事务可以访问多个存储位置,包括更新这些位置。如其它CPU和I/o子系统所观察到的那样,事务(a)在整体上作为单个原子操作完成,或者(b)中止,可能未留下表明它曾经执行的任何证据(除了在此描述的某些条件之外)。因此,成功完成的事务可以更新多个存储位置,而没有在传统多处理模型中需要的任何特殊锁定。
[0068]事务性执行工具例如包括一个或多个控件;一个或多个指令;事务性处理,包括受限和非受限执行;以及中止处理,下面将进一步描述其中的每一个。
[0069]在一个实施例中,使用以下各项控制事务性执行工具:三个专用控件,包括事务中止程序状态字(PSW)、事务诊断块(TDB)地址以及事务嵌套深度;五个控制寄存器位;以及六个通用指令,包括TRANSACTION BEGIN (受限和非受限)、TRANSACTION END、EXTRACTTRANSACTION NESTING DEPTH、TRANSACTION ABORT 以及 N0NTRANSACT10NAL STORE。当安装工具时,例如将其安装在配置中的所有CPU中。工具指示(在一种实施方式中为位73)为I时,指示安装了事务性执行工具。
[0070]当安装了事务性执行工具时,配置提供非受限事务性执行工具,并且可选地提供受限事务性执行工具,下面将描述其中的每一个。当工具指示50和73 (作为实例)均为I时,安装受限事务性执行工具。将两个工具指示存储在存储器中的指定位置处。
[0071]如在此使用的,指令名称TRANSACTION BEGIN指指令具有助记符TBEGIN (非受限事务的Transaction Begin)和TBEGINC(受限事务的Transaction Begin)。与特定指令有关的讨论通过指令名称后跟在圆括号或方括号中的助记符指示,或者仅通过助记符指示。
[0072]图2A-2B中示出了 TRANSACTION BEGIN (TBEGIN)指令的格式的一个实施例。作为一个实例,TBEGIN指令200包括:操作码字段202,其包括指定非受限事务开始操作的操作码;基址字段(B1) 204 ;位移字段(D1) 206 ;以及立即字段(I2) 208。当B1字段为非零值时,将BP04指定的通用寄存器的内容加到DP06以获得第一操作数地址。
[0073]当B1字段为非零值时,以下内容适用:
[0074]*当事务嵌套深度初始为O时,第一操作数地址指定256字节事务诊断块(被称为TBEGIN指定的TDB,下面进一步描述)的位置,如果中止事务,则可以将各种诊断信息存储到该位置。当CPU处于主空间模式或存取寄存器模式时,第一操作数地址指定主地址空间中的位置。当CPU处于辅助空间或归属空间模式时,第一操作数地址分别指定辅助或归属地址空间中的位置。当DAT关闭时,事务诊断块(TDB)地址(TDBA)指定实存储设备中的位置。确定对第一操作数的存储可访问性。如果可访问,则将操作数的逻辑地址放入事务诊断块地址(TDBA),并且TDBA有效。
[0075]*当CPU已经处于非受限事务性执行模式时,不修改TDBA,并且不可预测是否对第一操作数进行了可访问性测试。
[0076]当B1字段为O时,未针对第一操作数检测访问异常,并且对于最外层TBEGIN指令,TDBA无效。
[0077]在一个实例中,I2字段的位定义如下:
[0078]通用寄存器保存掩码(GRSM)210 (图2B):12字段的位0_7包含通用寄存器保存掩码(GRSM)。GRSM的每个位表示奇偶通用寄存器对,其中位O表示寄存器O和1,位I表示寄存器2和3,等等。当最外层TBEGIN指令的GRSM中的位为O时,不保存对应的寄存器对。当最外层TBEGIN指令的GRSM中的位为I时,将对应的寄存器对保存在模型相关的位置中,该位置不可由程序直接访问。
[0079]如果事务中止,则将保存的寄存器对恢复到其在执行最外层TBEGIN指令时的内容。当事务中止时,不恢复所有其它(未保存的)通用寄存器的内容。
[0080]针对所有TBEGIN (除了最外层TBEGIN之外)忽略通用寄存器保存掩码。
[0081]允许AR修改(A)212:A控件(12字段的位12)控制是否允许事务修改存取寄存器。有效的允许AR修改控件是TBEGIN指令中用于当前嵌套级别和所有外部级别的A控件的逻辑“与”。
[0082]如果有效的A控件为0,则尝试修改任何存取寄存器时,将中止事务并且中止码为11 (受限指令)。如果有效的A控件为1,则修改存取寄存器时,将不中止事务(没有任何其它中止条件)。
[0083]允许浮点运算(F) 214:F控件(12字段的位13)控制是否允许事务执行指定的浮点指令。有效的允许浮点运算控件是TBEGIN指令中用于当前嵌套级别和所有外部级别的F控件的逻辑“与”。
[0084]如果有效的F控件为0,则(a)尝试执行浮点指令时,将中止事务并且中止码为11(受限指令),以及(b)将不会通过任何数据异常程序异常条件设置浮点控制寄存器(FPCR)的字节2中的数据异常码(DXC)。如果有效的F控件为1,则(a)尝试执行浮点指令时,将不中止事务(没有任何其它中止条件),以及(b)可以通过数据异常程序异常条件设置FPCR中的 DXC。
[0085]程序中断过滤控件(PIFC) 216 =I2字段的位14-15是程序中断过滤控件(PIFC)。PIFC控制在CPU处于事务性执行模式时出现的某些类程序异常条件(例如,寻址异常、数据异常、运算异常、保护异常等)是否导致中断。[0086]有效的PIFC是TBEGIN指令中用于当前嵌套级别和所有外部级别的PIFC的最高值。当有效的PIFC为O时,所有程序异常条件都导致中断。当有效的PIFC为I时,具有事务性执行类I和2的程序异常条件导致中断。(每个程序异常条件被分配至少一个事务性执行类,具体取决于异常的严重度。严重度基于重复执行事务性执行期间的恢复可能性,以及操作系统是否需要看到中断)。当有效的PIFC为2时,具有事务性执行类I的程序异常条件导致中断。保留PIFC3。
[0087]I2字段的位8-11 (指令的位40-43)被保留,并且应该包含O ;否则,将来程序可能无法兼容运行。
[0088]参考图3A-3B 描述了 Transaction Begin constrained (TBEGINC)指令的格式的一个实施例。在一个实例中,TBEGINC300包括:操作码字段302,其包括指定受限事务开始操作的操作码;基址字段(B1) 304 ;位移字段(D1) 306 ;以及立即字段(I2) 308。将&304指定的通用寄存器的内容加到DJ06以获得第一操作数地址。但是,对于transaction beginconstrained指令,不使用第一操作数地址访问存储设备。相反,指令的B1字段包括O ;否贝U,识别到指定异常。
[0089]在一个实施例中,I2字段包括各种控件,图3B中示出了它们的一个实例。
[0090]在一个实例中,I2字段的位定义如下:
[0091]通用寄存器保存掩码(GRSM) 310 =I2字段的位0_7包含通用寄存器保存掩码(GRSM)0 GRSM的每个位表示奇偶通用寄存器对,其中位O表示寄存器O和1,位I表示寄存器2和3,等等。当GRSM中的位为O时,不保存对应的寄存器对。当GRSM中的位为I时,将对应的寄存器对保存在模型相关的位置中,该位置不可由程序直接访问。如果事务中止,则将所保存的寄存器对恢复到其在执行最外层TRANSACTION BEGIN指令时的内容。当受限事务中止时,不恢复所有其它(未保存的)通用寄存器的内容。
[0092]当使用TBEGINC以在非受限事务执行模式中继续执行时,忽略通用寄存器保存掩码。
[0093]允许AR修改(A)312:A控件(12字段的位12)控制是否允许事务修改存取寄存器。有效的允许AR修改控件是TBEGIN指令中用于当前嵌套级别和任何外部TBEGIN或TBEGINC指令的A控件的逻辑“与”。
[0094]如果有效的A控件为0,则尝试修改任何存取寄存器时,将中止事务并且中止码为11 (受限指令)。如果有效的A控件为1,则修改存取寄存器时,将不中止事务(没有任何其它中止条件)。
[0095]I2字段的位8-11和13-15 (指令的位40_43和45_47)被保留,并且应该包含O。
[0096]Transaction Begin 指令的结束由 TRANSACTION END (TEND)指令指定,图 4 中示出了该指令的格式。作为一个实例,TEND指令400包括操作码字段402,其包括指定事务结束操作的操作码。
[0097]针对事务性执行工具使用多个术语,因此,仅为方便起见,下面按字母顺序提供了术语列表。在一个实施例中,这些术语具有以下定义:
[0098]中止:当事务在导致事务嵌套深度为O的TRANSACTION END指令之前结束时,事务中止。在一个实施例中,当事务中止时,发生以下情况:
[0099]*事务的任何和所有级别进行的事务性存储访问被丢弃(B卩,不提交)。[0100]*事务的任何和所有级别进行的非事务性存储访问被提交。
[0101]*最外层TRANSACTION BEGIN指令的通用寄存器保存掩码(GRSM)指定的寄存器被恢复到其在事务性执行之前的内容(即,恢复到其在执行最外层TRANSACTION BEGIN指令时的内容)。最外层TRANSACTION BEGIN指令的通用寄存器保存掩码未指定的通用寄存器不被恢复。
[0102]*存取寄存器、浮点寄存器以及浮点控制寄存器不被恢复。当事务中止时,在事务执行期间对这些寄存器的任何更改被保留。
[0103]事务可能由于各种原因而中止,包括尝试执行受限指令、尝试修改受限资源、事务冲突、超过各种CPU资源、任何解释执行拦截条件、任何中断、TRANSACTION ABORT指令以及其它原因。事务中止码提供事务为何可被中止的具体原因。
[0104]参考图5描述了 TRANSACTION ABORT (TABORT)指令的格式的一个实例。作为一个实例,TABORT指令500包括:操作码字段502,其包括指定事务中止操作的操作码;基址字段(B2) 504 ;以及位移字段(D2) 506。当B2字段为非零值时,将B2504指定的通用寄存器的内容加到D2506以获得第二操作数地址;否则,仅从D2字段形成第二操作数地址,并且B2字段被忽略。第二操作数地址并不用于对数据进行寻址;相反,该地址形成事务中止码,在中止处理期间该中止码被放在事务诊断块中。第二操作数地址的地址计算遵循地址运算的规则:在24位寻址模式中,位0-29被设为O ;在31位寻址模式中,位0-32被设为O。
[0105]提交:在完成最外层TRANSACTION END指令时,CPU提交事务(B卩,最外层事务和任何嵌套级别)进行的存储访问,以便这些存储访问对其它CPU和1/0子系统可见。如其它CPU和1/0子系统所观察到的那样,当进行提交时,事务的所有嵌套级别进行的所有取回和存储访问看似作为单个并发操作发生。
[0106]提交过程不修改通用寄存器、存取寄存器、浮点寄存器以及浮点控制寄存器的内容。当提交事务的存储时,在事务执行期间对这些寄存器进行的任何更改被保留。
[0107]冲突:一个CPU进行的事务性访问与以下访问冲突:(a )另一个CPU进行的事务性访问或非事务性访问,或者(b ) 1/0子系统进行的非事务性访问,前提是这两个访问针对同一高速缓存线中的任何位置,并且一个或多个访问是存储。
[0108]可以通过CPU的推测性指令执行来检测冲突,即使可能未在概念序列中检测到冲关。
[0109]受限事务:受限事务是在受限事务执行模式中执行的事务,并且受到以下限制:
[0110]*通用指令的子集可用。
[0111]*可以执行有限数量的指令。
[0112]*可以访问有限数量的存储操作数位置。
[0113]*事务被限于单个嵌套级别。
[0114]如果未出现重复中断或与其它CPU或1/0子系统的冲突,则受限事务最终完成,因此不需要中止处理机例程。下面将详细描述受限事务。
[0115]当执行TRANSACTION BEGIN constrained (TBEGINC)指令,同时 CPU 已经处于非受限事务执行模式时,执行作为嵌套非受限事务继续。
[0116]受限事务执行模式:当事务嵌套深度为O,并且通过TBEGINC指令启动事务时,CPU进入受限事务执行模式。当CPU处于受限事务执行模式时,事务嵌套深度为I。[0117]嵌套事务:当发出TRANSACTION BEGIN指令,同时CPU处于非受限事务性执行模式时,事务被嵌套。
[0118]事务性执行工具使用一种被称为平面化嵌套的模型。在平面化嵌套模式中,其它CPU和I/O子系统观察不到内部事务进行的存储,直到最外层事务提交其存储。同样,如果事务中止,则所有嵌套事务都中止,并且所有嵌套事务的所有事务性存储都被丢弃。
[0119]图6中示出了嵌套事务的一个实例。如图所示,第一 TBEGIN600启动最外层事务601,TBEGIN602启动第一嵌套事务,TBEGIN604启动第二嵌套事务。在该实例中,TBEGIN604和TEND606定义最内层事务608。当TEND610执行时,针对最外层事务和所有内部事务提交事务性存储612。
[0120]非受限事务:非受限事务是在非受限事务性执行模式中执行的事务。尽管非受限事务在方式上不作为受限事务被限制,但它仍然可能由于各种原因而中止。
[0121]非受限事务性执行模式:当通过TBEGIN指令启动事务时,CPU进入非受限事务性执行模式。当CPU处于非受限事务性执行模式时,事务嵌套深度可从I变化到最大事务嵌套深度。
[0122]非事务性访问:非事务性访问是CPU在未处于事务性执行模式时进行的存储操作数访问(即,传统的事务外部存储访问)。此外,I/o子系统进行的访问是非事务性访问。此夕卜,当CPU处于非受限事务性执行模式时,NONTRANSACTIONAL STORE指令可以用于导致非事务性存储访问。
[0123]参考图7描述了 NONTRANSACTIONAL STORE指令的格式的一个实施例。作为一个实例,NONTRANSACTIONAL STORE指令700包括:多个操作码字段702a、702b,它们指定操作码,该操作码指定非事务性存储操作;寄存器字段(R1) 704,其指定寄存器,该寄存器的内容被称为第一操作数;变址字段(X2) 706 ;基址字段(B2) 708 ;第一位移字段(DL2) 710 ;以及第二位移字段(DH2) 712。将X2和B2字段指定的通用寄存器的内容加到DH2和DL2字段的内容串接后的内容以形成第二操作数地址。当X2或B2字段之一或全部为O时,对应的寄存器不参与相加。
[0124]64位第一操作数以非事务方式不加改变地放在第二操作数位置处。
[0125]通过DH2和DL2字段的串接形成的位移被视为20位带符号二进制整数。
[0126]第二操作数应在双字边界上对齐;否则,识别到指定异常并抑制该操作。
[0127]外部/最外层事务:具有较低编号的事务嵌套深度的事务是外部事务。事务嵌套深度值为I的事务是最外层事务。
[0128]最外层TRANSACTION BEGIN指令是当事务嵌套深度初始为O时执行的指令。最外层TRANSACTION END指令是导致事务嵌套深度从I转变为O的指令。在此实施例中,受限事务是最外层事务。
[0129]程序中断过滤:当由于某些程序异常条件而中止事务时,程序可以可选地防止发生中断。此类技术被称为程序中断过滤。程序中断过滤取决于中断的事务类、来自TRANSACTION BEGIN指令的有效程序中断过滤控制,以及控制寄存器O中的事务性执行程序中断过滤超控(override)。
[0130]事务:当CPU处于事务执行模式时,事务包括进行的存储操作数访问,以及改变的选定通用寄存器。对于非受限事务,存储操作数访问可以包括事务性访问和非事务性访问。对于受限事务,存储操作数访问被限于事务性访问。如其它CPU和I/O子系统所观察到的那样,(PU在处于事务执行模式时进行的所有存储操作数访问看似作为单个并发操作发生。如果中止事务,则事务性存储访问被丢弃,并且最外层TRANSACTION BEGIN指令的通用寄存器保存掩码指定的任何寄存器被恢复到其在事务执行之前的内容。
[0131]事务性访问:事务性访问是在CPU处于事务性执行模式时进行的存储操作数访问,并具有NONTRANSACTIONAL STORE指令导致的访问异常。
[0132]事务性执行模式:术语事务性执行模式(也被称为事务执行模式)描述非受限和受限事务执行模式的公共操作。因此,当描述操作时,术语非受限和受限用于限定事务性执行模式。
[0133]当事务嵌套深度为O时,CPU未处于事务性执行模式(也被称为非事务性执行模式)。
[0134]如CPU所观察到的那样,在事务性执行模式中进行的取回和存储与未在事务性执行模式中进行的那些取回和存储并无区别。
[0135]在z/Architecture的一个实施例中,事务性执行工具受控于控制寄存器O的位8-9、控制寄存器2的位61-63、事务嵌套深度、事务诊断块地址以及事务中止程序状态字(PSff)0
[0136]在初始CPU重置之后,控制寄存器O的位位置8-9的内容、控制寄存器2的位位置62-63的内容以及事务嵌套深度被设为O。当事务性执行控制(控制寄存器O的位8)为O时,无法将CPU置于事务性执行模式。
[0137]下面将描述有关各种控件的进一步细节。
[0138]如指示的那样,事务性执行工具由控制寄存器O中的两个位以及控制寄存器2中的三个位控制。例如:
[0139]控制寄存器O位:在一个实施例中,位分配如下:
[0140]事务性执行控制(TXC):控制寄存器O的位8是事务性执行控件。该位提供一种机制,控制程序(例如,操作系统)可以由此指示程序是否可使用事务性执行工具。位8为I可成功进入事务性执行模式。
[0141]当控制寄存器O的位8为O时,尝试执行EXTRACT TRANSACTION NESTING DEPTH、TRANSACTION BEGIN和TRANSACTION END指令将导致特殊的操作执行。
[0142]参考图8描述了 EXTRACT TRANSACTION NESTING DEPTH指令的格式的一个实施例。作为一个实例,EXTRACT TRANSACTION NESTING DEPTH指令800包括:操作码字段802,其指定指示提取事务嵌套深度操作的操作码;以及寄存器字段R1SOl其指定通用寄存器。
[0143]当前事务嵌套深度被放在通用寄存器R1的位48-63中。寄存器的位0_31保持不变,并且寄存器的位32-47被设为O。
[0144]在另一实施例中,最大事务嵌套深度也被放在通用寄存器R1中,例如在位16-31中。
[0145]事务执行程序中断过滤超控(PIFO):控制寄存器O的位9是事务性执行程序中断过滤超控。该位提供一种机制,控制程序可以由此确保在CPU处于事务性执行模式时出现的任何程序异常条件都导致中断,与TRANSACTION BEGIN指令(多个)指定或暗示的有效程序中断过滤控件无关。[0146]控制寄存器2位:在一个实施例中,位分配如下:
[0147]事务诊断范围(TDS):控制寄存器2的位61控制寄存器的位62_63中的事务诊断控制(TDC)的适用性,如下所示:
[0148]TDS
[0149]值含义
[0150]O应用TDC,不管CPU是处于问题状态还是管理程序状态(supervisor state)。
[0151]I仅当CPU处于问题状态时才应用TDC。当CPU处于管理程序状态时,处理犹如包含O的TDC0
[0152]事务诊断控件(TDC):控制寄存器2的位62-63是2位无符号整数,其可以用于导致随机中止事务以实现诊断目的。在一个实例中,TDC的编码如下:
[0153]TDC
[0154]值含义
[0155]O正常操作;作为TDC的结果,不中止事务。
[0156]I在随机指令中,但在执行最外层TRANSACTION END指令之前,中止每一个事务。
[0157]2在随机指令处中止随机事务。
[0158]3 保留
[0159]当由于非零TDC而中止事务时,则可能发生以下任何一种情况:
[0160]*中止码被设为代码7-11、13_16或255中的任何一个,并且代码的值由CPU随机选择;设置对应于中止码的条件码。下面将进一步描述中止码。
[0161]*对于非受限事务,条件码被设为I。在此类情况下,中止码不适用。是否实现TDC值I与模型相关。如果不实现,则值I的操作犹如指定2。
[0162]对于受限事务,TDC值为I的处理犹如指定TDC值为2。
[0163]如果指定TDC值为3,则结果不可预测。
[0164]事务诊断块地址(TDBA)
[0165]当指令的B1字段为非零值时,从最外层TRANSACTION BEGIN (TBEGIN)指令的第一操作数地址设置有效的事务诊断块地址(TDBA)。当CPU处于主空间或存取寄存器模式时,TDBA指定主地址空间中的位置。当CPU处于辅助空间或归属空间模式时,TDBA分别指定辅助或归属地址空间中的位置。当关闭DAT (动态地址转换)时,TDBA指定实存储设备中的位置。
[0166]如果随后中止事务,则CPU使用TDBA定位事务诊断块(被称为TBEGIN指定的TDB)。TDBA的最右侧三个位为0,意味着TBEGIN指定的TDB在双字边界上。
[0167]当最外层TRANSACTION BEGIN (TBEGIN)指令的B1字段为O时,事务性诊断块地址无效,并且如果随后中止事务,则不存储TBEGIN指定的TDB。
[0168]事务中止PSW (TAPSff)
[0169]当嵌套深度初始为O时,在TRANSACTION BEGIN (TBEGIN)指令的执行期间,事务中止PSW被设为当前PSW的内容;并且事务中止PSW的指令地址指定下一顺序指令(即,在最外层TBEGIN之后的指令)。当嵌套深度初始为O时,在TRANSACTION BEGIN constrained(TBEGINC)指令的执行期间,事务中止PSW被设为当前PSW的内容,只是事务中止PSW的指令地址指定TBEGINC指令(而不是在TBEGINC之后的下一顺序指令)。[0170]当中止事务时,事务中止PSW中的条件码被指示中止条件严重度的代码取代。随后,如果由于未导致中断的原因而中止事务,则从事务中止PSW加载PSW ;如果由于导致中断的原因而中止事务,则事务中止PSW被存储为中断旧PSW。
[0171]在执行任何内部TRANSACTION BEGIN指令期间,不改变事务中止PSW。
[0172]事务嵌套深度(TND)
[0173]事务嵌套深度例如是16位无符号值,每次完成TRANSACTION BEGIN指令并且条件码为O时,该值递增,每次完成TRANSACTION END指令时,该值递减。当事务中止或由CPU重置时,事务嵌套深度被重置为O。
[0174]在一个实施例中,实现最大TND为15。
[0175]在一种实施方式中,当CPU处于受限事务性执行模式时,事务嵌套深度为I。此外,尽管最大TND可以表示为4位值,但TND被定义为16位值以便于其在事务诊断块中的检查。
[0176]事务诊断块(TDB)
[0177]当中止事务时,可以将各种状态信息保存在事务诊断块(TDB)中,如下所示:
[0178]1.TBEGIN指定的TDB:对于非受限事务,当最外层TBEGIN指令的B1字段为非零值时,指令的第一操作数地址指定TBEGIN指定的TDB。这是应用程序指定的位置,其可以由应用的中止处理机检查。
[0179]2.程序中断(PI) TDB:如果由于未过滤的程序异常条件而中止非受限事务,或者如果由于任何程序异常条件(即,导致识别到程序中断的任何条件)而中止受限事务,则P1-TDB被存储到前缀区中的位置。这可供操作系统在P1-TDB可以提供的任何诊断报告中检查并登出(log out)ο
[0180]3.拦截TDB:如果由于导致拦截的任何程序异常条件(即,条件导致解释执行结束并将控制返回到主机程序)而中止事务,则TDB被存储到来宾操作系统的状态描述块中指定的位置。
[0181]在一个实施例中,仅当TDB地址有效时(B卩,当最外层TBEGIN指令的B1字段为非零值时)才存储TBEGIN指定的TDB。
[0182]对于由于未过滤的程序异常条件导致的中止,仅存储P1-TDB或拦截TDB中的一个。因此,可以针对中止存储零个、一个或两个TDB。
[0183]下面将描述有关每个TDB的一个实例的进一步细节:
[0184]TBEGIN指定的TDB:有效的事务诊断块地址指定的256字节位置。当事务诊断块地址有效时,在事务中止时存储TBEGIN指定的TDB。TBEGIN指定的TDB取决于在执行最外层TRANSACTION BEGIN指令时有效的所有存储保护机制。在执行最外层TBEGIN期间(而不是在事务中止处理期间),检测TBEGIN指定的TDB的任何部分的PER (程序事件记录)存储更改事件。
[0185]PER的一个用途是有助于调试程序。它允许将程序改变为以下类型的事件(作为实例):
[0186]*执行成功的分支指令。提供以下选项:仅当分支目标位置在指定的存储区中时才发生事件。
[0187]*从指定的存储区取回指令。
[0188]*改变指定的存储区的内容。提供以下选项:仅当存储区在指定的地址空间中时才发生事件。
[0189]* 执行 STORE USING REAL ADDRESS 指令。
[0190]* 执行 TRANSACTION END 指令。
[0191]程序可以选择性地指定识别上面一种或多种类型的事件,只是STORE USING REALADDRESS的事件仅可以与存储更改事件一起指定。借助程序中断为程序提供有关PER事件的信息,并且在中断码中标识中断原因。
[0192]当事务诊断块地址无效时,不存储TBEGIN指定的TDB。
[0193]程序中断TDB:实位置6,144-6,399 (1800-18FF十六进制)。当由于程序中断而中止事务时,存储程序中断TDB。当由于其它原因而中止事务时,程序中断TDB的内容不可预测。
[0194]程序中断TDB不取决于任何保护机制。当程序中断TDB在程序中断期间被存储时,不针对程序中断TDB检测PER存储更改事件。
[0195]拦截TDB:状态描述的位置488-495指定的256字节主机实位置。当中止后的事务导致来宾程序中断拦截(即,拦截码8)时,存储拦截TDB。当由于其它原因而中止事务时,拦截TDB的内容不可预测。拦截TDB不取决于任何保护机制。
[0196]如图9中所示,在一个实施例中,事务诊断块900的字段如下:
[0197]格式902:字节O包含有效性和格式指示,如下所示:
[0198]值含义
[0199]OTDB的剩余字段不可预测。
[0200]I格式-1TDB,下面将描述其剩余字段。
[0201]2-255 保留
[0202]其中格式字段为O的TDB被称为空(null) TDB。
[0203]标志904:字节I包含各种指示,如下所示:
[0204]冲突标记有效性(CTV):当由于取回或存储冲突(即,分别为中止码9或10)而中止事务时,字节I的位O是冲突标记有效性指示。当CTV指示为I时,TDB的字节16-23中的冲突标记910包含在该处检测到冲突的逻辑地址。当CTV指示为O时,TDB的字节16-23不可预测。
[0205]当由于取回或存储冲突之外的任何原因而中止事务时,字节I的位O被存储为O。
[0206]受限事务指示(CTI):当CPU处于受限事务性执行模式时,字节I的位I被设为I。当CPU处于非受限事务性执行模式时,字节I的位I被设为O。
[0207]保留。字节I的位2-7被保留,并被存储为O。
[0208]事务嵌套深度(TND)906:字节6-7包含事务中止时的事务嵌套深度。事务中止码(TAC) 908:字节8-15包含64位无符号事务中止码。每个代码点指示事务中止的原因。
[0209]当由于程序中断之外的条件而中止事务时,事务中止码是否被存储在程序中断TDB中与模型相关。
[0210]冲突标记910:对于由于取回或存储冲突(即,分别为中止码9和10)而中止的事务,字节16-23包含在该处检测到冲突的存储位置的逻辑地址。当CTV位(字节I的位O)为I时,冲突标记有意义。
[0211]当CTV位为O时,字节16-23不可预测。[0212]因为CPU进行推测性执行,冲突标记可能指定不一定由事务的概念执行序列访问的存储位置。
[0213]中止事务指令地址(ATIA)912:字节24_31包含指令地址,该地址标识当检测到中止时正在执行的指令。当由于中止码2、5、6、11、13或256或更高代码而中止事务时,或者当由于中止码4或13而中止事务,并且使程序异常条件无效时,ATIA直接指向正在被执行的指令。当由于中止码4或12而中止事务,并且未使程序异常条件无效时,ATIA经过正在被执行的指令。
[0214]当由于中止码7-10、14_16或255而中止事务时,ATIA不一定指示导致中止的确切指令,但可能指向事务中的较前或较后的指令。
[0215]如果由于作为执行型指令的目标的指令而中止事务,则ATIA标识执行型指令,指向该指令或经过该指令,具体取决于如上所述的中止码。ATIA不指示执行型指令的目标。
[0216]ATIA取决于事务中止时的寻址模式。在24位寻址模式中,字段的位0-40包含O。在31位寻址模式中,字段的位0-32包含O。
[0217]当由于程序中断之外的条件而中止事务时,中止事务指令地址是否被存储在程序中断TDB中与模型相关。
[0218]当由于中止码4或12而中止事务,并且未使程序异常条件无效时,ATIA不指向导致中止的指令。通过从ATIA中减去中断长度码(ILC)指示的半字数量,可以在抑制或终止的条件中标识导致中止的指令,或者针对正在完成的非PER事件标识导致中止的指令。当由于PER事件而中止事务,并且不存在其它程序异常条件时,ATIA不可预测。当事务诊断块地址有效时,可以在TBEGIN指定的TDB的字节36-39中的程序中断标识(PIID)中检查ILC0当不应用过滤时,可以在实存储设备中的位置140-143的PIID中检查ILC。
[0219]异常访问标识(EAID) 914:对于由于某些过滤后的程序异常条件而中止的事务,TBEGIN指定的TDB的字节32包含异常访问标识。在z/Architecture的一个实例中,EAID的格式及其存储情况,与异常条件导致中断时的实位置160中描述的相同,如上面引入的参考“操作原理”中所述。
[0220]对于由于其它原因(包括导致程序中断的任何异常条件)而中止的事务,字节32不可预测。在程序中断TDB中,字节32不可预测。
[0221]该字段仅被存储在事务诊断块地址指定的TDB中;否则,字段被保留。仅针对以下各项存储EAID:访问列表控制或DAT保护、ASCE类型、页转换、区域第一转换、区域第二转换、区域第三转换以及段转换程序异常条件。
[0222]数据异常码(DXC) 916:对于由于过滤后的数据异常程序异常条件而中止的事务,TBEGIN指定的TDB的字节33包含数据异常码。在z/Architecture的一个实例中,DXC的格式及其存储情况,与异常条件导致中断时的实位置147中描述的相同,如上面引入的参考“操作原理”中所述。在一个实例中,位置147包括DXC。
[0223]对于由于其它原因(包括导致程序中断的任何异常条件)而中止的事务,字节33不可预测。在程序中断TDB中,字节33不可预测。
[0224]该字段仅被存储在事务诊断块地址指定的TDB中;否则,字段被保留。仅针对数据程序异常条件存储DXC。
[0225]程序中断标识(PIID) 918:对于由于过滤后的程序异常条件而中止的事务,TBEGIN指定的TDB的字节36-39包含程序中断标识。在z/Architecture的一个实例中,PIID的格式与条件导致中断时的实位置140-143中描述的相同(如上面引入的参考“操作原理”中所述),只是PIID的位13-14中的指令长度码对应于在该处检测到异常条件的指令。
[0226]对于由于其它原因(包括导致程序中断的异常条件)而中止的事务,字节36-39不可预测。在程序中断TDB中,字节36-39不可预测。
[0227]该字段仅被存储在事务诊断块地址指定的TDB中;否则,字段被保留。仅针对程序异常条件存储程序中断标识。
[0228]转换异常标识(TEID) 920:对于由于以下任何一个过滤后的程序异常条件而中止的事务,TBEGIN指定的TDB的字节40-47包含转换异常标识。
[0229]*访问列表控制或DAT保护
[0230]*ASCE 类型
[0231]*页转换
[0232]*区域第一转换
[0233]*区域第二转换
[0234]*区域第三转换
[0235]*段转换异常
[0236]在z/Architecture的一个实例中,TEID的格式与条件导致中断时的实位置168-175中描述的相同,如上面引入的参考“操作原理”中所述。对于由于其它原因(包括导致程序中断的异常条件)而中止的事务,字节40-47不可预测。在程序中断TDB中,字节40-47不可预测。
[0237]该字段仅被存储在事务诊断块地址指定的TDB中;否则,字段被保留。
[0238]停止事件(breaking event)地址922:对于由于过滤的程序异常条件而中止的事务,TBEGIN指定的TDB的字节48-55包含停止事件地址。在z/Architecture的一个实例中,停止事件地址的格式与条件导致中断时的实位置272-279中描述的相同,如上面引入的参考“操作原理”中所述。
[0239]对于由于其它原因(包括导致程序中断的异常条件)而中止的事务,字节48-55不可预测。在程序中断TDB中,字节48-55不可预测。
[0240]该字段仅被存储在事务诊断块地址指定的TDB中;否则,字段被保留。
[0241]下面将描述与停止事件相关的进一步细节。
[0242]在z/Architecture的一个实施例中,当安装了 PER-3工具时,它为程序提供在(PU顺序执行中导致停止的上一指令的地址。停止事件地址记录可以用作自然分支检测的调试帮助。该工具例如在CPU中提供64位寄存器,被称为停止事件地址寄存器。每次TRANSACTION ABORT之外的指令在顺序指令执行中导致停止(B卩,PSW中的指令地址被取代,而不是按指令长度增加)时,该指令的地址被放在停止事件地址寄存器中。每当发生程序中断时,无论是否指示PER,停止事件地址寄存器的当前内容都被放在实存储设备位置272-279 中。
[0243]如果导致停止事件的指令是执行型指令(EXECUTE或EXECUTE RELATIVE LONG)的目标,则用于取回执行型指令的指令地址被放在停止事件地址寄存器中。[0244]在z/Architecture的一个实施例中,每当以下指令之一导致分支时,便会视为发生停止事件:BRANCH AND LINK (BAL、BALR) ;BRANCH AND SAVE (BAS、BASR) ;BRANCH ANDSAVE 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 ONINDEX HIGH (BXH,BXHG);BRANCH ON INDEX LOW OR EQUAL (BXLE、BXLEG);BRANCH RELATIVEON CONDITION (BRC);BRANCH RELATIVE ON CONDITION LONG (BRCL);BRANCH RELATIVE ONCOUNT (BRCT、BRCTG) ;BRANCH RELATIVE ON INDEX HIGH (BRXH、BRXHG) ;BRANCH RELATIVEON INDEX LOW OR EQUAL (BRXLE、BRXLG) ;COMPARE AND BRANCH (CRB、CGRB) ;COMPARE ANDBRANCH RELATIVE (CRJ、CGRJ) ;COMPARE IMMEDIATE AND BRANCH (CIB、CGIB) ;C0MPAREIMMEDIATE AND BRANCH RELATIVE(ClJ,CGIJ);COMPARE LOGICAL AND BRANCH(CLRB、CLGRB);COMPARE LOGICAL AND BRANCH RELATIVE (CLRJ、CLGRJ);COMPARE LOGICAL IMMEDIATE ANDBRANCH (CLIB、CLGIB);以及 COMPARE LOGICAL IMMEDIATE AND BRANCH RELATIVE (CLIJ、CLGIJ)。
[0245]每当完成以下指令之一时,也会视为发生停止事件:BRANCH AND SET AUTHORITY(BSA) ;BRANCH IN SUBSPACE GROUP (BSG) ;BRANCH RELATIVE AND SAVE (BRAS) ;BRANCHRELATIVE AND SAVE LONG (BRASL);L0AD PSff (LPSff) ;L0AD PSff EXTENDED (LPSffE);PROGRAM CALL (PC) ;PROGRAM RETURN (PR) ;PROGRAM TRANSFER (PT) ;PROGRAM TRANSFERWITH INSTANCE (PTI) ;RESUME PROGRAM (RP);以及 TRAP (TRAP2、TRAP4)。
[0246]停止事件不会被视为作为中止事务(隐式或作为TRANSACTION ABORT指令的结果)的结果发生。
[0247]模型相关诊断信息924:字节112-127包含模型相关诊断信息。
[0248]对于除了 12 (过滤后的程序中断)之外的所有中止码,模型相关诊断信息被保存在每个所存储的TDB中。
[0249]在一个实施例中,模型相关诊断信息包括以下各项:
[0250]*字节112-119包含64位向量,被称为事务执行分支指示(TXBI)。向量的前63位中的每个位指示当CPU处于事务性执行模式时,执行分支指令的结果,如下所示:
[0251]值含义
[0252]O指令完成而没有分支。
[0253]I指令完成而具有分支。
[0254]位O表示第一个此类分支指令的结果,位I表示第二个此类指令的结果,以此类推。
[0255]当CPU处于事务性执行模式时,如果执行少于63个分支指令,则不对应于分支指令的最右侧位被设为O (包括位63)。当执行多于63个分支指令时,TXBI的位63被设为
1
[0256]TXBI中的位由能够导致停止事件的指令(如上面列出的)设置,以下情况除外:
[0257]-任何受限指令未导致在TXBI中设置位。
[0258]-对于例如z/Architecture 的指令,当 BRANCH ON CONDITION、BRANCH RELATIVEON CONDITION 或 BRANCH RELATIVE ON CONDITION LONG 指令的 Ml 字段为 0 时,或者当以下指令的R2字段为O时,执行指令是否导致在TXBI中设置位与模型相关。[0259]^BRANCH AND LINK (BALR);BRANCH AND SAVE (BASR);BRANCH AND SAVE AND SETMODE (BASSM) ;BRANCH AND SET MODE (BSM) ;BRANCH ON CONDITION (BCR);以及 BRANCHON COUNT (BCTR、BCTGR)
[0260]*对于由主机访问异常导致的中止条件,字节127的位位置O被设为I。对于所有其它中止条件,字节127的位位置O被设为O。
[0261]*对于加载/存储单元(LSU)检测到的中止条件,字节127的最右侧五位包含原因指示。对于LSU未检测到的中止条件,字节127被保留。
[0262]通用寄存器930:字节128-255包含事务被中止时的通用寄存器0-15的内容。寄存器按升序存储,始于字节128-135中的通用寄存器0,字节136-143中的通用寄存器1,以此类推。
[0263]保留:所有其它字段被保留。除非另外指明,否则被保留字段的内容不可预测。
[0264]如其它CPU和1/0子系统所观察到的那样,在事务中止期间存储TDB (多个)是在任何非事务性存储之后发生的多个访问引用。
[0265]可能由于在其中执行事务的立即配置范围之外的原因而中止事务。例如,系统管理程序(例如LPAR或z/VM)识别到的瞬态事件可能导致事务中止。
[0266]在事务诊断块中提供的信息用于诊断目的,并且基本上正确。但是,因为可能由立即配置范围之外的事件导致中止,诸如中止码或程序中断标识之类的信息可能不会准确地反映配置中的条件,因此不应该用于确定程序操作。
[0267]除了保存在TDB中的诊断信息之外,当由于任何数据异常程序异常条件而中止事务,并且AFP寄存器控件(控制寄存器O的位45)和有效的允许浮点运算控件(F)都为I时,数据异常码(DXC)被放到浮点控制寄存器(FPCR)的字节2,而不管是否向程序异常条件应用过滤。当中止事务,并且AFP寄存器`控件或有效的允许浮点运算控件之一或全部为O时,不将DXC放入FPCR。
[0268]在一个实施例中,如在此指示的,当安装了事务性执行工具时,提供以下通用指令。
[0269]^EXTRACT TRANSACTION NESTING DEPTH
[0270]*N0NTRANSACT10NAL STORE
[0271]^TRANSACTION ABORT
[0272]^TRANSACTION BEGIN
[0273]^TRANSACTION END
[0274]当CPU处于事务性执行模式时,尝试执行某些指令被限制,并且导致事务中止。
[0275]当在受限事务性执行模式中发出时,尝试执行受限指令也可能导致事务约束程序中断,或者可能导致执行继续,犹如事务未被限制。
[0276]在z/Architecture的一个实例中,受限指令包括(作为实例)以下非特权指令:COMPARE AND SWAP AND STORE ;M0DIFY RUNTIME INSTRUMENTATION CONTROLS ;PERFORMLOCKED OPERATION ;PREFETCH DATA (RELATIVE LONG),当 M1 字段中的代码为 6 或 7 时;STORE CHARACTERS UNDER MASK HIGH,当M3字段为0并且R1字段中的代码为6或7时;STORE FACILITY LIST EXTENDED ;STORE RUNTIME INSTRUMENTATION CONTROLS SUPERVISORCALL;以及 TEST RUNTIME INSTRUMENTATION CONTROLS。[0277]在上面的列表中,COMPAREAND SWAP AND STORE和PERFORM LOCKED OPERATION是复杂指令,可以通过在TX模式中使用基本指令更高效地实现。在代码6和7释放高速缓存线时,PREFETCH DATA和PREFETCH DATA RELATIVE LONG的情况被限制,从而需要在事务完成之前提交数据。SUPERVISOR CALL被限制,因为其导致中断(导致事务中止)。
[0278]在下面列出的条件下,限制以下指令:
[0279]^BRANCH AND LINK (BALR),BRANCH AND SAVE (BASR)以及 BRANCH AND SAVE ANDSET MODE,当指令的R2字段为非零值并且启用分支跟踪时。
[0280]^BRANCH AND SAVE AND SET MODE 和 BRANCH AND SET MODE,当 R2 字段为非零值并且启用模式跟踪时;SET ADDRESSING MODE,当启用模式跟踪时。
[0281]^MONITOR CALL,当识别到监视事件条件时。
[0282]上面的列表包括可能形成跟踪项的指令。如果允许这些指令以事务方式执行并形成跟踪项,并且随后中止事务,则控制寄存器12中的跟踪表指针将增加,但到跟踪表的存储被丢弃。这在跟踪表中留下不一致的间隙。因此,在指令形成跟踪项的情况下,将限制指令。
[0283]当CPU处于事务性执行模式时,是否限制以下指令与模型相关:CIPHER MESSAGE ;CIPHER MESSAGE WITH CFB ;CIPHER MESSAGE WITH CHAINING ;CIPHER MESSAGE WITHCOUNTER ;CIPHER MESSAGE WITH OFB COMPRESSION CALL ;COMPUTE INTERMEDIATE MESSAGEDIGEST ;COMPUTE LAST MESSAGE DIGEST ;COMPUTE MESSAGE AUTHENTICATION CODE ;CONVERTUNIC0DE-16T0 UNICODE-32 ;CONVERT UNIC0DE-16T0 UNICODE-8 ;CONVERT UNIC0DE-32T0UNICODE-16 CONVERT UNI⑶DE-32T0 UNI⑶DE-8 CONVERT UNIC0DE-8T0 UNICODE-16 ;⑶NVERT UNI⑶DE-8T0 UNICODE-32;PERFORM CRYPTOGRAPHIC COMPUTATION ;RUNTIMEINSTRUMENTATION OFF ;以及 RUNTIME INSTRUMENTATION ON。
[0284]上面的每个指令当前由硬件协处理器实现,或者已在过去机器中并因此被视为受限。
[0285]当有效的允许AR修改(A)控件为O时,限制以下指令:C0PY ACCESS ;L0AD ACCESSMULTIPLE ;L0AD ADDRESS EXTENDED ;以及 SET ACCESS。
[0286]上面的每个指令导致修改存取寄存器的内容。如果TRANSACTION BEGIN指令中的A控件为0,则程序显式指示不允许存取寄存器修改。
[0287]当有效的允许浮点运算(F)控件为O时,限制浮点指令。
[0288]在某些情况下,可能限制以下指令:EXTRACT CPU TIME ;EXTRACT PSff ;STORECLOCK ;STORE CLOCK EXTENDED ;以及 STORE CLOCK FAST。
[0289]上面的每个指令都取决于解释执行状态描述中的拦截控制。如果系统管理程序针对这些指令设置了拦截控制,则指令的执行可能由于系统管理程序实现而延期;因此,如果发生拦截,则这些指令被视为受限。
[0290]当由于尝试执行受限指令而中止非受限事务时,事务诊断块中的事务中止码被设为11(受限指令),并且条件码被设为3,以下情况除外:当由于尝试执行指令(该指令以其他方式导致特权操作异常)而中止非受限事务时,不可预测中止码被设为11(受限指令)还是4(识别到特权操作程序中断导致的未过滤的程序中断)。当由于尝试执行以下指令而中止非受限事务时:PREFETCH DATA (RELATIVE LONG)(当M1字段中的代码为6或7时)或STORECHARACTERS UNDER MASK HIGH(当M3字段为O并且R1字段中的代码为6或7时),不可预测中止码被设为11 (受限指令)还是16 (缓存其它)。当由于尝试执行MONITOR CALL而中止非受限事务,并且存在监视事件条件和指定异常条件两者时,不可预测中止码被设为11还是4,或者被设为12 (如果过滤程序中断)。
[0291]在受限事务中,可能限制其它指令。尽管这些指令当前未在非受限事务中被定义为受限,但在将来处理器的非受限事务中,它们可能在某些情况下受限。
[0292]在将来处理器的事务执行模式中,可能允许某些受限指令。因此,程序不应该依赖于由于尝试执行受限指令而中止事务。应该使用TRANSACTION ABORT指令可靠地导致中止事务。
[0293]在非受限事务中,程序应该提供备选非事务性代码路径,以便容纳由于受限指令中止的事务。
[0294]在操作中,当事务嵌套深度为O时,如果执行导致条件码O的TRANSACTION BEGIN(TBEGIN)指令,则导致CPU进入非受限事务性执行模式。当事务嵌套深度为O时,如果执行导致条件码O的TRANSACTION BEGIN constrained (TBEGINC)指令,则导致CPU进入受限事务性执行模式。
[0295]除了另外显式说明之外,适用于非事务性执行的所有规则也适用于事务执行。下面是在CPU处于事务性执行模式时的处理的其它特性。
[0296]当CPU处于非受限事务性执行模式时,如果执行导致条件码O的TRANSACTIONBEGIN指令,则导致CPU仍然处于非受限事务性执行模式。
[0297]如CPU所观察到的那样,在事务执行模式中进行的取回和存储与未在事务性执行模式中进行的那些取回和存储并无区别。如其它CPU和1/0子系统所观察到的那样,在CPU处于事务性执行模式时进行的所有存储操作数访问看似单个块并发访问。即,访问半字、字、双字或四字中的所有字节被指定为看似块并发,如其它CPU和1/0 (例如,通道)程序所观察到的那样。在本节中,半字、字、双字或四字被称为块。当取回型引用被指定为看似在块中并发时,当正在取回包含在该块中的字节期间,不允许另一个CPU或1/0程序对该块进行存储访问。当存储型引用被指定为看似在块中并发时,当正在存储该块中的字节期间,不允许另一个CPU或1/0程序访问该块(取回或存储)。
[0298]指令的存储访问以及DAT和ART (存取寄存器表)表取回遵循非事务性规则。
[0299]CPU通常通过TRANSACTION END指令离开事务性执行模式,该指令导致事务嵌套深度转变为0,在此类情况下完成事务。
[0300]当CPU通过完成TRANSACTION END指令而离开事务性执行模式时,在处于事务性执行模式时进行的所有存储被提交,即,存储看似作为单个块并发操作发生,如其它(PU和I/o子系统所观察到的那样。
[0301]可以由于各种原因而隐式中止事务,或者可以通过TRANSACTION ABORT指令而显式中止事务。下面将描述事务中止的实例可能原因、对应的中止码以及被放入事务中止PSW的条件码。
[0302]外部中断:事务中止码被设为2,并且事务中止PSW中的条件码被设为2。事务中止PSW被存储为外部旧PSW,作为外部中断处理的一部分。
[0303]程序中断(未过滤):导致中断的程序异常条件(即,未过滤的条件)将导致中止事务,并且代码为4。特定于程序中断码而设置事务中止PSW中的条件码。事务中止PSW被存储为程序旧PSW,作为程序中断处理的一部分。
[0304]另外导致由于操作异常而中止事务的指令可能产生备选结果:对于非受限事务,事务可能反而中止,并且中止码为11 (受限指令);对于受限事务,可能识别到事务约束程序中断而不是操作异常。
[0305]当识别到PER (程序事件记录)事件以及任何其它未过滤的程序异常条件时,条件码被设为3。
[0306]机器检查中断:事务中止码被设为5,并且事务中止PSW中的条件码被设为2。事务中止PSW被存储为机器检查旧PSW,作为机器检查中断处理的一部分。
[0307]I/O中断:事务中止码被设为6,并且事务中止PSW中的条件码被设为2。事务中止PSW被存储为I/O旧PSWJtS I/O中断处理的一部分。
[0308]取回溢出:当事务尝试从超过CPU所支持的位置取回时,检测到取回溢出条件。事务中止码被设为7,并且条件码被设为2或3。
[0309]存储溢出:当事务尝试存储到超过CPU所支持的位置时,检测到存储溢出条件。事务中止码被设为8,并且条件码被设为2或3。
[0310]如果响应于取回或存储溢出中止而允许条件码为2或3,则允许CPU指示可能重试的情况(例如,条件码2指示事务的重新执行可以提高效率,而条件码3不建议重新执行)。
[0311]取回冲突:当另一个CPU或I/O子系统尝试存储到该CPU以事务方式取回的位置时,检测到取回冲突条件。事务中止码被设为9,并且条件码被设为2。
[0312]存储冲突:当另一个CPU或I/O子系统尝试访问在该CPU的事务性执行期间已存储的位置时,检测到存储冲突条件。事务中止码被设为10,并且条件码被设为2。
[0313]受限指令:当CPU处于事务性执行模式时,尝试执行受限指令导致中止事务。事务中止码被设为11,并且条件码被设为3。
[0314]当CPU处于受限事务性执行模式时,不可预测尝试执行受限指令导致事务约束程序中断还是由于受限指令而产生的中止。事务仍被中止,但中止码可能指示任一原因。
[0315]程序异常条件(过滤):不导致中断的程序异常条件(S卩,过滤后的条件)将导致中止事务,并且事务中止码为12。条件码被设为3。
[0316]超过嵌套深度:当事务嵌套深度处于配置的最大可允许值,并且执行TRANSACTIONBEGIN指令时,检测到超过嵌套深度条件。中止事务,并且事务中止码为13,条件码被设为3。
[0317]高速缓存取回相关条件:CPU的高速缓存电路检测到与事务取回的存储位置相关的条件。中止事务,并且事务中止码为14,条件码被设为2或3。
[0318]高速缓存存储相关条件:CPU的高速缓存电路检测到与事务存储的存储位置相关的条件。中止事务,并且事务中止码为15,条件码被设为2或3。
[0319]高速缓存其它条件:CPU的高速缓存电路检测到高速缓存其它条件。中止事务,并且事务中止码为16,条件码被设为2或3。
[0320]在事务性执行期间,如果CPU使用映射到同一绝对地址的不同逻辑地址访问指令或存储操作数,则是否中止事务与模型相关。如果由于使用映射到同一绝对地址的不同逻辑地址访问而中止事务,则设置中止码14、15或16,具体取决于条件。[0321]杂项条件:杂项条件是CPU识别到的可导致事务中止的任何其它条件。事务中止码被设为255,条件码被设为2或3。
[0322]当在同一机器(例如,逻辑分区或虚拟机)中执行多个配置时,事务可能因为外部机器检查或不同配置中的I/O中断而中止。
[0323]尽管上面提供了实例,但是可以提供其它具有对应中止码和条件码的事务中止原因。例如,原因可以是“重新启动中断”,其中事务中止码被设为1,并且事务中止PSW中的条件码被设为2。事务中止PSW作为重新启动处理的一部分,被存储为重新启动旧(restart-old) PSW。作为进一步的实例,原因可以是“管理程序调用”条件,其中中止码被设为3,并且事务中止PSW中的条件码被设为3。其它或不同的实例也是可能的。
[0324]注意事项:
[0325]1.杂项条件可以是以下任一项:
[0326]*由配置中的另一 CPU执行的指令,例如,在z/Architecture中,COMPARE ANDREPLACE DAT TABLE ENTRY,COMPARE AND SWAP AND PURGE、INVALIDATE DAT TABLE ENTRY、INVALIDATE PAGE TABLE ENTRY,PERFORM FRAME MANAGEMENT FUNCTION,其中 NQ 控件为 0,SK控件为1,SET STORAGE KEY EXTENDED,其中NQ控件为0 ;条件码被设为2。
[0327]*在CPU上执行的运算符函数,例如reset、restart或stop,或者等价的SIGNALPROCESSOR 命令。
[0328]*上面未列出的任何其它条件;条件码被设为2或3。
[0329]2.检测到取回与存储冲突的位置可以是同一高速缓存线中的任一位置。
[0330]3.在特定条件下,CPU可能不能区分类似的中止条件。例如,取回或存储溢出可能无法与各自的取回或存储冲突进行区分。
[0331]4.CPU对多个指令路径的推测性执行可能导致事务因冲突条件或溢出条件而中止,即使此类条件不会在概念序列中发生。当处于受限事务性执行模式时,CPU可能临时禁止推测性执行,从而允许事务尝试在不推测性地检测此类冲突或溢出的情况下完成。
[0332]执行TRANSACTION ABORT指令导致事务中止。事务中止码通过第二操作数地址设置。条件码被设为2或3,分别具体取决于第二操作数地址的位63是O还是I。
[0333]图10总结了事务诊断方框中存储的中止码实例,以及对应的条件码(CC)。图10中的描述示出一个特殊的实现。值的其它实现和编码也是可能的。
[0334]在一个实施例中,如上所述,事务性工具提供受限事务和非受限制事务,以及与它们关联的处理。首先介绍受限事务,然后介绍非受限事务。
[0335]受限事务在事务性模式中执行而无需回退(fall-back)路径。这是一种对紧致函数(compact function)很有用的处理模式。如果未出现重复中断或与其它CPU或1/0子系统的冲突(即,由不允许事务成功完成的条件导致),受限事务将最终完成;因此,不需要中止处理机例程,也不进行指定。例如,如果未出现无法处理的条件违规(例如,以O作为除数时);不允许事务完成的条件(例如,不允许指令执行的计时器中断;热1/0等);或者与受限事务关联的限制或约束违规,事务将最终完成。
[0336]当事务嵌套深度初始为O时,受限事务通过TRANSACTION BEGIN constrained(TBEGINC)指令启动。在一个实施例中,受限事务受到以下约束。
[0337]1.事务执行的指令数不超过32个,其中不包括TRANSACTION BEGIN constrained(TBEGINC)和 TRANSACTION END 指令。
[0338]2.事务中的所有指令将位于256个连续存储字节中,其中包括TRANSACTIONBEGIN constrained (TBEGINC)和任何 TRANSACTION END 指令。
[0339]3.除了受限指令,下面的限制也适用于受限事务。
[0340]a.指令限于那些被称为通用指令的指令,其中例如包括add(加)、substract(减)、multiply (乘)、divide (除)、shift (移位)、rotate (旋转)等。
[0341]b.分支指令限于以下指令(在一个实例中,所列的指令是z/Architecture的指令):
[0342]^BRANCH RELATIVE ON CONDITION,其中 M1 非零,RI2 字段包含正值。
[0343]^BRANCH RELATIVE ON CONDITION LONG,其中 M1 字段为非零值,RI2 字段包含不会导致地址回绕的正值。
[0344]^COMPARE AND BRANCH RELATIVE、COMPARE IMMEDIATE AND BRANCH RELATIVE、COMPARE LOGICAL AND BRANCH RELATIVE,以及 COMPARE LOGICAL IMMEDIATE AND BRANCHRELATIVE,其中M3字段为非零值,RI4字段包含正值(即,仅转发带有非零分支掩码的分支)。
[0345]c.除了 TRANSACTION END和导致指定操作数序列化的指令之外,限制导致序列化功能的指令。
[0346]d.限制存储-存储操作(SS-),以及带有扩展操作码的存储-存储操作(SSE-)指令。
[0347]e.限制下面所有通用指令(在该实例中,是z/Architecture的指令):CHECKSUM ;CIPHER MESSAGE ;CIPHER MESSAGE WITH CFB ;CIPHER MESSAGE WITH CHAINING ;CIPHERMESSAGE WITH COUNTER ;CIPHER MESSAGE WITH OFB fOMPARE AND FORM ⑶DEWORD ;COMPARE LOGICAL LONG ;COMPARE LOGICAL LONG EXTENDED fOMPARE LOGICAL LONGUNI⑶DE ;COMPARE LOGICAL STRING ;COMPARE UNTIL SUBSTRING EQUAL !COMPRESSIONCALL ;COMPUTE INTERMEDIATE MESSAGE DIGEST ;COMPUTE LAST MESSAGE DIGEST ;COMPUTEMESSAGE AUTHENTICATION CODE CONVERT TO BINARY CONVERT TO DECIMAL CONVERTUNIC0DE-16T0 UNICODE-32 ;CONVERT UNIC0DE-16T0 UNICODE-8 ;CONVERT UNIC0DE-32T0UNICODE-16 ;CONVERT UNI⑶DE-32T0 UNI⑶DE-8 ;CONVERT UNI⑶DE-8T0 UNI⑶DE-16 ;CONVERT UNIC0DE-8T0 UNICODE-32 ;DIVIDE ;DIVIDE LOGICAL ;DIVIDE SINGLE !EXECUTE ;EXECUTE RELATIVE LONG ;EXTRACT CACHE ATTRIBUTE ;EXTRACT CPU TIME ;EXTRACT PSff ;EXTRACT TRANSACTION NESTING DEPTH ;L0AD AND ADD ;L0AD AND ADD LOGICAL ;L0ADAND AND ;L0AD AND EXCLUSIVE OR ;L0AD AND OR ;L0AD PAIR DISJOINT ;L0AD PAIR FROMQUADffORD ;M0NIT0R CALL ;M0VE LONG ;M0VE LONG EXTENDED ;M0VE LONG UNICODE ;M0VESTRING ;NON-TRANSACTIONAL STORE ;PERFORM CRYPTOGRAPHIC COMPUTATION ;PREFETCHDATA ;PREFETCH DATA RELATIVE LONG ;RUNTIME INSTRUMENTATION EMIT ;RUNTIMEINSTRUMENTATION NEXT ;RUNTIME INSTRUMENTATION OFF ;RUNTIME INSTRUMENTATION ON ;SEARCH STRING;SEARCH ;STRING UNI⑶DE ;SET ADDRESSING MODE ;STORE CHARACTERSUNDER MASK HIGH,当 M3 字段为 0 时,R1 字段中的代码位 6 或 7 ;STORE CLOCK ;STORE CLOCKEXTENDED ;STORE CLOCK FAST ;STORE FACILITY LIST EXTENDED ;STORE PAIR TO QUADffORD ;TEST ADDRESSING MODE ;TRANSACTION ABORT TRANSACTION BEGIN (TBEGIN和 TBEGINC两者);TRANSLATE AND TEST EXTENDED ; TRANSLATE AND TEST REVERSE EXTENDED ; TRANSLATEEXTENDED ;TRANSLATE ONE TO ONE ;TRANSLATE ONE TO TWO ;TRANSLATE TWO TO ONE ;以及TRANSLATE TWO TO TWO。
[0348]4.事务的存储操作数访问的八字的数量不超过四个。注意:LOAD ON CONDITION和STORE ON CONDITION被视为引用存储,与条件码无关。八字例如是32字节边界上由32个连续字节构成的组。
[0349]5.在此CPU上执行的事务或其它CPU或I/O子系统的存储不会访问任何包含256字节的以TRANSACTION BEGIN constrained (TBEGINC)指令开头的存储设备的4K字节块中的存储操作数。
[0350]6.事务不使用映射到同一绝对地址的不同逻辑地址访问指令或存储操作数。
[0351]7.事务所做的操作数引用应位于单个双字内,除了对于LOAD ACCESS MULTIPLE、LOAD MULTIPLE、LOAD MULTIPLE HIGH、STORE ACCESS MULTIPLE、STORE MULTIPLE 和 STOREMULTIPLE HIGH,操作数弓丨用应位于单个八字内。
[0352]如果受限事务违反上面列出的约束1-7中的任一项,便会(a)识别到事务约束程序中断,或者(b)执行继续,就像事务未受约束那样,除了进一步的约束违规仍会导致事务约束的程序中断。无法预测将采取哪个操作,所采取的操作可能根据所违反的约束而变化。
[0353]如果未出现约束违规、重复中断或与其它CPU或1/0子系统发生冲突,受限事务将最终完成,如上所述。
[0354]1.如果事务满足以下准则,将提高成功完成受限事务的几率:
[0355]a.所发出的指令数小于最大值32。
[0356]b.存储操作数引用小于最大值4个八字。
[0357]c.存储操作数引用位于同一高速缓存线上。
[0358]d.所有事务对同一位置的存储操作数引用以同一顺序发生。
[0359]2.受限事务不一定第一次执行便成功。但是,如果受限事务在未违反所列任何约束的情况下中止,CPU将采用电路确保事务的重复执行接着成功完成。
[0360]3.在受限事务内,TRANSACTION BEGIN为受限制令,因此无法嵌套受限事务。
[0361]4.受限事务违反上面约束1-7中的任一项都可能导致程序循环。
[0362]5.受限事务的限制类似于比较并交换循环的限制。由于来自其它CPU和1/0子系统的潜在干扰,不能从架构上保证COMPARE AND SWAP指令始终可以以条件码O成功完成。受限事务可能受到类似干扰的影响,这些干扰采取取回或存储冲突或者热中断的形式。
[0363]CPU采用公平算法确保在没有任何约束违规的情况下,受限事务最终完成。
[0364]6.为了确定完成受限事务所需的重复迭代数量,程序可以在不受通用寄存器保存掩码限制的通用寄存器中采用计数器。下面示出一个实例:
[0365]
【权利要求】
1.一种用于促进计算环境中的处理的方法,所述方法包括: 由所述计算环境的处理器跟踪在所述处理器内执行的事务的中止次数,所述事务有效地延迟将事务性存储提交到主存储器,直到完成选定事务,并且所述跟踪采用所述处理器内的计数器来跟踪所述中止次数; 判定所述事务是否已成功完成,并且根据所述事务成功完成,自动将所述计数器重置为预定值;以及 根据所述事务中止,基于以下情况之一而自动将所述计数器重置为所述预定值: 所述计数器达到所述事务的阈值中止次数,从而导致针对所述事务呈现中断;或者 呈现所述事务的中断,其中未重新执行所述事务。
2.根据权利要求1的方法,其中所述方法还包括根据所述事务中止,判定所述计数器是否达到所述阈值中止次数,并且根据所述计数器未达到所述阈值中止次数,经由transaction begin指令重新执行所述事务。
3.根据权利要求2的方法,其中所述事务是具有与之关联的多个限制的受限事务,并且其中所述 transaction begin J旨令是 transaction begin constrained J旨令。
4.根据权利要求1的方法,其中所述方法还包括根据所述事务中止,判定所述计数器是否达到所述阈值中止次数,并且根据所述计数器未达到所述阈值中止次数,递增所述计数器,并将程序指令地址设置为transaction begin指令以重新执行所述事务。
5.根据权利要求1的方法,其中所述方法还包括根据所述事务中止,判定所述计数器是否达到所述阈值中止次数,并且根据所述计数器未达到所述阈值中止次数,判定是否采取操作以促进重新执行时所述事务的成功完成。
6.根据权利要求5的方法,其`中所述方法还包括: 根据判定指示要执行操作,选择一个或多个操作;以及 执行所选择的一个或多个操作。
7.根据权利要求6的方法,其中所述一个或多个操作包括以下操作中的一个或多个操作:禁用分支预测、禁用推测性指令取回、禁用超标量分派、禁用乱序执行、独占地取回高速缓存未命中,或者通过指令流水线执行单个指令。
8.根据权利要求7的方法,其中所述以下操作还包括使用信号量阻止一个或多个其它处理器。
9.根据权利要求6的方法,其中所述选择包括根据所述计数器的值和所述中止的原因中的一个或多个来选择操作。
10.一种用于促进计算环境中的处理的计算机系统,所述计算机系统包括: 存储器;以及 与所述存储器通信的处理器,其中所述计算机系统被配置为执行一种方法,所述方法包括: 由所述计算环境的处理器跟踪在所述处理器内执行的事务的中止次数,所述事务有效地延迟将事务性存储提交到主存储器,直到完成选定事务,并且所述跟踪采用所述处理器内的计数器来跟踪所述中止次数; 判定所述事务是否已成功完成,并且根据所述事务成功完成,自动将所述计数器重置为预定值;以及根据所述事务中止,基于以下情况之一而自动将所述计数器重置为所述预定值: 所述计数器达到所述事务的阈值中止次数,从而导致针对所述事务呈现中断;或者 呈现所述事务的中断,其中未重新执行所述事务。
11.根据权利要求10的计算机系统,其中所述方法还包括根据所述事务中止,判定所述计数器是否达到所述阈值中止次数,并且根据所述计数器未达到所述阈值中止次数,经由transaction begin指令重新执行所述事务,其中所述事务是具有与之关联的多个限制的受限事务,并且所述 transaction begin 指令是 transaction begin constrained 指令。
12.根据权利要求10的计算机系统,其中所述方法还包括根据所述事务中止,判定所述计数器是否达到所述阈值中止次数,并且根据所述计数器未达到所述阈值中止次数,递增所述计数器,并将程序指令地址设置为transaction begin指令以重新执行所述事务。
13.根据权利要求10的计算机系统,其中所述方法还包括根据所述事务中止,判定所述计数器是否达到所述阈值中止次数,并且根据所述计数器未达到所述阈值中止次数,判定是否采取操作以促进重新执行时所述事务的成功完成。
14.根据权利要求13的计算机系统,其中所述方法还包括: 根据判定指示要执行操作,选择一个或多个操作;以及 执行所选择的一个或多个操作。
15.根据权利要求14的计算机系统,其中所述一个或多个操作包括以下操作中的一个或多个操作:禁用分支预测、禁用推测性指令取回、禁用超标量分派、禁用乱序执行、独占地取回高速缓存未命中,或者通过指令流水线执行单个指令。
16.根据权利要求15的计算机系统,其中所述以下操作还包括使用信号量阻止一个或多个其它处理器。
17.根据权利要求14的计算机系统,其中所述选择包括根据所述计数器的值和所述中止的原因中的一个或多个来选择操作。
【文档编号】G06F9/30GK103513960SQ201310236184
【公开日】2014年1月15日 申请日期:2013年6月14日 优先权日:2012年6月15日
【发明者】B·F·贝尔马尔, C·雅各比, R·W·菲雷, T·J·斯利格尔 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1