事务诊断区块的制作方法

文档序号:6498636阅读:466来源:国知局
事务诊断区块的制作方法
【专利摘要】当发生事务的中止时,进行关于诊断信息是否将储存于一个或多个事务诊断区块(TDB)中的判定。取决于中止类别及其他考虑,存在不同事务诊断区块型别以接受诊断信息。作为实例,存在以下各者:程序指定的TDB,若一有效TDB地址提供于事务开始指令中,则信息储存于该程序指定的TDB中;程序中断TDB,当该程序归因于中断而中止时,储存至该程序中断TDB;及程序拦截TDB,当中止引起拦截时,储存至该程序拦截TDB。
【专利说明】事务诊断区块

【技术领域】
[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] 经由提供一种用于提供关于事务中止的诊断信息的计算机程序产品而克服先前 技术的缺点且提供优点。该计算机程序产品包含:一计算机可读储存介质,其可由一处理电 路读取且储存指令以供该处理电路执行来执行一方法。例如,该方法包含:由一处理器侦 测一事务的中止,该事务有效地延迟将事务储存交付至主存储器直至一选择的事务完成为 止;由该处理器基于该中止而判定诊断信息是否将储存至一事务诊断区块(TDB)中;及基 于该判定指示待储存诊断信息,将诊断信息储存于该事务诊断区块中,该诊断信息包括已 中止事务指令地址。
[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描绘与执行TBEGINC指令相关联的逻辑的一实施例;
[0024] 图12描绘与执行TBEGIN指令相关联的逻辑的一实施例;
[0025] 图13描绘与执行TEND指令相关联的逻辑的一实施例;
[0026] 图14描绘与事务中止处理相关联的逻辑的一实施例;
[0027] 图15描绘与选择性地将信息储存至一个或多个事务诊断区块相关联的逻辑的一 实施例;
[0028] 图16A至图16B描绘将队列元素插入至队列元素双向链接清单中的实例;
[0029] 图17描绘计算机程序产品的一实施例;
[0030] 图18描绘主机计算机系统的一实施例;
[0031] 图19描绘计算机系统的另外实例;
[0032] 图20描绘包含计算机网络的计算机系统的另一实例;
[0033] 图21描绘计算机系统的各种元件的一实施例;
[0034] 图22A描绘图21的计算机系统的执行单元的一实施例;
[0035] 图22B描绘图21的计算机系统的分支单元的一实施例;
[0036] 图22C描绘图21的计算机系统的载入/储存单元的一实施例;及
[0037] 图23描绘模拟主机计算机系统的一实施例。

【具体实施方式】
[0038] 根据一个实施例,提供一种事务执行(TX)设施。此设施提供用于指令的事务处 理,且在一个或多个实施例中提供如下文所描述的不同执行模式,以及事务处理的嵌套层 级。
[0039] 事务执行设施引入被称作事务执行(TX)模式的CPU状态。在CPU重设之后,CPU 并不处于TX模式。CPU藉由TRANSACTION BEGIN指令进入TX模式。CPU藉由(a)最外部 TRANSACTION END指令(关于内部指令及外部指令的更多细节如下)或(b)正被中止的事 务而离开TX模式。虽然处于TX模式,但由CPU进行的储存存取看来像是区块并行的一样, 如由其他CPU及I/O子系统所观察的那样。储存存取(a)在最外部事务在无中止的情况下 结束时被交付至存储器(亦即,例如,在CPU本地的高速缓存或缓冲器中进行的更新经传播 及储存于真实存储器中且可为其他CPU所见),或(b)在事务中止时被舍弃。
[0040] 事务可为嵌套。亦即,在CPU处于TX模式时,CPU可执行另一 TRANSACTION BEGIN 指令。使CPU进入TX模式的指令被称作最外部TRANSACTION BEGIN ;相似地,程序据称处 于最外部事务。TRANSACTION BEGIN的后续执行被称作内部指令;且程序正执行内部事务。 模型提供最小嵌套深度及模型相依最大嵌套深度。EXTRACT TRANSACTION 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基于由纽约州阿蒙克市的国际商 业机器(roMK )公司提供的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与主存储器(又名,主存储器)之 间引导信息流动。输入/输出子系统耦接至中央处理复合体,此在于:输入/输出子系统可 为中央处理器复合体的部分或与中央处理器复合体分离。I/O子系统使中央处理器减轻直 接地与输入/输出器件通信的任务的负担,且准许数据处理与输入/输出处理并行地进行。 为了提供通信,I/O子系统使用I/O通信适配器。存在各种类型的通信适配器,包括(例 如)通道、I/O适配器、PCI卡、乙太网卡、小型计算机储存接口(SCSI)卡等等。在本文所描 述的特定实例中,I/O通信适配器为通道,且因此,I/O子系统在本文中被称作通道子系统。 然而,此情形仅为一实例。可使用其他类型的I/O子系统。
[0064] I/O子系统使用一个或多个输入/输出路径作为通信链路来管理至或自输入/输 出器件106的信息流动。在此特定实例中,此等路径被称作通道路径,这是因为通信适配器 为通道。
[0065] 上文所描述的计算环境仅为可使用的计算环境的一个实例。可使用包括但不限于 非分割环境、其他分割环境和/或模拟环境的其他环境;实施例并不限于任一环境。
[0066] 根据一个或多个方面,事务执行设施为CPU增强,其提供可用来使CPU执行指令序 列(被称作事务)的方式,这些指令可存取多个储存位置,包括那些位置的更新。如由其他 (PU及I/O子系统所观察,事务是(a)整体上作为单一不可部分完成操作而完成,或(b)中 止,从而潜在地不留下事务曾经执行的迹象(惟本文所描述的某些条件除外)。因此,成功 完成的事务可在没有在传统多处理模型中需要的任何特殊锁定的情况下更新众多储存位 置。
[0067] 举例而言,事务执行设施包括一个或多个控制、一个或多个指令、包括受限执行及 非受限执行的事务处理及中止处理,其中每一个在下文予以进一步描述。
[0068] 在一个实施例中,使用以下各者以控制事务执行设施:三个特殊用途控制,包括事 务中止程序状态字组(PSW)、事务诊断区块(TDB)地址及事务嵌套深度;五个控制寄存器 位;及六个一般指令,包括TRANSACTION BEGIN(受限及非受限)、TRANSACTI0N END、EXTRACT TRANSACTION NESTING DEPTH、TRANSACTION ABORT 及 NONTRANSACTIONAL STORE。当该设施 被安装时,该设施安装于(例如)配置中的所有CPU中。一个设施指示(在一实施中为位 73)在为1时指示事务执行设施被安装。
[0069] 当事务执行设施被安装时,该配置提供非受限事务执行设施且视情况提供受限事 务执行设施,其中每一设施在下文予以描述。作为实例,当设施指示50及73皆为1时,受 限事务执行设施被安装。两个设施指示皆在指定位置处储存于存储器中。
[0070] 如本文所使用,指令名称TRANSACTION BEGIN指代具有助记符TBEGIN(用于非受 限事务的事务开始)及TBEGINC(用于受限事务的事务开始)的指令。关于特定指令的论 述由指令名称继之以圆括号或括号中的助记符指示,或简单地由助记符指示。
[0071] 图2A至图2B中描绘TRANSACTION BEGIN(TBEGIN)指令的格式的一实施例。作为 一实例,TBEGIN指令200包括:操作码字段202,其包括指定事务开始非受限操作的操作码; 基本字段^)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。当B2字段为非零时,将由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处于非受限事务执行模式时发出TRANSACTION BEGIN指令时, 事务为嵌套。
[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指令的有效程序中断筛选控制及控制寄存器0中的事务执行程序中断 筛选覆写。
[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(ETND)指令的格式的一实 施例。作为一实例,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之后的指令)。在嵌套深度最初为0时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] 值 含义
[0201] 0 TDB的剩余字段是不可预测的。
[0202] 1 格式1TDB,其剩余字段在下文予以描述。
[0203] 2 至 255 保留
[0204] 格式字段为零的TDB被称作空值TDB。
[0205] 标志904 :字节1含有各种指示,如下:
[0206] 冲突令牌有效性(CTV):当事务归因于提取或储存冲突(亦即,分别为中止码9或 10)而中止时,字节1的位0为冲突令牌有效性指示。当CTV指示为1时,TDB的字节16至 23中的冲突令牌910含有冲突被侦测的逻辑地址。当CTV指示为0时,TDB的字节16至23 是不可预测的。
[0207] 当事务归因于不同于撷取或储存冲突的任何原因而中止时,将字节1的位0储存 为〇。
[0208] 受限事务指示(CTI):当CPU处于受限事务执行模式时,将字节1的位1设定为1。 当CPU处于非受限事务执行模式时,将字节1的位1设定为0。
[0209] 保留:保留字节1的位2至7且将其储存为0。
[0210] 事务嵌套深度(TND)906 :当事务中止时,字节6至7含有事务嵌套深度。
[0211] 事务中止码(TAC) 908 :字节8至15含有64位无正负号事务中止码。每一码点指 示事务被中止的原因。
[0212] 这是依赖于当事务归因于不同于程序中断的条件而中止时事务中止码是否储存 于程序中断TDB的模型。
[0213] 冲突令牌910 :对于归因于提取或储存冲突(亦即,分别为中止码9及10)而中止 的事务,字节16至23含有冲突被侦测的储存位置的逻辑地址。当CTV位(字节1的位0) 为1时,冲突令牌有意义。
[0214] 当CTV位为0时,字节16至23是不可预测的。
[0215] 由于由CPU进行的理论式执行,冲突令牌可指明将未必由事务的概念执行序列存 取的储存位置。
[0216] 已中止事务指令地址(ATIA)912 :字节24至31含有识别在侦测到中止时正执行 的指令的指令地址。当事务归因于中止码2、5、6、11、13或256或更高的中止码而中止时, 或当事务归因于中止码4或13而中止且程序异常情况正设为空值时,ATIA直接地指向正被 执行的指令。当事务归因于中止码4或12而中止且程序异常情况未设为空值时,ATIA越 过正被执行的指令。
[0217] 当事务归因于中止码7至10、14至16或255而中止时,ATIA未必指示造成中止 的确切指令,但可指向事务内的较早或较迟指令。
[0218] 取决于如上文所描述的中止码,若事务归因于为执行类型指令的目标的指令而中 止,则ATIA识别执行类型指令,从而指向或越过该指令。ATIA并不指示执行类型指令的目 标。
[0219] 当事务中止时,ATIA经受寻址模式。在24位寻址模式下,字段的位0至40含有 0。在31位寻址模式下,字段的位0至32含有0。
[0220] 这是依赖于当事务归因于不同于程序中断之条件而中止时,已中止事务指令地址 是否储存于程序中断TDB中的模型。
[0221] 当事务归因于中止码4或12而中止且程序异常情况未设为空值时,ATIA并不指 向造成中止的指令。藉由自ATIA减去由中断长度码(ILC)指示的半字组的数目,在正抑制 或终止的情况下或针对正完成的非PER事件可识别造成中止的指令。当事务归因于PER事 件而中止且不存在其他程序异常情况时,ATIA是不可预测的。
[0222] 当事务诊断区块地址有效时,可在TBEGIN指定的TDB的字节36至39中的程序 中断识别(PIID)中检验ILC。当筛选不适用时,可在真实存储器中的位置140至143处的 PIID中检验ILC。
[0223] 异常存取识别(EAID)914:对于归因于某些已筛选程序异常情况而中止的事务, TBEGIN指定的TDB的字节32含有异常存取识别。在z/Architecture的一实例中,当异常 情况引起中断时,EAID的格式及EAID被储存的状况相同于真实位置160中描述的EAID的 格式及EAID被储存的状况,如上文以引用方式并入的操作原理中所描述。
[0224] 对于出于其他原因(包括引起程序中断的任何异常情况)而中止的事务,字节32 是不可预测的。在程序中断TDB中,字节32是不可预测的。
[0225] 此字段仅储存于由事务诊断区块地址指明的TDB中;否则,保留该字段。EAID仅 针对存取清单控制或DAT保护、ASCE类型、页转译、区第一转译、区第二转译、区第三转译及 区段转译程序异常情况被储存。
[0226] 数据异常码(DXC)916 :对于归因于已筛选数据异常程序异常情况而中止的事务, TBEGIN指定的TDB的字节33含有数据异常码。在z/Architecture的一实例中,当异常情 况引起中断时,DXC的格式及DXC被储存的状况相同于真实位置147中描述的DXC的格式 及DXC被储存的状况,如上文以引用方式并入的操作原理中所描述。在一实例中,位置147 包括DXC。
[0227] 对于出于其他原因(包括引起程序中断的任何异常情况)而中止的事务,字节33 是不可预测的。在程序中断TDB中,字节33是不可预测的。
[0228] 此字段仅储存于由事务诊断区块地址指明的TDB中;否则,保留该字段。仅针对数 据程序异常情况而储存DXC。
[0229] 程序中断识别(PIID)918 :对于归因于已筛选程序异常情况而中止的事务, TBEGIN指定的TDB的字节36至39含有程序中断识别。在z/Architecture的一实例中,当 情况引起中断时,PIID的格式相同于真实位置140至143中描述的PIID的格式(如上文 以引用方式并入的操作原理中所描述),惟PIID的位13至14中的指令长度码各别于异常 情况被侦测的指令除外。
[0230] 对于出于其他原因(包括引起程序中断的异常情况)而中止的事务,字节36至39 是不可预测的。在程序中断TDB中,字节36至39是不可预测的。
[0231] 此字段仅储存于由事务诊断区块地址指明的TDB中;否则,保留该字段。程序中断 识别仅针对程序异常情况被储存。
[0232] 转译异常识别(TEID)920 :对于归因于以下已筛选程序异常情况中任一者而中止 的事务,TBEGIN指定的TDB之字节40至47含有转译异常识别。
[0233] ?存取清单控制或DAT保护
[0234] ? ASCE 类型
[0235] ?页转译
[0236] ?区第一转译
[0237] ?区第二转译
[0238] ?区第三转译
[0239] ?区段转译异常
[0240] 在z/Architecture的一实例中,当情况引起中断时,TEID的格式相同于真实位置 168至175中描述的TEID的格式,如上文以引用方式并入的操作原理中所描述。
[0241] 对于出于其他原因(包括引起程序中断之异常情况)而中止的事务,字节40至47 是不可预测的。在程序中断TDB中,字节40至47是不可预测的。
[0242] 此字段仅储存于由事务诊断区块地址指明的TDB中;否则,保留该字段。
[0243] 中断事件(breaking event)地址922 :对于归因于已筛选程序异常情况而中止的 事务,TBEGIN指定的TDB的字节48至55含有中断事件地址。在z/Architecture的一实 例中,当条件引起中断时,中断事件地址的格式相同于真实位置272至279中描述的中断事 件地址的格式,如上文以引用方式并入的操作原理中所描述。
[0244] 对于出于其他原因(包括引起程序中断的异常情况)而中止的事务,字节48至55 是不可预测的。在程序中断TDB中,字节48至55是不可预测的。
[0245] 此字段仅储存于由事务诊断区块地址指明的TDB中;否则,保留该字段。
[0246] 下文描述关于中断事件的另外细节。
[0247] 在z/Architecture的一实施例中,当安装PER-3设施时,PER-3设施向程序提供最 后指令的地址以造成CPU的循序执行的中断。中断事件地址记录可用作针对万用分支侦测 的除错协助。举例而言,此设施提供CPU中的64位寄存器,其被称作中断事件地址寄存器。 每当不同于TRANSACTION ABORT的指令造成循序指令执行的中断(亦即,PSW中的指令地址 被取代,而非被累加该指令的长度)时,将那个指令的地址置放于中断事件地址寄存器中。 只要发生程序中断,无论是否指示PER,皆将中断事件地址寄存器的当前内容置放于真实储 存位置272至279中。
[0248] 若造成中断事件的指令为执行类型指令(EXECUTE或EXECUTE RELATIVE LONG)的 目标,则将用以提取执行类型指令的指令地址置放于中断事件地址寄存器中。
[0249] 在z/Architecture的一实施例中,只要以下指令中之一者造成分支,就认为发 生中断事件:BRANCH AND LINK (BAL, BALR) ;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 ⑶UNT (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) ;C0MPARE AND BRANCH(CRB, CGRB); COMPARE AND BRANCH RELATIVE(CRJ, CGRJ) ;C0MPARE IMMEDIATE AND BRANCH(CIB, CGIB); COMPARE IMMEDIATE AND BRANCH RELATIVE(ClJ, CGIJ) ;C0MPARE LOGICAL AND BRANCH(CLRB, CLGRB) ;C0MPARE LOGICAL AND BRANCH RELATIVE(CLRJ, CLGRJ) ;C0MPARE LOGICAL IMMEDIATE AND BRANCH(CLIB,CLGIB);及 COMPARE LOGICAL MMEDIATE AND BRANCH RELATIVE (CU J, CLGI J) 〇
[0250] 只要以下指令中之一者完成,就亦认为发生中断事件: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)。
[0251] 由于事务中止(隐含地或由于TRANSACTION ABORT指令)而不认为发生中断事件。
[0252] 依赖于模型的诊断信息924 :字节112至127含有依赖于模型的诊断信息。
[0253] 对于惟12 (已筛选程序中断)除外的所有中止码,将依赖于模型的诊断信息储存 于所储存的每一 TDB中。
[0254] 在一实施例中,依赖于模型的诊断信息包括以下各者:
[0255] ?字节112至119含有被称作事务执行分支指示(TXBI)的64个位的向量。该向 量的前63个位中每一者指示在CPU处于事务执行模式时执行分支指令的结果,如下:
[0256] 值含义
[0257] 0 指令在无分支的情况下完成。
[0258] 1 指令在有分支的情况下完成。
[0259] 位0表示第一此类分支指令的结果,位1表示第二此类指令的结果,等等。
[0260] 若在CPU处于事务执行模式时执行少于63个的分支指令,则将不对应于分支指令 的最右侧位设定为〇 (包括位63)。当执行多于63个的分支指令时,将TXBI的位63设定为 1〇
[0261] TXBI中的位由如上文所列出的能够造成中断事件的指令设定,惟以下各者除外:
[0262] -任何受限定指令并不使位设定于TXBI中。
[0263] -对于(例如)z/Architecture 的指令,当 BRANCH ON CONDITION、BRANCH RELATIVE ON CONDITION 或 BRANCH RELATIVE ON CONDITION LONG 指令的 M1 字段为 O 时, 或当以下指令的R2字段为〇时,这是依赖于该指令的执行是否使位设定于TXBI的模型。
[0264] ? BRANCH AND LINK(BALR) ;BRANCH AND SAVE(BASR) ;BRANCH AND SAVE AND SET MODE (BASSM) ;BRANCH AND SET MODE(BSM) ;BRANCH ON CONDITION(BCR);及 BRANCH ON COUNT (BCTR, BCTGR)
[0265] ?对于由主机存取异常造成的中止条件,将字节127的位的位置0设定为1。对于 所有其他中止条件,将字节127的位的位置0设定为0。
[0266] ?对于由载入/储存单元(LSU)侦测的中止条件,字节127的最右侧五个位含有原 因的指示。对于未由LSU侦测的中止条件,保留字节127。
[0267] 一般寄存器930 :字节128至255含有在事务中止时的一般寄存器0至15的内容。 这些寄存器以升序被储存,其以字节128至135中的一般寄存器0开始,接着为字节136至 143中的一般寄存器1,等等。
[0268] 保留:保留所有其他字段。除非另有指示,否则保留字段的内容是不可预测的。
[0269] 如由其他CPU及1/0子系统所观察,在事务中止期间储存TDB为在任何非事务储 存之后发生的多重存取参考。
[0270] 事务可归因于在事务执行的立即配置的范畴外的原因而中止。举例而言,由超管 理器(诸如,LPAR或z/VM)辨识的瞬态事件可造成事务中止。
[0271] 提供于事务诊断区块中的信息意欲用于诊断目的且实质上正确。然而,因为中止 可能已由在立即配置的范畴外的事件造成,所以诸如中止码或程序中断识别的信息可能不 准确地反映该配置内的情况,且因此不应被用来判定程序动作。
[0272] 除了储存于TDB中的诊断信息以外,当事务归因于任何数据异常程序异常情况而 中止且AFP寄存器控制(控制寄存器0的位45)及有效允许浮点运算控制(F)两者皆为1 时,将数据异常码(DXC)置放至浮点控制寄存器(FPCR)的字节2中,而不管筛选是否应用 于程序异常情况。当事务中止且AFP寄存器控制或有效允许浮点运算控制中之一个或两个 为0时,不将DXC置放至FPCR中。
[0273] 在一实施例中,如本文所指示,当安装事务执行设施时,提供以下一般指令。
[0274] ? EXTRACT TRANSACTION NESTING DEPTH
[0275] ? N0NTRANSACTIONAL STORE
[0276] ? TRANSACTION ABORT
[0277] ? TRANSACTION BEGIN
[0278] ? TRANSACTION END
[0279] 当CPU处于事务执行模式时,某些指令的已尝试执行受到限定且造成事务中止。
[0280] 当在受限事务执行模式下发出时,受限定指令的已尝试执行亦可引起事务限制程 序中断,或可如同事务不受到限制一样引起执行进行。
[0281] 在z/Architecture的一实例中,作为实例,受限定指令包括以下非特殊权限指 令:COMPARE AND SWAP AND STORE ;M0DIFY RUNTIME INSTRUMENTATION CONTROLS ;PERF0RM LOCKED 0PERATI0N;PREFETCH DATA (RELATIVE LONG),此时 M1 字段中的码为 6或7 ;ST0RE CHARACTERS UNDER MASK HIGH,此时M3 字段为 0且札字段中的码为 6 或 7 ;ST0RE FACILITY LIST EXTENDED ;ST0RE RUNTIME INSTRUMENTATION CONTROLS !SUPERVISOR CALL;及 TEST RUNTIME INSTRUMENTATION CONTROLS。
[0282] 在以上清单中,COMPARE AND SWAP AND STORE 及 PERFORM LOCKED OPERATION 为 可藉由在TX模式下使用基本指令而更有效率地实施的复杂指令。针对PREFETCH DATA及 PREFETCH DATA RELATIVE LONG的状况受到限定,这是由于为6及7的码释放高速缓存行, 从而使潜在地在事务完成之前交付数据成为必要。SUPERVISOR CALL受到限定,这是由于其 造成中断(此情形造成事务中止)。
[0283] 在下文所列出的条件下,以下指令受到限定:
[0284] .BRANCH AND LINK(BALR)、BRANCH AND SAVE(BASR)及BRANCH AND SAVE AND SET MODE,此时指令的R2字段为非零且分支追踪被启用。
[0285] ? BRANCH AND SAVE AND SET MODE 及 BRANCH AND SET MODE,此时 R2 字段为非零 且模式追踪被启用;SET ADDRESSING MODE,此时模式追踪被启用。
[0286] ? MONITOR CALL,此时监视事件情况被辨识。
[0287] 以上清单包括可形成追踪项的指令。若这些指令被允许事务地执行且形成追踪 项,且事务随后中止,则将推进控制寄存器12中的追踪表指针,但将舍弃至追踪表的储存。 此情形将在追踪表中留下不一致间隙。因此,指令在其将形成追踪项的状况下受到限定。
[0288] 当CPU处于事务执行模式时,这是依赖于以下指令是否受到限定的模型:CIPHER MESSAGE ;CIPHER MESSAGE WITH CFB ;CIPHER MESSAGE WITH CHAINING ;CIPHER MESSAGE WITH COUNTER ;CIPHER MESSAGE WITH OFB COMPRESSION CALL ;C0MPUTE INTERMEDIATE MESSAGE DIGEST ;C0MPUTE LAST MESSAGE DIGEST ;C0MPUTE MESSAGE AUTHENTICATION CODE ;C0NVERT UNICODE-16 TO UNICODE-32 ;C0NVERT UNICODE-16 TO UNICODE-8 ;C0NVERT UNICODE-32 TO UNICODE-16 !CONVERT UNICODE-32 TO UNICODE-8 !CONVERT UNICODE-8 TO UNICODE-16 ;C0NVERT UNICODE-8 TO UNICODE-32 ;PERF0RM CRYPTOGRAPHIC COMPUTATION ; RUNTIME INSTRUMENTATION OFF ;及 RUNTIME INSTRUMENTATION ON。
[0289] 以上指令中每一个当前由硬件共处理器实施,或已处于过去机器中,且因此被认 为受到限定。
[0290] 当有效允许AR修改(A)控制为0时,以下指令受到限定:COPY ACCESS ; LOAD ACCESS MULTIPLE ;L0AD ADDRESS EXTENDED ;及 SET ACCESS。
[0291] 以上指令中每一个造成存取寄存器的内容被修改。若TRANSACTION BEGIN指令中 的A控制为0,则程序已明确地指示出将不允许存取寄存器修改。
[0292] 当有效允许浮点运算(F)控制为0时,浮点指令受到限定。
[0293] 在某些情况下,以下指令可受到限定:EXTRACT CPU TME EXTRACT PSW ;ST0RE CLOCK ;STORE CLOCK EXTENDED ;及 STORE CLOCK FAST。
[0294] 以上指令中每一个经受解译性执行状态描述中的拦截控制。若超管理器已设定针 对此等指令的拦截控制,则这些指令的执行可归因于超管理器实施而被拖延;因此,若发生 拦截,可认为这些指令受到限定。
[0295] 当非受限事务由于受限定指令的已尝试执行而中止时,将事务诊断区块中的事务 中止码设定为11 (受限定指令),且将条件码设定为3,惟如下情形除外:当非受限事务归 因于原本将会引起特殊权限操作异常的指令的已尝试执行而中止时,无论将中止码设定为 11 (受限定指令)或4(由特殊权限操作程序中断的辨识引起的未筛选程序中断)而都是 不可预测的。当非受限事务归因于在M1字段中的码为6或7时PREFETCH DATA (RELATIVE LONG)的已尝试执行或在M3字段为O且R1字段中的码为6或7时STORE CHARACTERS UNDER MASK HIGH的已尝试执行而中止时,无论将中止码设定为11(受限定指令)或16(高速缓存 其他)而都是不可预测的。当非受限事务归因于MONITOR CALL的已尝试执行而中止且存 在监视事件情况及规格异常情况两者时,无论将中止码设定为11或4或(在程序中断被筛 选时)12而都是不可预测的。
[0296] 额外指令可在受限事务中受到限定。尽管这些指令当前经定义为在非受限事务中 不受到限定,但这些指令可在某些情况下在未来处理器上的非受限事务中受到限定。
[0297] 可在未来处理器上的事务执行模式下允许某些受限定指令。因此,程序不应依赖 于归因于受限定指令的已尝试执行而中止的事务。TRANSACTION ABORT指令应被用以可靠 地造成事务中止。
[0298] 在非受限事务中,程序应提供替代性非事务码路径以适应归因于受限定指令而中 止的事务。
[0299] 在操作中,当事务嵌套深度为0时,引起条件码0的TRANSACTION BEGIN(TBEGIN) 指令的执行使CPU进入非受限事务执行模式。当事务嵌套深度为0时,引起条件码0的 TRANSACTION BEGIN受限(TBEGINC)指令的执行使CPU进入受限事务执行模式。
[0300] 除了另有明确提及以外,应用于非事务执行的所有规则亦应用于事务执行。下文 为在CPU处于事务执行模式时进行处理的额外特性。
[0301] 当CPU处于非受限事务执行模式时,引起条件码0的TRANSACTION BEGIN指令的 执行使CPU保持于非受限事务执行模式。
[0302] 如由CPU所观察,在事务执行模式下进行的提取及储存并非不同于在不处于事务 执行模式时进行的提取及储存。如由其他CPU及1/0子系统所观察,在CPU处于事务执行 模式时进行的所有储存操作数存取看来像是单一区块并行存取。亦即,对半字组、字组、双 字组或四倍字组内的所有字节的存取经指定以看来像是区块并行,如由其他CPU及1/0 (例 如,通道)程序所观察。半字组、字组、双字组或四倍字组在此章节中被称作区块。当提取 类型参考经指定以在区块内看来像是并行时,在该区块中含有的字节正被提取的时间期间 不准许由另一 CPU或1/0程序对该区块的储存存取。当储存类型参考经指定以在区块内看 来像是并行时,在该区块内的字节正被储存的时间期间不准许由另一 CPU或1/0程序对该 区块的存取(提取或储存)。
[0303] 针对指令的储存存取以及DAT及ART (存取寄存器表)表提取遵循非事务规则。
[0304] CPU凭借使事务嵌套深度转变至0的TRANSACTION END指令而正常地离开事务执 行模式,在该状况下,事务完成。
[0305] 当CPU凭借TRANSACTION END指令的完成而离开事务执行模式时,交付在处于事 务执行模式时进行的所有储存;亦即,这些储存看来像是作为单一区块并行操作而发生,如 由其他CPU及1/0子系统所观察。
[0306] 事务可出于多种原因而隐含地中止,或事务可由TRANSACTION ABORT指令明确地 中止。下文描述事务中止、对应中止码及置放至事务中止PSW中的条件码的实例可能原因。
[0307] 外部中断:将事务中止码设定为2,且将事务中止PSW中的条件码设定为2。作为 外部中断处理的部分,将事务中止PSW储存为外部旧PSW。
[0308] 程序中断(未筛选):引起中断的程序异常情况(亦即,未筛选条件)使事务用码 4而中止。将事务中止PSW中的条件码设定为特定于程序中断码。作为程序中断处理的部 分,将事务中止PSW储存为程序旧PSW。
[0309] 原本将会引起事务归因于操作异常而中止的指令可得到替代结果:对于非受限事 务,事务可代替地用中止码11(受限定指令)而中止;对于受限事务,可辨识事务限制程序 中断,而非操作例外。
[0310] 当PER (程序事件记录)事件结合任何其他未筛选程序异常情况被辨识时,将条件 码设定为3。
[0311] 机器检查中断:将事务中止码设定为5,且将事务中止PSW中的条件码设定为2。 作为机器检查中断处理的部分,将事务中止PSW储存为机器检查旧PSW。
[0312] I/O中断:将事务中止码设定为6,且将事务中止PSW中的条件码设定为2。作为 I/O中断处理的部分,将事务中止PSW储存为I/O旧PSW。
[0313] 提取溢出:当事务尝试自多于CPU所支持的位置的位置进行提取时,侦测提取溢 出条件。将事务中止码设定为7,且将条件码设定为2或3。
[0314] 储存溢出:当事务尝试储存至多于CPU所支持的位置的位置时,侦测储存溢出条 件。将事务中止码设定为8,且将条件码设定为2或3。
[0315] 回应于提取或储存溢出中止而允许条件码为2或3会允许CPU指示潜在可重试情 形(例如,条件码2指示事务的重新执行可有生产力;而条件码3并不建议重新执行)。
[0316] 提取冲突:当另一 CPU或I/O子系统尝试储存至已由此CPU事务地提取的位置中 时,侦测提取冲突条件。将事务中止码设定为9,且将条件码设定为2。
[0317] 储存冲突:当另一 CPU或I/O子系统尝试存取在由此CPU进行的事务执行期间已 被储存的位置时,侦测储存冲突条件。将事务中止码设定为10,且将条件码设定为2。
[0318] 受限定指令:当CPU处于事务执行模式时,受限定指令的已尝试执行造成事务中 止。将事务中止码设定为11,且将条件码设定为3。
[0319] 当CPU处于受限事务执行模式时,无论受限定指令的已尝试执行引起事务限制程 序中断或归因于受限定指令的中止而都是不可预测的。事务仍中止,但中止码可指示任一 原因。
[0320] 程序异常情况(已筛选):不引起中断的程序异常情况(亦即,已筛选的情况)造 成事务用为12的事务中止码而中止。将条件码设定为3。
[0321] 嵌套深度超过:当事务嵌套深度处于该配置的最大可允许值且执行TRANSACTION BEGIN指令时,侦测嵌套深度超过条件。使事务用为13的事务中止码而中止,且将条件码设 定为3。
[0322] 1?速缓存提取相关条件:由CPU的1?速缓存电路侦测与由事务提取的储存位置相 关的条件。用为14的事务中止码而使事务中止,且将条件码设定为2或3。
[0323] 高速缓存储存相关条件:由CPU的高速缓存电路侦测与由事务储存的储存位置相 关的条件。用为15的事务中止码而使事务中止,且将条件码设定为2抑或3。
[0324] 高速缓存其他条件:由CPU的高速缓存电路侦测高速缓存其他条件。用为16的事 务中止码而使事务中止,且将条件码设定为2或3。
[0325] 在事务执行期间,若CPU使用映射至相同绝对地址的不同逻辑地址来存取指令或 储存操作数,则这是依赖于事务是否中止的模型。若事务归因于使用映射至相同绝对地址 的不同逻辑地址的存取而中止,则取决于条件,设定中止码14、15或16。
[0326] 杂项条件:杂项条件为造成事务中止的由CPU辨识的任何其他条件。将事务中止 码设定为255,且将条件码设定为2抑或3。
[0327] 当多个配置正在同一机器(例如,逻辑分割区或虚拟机)中执行时,事务可归因于 不同组态中发生的外部机器检查或I/O中断而中止。
[0328] 尽管上文提供实例,但可提供具有对应中止码及条件码的事务中止的其他原因。 举例而言,一个原因可为重新启动中断,其中将事务中止码设定为1,且将事务中止PSW中 的条件码设定为2。作为重新启动处理的部分,将事务中止PSW储存为重新启动旧PSW。作 为一另外实例,一个原因可为监督呼叫条件,其中将中止码设定为3,且将事务中止PSW中 的条件码设定为3。其他或不同实例也是可能的。
[0329]备注:
[0330] 1.杂项条件可由以下各者中任一者引起:
[0331] ?诸如在 z/Architecture 中的指令 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 的SETSTORAGE KEY EXTENDED,它是由该配置中的另一 CPU执行;将条件码设定为2。
[0332] ?在CPU上执行诸如重设、重新启动或停止的运算子函数,或等效SIGNAL PROCESSOR 命令。
[0333] ?上文未列举的任何其他条件;将条件码设定为2或3。
[0334] 2.提取及储存冲突被侦测的位置可为同一高速缓存行内的任何地方。
[0335] 3.在某些条件下,CPU可不能区分相似中止条件。举例而言,提取或储存溢出可不 能与各别提取或储存冲突区分开。
[0336] 4.由CPU对多个指令路径的理论式执行可引起事务归因于冲突或溢出条件而中 止,即使此类条件并不以概念序列而发生亦如此。在处于受限事务执行模式时,CPU可临时 地禁止理论式执行,从而允许事务尝试在不理论式地侦测此类冲突或溢出的情况下完成。
[0337] TRANSACTION ABORT指令的执行造成事务中止。自第二操作数地址设定事务中止 码。取决于第二操作数地址的位63为0或1,将条件码分别设定为2或3。
[0338] 图10概述储存于事务诊断区块中的实例中止码及对应条件码(CC)。图10中的描 述说明一特定实施。值的其他实施及编码是可能的。
[0339] 在一实施例中且如上文所提及,事务设施规定受限事务及非受限事务两者,以及 与其相关联的处理。最初论述受限事务,且接着论述非受限事务。
[0340] 受限事务在无后退路径的情况下执行于事务模式下。其为用于紧凑函数的处理的 模式。在不存在重复中断或与其他CPU或1/0子系统的冲突(亦即,由将不允许事务成功 地完成的条件造成)时,受限事务最终将完成;因此,无需且不指定中止处理例程。举例而 言,在不存在以下各者时,事务最终将完成:不能处理的条件(例如,除以0)的违反、不允许 事务完成的条件(例如,不允许指令执行的计时器中断、热1/0等等),或与受限事务相关联 的限定或限制的违反。
[0341] 当事务嵌套深度最初为0时,受限事务由TRANSACTION BEGIN受限(TBEGINC)指 令起始。在一实施例中,受限事务经受以下限制。
[0342] 1.事务执行不多于32个指令,不包括TRANSACTION BEGIN受限(TBEGINC)及 TRANSACTION END 指令。
[0343] 2.事务中的所有指令将在存储器的256个连续字节内,包括TRANSACTION BEGIN 受限(TBEGINC)及任何 TRANSACTION END 指令。
[0344] 3.除了受限定指令以外,以下限定亦应用于受限事务。
[0345] a.指令限于被称作一般指令的指令,包括(例如)加法、减法、乘法、除法、移位、旋 转等等。
[0346] b?分支指令限于以下各者(在一实例中,所列出的指令属于z/Architecture):
[0347] ? BRANCH RELATIVE ON CONDITION,其中 M1 为非零且 RI2 字段含有正值。
[0348] ? BRANCH RELATIVE ON CONDITION LONG,其中 M1 字段为非零,且 RI2 字段含有不 造成地址环绕的正值。
[0349] ? COMPARE AND BRANCH RELATIVE, COMPARE IMMEDIATE AND BRANCH RELATIVE, COMPARE LOGICAL AND BRANCH RELATIVE,及 COMPARE LOGICAL IMMEDIATE AND BRANCH RELATIVE,其中M3字段为非零且RI4字段含有正值。(亦即,仅具有非零分支屏敝的前向分 支。)
[0350] c.除了 TRANSACTION END及造成已指定操作数序列化的指令以外,造成序列化功 能的指令受到限定。
[0351] d.存储器间操作(SS-)及具有延伸操作码的存储器间操作(SSE-)指令受到限定。
[0352] e?所有以下一般指令(在此实例中,其属于z/Architecture)受到限定: CHECKSUM ;CIPHER MESSAGE ;CIPHER MESSAGE WITH CFB ;CIPHER MESSAGE WITH CHAINING ; CIPHER MESSAGE WITH COUNTER ;CIPHER MESSAGE WITH OFB ;C0MPARE AND FORM CODEWORD ; COMPARE LOGICAL LONG ;COMPARE LOGICAL LONG EXTENDED ;COMPARE LOGICAL LONG UNI⑶DE ;C0MPARE LOGICAL STRING ;C0MPARE UNTIL SUBSTRING EQUAL !COMPRESSION CALL ;C0MPUTE INTERMEDIATE MESSAGE DIGEST ;C0MPUTE LAST MESSAGE DIGEST ;C0MPUTE MESSAGE AUTHENTICATION CODE ;⑶NVERT TO BINARY ;C0NVERT TO DECMAL ;C0NVERT UNICODE-16 TO UNICODE-32 ;C0NVERT UNICODE-16 TO UNICODE-8 ;C0NVERT UNICODE-32 TO UNICODE-16 !CONVERT UNICODE-32 TO UNICODE-8 !CONVERT UNICODE-8 TO UNICODE-16 ; CONVERT UNICODE-8 TO UNICODE-32 ;DIVIDE ;DIVIDE LOGICAL ;DIVIDE SINGLE !EXECUTE ; EXECUTE RELATIVE LONG !EXTRACT CACHE ATTRIBUTE !EXTRACT CPU TME !EXTRACT PSW ; EXTRACT TRANSACTION NESTING DEPTH ;L0AD AND ADD ;L0AD AND ADD LOGICAL ;L0AD AND AND ;L0AD AND EXCLUSIVE OR ;L0AD AND OR ;L0AD PAIR DISJOINT ;L0AD PAIR FROM QUADffORD ;M0NIT0R CALL ;M0VE LONG ;M0VE LONG EXTENDED ;M0VE LONG UNICODE ;M0VE STRING ;N0N-TRANSACTI0NAL STORE ;PERF0RM CRYPTOGRAPHIC COMPUTATION PREFETCH DATA PREFETCH DATA RELATIVE LONG ;RUNTIME INSTRUMENTATION EMIT ;RUNTIME INSTRUMENTATION NEXT ;RUNTIME INSTRUMENTATION OFF ;RUNTIME INSTRUMENTATION ON ; SEARCH STRING;SEARCH ;STRING UNI⑶DE ;SET ADDRESSING MODE ;ST0RE CHARACTERS UNDER MASK HIGH,此时 M3 字段为 0 且 R1 字段中的码为 6 或 7 ;ST0RE CLOCK ;ST0RE CLOCK EXTENDED ;ST0RE CLOCK FAST ;ST0RE FACILITY LIST EXTENDED ;ST0RE PAIR TO QUADffORD ; TEST ADDRESSING MODE !TRANSACTION ABORT !TRANSACTION BEGIN(TBEGIN 及 TBEGINC 两 者)!TRANSLATE AND TEST EXTENDED !TRANSLATE AND TEST REVERSE EXTENDED ;TRANSLATE EXTENDED ; TRANSLATE ONE TO ONE ; TRANSLATE ONE TO TWO TRANSLATE TWO TO ONE ;及 TRANSLATE TWO TO TWO。
[0353] 4.事务的储存操作数存取不多于四个八倍字组。备注:LOAD ON CONDITION及 STORE ON CONDITION被看作参考存储器而不管条件码。举例而言,八倍字组为32字节边界 上的32个连续字节的群组。
[0354] 5.在此CPU上执行的事务或由其他CPU或I/O子系统进行的储存并不存取任何4K 字节区块中的储存操作数,这些4K字节区块含有存储器的256个字节,其以TRANSACTION BEGIN受限(TBEGINC)指令开始。
[0355] 6.事务不使用映射至相同绝对地址的不同逻辑地址来存取指令或储存操作数。
[0356] 7.由事务进行的操作数参考将在单一双字组内,惟对于LOAD ACCESS MULTIPLE、 LOAD MULTIPLE、LOAD MULTIPLE HIGH、STORE ACCESS MULTIPLE、STORE MULTIPLE 及 STORE MULTIPLE HIGH除外,操作数参考将在单一八倍字组内。
[0357] 若受限事务违反上文所列出之限制1至7中任一者,则(a)辨识事务限制程序中 断,或(b)执行如同事务未受到限制一样行进,惟另外限制违反仍可引起事务受限程序中 断除外。采取哪一动作是不可预测的,且所采取的动作可基于哪一限制被违反而不同。
[0358] 在不存在限制违反、重复中断或与其他CPU或1/0子系统的冲突时,受限事务最终 将完成,如上文所描述。
[0359] 1.若事务满足以下准则,则成功地完成受限事务的机会改良:
[0360] a.所发出的指令少于为32之最大值。
[0361] b.储存操作数参考少于为4个八倍字组的最大值。
[0362] c.储存操作数参考处于同一高速缓存行上。
[0363] d.对相同位置的储存操作数参考藉由所有事务以相同次序而发生。
[0364] 2.受限事务未必确信在其第一执行时成功地完成。然而,若未违反所列出限制中 任一者的受限事务中止,则CPU使用确保事务的重复执行随后成功的电路。
[0365] 3.在受限事务内,TRANSACTION BEGIN为受限定指令,因此,受限事务不能为嵌套。
[0366] 4.由受限事务违反以上限制1至7中任一者可引起程序循环。
[0367] 5.受限事务的限制相似于比较及交换循环的限制。由于来自其他CPU及1/0子系 统的潜在干扰,不存在COMPARE AND SWAP指令将用条件码0永远完成的架构确信。受限事 务可遭受呈提取或储存冲突中止或热中断的形式的相似干扰。
[0368] CPU使用公平演算法以确保在不存在任何限制违反时受限事务最终完成。
[0369] 6.为了判定完成受限事务所需要的重复反复的数目,程序可在不经受一般寄存器 储存屏敝的一般寄存器中使用计数器。下文展示一实例。
[0370]

