受限事务执行的制作方法

文档序号:6498655阅读:147来源:国知局
受限事务执行的制作方法
【专利摘要】提供受限事务处理。通过事务开始受限指令的执行来起始受限事务。受限事务具有与之关联的多个限制。缺少受限的违反,所述受限事务将要完成。如果遭遇中止条件,则开始于事务开始指令,重新执行事务。限制的违反可能发生中断。
【专利说明】受限事务执行

【技术领域】
[0001] 一个或多个方面大体上关于多处理计算环境,且尤其关于此类计算环境内的事务 处理。

【背景技术】
[0002] 多处理器编程中的持久挑战为由多个中央处理单元(CPU)对同一储存位置的更 新的挑战。更新储存位置的许多指令(甚至包括诸如AND的简单逻辑运算)用对该位置的 多次存取来进行该更新。举例而言,首先提取储存位置,且接着储存回已更新结果。
[0003] 为了使多个CPU安全地更新同一储存位置,序列化对该位置的存取。用先前由国 际商业机器公司提供的S/360架构引入的一个指令(TEST AND SET指令)提供储存位置的 连锁更新(interlocked update)。连锁更新意谓:如由其他CPU及输入/输出(I/O)子系 统(例如,通道子系统)所观察的那样,指令的整个储存存取看来像是自动地发生的一样。 稍后,由国际商业机器公司提供的S/370架构引入COMPARE AND SWAP及COMPARE DOUBLE AND SWAP指令,这些指令提供执行连锁更新的较精密方式且允许通常被称为锁定字组(或 旗号)的实施。最近新增的指令已提供额外连锁更新能力,包括COMPARE AND SWAP AND PURGE及COMPARE AND SWAP AND STORE。然而,所有这些指令提供用于仅单一储存位置的 连锁。
[0004] 较复杂的程序技术可需要多个储存位置的连锁更新,诸如,当将一元素新增至一 双向链接清单(doubly-linked list)时。在此类操作中,前向指针及向后指针两者皆看来 像是被同时地更新一样,如由其他CPU及1/0子系统所观察的那样。为了实现此类多重位 置更新,强制程序使用分离的单一序列化点,诸如,锁定字组。然而,锁定字组可提供比所保 证的序列化层级粗略得多的序列化层级;举例而言,锁定字组可序列化数百万个元素的整 个队列,即使仅两个元素正被更新亦如此。程序可结构化数据以使用较精细粒度级序列化 (例如,锁定点阶层),但这引入额外问题,诸如,在违反该阶层时的潜在锁死情形,及在程 序遭遇错误同时保持一或多个锁定时或在不能获取锁定时的复原问题。
[0005] 除了以上内容以外,亦存在程序可以执行可能引起或可能不引起异常情况的指令 序列的众多情境。若未发生异常情况,则程序继续;然而,若辨识出异常,则程序可采取校正 动作以消除异常情况。作为一实例,Java可在(例如)理论式执行、函数的部分内嵌和/或 指针空值检查的重新定序中利用此类执行。
[0006] 在诸如由国际商业机器公司提供的z/0S及其前身的传统操作系统环境中,程序 建立复原环境以拦截程序可遭遇的任何程序异常情况。若程序未拦截到异常,则操作系统 通常针对操作系统未准备好进行处置的异常而例外地终止程序。建立及利用此类环境是昂 贵且复杂的。


【发明内容】

[0007] 经由提供一种用于处理计算环境内的事务的计算机程序产品而克服先前技术的 缺点且提供优点。该计算机程序产品包括一计算机可读储存介质,该计算机可读储存介质 可由一处理电路读取且储存指令以供该处理电路执行来执行一方法。举例而言,所述方法 包括以下步骤:由处理器在计算环境中执行事务,所述事务有效地延迟将事务存储交付至 主存储器,直到选择的事务完成为止;基于执行所述事务而确定已经出现中止条件;检查 所述事务是否为受限事务,所述受限事务具有与之关联的一个或多个限制;以及基于确定 所述中止条件和所述检查指示所述事务是受限事务,返回到所述事务的开始以重新执行所 述事务。
[0008] 本文亦描述及主张与一个或多个实施例相关的方法及系统。另外,本文亦描述且 可主张与一个或多个实施例相关的服务。
[0009] 贯穿全文实现额外特征及优点。其他实施例及方面在本文中得以详细地描述且被 看作本发明的部分。

【专利附图】

【附图说明】
[0010] 在本说明书完结时于权利要求中将一个或多个方面特定地指出且清楚地主张为 实例。前述及其他目标、特征及优点自结合附图而进行的以下详细描述变得显而易见,在这 些图中:
[0011] 图1描绘计算环境的一实施例;
[0012] 图2A描绘事务开始(TBEGIN)指令的一实例;
[0013] 图2B描绘图2A的TBEGIN指令的字段的另外细节的一实施例;
[0014] 图3A描绘事务开始受限(TBEGINC)指令的一实例;
[0015] 图3B描绘图3A的TBEGINC指令的字段的另外细节的一实施例;
[0016] 图4描绘事务结束(TEND)指令的一实例;
[0017] 图5描绘事务中止(TABORT)指令的一实例;
[0018] 图6描绘嵌套事务的一实例;
[0019] 图 7 描绘 NONTRANSACTIONAL STORE(NTSTG)指令的一实例;
[0020] 图 8 描绘 EXTRACT TRANSACTION NESTING DEPTH(ETND)指令的一实例;
[0021] 图9描绘事务诊断区块的一实例;
[0022] 图10描绘中止的实例原因,连同关联中止码及条件码;
[0023] 图11描绘与创建受限或非受限事务关联的逻辑的一实施例;
[0024] 图12描绘与执行事务,并且具体地说,与取决于事务的类型而处理中止条件关联 的逻辑的一实施例;
[0025] 图13描绘与执行TBEGINC指令相关联的逻辑的一实施例;
[0026] 图14描绘与采取动作以便于受限事务的完成相关联的逻辑的一实施例;
[0027] 图15A至图15B描绘将队列元素插入至队列元素双向链接清单中的实例;
[0028] 图16描绘计算机程序产品的一实施例;
[0029] 图17描绘主机计算机系统的一实施例;
[0030] 图18描绘计算机系统的另外实例;
[0031] 图19描绘包含计算机网络的计算机系统的另一实例;
[0032] 图20描绘计算机系统的各种元件的一实施例;
[0033]图21A描绘图20的计算机系统的执行单元的一实施例;
[0034] 图21B描绘图20的计算机系统的分支单元的一实施例;
[0035] 图21C描绘图20的计算机系统的载入/储存单元的一实施例;及
[0036] 图22描绘模拟主机计算机系统的一实施例。

【具体实施方式】
[0037] 根据一个方面,提供一种事务执行(TX)设施。此设施提供用于指令的事务处理, 且在一个或多个实施例中提供如下文所描述的不同执行模式,以及事务处理的嵌套层级。
[0038] 事务执行设施引入被称作事务执行(TX)模式的CPU状态。在CPU重设之后,CPU 并不处于TX模式。CPU藉由TRANSACTION BEGIN指令进入TX模式。CPU藉由(a)最外部 TRANSACTION END指令(关于内部指令及外部指令的更多细节如下)或(b)正被中止的事 务而离开TX模式。虽然处于TX模式,但由CPU进行的储存存取看来像是区块并行的一样, 如由其他CPU及I/O子系统所观察的那样。储存存取(a)在最外部事务在无中止的情况下 结束时被交付至存储器(亦即,例如,在CPU本地的高速缓存或缓冲器中进行的更新经传播 及储存于真实存储器中且可为其他CPU所见),或(b)在事务中止时被舍弃。
[0039] 事务可为嵌套。亦即,在CPU处于TX模式时,CPU可执行另一 TRANSACTION BEGIN 指令。使CPU进入TX模式的指令被称作最外部TRANSACTION BEGIN ;相似地,程序据称处 于最外部事务。
[0040] TRANSACTION BEGIN的后续执行被称作内部指令;且程序正执行内部事务。模型 提供最小嵌套深度及模型相依最大嵌套深度。EXTRACTTRANSACTION NESTING DEPTH指令传 回当前嵌套深度值,且在一另外实施例中可传回最大嵌套深度值。此技术使用被称作"扁平 化嵌套(flattened nesting)"的模型,其中任何嵌套深度处的中止条件造成事务的所有层 级中止,且控制传回至在最外部TRANSACTION BEGIN之后的指令。
[0041] 在事务的处理期间,由一个CPU进行的事务存取据称与(a)由另一 CPU进行的事 务存取或非事务存取冲突,或与(b)由1/0子系统进行的非事务存取冲突(若两种存取是 针对同一高速缓存行内的任何位置,且这些存取中的一个或两个为储存)。换言之,为了使 事务执行有生产力,CPU不应被观察到进行事务存取直至事务存取交付为止。此编程模型 在某些环境中可以高度地有效;例如,数百万个元素的双向链接清单中的两个点的更新。然 而,若针对正被事务地存取的储存位置存在许多争用,则该编程模型可能较不有效。
[0042] 在一个事务执行模型(在本文中被称作非受限事务)中,当事务中止时,程序可尝 试重新驱动事务以希望不再出现中止情况,或程序可"后退"至等效非事务路径。在另一事 务执行模型(在本文中被称作受限事务)中,已中止事务由CPU自动地重新驱动;在不存在 限制违反时,受限事务确保最终完成。
[0043] 当起始事务时,程序可指定各种控制,诸如:(a)在事务中止时哪些通用寄存器恢 复为其原始内容;(b)是否允许事务修改浮点寄存器上下文,包括(例如)浮点寄存器及浮 点控制寄存器;(c)是否允许事务修改存取寄存器(AR);及(d)是否将封锁某些程序异常 情况免于造成中断。若非受限事务中止,则可提供各种诊断信息。举例而言,起始非受限事 务的最外部TBEGIN指令可指明程序指定事务诊断区块(TDB)。另外,若事务分别归因于程 序中断或造成解译性执行结束的情况而中止,则亦可使用CPU的前置区域中或由主机的状 态描述指明的TDB。
[0044] 上文指示各种类型的寄存器。本文进一步详细地解释这些寄存器。通用寄存器可 用作一般算术及逻辑运算中的累加器。在一个实施例中,每一寄存器含有64个位的位置, 且存在16个通用寄存器。这些通用寄存器由数字0至15识别,且由一指令中的四位R字 段指明。一些指令规定藉由具有若干R字段来寻址多个通用寄存器。对于一些指令,特定 通用寄存器的使用被暗示,而非由该指令的R字段明确地指明。
[0045] 除了作为一般算术及逻辑运算中的累加器的使用以外,16个通用寄存器中的15 个寄存器亦在地址产生中用作基底地址及索引寄存器。在此等状况下,这些寄存器由一指 令中的四位B字段或X字段指明。该B或X字段中的值0指定出将不应用基底或索引,且 因此,通用寄存器0将不被指明为含有基底地址或索引。
[0046] 浮点指令使用浮点寄存器集合。在一实施例中,CPU具有16个浮点寄存器。这些 浮点寄存器由数字〇至15识别,且由浮点指令中的四位R字段指明。每一浮点寄存器为64 个位长,且可含有短(32位)浮点操作数或长(64位)浮点操作数。
[0047] 浮点控制(FPC)寄存器为含有屏敝位、标志位、数据异常码及舍位模式位的32位 寄存器,且在浮点运算的处理期间被使用。
[0048] 另外,在一个实施例中,CPU具有16个控制寄存器,每一控制寄存器具有64个位的 位置。这些寄存器中的位的位置指派至系统中的特定设施,诸如,程序事件记录(PER)(下 文所论述),且用以指定出可进行操作,或用以供给由该设施需要的特殊信息。在一个实施 例中,对于事务设施,使用CRO(位8及9)及CR2(位61至63),如下文所描述。
[0049] 举例而言,CPU具有被编号为0至15的16个存取寄存器。一个存取寄存器由含 有地址空间控制元素(ASCE)的间接规格的32个位的位置组成。地址空间控制元素为由动 态地址转译(DAT)机制使用以将参考转译至对应地址空间的参数。当CPU处于被称作存取 寄存器模式的模式(由程序状态字组(PSW)中的位控制)时,用以指定针对储存操作数参 考的逻辑地址的指令B字段指明存取寄存器,且由存取寄存器指定的地址空间控制元素由 DAT用于正被进行的参考。对于一些指令,使用R字段而非B字段。提供指令以用于载入及 储存存取寄存器的内容且用于将一个存取寄存器的内容移动至另一存取寄存器。
[0050] 存取寄存器1至15中每一个可指明任何地址空间。存取寄存器0指明主要指令 空间。当存取寄存器1至15中的一个用以指明地址空间时,CPU判定藉由转译存取寄存器 的内容而指明哪一地址空间。当存取寄存器0用以指明地址空间时,CPU将该存取寄存器 视为指明主要指令空间,且CPU并不检验该存取寄存器的实际内容。因此,16个存取寄存器 可在任一时间指明主要指令空间及15个其他空间的最大值。
[0051] 在一个实施例中,存在多个类型的地址空间。一个地址空间为整数(虚拟地址) 的连续序列,连同允许每一数字与存储器中的字节位置相关联的特定变换参数。该序列以 〇开始且自左侧至右侧进行。
[0052] 举例而言,在z/Architecture中,当虚拟地址是由CPU使用以存取主存储器(又 名,主存储器)时,虚拟地址首先凭借动态地址转译(DAT)而转换至真实地址,且接着凭借 加前缀(prefixing)而转换至绝对地址。DAT可使用表的一个至五个层级(页、区段、区第 三、区第二及区第一)作为变换参数。用于特定地址空间的最高层级表的指明(原点及长 度)被称作地址空间控制元素,且该指明被发现供DAT用于控制寄存器中或如由存取寄存 器所指定。或者,用于地址空间的地址空间控制元素可为真实空间指明,其指示出DAT用以 简单地藉由将虚拟地址视为真实地址且不使用任何表来转译虚拟地址。
[0053] DAT在不同时间使用不同控制寄存器中或由存取寄存器指定的地址空间控制元 素。选择由当前PSW中指定的转译模式判定。四个转译模式是可用的:主要空间模式、次要 空间模式、存取寄存器模式及本籍空间模式(home space mode)。取决于转译模式,不同地 址空间是可寻址的。
[0054] 在CPU处于主要空间模式或次要空间模式时的任何时刻,CPU可转译属于两个地 址空间(主要地址空间及第二地址空间)的虚拟地址。在CPU处于存取寄存器模式时的任 何时刻,CPU可转译高达16个地址空间(主要地址空间及高达15个AR指定地址空间)的 虚拟地址。在CPU处于本籍空间模式时的任何时刻,CPU可转译本籍地址空间的虚拟地址。
[0055] 主要地址空间因而被识别,这是因为其由主要虚拟地址组成,这些主要虚拟地址 凭借主要地址空间控制元素(ASCE)而转译。相似地,次要地址空间由凭借次要ASCE转译 的次要虚拟地址组成;AR指定地址空间由凭借AR指定ASCE转译的AR指定虚拟地址组成; 且本籍地址空间由凭借本籍ASCE转译的本籍虚拟地址组成。主要ASCE及次要ASCE分别 处于控制寄存器1及7中。AR指定ASCE处于使用控制寄存器2、5及8经由被称作存取寄 存器转译(ART)的处理而定位的ASN第二表项中。本籍ASCE处于控制寄存器13中。
[0056] 参看图1来描述用以并入及使用本文所描述的事务设施的一个或多个方面的计 算环境的一个实施例。
[0057] 参看图1,在一实例中,计算环境100基于由纽约州阿蒙克市的国际商 业机器(IBMk)公司提供的z/Architecture。2010年8月第九版的名为"z/ Architecture-Principles of Operation"的 IBM 公开案(公开案第 SA22_7932-〇8 号)中 描述z/Architecture,该公开案的全文据此以引用方式并入本文中。
[0058] Z/ARCHITECTURE、IBM以及Z/0S及Z/VM(下文所参考)为纽约州阿蒙克市的国际 商业机器公司的注册商标。本文所使用的其他名称可为国际商业机器公司或其他公司的注 册商标、商标或产品名称。
[0059] 作为一实例,计算环境100包括经由一个或多个控制单元108耦接至一个或多个 输入/输出(1/0)器件106的中央处理器复合体(central processor complex, CPC) 102。举 例而言,中央处理器复合体102包括一个或多个中央处理器110、一个或多个分割区112(例 如,逻辑分割区(LP))、逻辑分割区超管理器(hyperviS〇r)114及输入/输出子系统115,其 中每一者在下文予以描述。
[0060] 中央处理器110为分配给逻辑分割区的实体处理器资源。详言之,每一逻辑分割 区112具有一个或多个逻辑处理器,其中每一逻辑处理器表示分配给该分割区的实体处理 器110的全部或份额。特定分割区112的逻辑处理器可专用于该分割区,使得底层处理器 资源110针对那个分割区而保留;或这些逻辑处理器可与另一分割区共用,使得该底层处 理器资源潜在地可用于另一分割区。
[0061] 逻辑分割区充当分离系统且具有一个或多个应用程序,且视情况在其中具有驻留 操作系统,该驻留操作系统针对每一逻辑分割区可不同。在一实施例中,操作系统为由纽 约州阿蒙克市的国际商业机器公司提供的Z/0S操作系统、z/VM操作系统、z/Linux操作系 统或TPF操作系统。逻辑分割区112由逻辑分割区超管理器114管理,逻辑分割区超管理 器114由处理器110上运行的固件实施。如本文所使用,固件包括(例如)处理器的微码 (microcode)和/或毫码(millicode)。举例而言,固件包括在较高层级机器码的实施中使 用的硬件层级指令和/或数据结构。在一实施例中,举例而言,固件包括通常作为包括受信 任软件的微码或特定于底层硬件的微码进行递送且控制对系统硬件的操作系统存取的专 属码。
[0062] 逻辑分割区及逻辑分割区超管理器各自包含驻留于与中央处理器相关联的中央 存储器的各别分割区中的一个或多个程序。逻辑分割区超管理器114的一个实例为由纽约 州阿蒙克市的国际商业机器公司提供的Processor Resource/System Manager (PR/SM)。 [0063] 输入/输出子系统115在输入/输出器件106与主存储器(又名,主存储器)之 间引导信息流动。输入/输出子系统耦接至中央处理复合体,此在于:输入/输出子系统可 为中央处理器复合体的部分或与中央处理器复合体分离。1/0子系统使中央处理器减轻直 接地与输入/输出器件通信的任务的负担,且准许数据处理与输入/输出处理并行地进行。 为了提供通信,1/0子系统使用1/0通信适配器。存在各种类型的通信适配器,包括(例 如)通道、1/0适配器、PCI卡、乙太网卡、小型计算机储存接口(SCSI)卡等等。在本文所描 述的特定实例中,1/0通信适配器为通道,且因此,1/0子系统在本文中被称作通道子系统。 然而,此情形仅为一实例。可使用其他类型的1/0子系统。
[0064] 1/0子系统使用一个或多个输入/输出路径作为通信链路来管理至或自输入/输 出器件106的信息流动。在此特定实例中,此等路径被称作通道路径,这是因为通信适配器 为通道。
[0065] 上文所描述的计算环境仅为可使用的计算环境的一个实例。可使用包括但不限于 非分割环境、其他分割环境和/或模拟环境的其他环境;实施例并不限于任一环境。
[0066] 根据一个或多个方面,事务执行设施为CPU增强,其提供可用来使CPU执行指令序 列(被称作事务)的方式,这些指令可存取多个储存位置,包括那些位置的更新。如由其他 (PU及1/0子系统所观察,事务是(a)整体上作为单一不可部分完成操作而完成,或(b)中 止,从而潜在地不留下事务曾经执行的迹象(惟本文所描述的某些条件除外)。因此,成功 完成的事务可在没有在传统多处理模型中需要的任何特殊锁定的情况下更新众多储存位 置。
[0067] 举例而言,事务执行设施包括一个或多个控制、一个或多个指令、包括受限执行及 非受限执行的事务处理及中止处理,其中每一个在下文予以进一步描述。
[0068] 在一个实施例中,使用以下各者以控制事务执行设施:三个特殊用途控制,包括事 务中止程序状态字组(PSW)、事务诊断区块(TDB)地址及事务嵌套深度;五个控制寄存器 位;及六个一般指令,包括TRANSACTION BEGIN(受限及非受限)、TRANSACTI0N END、EXTRACT TRANSACTION NESTING DEPTH、TRANSACTI0N ABORT 及 N0NTRANSACTI0NAL STORE。当该设施 被安装时,该设施安装于(例如)配置中的所有CPU中。一个设施指示(在一实施中为位 73)在为1时指示事务执行设施被安装。
[0069] 当事务执行设施被安装时,该配置提供非受限事务执行设施且视情况提供受限事 务执行设施,其中每一设施在下文予以描述。作为实例,当设施指示50及73皆为1时,受 限事务执行设施被安装。两个设施指示皆在指定位置处储存于存储器中。
[0070] 如本文所使用,指令名称TRANSACTION BEGIN指代具有助记符TBEGIN(用于非受 限事务的事务开始)及TBEGINC(用于受限事务的事务开始)的指令。关于特定指令的论 述由指令名称继之以圆括号或括号中的助记符指示,或简单地由助记符指示。
[0071] 图2A至图2B中描绘TRANSACTION BEGIN(TBEGIN)指令的格式的一实施例。作为 一实例,TBEGIN指令200包括:操作码字段202,其包括指定事务开始非受限操作的操作码; 基本字段(B1) 204 ;位移字段(D1) 206 ;及立即字段(I2) 208。当B1字段为非零时,将由&204 指定的通用寄存器的内容添加至DjOe以获得第一操作数地址。
[0072] 当B1字段为非零时,以下内容适用:
[0073] ?当事务嵌套深度最初为0时,第一操作数地址指明被称作TBEGIN指定的TDB (下 文进一步所描述)的256字节事务诊断区块的位置,若事务中止,则各种诊断信息可储存至 TBEGIN指定的TDB中。当CPU处于主要空间模式或存取寄存器模式时,第一操作数地址指 明主要地址空间中的位置。当CPU处于次要空间模式或本籍空间模式时,第一操作数地址 分别指明次要地址空间或本籍地址空间中的位置。当DAT关断时,事务诊断区块(TDB)地 址(TDBA)指明真实存储器中的位置。
[0074] 判定对第一操作数的储存可存取性。若为可存取,则操作数的逻辑地址置放至事 务诊断区块地址(TDBA)中,且IDBA有效。
[0075] ?当CPU已经处于非受限事务执行模式时,TDBA未被修改,且不可预测的是第一操 作数是否针对可存取性而被测试。
[0076] 当B1字段为0时,针对第一操作数未侦测到存取异常,且对于最外部TBEGIN指令, IDBA无效。
[0077] 在一实例中,I2字段的位被定义如下:
[0078] 通用寄存器储存屏敝(GRSM) 210 (图2B) :12字段的位0至7含有通用寄存器储存 屏敝(GRSM)。GRSM的每一位表示通用寄存器的偶奇对,其中位0表示寄存器0及1,位1表 示寄存器2及3,等等。当最外部TBEGIN指令的GRSM中的位为0时,不储存对应寄存器对。 当最外部TBEGIN指令的GRSM中的位为1时,将对应寄存器对储存于不能由程序直接地存 取的依赖于模型的位置中。
[0079] 若事务中止,则当执行最外部TBEGIN指令时,将已储存寄存器对恢复为其内容。 当事务中止时,不恢复所有其他(未储存)通用寄存器的内容。
[0080] 在惟最外部TBEGIN除外的所有TBEGIN上忽略通用寄存器储存屏敝。
[0081] 允许AR修改(A) 212 :A控制(I2字段的位12)控制是否允许事务修改存取寄存器。 有效允许AR修改控制为针对当前嵌套层级及针对所有外部层级的TBEGIN指令中的A控制 的逻辑AND。
[0082] 若有效A控制为0,则在尝试修改任何存取寄存器时事务将用中止码11 (受限定 指令)进行中止。若有效A控制为1,则在存取寄存器被修改(不存在任何其他中止条件) 时事务将不中止。
[0083] 允许浮点运算(F) 214 :F控制(I2字段的位13)控制是否允许事务执行指定浮点 指令。有效允许浮点运算控制为针对当前嵌套层级及针对所有外部层级的TBEGIN指令中 的F控制的逻辑AND。
[0084] 若有效F控制为0,则(a)在尝试执行浮点指令时事务将用中止码11(受限定指 令)进行中止,且(b)浮点控制寄存器(FPCR)的字节2中的数据异常码(DXC)将不由任何 数据异常程序异常情况设定。若有效F控制为1,则(a)在尝试执行浮点指令(不存在任何 其他中止条件)时事务将不中止,且(b)FPCR中的DXC可由数据异常程序异常情况设定。
[0085] 程序中断筛选控制(PIFC) 216 :12字段的位14至15为程序中断筛选控制(PIFC)。 PIFC控制在CPU处于事务执行模式时发生的某些类别的程序异常情况(例如,寻址异常、数 据异常、操作异常、保护异常等等)是否引起中断。
[0086] 有效PIFC为针对当前嵌套层级及针对所有外部层级的TBEGIN指令中的PIFC的 最高值。当有效PIFC为0时,所有程序异常情况引起中断。当有效PIFC为1时,具有事务 执行类别1及2的程序异常情况引起中断。(取决于异常的严重性,每一程序异常情况被指 派至少一事务执行类别。严重性基于在事务的重复执行期间复原的可能性,及操作系统是 否需要查看中断。)当有效PIFC为2时,具有事务执行类别1的程序异常情况引起中断。 保留为3的PIFC。
[0087] I2字段的位8至11 (指令的位40至43)被保留且应含有0 ;否则,程序在未来可 不相容地操作。
[0088] 参看图3A至图3B来描述事务开始受限(TBEGINC)指令的格式的一实施例。在一 实例中,TBEGINC 300包括:操作码字段302,其包括指定事务开始受限操作的操作码;基本 字段(B1) 304 ;位移字段(D1) 306 ;及立即字段(I2) 308。将由&304指定的通用寄存器的内 容添加至0:306以获得第一操作数地址。然而,在用事务开始受限指令的情况下,第一操作 数地址不用以存取存储器。取而代之,指令的B1字段包括0 ;否则,辨识出规格异常。
[0089] 在一实施例中,I2字段包括各种控制,这些控制的实例在图3B中予以描绘。
[0090] 在一实例中,I2字段的位被定义如下:
[0091] 通用寄存器储存屏敝(GRSM) 310 :12字段的位0至7含有通用寄存器储存屏敝 (GRSM)。GRSM的每一位表示通用寄存器的偶奇对,其中位0表示寄存器0及1,位1表示寄 存器2及3,等等。当GRSM中的位为0时,不储存对应寄存器对。当GRSM中的位为1时,将 对应寄存器对储存于不能由程序直接地存取的依赖于模型的位置中。
[0092] 若事务中止,则当执行最外部TRANSACTION BEGIN指令时,将已储存寄存器对恢复 为其内容。当受限事务中止时,不恢复所有其他(未储存)通用寄存器的内容。
[0093] 当TBEGINC用以在非受限事务执行模式下继续执行时,忽略通用寄存器储存屏 敝。
[0094] 允许AR修改(A) 312 :A控制(I2字段的位12)控制是否允许事务修改存取寄存 器。有效允许AR修改控制为针对当前嵌套层级及针对任何外部TBEGIN或TBEGINC指令的 TBEGINC指令的A控制中的逻辑AND。
[0095] 若有效A控制为0,则在尝试修改任何存取寄存器时事务将用中止码11 (受限定 指令)进行中止。若有效A控制为1,则在存取寄存器被修改(不存在任何其他中止条件) 时事务将不中止。
[0096] I2字段的位8至11及13至15 (指令的位40至43及45至47)被保留且应含有 0〇
[0097] 事务开始指令的结束由TRANSACTION END (TEND)指令指定,该TRANSACTION END(TEND)指令的格式在图4中予以描绘。作为一实例,TEND指令400包括操作码字段402, 操作码字段402包括指定事务结束操作的操作码。
[0098] 关于事务执行设施而使用多个术语,且因此,仅出于方便起见,下文以按字母排序 次序提供术语清单。在一实施例中,这些术语具有以下定义:
[0099] 中止:当事务在引起事务嵌套深度为0的TRANSACTION END指令之前结束时,事务 中止。在一实施例中,当事务中止时,发生以下情形:
[0100] ?由事务的任何及所有层级进行的事务储存存取被舍弃(亦即,未被交付)。
[0101] ?由事务的任何及所有层级进行的非事务储存存取被交付。
[0102] ?由最外部TRANSACTION BEGIN指令的通用寄存器储存屏敝(GRSM)指明的寄存器 在事务执行之前恢复为其内容(亦即,恢复为其在执行最外部TRANSACTION BEGIN指令时 的内容)。未由最外部TRANSACTION BEGIN指令的通用寄存器储存屏敝指明的通用寄存器 未被恢复。
[0103] ?存取寄存器、浮点寄存器及浮点控制寄存器未被恢复。当事务中止时,保持在事 务执行期间对这些寄存器进行的任何改变。
[0104] 事务可归因于多种原因而中止,这些原因包括受限定指令的已尝试执行、受限定 资源的已尝试修改、事务冲突、超过各种CPU资源、任何解译性执行拦截条件、任何中断、 TRANSACTION ABORT指令及其他原因。事务中止码提供事务为何可中止的特定原因。
[0105] 参看图5来描述TRANSACTION ABORT(TABORT)指令的格式的一实例。作为一实 例,TABORT指令500包括:操作码字段502,其包括指定事务中止操作的操作码;基本字段 (B2)504;及位移字段(D2)506。当氏字段为非零时,将由B2504指定的通用寄存器的内容 添加至D2506以获得第二操作数地址;否则,第二操作数地址仅由D2字段形成,且忽略B 2字 段。第二操作数地址不用以寻址数据;取而代之,该地址形成在中止处理期间置放于事务诊 断区块中的事务中止码。用于第二操作数地址的地址计算遵循地址算术规则:在24位寻址 模式下,将位〇至29设定为0 ;在31位寻址模式下,将位0至32设定为0。
[0106] 交付:在最外部TRANSACTION END指令完成时,CPU交付由事务进行的储存存取 (亦即,最外部事务及任何嵌套层级),使得这些储存存取可为其他CPU及1/0子系统所见。 如由其他CPU且由1/0子系统所观察,当发生交付时,由事务的所有嵌套层级进行的所有提 取及储存存取看来像是作为单一并行操作而发生。
[0107] 通用寄存器、存取寄存器、浮点寄存器及浮点控制寄存器的内容未藉由交付程序 修改。当交付事务的储存时,保持在事务执行期间对这些寄存器进行的任何改变。
[0108] 冲突:由一个CPU进行的事务存取与(a)由另一 CPU进行的事务存取或非事务存 取冲突,或与(b)由1/0子系统进行的非事务存取冲突(若两种存取针对同一高速缓存行 内的任何位置,且这些存取中的一个或多个为储存)。
[0109] 冲突可藉由CPU对指令的理论式执行而侦测,即使冲突不可以概念序列被侦测亦 如此。
[0110] 受限事务:受限事务为在受限事务执行模式下执行且经受以下限制的事务:
[0111] ?一般指令的子集可用。
[0112] ?可执行有限数目个指令。
[0113] ?可存取有限数目个储存操作数位置。
[0114] ?事务限于单一嵌套层级。
[0115] 在不存在重复中断或与其他CPU或1/0子系统的冲突时,受限事务最终完成,因此 无需中止处理例程。下文详细地描述受限事务。
[0116] 当在CPU已经处于非受限事务执行模式时执行TRANSACTION BEGIN受限 (TBEGINC)指令时,执行作为嵌套非受限事务而继续。
[0117] 受限事务执行模式:当事务嵌套深度为0且事务由TBEGINC指令起始时,CPU进入 受限事务执行模式。在CPU处于受限事务执行模式时,事务嵌套深度为1。
[0118] 嵌套事务:当在CPU处于非受限事务执行模式时发出TRANSACTIONBEGIN指令时, 事务为嵌套。
[0119] 事务执行设施使用被称作扁平化嵌套的模型。在扁平化嵌套模式下,由内部事务 进行的储存不能由其他CPU及I/O子系统观察直至最外部事务交付其储存为止。相似地, 若事务中止,则所有嵌套事务中止,且舍弃所有嵌套事务的所有事务储存。
[0120] 图6中描绘嵌套事务的一实例。如图所示,第一 TBEGIN 600启动最外部事务601, TBEGIN 602启动第一嵌套事务,且TBEGIN 604启动第二嵌套事务。在此实例中,TBEGIN 604及TEND 606定义最内部事务608。当TEND 610执行时,针对最外部事务及所有内部事 务交付(612)事务储存。
[0121] 非受限事务:非受限事务为在非受限事务执行模式下执行的事务。尽管非受限事 务并不以如同受限事务的方式受到限制,但非受限事务仍可归因于多种原因而中止。
[0122] 非受限事务执行模式:当事务由TBEGIN指令起始时,CPU进入非受限事务执行模 式。在CPU处于非受限事务执行模式时,事务嵌套深度可自1至最大事务嵌套深度而变化。
[0123] 非事务存取:非事务存取为由CPU在不处于事务执行模式时进行的储存操作数存 取(亦即,在事务外的传统储存存取)。另外,由I/O子系统进行的存取为非事务存取。另 夕卜,NONTRANSACTIONAL STORE指令可用以在CPU处于非受限事务执行模式时造成非事务储 存存取。
[0124] 参看图7来描述NONTRANSACTIONAL STORE指令的格式的一实施例。作为一实 例,NONTRANSACTIONAL STORE指令700包括:复数个操作码字段702a、702b,其指定指明 非事务储存操作的操作码;寄存器字段(R1) 704,其指定寄存器,该寄存器的内容被称作第 一操作数;索引字段(X2) 706 ;基本字段(B2) 708 ;第一位移字段(DL2) 710 ;及第二位移字段 (DH2) 712。将由X2字段及B2字段指明的通用寄存器的内容添加至DH2字段及DL 2字段的内 容的串连的内容以形成第二操作数地址。当X2字段或B2字段中任一个或两个为0时,对应 寄存器不参与该添加。
[0125] 使64位第一操作数在第二操作数位置处非事务地置于不变。
[0126] 由DH2字段及DL2字段的串连形成的位移被视为20位带正负号二进位整数。
[0127] 第二操作数用以在双字组边界上对准;否则,辨识出规格异常且抑制操作。
[0128] 外部/最外部事务:具有较低编号事务嵌套深度的事务为外部事务。具有为1的 事务嵌套深度值的事务为最外部事务。
[0129] 最外部TRANSACTION BEGIN指令为在事务嵌套深度最初为0时执行的指令。最外 部TRANSACTION END指令为使事务嵌套深度自1转变至0的指令。在此实施例中,受限事 务为最外部事务。
[0130] 程序中断筛选:当事务归因于某些程序异常情况而中止时,程序可视情况防 止发生中断。此技术被称作程序中断筛选。程序中断筛选经受中断的事务类别、来自 TRANSACTION BEGIN指令的有效程序中断筛选控制及控制寄存器O中的事务执行程序中断 筛选覆写。
[0131] 事务:在CPU处于事务执行模式时,事务包括所进行的储存操作数存取及所变更 的选择的通用寄存器。对于非受限事务,储存操作数存取可包括事务存取及非事务存取两 者。对于受限事务,储存操作数存取限于事务存取。如由其他CPU及I/O子系统所观察,由 CPU在处于事务执行模式时进行的所有储存操作数存取看来像是作为单一并行操作而发 生。若事务中止,则舍弃事务储存存取,且使由最外部TRANSACTION BEGIN指令的通用寄存 器储存屏敝指明的任何寄存器恢复为其在事务执行之前的内容。
[0132] 事务存取:事务存取为在CPU处于事务执行模式时进行的储存操作数存取,惟由 NONTRANSACTIONAL STORE指令进行的存取除外。
[0133] 事务执行模式:术语事务执行模式描述非受限事务执行模式及受限事务执行模式 两者的共同操作。因此,当描述该操作时,术语非受限及受限用以限定事务执行模式。
[0134] 当事务嵌套深度为0时,CPU不处于事务执行模式(亦被称作非事务执行模式)。
[0135] 如由CPU所观察,在事务执行模式下进行的提取及储存并非不同于在不处于事务 执行模式时进行的提取及储存。
[0136] 在z/Architecture的一实施例中,事务执行设施在控制寄存器0的位8至9、控制 寄存器2的位61至63、事务嵌套深度、事务诊断区块地址及事务中止程序状态字组(PSW) 的控制下。
[0137] 在初始CPU重设之后,将控制寄存器0的位的位置8至9、控制寄存器2的位的位 置62至63及事务嵌套深度的内容设定为0。当事务执行控制(控制寄存器0的位8)为0 时,不能将CPU置于事务执行模式。
[0138] 下文描述关于各种控制的另外细节。
[0139] 如所指示,事务执行设施由控制寄存器0中的两个位及控制寄存器2中的三个位 控制。举例而言:
[0140] 控制寄存器0位:在一实施例中,位指派如下:
[0141] 事务执行控制(TXC):控制寄存器0的位8为事务执行控制。此位提供可用来使控 制程序(例如,操作系统)指示事务执行设施是否可由该程序使用的机制。位8将为1以 成功地进入事务执行模式。
[0142] 当控制寄存器 0 的位 8 为 0 时,EXTRACT TRANSACTION NESTING DEPTH、 TRANSACTION BEGIN及TRANSACTION END指令的已尝试执行引起特殊操作执行。
[0143] 参看图8来描述EXTRACT TRANSACTION NESTING DEPTH指令的格式的一实施例。 作为一实例,EXTRACT TRANSACTION NESTING DEPTH指令800包括:操作码字段802,其指定 指示撷取事务嵌套深度操作的操作码;及寄存器字段RP04,其指明通用寄存器。
[0144] 将当前事务嵌套深度置于通用寄存器R1的位48至63中。该寄存器的位0至31 保持不变,且将该寄存器的位32至47设定为0。
[0145] 在一另外实施例中,亦将最大事务嵌套深度置于通用寄存器R1中,诸如,位16至 31中。
[0146] 事务执行程序中断筛选覆写(PIFO):控制寄存器0的位9为事务执行程序中断筛 选覆写。此位提供可用来使控制程序确保在CPU处于事务执行模式时发生的任何程序异常 情况引起中断而不管由TRANSACTION BEGIN指令指定或暗示的有效程序中断筛选控制的机 制。
[0147] 控制寄存器2位:在一实施例中,指派如下:
[0148] 事务诊断范畴(TDS):控制寄存器2的位61控制该寄存器的位62至63中的事务 诊断控制(TDC)的适用性,如下:
[0149] TDS
[0150] 值含义
[0151] 0 TDC适用而不管CPU处于问题状态或监督状态。
[0152] 1仅当CPU处于问题状态时TDC才适用。当CPU处于监督状态时,处理如同TDC 含有0 -样。
[0153] 事务诊断控制(TDC):控制寄存器2的位62至63为可用以使事务出于诊断目的 而随机地中止的2位无正负号整数。在一实例中,TDC的编码如下:
[0154] TDC
[0155] 值含义
[0156] 0 正常操作;事务并不由于TDC而中止。
[0157] 1 在随机指令处但在最外部TRANSACTION END指令的执行之前中止每一事务。
[0158] 2 在随机指令处中止随机事务。
[0159] 3 保留
[0160] 当事务归因于非零TDC而中止时,则可发生以下情形中任一者:
[0161] ?将中止码设定为码7至11、13至16或255中任一个,其中该码的值由CPU随机 地选择;将条件码设定成对应于中止码。下文进一步描述中止码。
[0162] ?对于非受限事务,将条件码设定为1。在此状况下,中止码不适用。
[0163] 这是依赖于是否实施TDC值1的模型。若未实施,则为1的值起作用就如同指定 2 -样。
[0164] 对于受限事务,处理为1的TDC值就如同指定为2的TDC值一样。
[0165] 若指定为3的TDC值,则结果是不可预测的。
[0166] 事务诊断区块地址(TDBA)
[0167] 当最外部TRANSACTION BEGIN(TBEGIN)指令的B1字段为非零时,自该指令的第一 操作数地址设定有效事务诊断区块地址(TDBA)。当CPU处于主要空间模式或存取寄存器 模式时,TDBA指明主要地址空间中的位置。当CPU处于次要空间模式或本籍空间模式时, TDBA分别指明次要地址空间或本籍地址空间中的位置。当DAT(动态地址转译)关断时, TDBA指明真实存储器中的位置。
[0168] 若事务随后中止,则TDBA由CPU使用以定位事务诊断区块(被称作TBEGIN指定 的TDB)。TDBA的最右侧三个位为0,此意谓TBEGIN指定的TDB处于双字组边界上。
[0169] 当最外部TRANSACTION BEGIN(TBEGIN)指令的B1字段为0时,事务诊断区块地址 无效,且若事务随后中止,则不储存TBEGIN指定的TDB。
[0170] 事务中止 PSW (TAPSW)
[0171] 在嵌套深度最初为0时TRANSACTION BEGIN(TBEGIN)指令的执行期间,将事务中 止PSW设定为当前PSW的内容;且事务中止PSW的指令地址指明下一循序指令(亦即,在 最外部TBEGIN之后的指令)。在嵌套深度最初为O时TRANSACTION BEGIN受限(TBEGINC) 指令的执行期间,将事务中止PSW设定为当前PSW的内容,惟事务中止PSW的指令地址指明 TBEGINC指令(而非在TBEGINC之后的下一循序指令)除外。
[0172] 当事务中止时,用指示中止情况的严重性的码来取代事务中止PSW中的条件码。 随后,若事务归因于不引起中断的原因而中止,则自事务中止PSW载入PSW ;若事务归因于 引起中断的原因而中止,则将事务中止PSW储存为中断旧PSW。
[0173] 在任何内部TRANSACTION BEGIN指令的执行期间不变更事务中止PSW。
[0174] 事务嵌套深度(TND)
[0175] 举例而言,事务嵌套深度为每当用条件码0来完成TRANSACTION BEGIN指令时累 加且每当完成TRANSACTION END指令时递减的16位无正负号值。当事务中止时或由CPU 重设时,将事务嵌套深度重设至0。
[0176] 在一实施例中,实施为为15之最大TND。
[0177] 在一实施中,当CPU处于受限事务执行模式时,事务嵌套深度为1。另外,尽管最大 TND可被表示为4位值,但TND经定义为16位值以促进其在事务诊断区块中的检测。
[0178] 事务诊断区块(TDB)
[0179] 当事务中止时,各种状态信息可储存于事务诊断区块(TDB)中,如下:
[0180] I. TBEGIN指定的TDB :对于非受限事务,当最外部TBEGIN指令的B1字段为非零时, 该指令的第一操作数地址指明TBEGIN指定的TDB。此地址为可由应用程序的中止处理例程 检验的应用程序指定位置。
[0181] 2.程序中断(PI)TDB :若非受限事务归因于非筛选程序异常情况而中止时,或若 受限事务归因于任何程序异常情况(亦即,引起正被辨识的程序中断的任何情况)而中止 时,将PI-TDB储存至前置区域中的位置中。此情形可用于使操作系统在其可提供的任何诊 断报告中进行检测及登出。
[0182] 3.拦截TDB :若事务归因于引起拦截的任何程序异常情况而中止(亦即,该情况造 成解译性执行结束且造成控制传回至主机程序),则TDB储存至用于访客操作系统的状态 描述区块中指定的位置中。
[0183] 在一实施例中,当TDB地址有效时(亦即,当最外部TBEGIN指令的B1字段为非零 时),仅储存TBEGIN指定的TDB。
[0184] 对于归因于未筛选程序异常情况的中止,将储存PI-TDB或拦截TDB中仅一者。因 此,可存在针对一中止而储存的零个、一个或两个TDB。
[0185] 下文描述关于TDB中每一个的一实例的另外细节:
[0186] TBEGIN指定之TDB :由有效事务诊断区块地址指定的256字节位置。当事务诊断 区块地址有效时,事务中止时储存TBEGIN指定的TDB。TBEGIN指定的TDB经受在执行最外 部TRANSACTION BEGIN指令时有效的所有储存保护机制。用于TBEGIN指定的TDB的任何 部分的PER(程序事件记录)储存变更事件在执行最外部TBEGIN期间而非在事务中止处理 期间被侦测。
[0187] PER的一个目的是协助对程序进行除错。作为实例,PER准许向程序提醒以下类型 的事件:
[0188] ?执行成功分支指令。提供使事件仅在分支目标位置处于已指明储存区域内时才 发生的选项。
[0189] ?自已指明储存区域提取指令。
[0190] ?变更已指明储存区域的内容。提供使事件仅在储存区域处于已指明地址空间内 时才发生的选项。
[0191] ?执行 STORE USING REAL ADDRESS 指令。
[0192] ?执行 TRANSACTION END 指令。
[0193] 程序可选择地指定出以上类型的事件中的一个或多个被辨识,惟用于STORE USING REAL ADDRESS的事件可仅与储存变更事件一起被指定除外。关于PER事件的信息系 凭借程序中断而提供至程序,其中该中断的原因是在中断码中被识别。
[0194] 当事务诊断区块地址无效时,不储存TBEGIN指定的TDB。
[0195] 程序中断TDB :真实位置6, 144至6, 399 (1800至18FF十六进位)。当事务归因于 程序中断而中止时,储存程序中断TDB。当事务归因于其他原因而中止时,程序中断TDB的 内容是不可预测的。
[0196] 程序中断TDB不经受任何保护机制。当在程序中断期间储存程序中断TDB时,PER 储存变更事件不针对程序中断TDB被侦测。
[0197] 拦截TDB :由状态描述的位置488至495指定的256字节主机真实位置。当已中 止事务引起访客程序中断拦截(亦即,拦截码8)时,储存拦截TDB。当事务归因于其他原因 而中止时,拦截TDB的内容是不可预测的。拦截TDB不经受任何保护机制。
[0198] 如图9所描绘,在一实施例中,事务诊断区块900的字段如下:
[0199] 格式902 :字节0含有有效性及格式指示,如下:
[0200]

【权利要求】
1. 一种用于处理计算环境内的事务的方法,所述方法包括以下步骤: 由处理器在计算环境中执行事务,所述事务有效地延迟将事务存储交付至主存储器, 直到选择的事务完成为止; 基于执行所述事务而确定已经出现中止条件; 检查所述事务是否为受限事务,所述受限事务具有与之关联的一个或多个限制;以及 基于确定所述中止条件和所述检查指示所述事务是受限事务,返回到所述事务的开始 以重新执行所述事务。
2. 如权利要求1所述的方法,其中,所述执行基于执行开始事务指令,所述开始事务指 令指示所述事务是否是受限的。
3. 如权利要求2所述的方法,其中,所述返回到所述事务的开始包括:返回到所述开始 事务指令。
4. 如权利要求1所述的方法,其中,所述方法还包括:重新执行所述事务,其中,所述重 新执行包括:执行一个或多个动作以促进所述事务的完成。
5. 如权利要求4所述的方法,其中,所述一个或多个动作包括以下各项中的至少一个: 禁止无序执行; 禁止其它处理器存取与所述事务冲突的存储器位置;或 在中止处理中引起随机延迟。
6. 如权利要求1所述的方法,其中,在所述事务的完成或中断之前,所述返回到所述事 务的开始执行一次或多次。
7. 如权利要求1所述的方法,其中,所述方法还包括: 基于所述检查指示所述事务是受限事务而确定是否已经出现所述一个或多个限制中 的一个限制的违反;以及 基于确定已经出现所述违反而引起中断。
8. 如权利要求1所述的方法,其中,所述一个或多个限制包括以下各项中的至少一个: 所述事务内的有限数量的指令; 所述事务内的指令处于存储器的预定义区域内; 特定预先指定的指令可以被包括在所述事务内,其它受限; 对所述事务的存储操作数进行的存取的限制; 所述事务不存取包含存储器的所述预定义的区域的存储器的区块中的存储操作数; 所述事务不使用映射到同一绝对地址的不同逻辑地址来存取指令或存储操作数;以及 所述事务进行的操作数参考处于所指定的大小内。
9. 如权利要求1所述的方法,其中,除了返回到所述事务的开始之外,不提供失败路径 以处理所述中止条件。
10. 如权利要求1所述的方法,其中,所述事务将要更新多个不连续存储器位置。
11. 一种系统,包括适用于执行如任一项前述方法权利要求所述的方法的所有步骤的 装直。
12. -种计算机程序,包括用于当所述计算机程序在计算机系统上运行时执行如任一 项前述方法权利要求所述的方法的所有步骤的指令。
【文档编号】G06F12/00GK104335185SQ201280073606
【公开日】2015年2月4日 申请日期:2012年11月26日 优先权日:2012年6月15日
【发明者】D.格雷纳, T.斯莱格尔, C.雅各比 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1