【权利要求】
1. 一种用于提供关于事务中止的诊断信息的计算机程序产品,该计算机程序产品包 含: 一计算机可读储存介质,其可由一处理电路读取且储存指令以供该处理电路执行来执 行一方法,该方法包含: 由一处理器侦测一事务的中止,该事务有效地延迟将事务储存交付至主存储器直至一 选择的事务完成为止; 由该处理器基于该中止而判定诊断信息是否将储存至一事务诊断区块(TDB)中;及 基于该判定指示待储存诊断信息,将诊断信息储存于该事务诊断区块中,该诊断信息 包括已中止事务指令地址。
2. 如权利要求1所述的计算机程序产品,其中存在多种类型的事务诊断区块,且该判 定包含基于该中止而检查是否待储存至一种或多种类型的事务诊断区块。
3. 如权利要求2所述的计算机程序产品,其中该多种类型的事务诊断区块包含:程序 指定的TDB、程序中断TDB,及拦截TDB。
4. 如权利要求2所述的计算机程序产品,其中该检查基于该中止而指示待储存至多个 事务诊断区块。
5. 如权利要求1所述的计算机程序产品,其中该事务诊断区块进一步包含以下各者中 之一或多者:事务嵌套深度、事务中止码、冲突令牌、一个或多个程序中断参数、一个或多个 一般用途寄存器在该中止时的内容及依赖于模型的诊断信息。
6. 如权利要求5所述的计算机程序产品,其中该事务区块进一步包含以下各者中之一 或多者:异常存取标识、数据异常码、程序中断标识、事务异常标识及中断事件地址。
7. 如权利要求5所述的计算机程序产品,其中该方法进一步包含执行事务中止指令以 中止该事务,该事务中止指令指定该事务中止码。
8. 如权利要求1所述的计算机程序产品,其中该判定包含:判定于事务开始指令中是 否提供有效事务诊断区块地址,其中基于有效事务诊断区块地址被提供,诊断信息储存于 程序指定的TDB中。
9. 如权利要求8所述的计算机程序产品,其中该事务开始指令起始一非受限事务,该 非受限事务为最外部事务。
10. 如权利要求9所述的计算机程序产品,其中该判定有效事务诊断区块地址是否被 提供包含:检查该最外部事务的该事务开始指令的基本字段,其中非零基本字段指示有效 事务诊断区块地址。
11. 如权利要求1所述的计算机程序产品,其中存在多种类型的事务诊断区块,且其中 该判定包含: 检查于事务开始指令中是否提供有效事务诊断区块地址,且基于该检查指示有效事务 诊断区块地址,该判定指示待储存至程序指定的TDB ; 检查该中止是否归因于一中断,且基于该中止归因于一中断,该判定指示待储存至程 序中断TDB ;及 检查该中止是否归因于一拦截条件,且基于该中止归因于该拦截条件,该判定指示待 储存至拦截TDB。
12. -种用于提供关于事务中止的诊断信息的计算机系统,该计算机系统包含: 存储器;及 处理器,其与该存储器通信,其中该计算机系统被配置为执行一方法,该方法包含: 由处理器侦测事务的中止,该事务有效地延迟将事务储存交付至主存储器直至选择的 事务完成为止; 由该处理器基于该中止而判定诊断信息是否将储存至事务诊断区块(TDB)中;及 基于该判定指示待储存诊断信息,将诊断信息储存于该事务诊断区块中,该诊断信息 包括已中止事务指令地址。
13. 如权利要求12所述的计算机系统,其中该事务诊断区块进一步包含以下各者中之 一或多者:事务嵌套深度、事务中止码、冲突令牌、一个或多个程序中断参数、一个或多个一 般用途寄存器在该中止时的内容及依赖于模型的诊断信息。
14. 如权利要求13所述的计算机系统,其中该事务区块进一步包含以下各者中之一或 多者:异常存取标识、数据异常码、程序中断标识、事务异常标识及中断事件地址。
15. 如权利要求13所述的计算机系统,其中该方法进一步包含执行事务中止指令以中 止该事务,该事务中止指令指定该事务中止码。
16. 如权利要求12所述的计算机系统,其中该判定包含判定于事务开始指令中是否提 供有效事务诊断区块地址,其中基于有效事务诊断区块地址被提供,诊断信息储存于程序 指定的IDB中,该事务开始指令起始非受限事务,该非受限事务为最外部事务,且其中该判 定有效事务诊断区块地址是否被提供包含检查该最外部事务的该事务开始指令的基本字 段,其中非零基本字段指示有效事务诊断区块地址。
17. 如权利要求12所述的计算机系统,其中存在多种类型的事务诊断区块,且其中该 判定包含: 检查于事务开始指令中是否提供有效事务诊断区块地址,且基于该检查指示有效事务 诊断区块地址,该判定指示待储存至程序指定的TDB ; 检查该中止是否归因于一中断,且基于该中止归因于一中断,该判定指示待储存至程 序中断TDB ;及 检查该中止是否归因于一拦截条件,且基于该中止归因于该拦截条件,该判定指示待 储存至拦截TDB。
18. -种提供关于事务中止的诊断信息的方法,该方法包含: 由一处理器侦测一事务的中止,该事务有效地延迟将事务储存交付至主存储器直至选 择的事务完成为止; 由该处理器基于该中止而判定诊断信息是否将储存至事务诊断区块(TDB)中;及 基于该判定指示待储存诊断信息,将诊断信息储存于该事务诊断区块中,该诊断信息 包括已中止事务指令地址。
19. 如权利要求18所述的方法,其中该判定包含:判定于事务开始指令中是否提供有 效事务诊断区块地址,其中基于有效事务诊断区块地址被提供,诊断信息储存于程序指定 的TDB中,该事务开始指令起始非受限事务,该非受限事务为最外部事务,且其中该判定有 效事务诊断区块地址是否被提供包含检查该最外部事务的该事务开始指令的基本字段,其 中非零基本字段指示有效事务诊断区块地址。
20. 如权利要求18所述的方法,其中存在多种类型的事务诊断区块,且其中该判定包 含: 检查于事务开始指令中是否提供有效事务诊断区块地址,且基于该检查指示有效事务 诊断区块地址,该判定指示待储存至程序指定的TDB ; 检查该中止是否归因于一中断,且基于该中止归因于一中断,该判定指示待储存至程 序中断TDB ;及 检查该中止是否归因于一拦截条件,且基于该中止归因于该拦截条件,该判定指示待 储存至拦截TDB。
【文档编号】G06F11/07GK104335181SQ201280073457
【公开日】2015年2月4日 申请日期:2012年11月22日 优先权日:2012年6月15日
【发明者】D.格雷纳, C.雅各比, T.斯莱格尔, M.米特兰 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1