控制一计算环境中的事务执行的方法及系统转让专利

申请号 : CN201380027244.2

文献号 : CN104364772B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : D.格雷纳C.雅各比T.斯莱格尔D.L.奥西赛克

申请人 : 国际商业机器公司

摘要 :

在一计算环境中起始一事务,并且基于检测到程序事件记录事件,对于该事务呈现中断。在中断之后,基于检测到另一程序事件记录PER事件,设置一个或多个控制以禁止另一中断的呈现。其后,重新执行该事务,并且忽略在该事务的执行期间检测到的PER事件。

权利要求 :

1.一种控制一计算环境中的事务执行的方法,该方法包含如下步骤:由一处理器起始一计算环境内的事务,该事务有效地延迟将事务储存交付至主存储器直至一选择的事务完成为止,并且其中由一个或多个控制来管理该事务的中断的呈现,该一个或多个控制具有与该事务关联的状态;

基于检测到程序事件记录PER事件和具有第一值的状态,对于该事务呈现中断,PER被限定为基于检测到PER事件呈现中断,所述中断使得待执行的下一事务指令的地址被保存;

基于具有第二值的状态来抑制所述事务的PER事件检测,其中所述抑制包括忽略用以对于所述处理器控制一个或多个PER事件的一个或多个PER事件屏蔽,所述忽略防止在所述处理器的事务执行模式期间所述一个或多个PER事件如限定的那样操作,通过最外部事务开始执行进入所述事务执行模式且通过最外部事务结束指令退出所述事务执行模式。

2.如权利要求1所述的方法,其中所述方法基于所述中断进一步重新执行所述事务,并且其中所述状态具有指示PER事件检测的抑制的第二值,其中防止基于另一PER事件的另一中断的呈现。

3.如权利要求1所述的方法,其中该一个或多个控制包括事件抑制控制以指定选择的PER事件的抑制,以及事务结束事件控制以指定选择的PER事件的抑制,直到选择的事务结束为止。

4.如权利要求3所述的方法,其中选择的PER事件包括如下事件的一个或多个事件:成功分支事件、指令提取事件、储存变更事件、使用真实地址储存事件或零地址检测事件。

5.如权利要求4所述的方法,其中基于所述事务不是最外部事务,所述如下事件进一步包括指令提取无效事件。

6.如权利要求3所述的方法,其中所述方法进一步包括:

基于被设置的事件抑制控制,除了事务结束事件,独立于其中维持当前PER设置的存取任务结构而禁止PER事件。

7.如权利要求1所述的方法,其中所述方法进一步包括:对于选择的事务,检测事务结束的执行,其中基于检测,重设所述一个或多个控制。

8.如权利要求7所述的方法,其中选择的事务包括最外部事务。

9.如权利要求1所述的方法,其中在所述处理器的控制寄存器中维持所述一个或多个控制。

10.如权利要求2所述的方法,其中所述另一个PER事件是与所述PER事件相同的事件或与所述PER事件不同的事件。

11.一种控制一计算环境中的事务执行的系统,包含适配于执行根据上述任一项方法权利要求的方法的所有步骤的装置。

说明书 :

控制一计算环境中的事务执行的方法及系统

技术领域

[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及I/O子系统所观察的那样。为了实现此类多重位置更新,强制程序使用分离的单一序列化点,诸如,锁定字组。然而,锁定字组可提供比所保证的序列化层级粗略得多的序列化层级;举例而言,锁定字组可序列化数百万个元素的整个队列,即使仅两个元素正被更新亦如此。程序可结构化数据以使用较精细粒度级序列化(例如,锁定点阶层),但这引入额外问题,诸如,在违反该阶层时的潜在锁死情形,及在程序遭遇错误同时保持一或多个锁定时或在不能获取锁定时的复 原问题。
[0005] 除了以上内容以外,亦存在程序可以执行可能引起或可能不引起异常情况的指令序列的众多情境。若未发生异常情况,则程序继续;然而,若辨识出异常,则程序可采取校正动作以消除异常情况。作为一实例,Java可在(例如)理论式执行、函数的部分内嵌和/或指针空值检查的重新定序中利用此类执行。
[0006] 在诸如由国际商业机器公司提供的z/OS及其前身的传统操作系统环境中,程序建立复原环境以拦截程序可遭遇的任何程序异常情况。若程序未拦截到异常,则操作系统通常针对操作系统未准备好进行处置的异常而例外地终止程序。建立及利用此类环境是昂贵且复杂的。

发明内容

[0007] 经由提供一种用于在计算环境中控制事务执行的计算机程序产品而克服先前技术的缺点且提供优点。该计算机程序产品包括一计算机可读储存介质,该计算机可读储存介质可由一处理电路读取且储存指令以供该处理电路执行来执行一方法。举例而言,该方法包括:由一处理器起始计算环境内一事务,该事务有效地延迟将事务储存交付至主存储器直至一选择的事务完成为止;基于检测到程序事件记录(PER)事件而对于该事件呈现中断,PER被限定为基于检测到PER事件而呈现中断,该中断使得待执行的下一事务指令的地址被保存;基于该中断,基于检测到另一PER事件,设置一个或多个控制以禁止呈现另一中断;然后,重新执行该事务;及在重新执行期间抑制PER事件检测。
[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)由I/O子系统进行的非事务存取冲突(若两种存取是针对同一高速缓存行内的任何位置,且这些存取中的一个或两个为储存)。换言之,为了使事务执行有生产力,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个浮点寄存器。这些浮点寄存器由数字0至15识别,且由浮点指令中的四位R字段指明。每一浮点寄存器为64个位长,且可含有短(32位)浮点操作数或长(64位)浮点操作数。
[0047] 浮点控制(FPC)寄存器为含有屏敝位、标志位、数据异常码及舍位模式位的32位寄存器,且在浮点运算的处理期间被使用。
[0048] 另外,在一个实施例中,CPU具有16个控制寄存器,每一控制寄存器具有64个位的位置。这些寄存器中的位的位置指派至系统中的特定设施,诸如,程序事件记录(PER)(下文所论述),且用以指定出可进行操作,或用以供给由该设施需要的特殊信息。在一个实施例中,对于事务设施,使用CR0(位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] 在一个实施例中,存在多个类型的地址空间。一个地址空间为整数(虚拟地址)的连续序列,连同允许每一数字与存储器中的字节位置相关联的特定变换参数。该序列以0开始且自左侧至右侧进行。
[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基于由纽约州阿蒙克市的国际商业机器公司提供的z/Architecture。2010年8月第九版的名为“z/Architecture-Principles  of Operation”的IBM公开案(公开案第SA22-7932-08号)中描述z/Architecture,该公开案的全文据此以引用方式并入本文中。
[0058] Z/ARCHITECTURE、IBM以及Z/OS及Z/VM(下文所参考)为纽约州阿蒙克市的国际商业机器公司的注册商标。本文所使用的其他名称可为国际商业机器公司或其他公司的注册商标、商标或产品名称。
[0059] 作为一实例,计算环境100包括经由一个或多个控制单元108耦接至一个或多个输入/输出(I/O)器件106的中央处理器复合体(central processor complex,CPC)102。举例而言,中央处理器复合体102包括一个或多个中央处理器110、一个或多个分割区112(例如,逻辑分割区(LP))、逻辑分割区超管理器(hypervisor)114及输入/输出子系统115,其中每一者在下文予以描述。
[0060] 中央处理器110为分配给逻辑分割区的实体处理器资源。详言之,每一逻辑分割区112具有一个或多个逻辑处理器,其中每一逻辑处理器表示分配给该分割区的实体处理器
110的全部或份额。特定分割区112的逻辑处理器可专用于该分割区,使得底层处理器资源
110针对那个分割区而保留;或这些逻辑处理器可与另一分割区共用,使得该底层处理器资源潜在地可用于另一分割区。
[0061] 逻辑分割区充当分离系统且具有一个或多个应用程序,且视情况在其中 具有驻留操作系统,该驻留操作系统针对每一逻辑分割区可不同。在一实施例中,操作系统为由纽约州阿蒙克市的国际商业机器公司提供的z/OS操作系统、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执行指令序列(被称作事务)的方式,这些指令可存取多个储存位置,包括那些位置的更新。如由其他CPU及I/O子系统所观察,事务是(a)整体上作为单一不 可部分完成操作而完成,或(b)中止,从而潜在地不留下事务曾经执行的迹象(惟本文所描述的某些条件除外)。因此,成功完成的事务可在没有在传统多处理模型中需要的任何特殊锁定的情况下更新众多储存位置。
[0067] 举例而言,事务执行设施包括一个或多个控制、一个或多个指令、包括受限执行及非受限执行的事务处理及中止处理,其中每一个在下文予以进一步描述。
[0068] 在一个实施例中,使用以下各者以控制事务执行设施:三个特殊用途控制,包括事务中止程序状态字组(PSW)、事务诊断区块(TDB)地址及事务嵌套深度;五个控制寄存器位;及六个一般指令,包括TRANSACTION BEGIN(受限及非受限)、TRANSACTION 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,其包括指定事务开始非受限操作的操作码;基本字段(B1)204;位移字段(D1)206;及立即字段(I2)208。当B1字段为非零时,将由B1 204指定的一般寄存器的内容添加至D1206以获得第一操作数地址。
[0072] 当B1字段为非零时,以下内容适用:
[0073] · 当事务嵌套深度最初为0时,第一操作数地址指明被称作TBEGIN指定的TDB(下文进一步所描述)的256字节事务诊断区块的位置,若事务中止,则各种诊断信息可储存至TBEGIN指定的TDB中。当CPU处于主要空间模式或存取寄存器模式时,第一操作数地址指明主要地址空间中的位置。当CPU处 于次要空间模式或本籍空间模式时,第一操作数地址分别指明次要地址空间或本籍地址空间中的位置。当DAT关断时,事务诊断区块(TDB)地址(TDBA)指明真实存储器中的位置。
[0074] 判定对第一操作数的储存可存取性。若为可存取,则操作数的逻辑地址置放至事务诊断区块地址(TDBA)中,且TDBA有效。
[0075] · 当CPU已经处于非受限事务执行模式时,TDBA未被修改,且不可预测的是第一操作数是否针对可存取性而被测试。
[0076] 当B1字段为0时,针对第一操作数未侦测到存取异常,且对于最外部TBEGIN指令,TDBA无效。
[0077] 在一实例中,I2字段的位被定义如下:
[0078] 一般寄存器储存屏敝(GRSM)210(图2B):I2字段的位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:I2字段的位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。将由B1 304指定的一般寄存器的内容添加至D1 306以获得第一操作数地址。然而,在用事务开始受限指令的情况下,第一操作数地址不用以存取存储器。取而代之,指令的B1字段包括0;否则,辨识出规格异常。
[0089] 在一实施例中,I2字段包括各种控制,这些控制的实例在图3B中予以描绘。
[0090] 在一实例中,I2字段的位被定义如下:
[0091] 一般寄存器储存屏敝(GRSM)310:I2字段的位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字段为非零时, 将由B2 504指定的一般寄存器的内容添加至D2 506以获得第二操作数地址;否则,第二操作数地址仅由D2字段形成,且忽略B2字段。第二操作数地址不用以寻址数据;取而代之,该地址形成在中止处理期间置放于事务诊断区块中的事务中止码。用于第二操作数地址的地址计算遵循地址算术规则:在24位寻址模式下,将位0至29设定为0;在31位寻址模式下,将位0至32设定为0。
[0106] 交付:在最外部TRANSACTION END指令完成时,CPU交付由事务进行的储存存取(亦即,最外部事务及任何嵌套层级),使得这些储存存取可为其他CPU及I/O子系统所见。如由其他CPU且由I/O子系统所观察,当发生交付时,由事务的所有嵌套层级进行的所有提取及储存存取看来像是作为单一并行操作而发生。
[0107] 一般寄存器、存取寄存器、浮点寄存器及浮点控制寄存器的内容未藉由交付程序修改。当交付事务的储存时,保持在事务执行期间对这些寄存器进行的任何改变。
[0108] 冲突:由一个CPU进行的事务存取与(a)由另一CPU进行的事务存取或非事务存取冲突,或与(b)由I/O子系统进行的非事务存取冲突(若两种存取针对同一高速缓存行内的任何位置,且这些存取中的一个或多个为储存)。
[0109] 冲突可藉由CPU对指令的理论式执行而侦测,即使冲突不可以概念序列被侦测亦如此。
[0110] 受限事务:受限事务为在受限事务执行模式下执行且经受以下限制的事务:
[0111] · 一般指令的子集可用。
[0112] · 可执行有限数目个指令。
[0113] · 可存取有限数目个储存操作数位置。
[0114] · 事务限于单一嵌套层级。
[0115] 在不存在重复中断或与其他CPU或I/O子系统的冲突时,受限事务最终完成,因此无需中止处理例程。下文详细地描述受限事务。
[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字段及DL2字段的内容的串连的内容以形成第二操作数地址。当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,其指定指示撷取事务嵌套深度操作的操作码;及寄存器字段R1 804,其指明一般寄存器。
[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] 1.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储存为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 COUNT(BCT,BCTR,BCTG,BCTGR);BRANCH ON INDEX HIGH(BXH,BXHG);BRANCH ON INDEX LOW OR EQUAL(BXLE,BXLEG);BRANCH RELATIVE ON CONDITION(BRC);BRANCH RELATIVE ON CONDITION LONG(BRCL);BRANCH RELATIVE ON COUNT(BRCT,BRCTG);BRANCH RELATIVE ON INDEX HIGH(BRXH,BRXHG);BRANCH RELATIVE ON INDEX LOW OR EQUAL(BRXLE,BRXLG);COMPARE AND BRANCH(CRB,CGRB);COMPARE AND BRANCH RELATIVE(CRJ,CGRJ);COMPARE IMMEDIATE AND BRANCH(CIB,CGIB);COMPARE IMMEDIATE AND BRANCH RELATIVE(CIJ,CGIJ);COMPARE LOGICAL AND BRANCH(CLRB,CLGRB);COMPARE LOGICAL AND BRANCH RELATIVE(CLRJ,CLGRJ);COMPARE LOGICAL IMMEDIATE AND BRANCH(CLIB,CLGIB);及COMPARE LOGICAL IMMEDIATE AND BRANCH RELATIVE(CLIJ,CLGIJ)。
[0250] 只要以下指令中之一者完成,就亦认为发生中断事件:BRANCH AND  SET AUTHORITY(BSA);BRANCH IN SUBSPACE GROUP(BSG);BRANCH RELATIVE AND SAVE(BRAS);BRANCH RELATIVE AND SAVE LONG(BRASL);LOAD PSW(LPSW);LOAD PSW EXTENDED(LPSWE);
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个的分支指令,则将不对应于分支指令的最右侧位设定为0(包括位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字段为0时,或当以下指令的R2字段为0时,这是依赖于该指令的执行是否使位设定于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及I/O子系统所观察,在事务中止期间储存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] · NONTRANSACTIONAL STORE
[0276] · TRANSACTION ABORT
[0277] · TRANSACTION BEGIN
[0278] · TRANSACTION END
[0279] 当CPU处于事务执行模式时,某些指令的已尝试执行受到限定且造成事务中止。
[0280] 当在受限事务执行模式下发出时,受限定指令的已尝试执行亦可引起事务限制程序中断,或可如同事务不受到限制一样引起执行进行。
[0281] 在z/Architecture的一实例中,作为实例,受限定指令包括以下非特殊权限指令:COMPARE AND SWAP AND STORE;MODIFY RUNTIME INSTRUMENTATION CONTROLS;PERFORM LOCKED 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;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;COMPUTE INTERMEDIATE MESSAGE DIGEST;COMPUTE LAST MESSAGE DIGEST;COMPUTE MESSAGE AUTHENTICATION CODE;CONVERT UNICODE-16 TO UNICODE-32;CONVERT UNICODE-16 TO UNICODE-8;CONVERT UNICODE-32 TO UNICODE-16;CONVERT UNICODE-32 TO UNICODE-8;CONVERT UNICODE-8 TO UNICODE-16;CONVERT UNICODE-8 TO UNICODE-32;PERFORM CRYPTOGRAPHIC COMPUTATION;RUNTIME INSTRUMENTATION OFF;及RUNTIME INSTRUMENTATION ON。
[0289] 以上指令中每一个当前由硬件共处理器实施,或已处于过去机器中,且因此被认为受到限定。
[0290] 当有效允许AR修改(A)控制为0时,以下指令受到限定:COPY ACCESS;LOAD ACCESS MULTIPLE;LOAD ADDRESS EXTENDED;及SET ACCESS。
[0291] 以上指令中每一个造成存取寄存器的内容被修改。若TRANSACTION BEGIN指令中的A控制为0,则程序已明确地指示出将不允许存取寄存器修改。
[0292] 当有效允许浮点运算(F)控制为0时,浮点指令受到限定。
[0293] 在某些情况下,以下指令可受到限定:EXTRACT CPU TIME;EXTRACT PSW;STORE CLOCK;STORE CLOCK EXTENDED;及STORE CLOCK FAST。
[0294] 以上指令中每一个经受解译性执行状态描述中的拦截控制。若超管理器已设定针对此等指令的拦截控制,则这些指令的执行可归因于超管理器实施而被拖延;因此,若发生拦截,可认为这些指令受到限定。
[0295] 当非受限事务由于受限定指令的已尝试执行而中止时,将事务诊断区块中的事务中止码设定为11(受限定指令),且将条件码设定为3,惟如下情形除外:当非受限事务归因于原本将会引起特殊权限操作异常的指令的已尝试执行而中止时,无论将中止码设定为11(受限定指令)或4(由特殊权限操作程序中断的辨识引起的未筛选程序中断)而都是不可预测的。当非受限事务归因于在M1字段中的码为6或7时PREFETCH DATA(RELATIVE LONG)的已尝试执行或在M3字段为0且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及I/O子系统所观察,在CPU处于事务执行模式时进行的所有储存操作数存取看来像是单一区块并行存取。亦即,对半字组、字组、双字组或四倍字组内的所有字节的存取经指定以看来像是区块并行,如由其他CPU及I/O(例如,通道)程序所观察。半字组、字组、双字组或四倍字组在此章节中被称作区块。当提取类型参考经指定以在区块内看来像是并行时,在该区块中含有的字节正被提取的时间期间不准许由另一CPU或I/O程序对该区块的储存存取。当储存类型参考经指定以在区块内看来像是并行时,在该区块内的字节正被储存的时间期间不准许由另一CPU或I/O程序对该区块的存取(提取或储存)。
[0303] 针对指令的储存存取以及DAT及ART(存取寄存器表)表提取遵循非事务规则。
[0304] CPU凭借使事务嵌套深度转变至0的TRANSACTION END指令而正常地离开事务执行模式,在该状况下,事务完成。
[0305] 当CPU凭借TRANSACTION END指令的完成而离开事务执行模式时,交付在处于事务执行模式时进行的所有储存;亦即,这些储存看来像是作为单一区块并行操作而发生,如由其他CPU及I/O子系统所观察。
[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] 高速缓存提取相关条件:由CPU的高速缓存电路侦测与由事务提取的储存位置相关的条件。用为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控制为1的PERFORM FRAME MANAGEMENT FUNCTION、NQ控制为0的SET STORAGE 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或I/O子系统的冲突(亦即,由将不允许事务成功地完成的条件造成)时,受限事务最终将完成;因此,无需且不指定中止处理例程。举例而言,在不存在以下各者时,事务最终将完成:不能处理的条件(例如,除以0)的违反、不允许事务完成的条件(例如,不允许指令执行的计时器中断、热I/O等等),或与受限事务相关联的限定或限制的违反。
[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;COMPARE AND FORM CODEWORD;
COMPARE LOGICAL LONG;COMPARE LOGICAL LONG EXTENDED;COMPARE LOGICAL LONG UNICODE;COMPARE LOGICAL STRING;COMPARE UNTIL SUBSTRING EQUAL;COMPRESSION CALL;COMPUTE INTERMEDIATE MESSAGE DIGEST;COMPUTE LAST MESSAGE DIGEST;COMPUTE MESSAGE AUTHENTICATION CODE;CONVERT TO BINARY;CONVERT TO DECIMAL;CONVERT UNICODE-16 TO UNICODE-32;CONVERT UNICODE-16 TO UNICODE-8;CONVERT 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 TIME;
EXTRACT PSW;EXTRACT TRANSACTION NESTING DEPTH;LOAD AND ADD;LOAD AND ADD LOGICAL;LOAD AND AND;LOAD AND EXCLUSIVE OR;LOAD AND OR;LOAD PAIR DISJOINT;
LOAD PAIR FROM QUADWORD;MONITOR CALL;MOVE LONG;MOVE LONG EXTENDED;MOVE LONG UNICODE;MOVE STRING;NON-TRANSACTIONAL STORE;PERFORM  CRYPTOGRAPHIC COMPUTATION;PREFETCH DATA;PREFETCH DATA RELATIVE LONG;RUNTIME INSTRUMENTATION EMIT;RUNTIME INSTRUMENTATION NEXT;RUNTIME INSTRUMENTATION OFF;RUNTIME INSTRUMENTATION ON;SEARCH STRING;SEARCH;STRING UNICODE;SET ADDRESSING MODE;
STORE CHARACTERS UNDER MASK HIGH,此时M3字段为0且R1字段中的码为6或7;STORE CLOCK;STORE CLOCK EXTENDED;STORE CLOCK FAST;STORE FACILITY LIST EXTENDED;
STORE PAIR TO QUADWORD;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或I/O子系统的冲突时,受限事务最终将完成,如上文所描述。
[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及I/O子系统的潜在干扰,不存在COMPARE AND SWAP指令将用条件码0永远完成的架构确信。受限事务可遭受呈提取或储存冲突中止或热中断的形式的相似干扰。
[0368] CPU使用公平演算法以确保在不存在任何限制违反时受限事务最终完成。
[0369] 6.为了判定完成受限事务所需要的重复反复的数目,程序可在不经受一般寄存器储存屏敝的一般寄存器中使用计数器。下文展示一实例。
[0370]
[0371] *R15现在含有重复事务尝试的计数。
[0372] 应注意,在此实例中,两个寄存器14及15皆未被恢复。亦应注意,在一些模型上,若CPU在TBEGINC指令完成之后但在AHI指令完成之前侦测到中止条件,则一般寄存器15中的计数可低。
[0373] 如由CPU所观察,在事务执行模式下进行的提取及储存并非不同于在不 处于事务执行模式时进行的提取及储存。
[0374] 在一实施例中,使用者(亦即,建立事务的使用者)选择事务是否将受到限制。参看图11来描述与受限事务的处理相关联的逻辑且尤其是与TBEGINC指令相关联的处理的一实施例。TBEGINC指令的执行使CPU进入受限事务执行模式或保持于非受限执行模式。执行TBEGINC的CPU(亦即,处理器)执行图11的逻辑。
[0375] 参看图11,基于TBEGINC指令的执行,执行序列化功能(步骤1100)。序列化功能或操作包括在发生概念上后续的储存存取(及相关参考位及改变位设定)之前由CPU完成所有概念上先前的储存存取(及作为一实例,对于z/Architecture,相关参考位及改变位设定),如由其他CPU及I/O子系统所观察。序列化影响对存储器及对存储器金钥的所有CPU存取的序列,惟与ART表项及DAT表项提取相关联的存取除外。
[0376] 如由处于事务执行模式的CPU所观察,序列化正常地操作(如上文所描述)。如由其他CPU及I/O子系统所观察,由于使事务嵌套深度递减至零(正常结束)的TRANSACTION END指令或由于正被中止的事务,在CPU处于事务执行模式时执行的序列化操作在CPU离开事务执行模式时发生。
[0377] 在执行序列化之后,进行关于是否辨识异常的判定(查询1102)。若是,则处置异常(步骤1104)。举例而言,若事务执行控制(控制寄存器0的位8)为0,则辨识出特殊操作异常且抑制操作。作为另外实例,若B1字段(指令的位16至19)为非零,则辨识出规格异常且抑制操作;若TBEGINC为执行类型指令的目标,则辨识出执行异常且抑制操作;且若于配置中未安装事务执行设施,则辨识出操作异常且抑制操作。若CPU已经处于受限事务执行模式,则辨识出事务受限异常程序异常且抑制操作。另外,若事务嵌套深度在累加1时将超过依赖于模型的最大事务嵌套深度,则用中止码13而中止事务。可辨识及处置其他或不同异常。
[0378] 然而,若不存在异常,则进行关于事务嵌套深度是否为0的判定(查询1106)。若事务嵌套深度为0,则将事务诊断区块地址看作无效(步骤1108);自当前PSW的内容设定事务中止PSW,惟事务中止PSW的指令地址指明TBEGINC指令而非下一循序指令除外(步骤1110);且将如由一般寄存器储存屏敝指明的一般寄存器对的内容储存于不能由程序直接地存取的模型相依位置中(步骤1112)。另外,将嵌套深度设定为1(步骤1114)。另外,将允许浮点运 算(F)及程序中断筛选控制(PIFC)的有效值设定为0(步骤1316)。另外,判定允许AR修改(A)控制(指令的I2字段的位12字段)的有效值(步骤1118)。举例而言,有效A控制为针对当前层级及针对任何外部TBEGIN指令的TBEGINC指令中的A控制的逻辑AND。
[0379] 返回至查询1106,若事务嵌套深度大于0,则使嵌套深度累加1(步骤1120)。另外,将允许浮点运算(F)的有效值设定为0,且程序中断筛选控制(PIFC)的有效值不变(步骤1122)。处理接着继续步骤1118。在一实施例中,事务的成功起始引起条件码0。此情形推断出与执行TBEGINC指令相关联的逻辑的一实施例。
[0380] 在一实施例中,上文所提供的异常检查可以变化次序而发生。用于异常检查的一特定次序如下:
[0381] 优先权相同于针对一般状况的程序中断条件的优先权的异常。
[0382] 归因于含有非零值的B1字段的规格异常。
[0383] 归因于超过事务嵌套深度的中止。
[0384] 归因于正常完成的条件码0。
[0385] 另外,以下各者在一个或多个实施例中适用:
[0386] 1.若事务并不在事务凭借TRANSACTION END而正常地结束时中止,则仅恢复经指明为由一般寄存器储存屏敝储存的寄存器。在中止时仅恢复由最外部TRANSACTION BEGIN指令的GRSM指明的寄存器。
[0387] I2字段应指明提供由受限事务改变的输入值的所有寄存器对。因此,若事务中止,则当重新执行受限事务时,输入寄存器值将恢复为其原始内容。
[0388] 2.在大多数模型上,既在TRANSACTION BEGIN上又在事务中止时,可藉由指定在一般寄存器储存屏敝中进行储存及恢复所需要的寄存器的最小数目而实现改良型效能。
[0389] 3.以下情形说明基于当前事务嵌套深度(TND)且在TND为非零时的TRANSACTION BEGIN指令(TBEGIN及TBEGINC两者)的结果,而无论CPU处于非受限事务执行模式或受限事务执行模式:
[0390]
[0391]
[0392] 如本文所描述,在一个方面中,假定受限事务不含有使其不能够完成的条件,则受限事务确信完成。为了确保受限事务完成,执行该事务的处理器(例如,CPU)可采取某些动作。举例而言,若受限事务具有中止条件,则CPU可临时地:
[0393] (a)禁止无序执行;
[0394] (b)禁止其他CPU存取冲突储存位置;
[0395] (c)诱发中止处理之随机延迟;和/或
[0396] (d)调用其他措施以促进成功完成。
[0397] 概言之,受限事务的处理如下:
[0398] · 若已经处于受限TX模式,则辨识事务受限异常。
[0399] · 若当前TND(事务嵌套深度)>0,则执行如同非受限事务一样行进
[0400] ο 将有效F控制设定为0
[0401] ο 有效PIFC不变
[0402] ο 允许外部非受限TX呼叫可或可不使用受限TX的服务功能。
[0403] · 若当前TND=0,则:
[0404] ο 事务诊断区块地址无效。
[0405] - 中止时未储存指令指定的TDB
[0406] ο 将事务中止PSW设定为TBEGINC的地址
[0407] - 并非下一循序指令
[0408] ο 储存于不能由程序存取的依赖于模型的位置中的由GRSM指明的一般寄存器对[0409] ο 视情况而形成(自D2操作数)的事务令牌。事务令牌为事务的识别符。 事务令牌可等于储存操作数地址或另一值。
[0410] · 有效A=TBEGINC A及任何外部A
[0411] · 累加TND
[0412] ο 若TND自0转变至1,则CPU进入受限TX模式
[0413] ο 否则,CPU操持于非受限TX模式
[0414] · 指令用CC0而完成
[0415] · 异常:
[0416] ο 在B1字段为非零时的规格异常(PIC(程序中断码)0006)
[0417] ο 在事务执行控制(CR0.8)为0时的特殊操作异常(PIC 0013十六进位)[0418] ο 在受限TX模式下发出时的事务受限异常(PIC 0018十六进位)
[0419] ο 在未安装受限事务执行设施时的操作异常(PIC 0001)
[0420] ο 在指令为执行类型指令的目标时的执行异常(PIC 0003)
[0421] ο 在嵌套深度超过时的中止码13
[0422] · 受限事务中的中止条件:
[0423] ο 中止PSW指向TBEGINC指令
[0424] - 并非在TBEGINC指令之后的指令
[0425] - 中止条件造成整个TX被重新驱动
[0426] *无失败路径
[0427] ο CPU采取特殊措施以确保在重新驱动时的成功完成
[0428] ο 假定无持久冲突、中断或受限违反,则事务确信最终完成。
[0429] · 限制违反:
[0430] ο PIC 0018十六进位—指示事务限制的违反
[0431] ο 或,事务如同非受限一样执行
[0432] 如上文所描述,除了为选用的受限事务处理以外,在一实施例中,事务设施亦提供非受限事务处理。参看图12来描述关于非受限事务的处理且尤其是与TBEGIN指令相关联的处理的另外细节。TBEGIN指令的执行使CPU进入或保持于非受限事务执行模式。执行TBEGIN的CPU(亦即,处理器)执行图12的逻辑。
[0433] 参看图12,基于TBEGIN指令的执行,执行序列化功能(上文所描述)(步骤1200)。在执行序列化之后,进行关于是否辨识出异常的判定(查询1202)。若是,则处置异常(步骤1204)。举例而言,若事务执行控制(控制寄存器0的位8) 为0,则辨识出特殊操作异常且抑制操作。另外,若程序中断筛选控制(指令的I2字段的位14至15)含有值3,则辨识出规格异常且抑制操作;或第一操作数地址并不指明双字组边界。若于配置中未安装事务执行设施,则辨识出操作异常且抑制操作;且若TBEGI为执行类型指令的目标,则辨识出执行异常且抑制操作。另外,若CPU处于受限事务执行模式,则辨识出事务受限异常程序异常且抑制操作。
另外,若事务嵌套深度在累加1时将超过依赖于模型的最大事务嵌套深度,则用中止码13而中止事务。
[0434] 再者,当指令的B1字段为非零且CPU并不处于事务执行模式(亦即,事务嵌套深度为0)时,则判定对第一操作数的储存可存取性。取决于特定存取异常情况,若第一操作数不能被存取以进行储存,则辨识出存取异常且操作被设为空值、抑制或终止。另外,辨识用于第一操作数的任何PER储存变更事件。当B1字段为非零且CPU已经处于事务执行模式时,是否判定对第一操作数的储存可存取性是不可预测的,且针对第一操作数侦测PER储存变更事件。若B1字段为0,则不存取第一操作数。
[0435] 除了异常检查以外,亦进行关于CPU是否处于事务执行模式(亦即,事务嵌套深度是否为0)的判定(查询1206)。若CPU并不处于事务执行模式,则储存选择的一般寄存器对的内容(步骤1208)。详言之,将由一般寄存器储存屏敝指明的一般寄存器对的内容储存于不能由程序直接地存取的依赖于模型的位置中。
[0436] 另外,进行关于指令的B1字段是否为0的判定(查询1210)。若B1字段不等于0,则将第一操作数地址置放于事务诊断区块地址中(步骤1214),且事务诊断区块地址有效。另外,自当前PSW的内容设定事务中止PSW(步骤1216)。事务中止PSW的指令地址指明下一循序指令(亦即,在最外部TBEGIN之后的指令)。
[0437] 此外,判定允许AR修改(A)控制(指令的I2字段的位12)的有效值(步骤1218)。有效A控制为针对当前层级及针对所有外部层级的TBEGIN指令中的A控制的逻辑AND。另外,判定允许浮点运算(F)控制(指令的I2字段的位13)的有效值(步骤1220)。有效F控制为针对当前层级及针对所有外部层级的TBEGIN指令中的F控制的逻辑AND。另外,判定程序中断筛选控制(PIFC)(指令的I2字段的位14至15)的有效值(步骤1222)。有效PIFC值为针对当前层级及针对所有外部层级的TBEGIN指令中的最高值。
[0438] 另外,将为1的值添加至事务嵌套深度(步骤1224),且指令用设定条件码0而完成(步骤1226)。若事务嵌套深度自0转变至1,则CPU进入非受限事务执行模式;否则,CPU保持于非受限事务执行模式。
[0439] 返回至查询1210,若B1等于0,则事务诊断区块地址无效(步骤1211),且处理继续步骤1218。相似地,若CPU处于事务执行模式(查询1206),则处理继续步骤1218。
[0440] 举例而言,TBEGIN的执行的所得条件码包括:
[0441] 0 事务起始成功
[0442] 1 --
[0443] 2 --
[0444] 3 --
[0445] 举例而言,程序异常包括:
[0446] ·存取(储存,第一操作数)
[0447] ·操作(未安装事务执行设施)
[0448] ·特殊操作
[0449] ·规格
[0450] ·事务限制(归因于受限定指令)
[0451] 在一实施例中,上文所提供的异常检查可以变化次序而发生。异常检查的一特定次序如下:
[0452] ·优先权相同于针对一般状况的程序中断条件的优先权的异常。
[0453] ·归因于保留PIFC值的规格异常。
[0454] ·归因于不在双字组边界上的第一操作数地址的规格异常。
[0455] ·存取异常(当B1字段为非零时)。
[0456] ·归因于超过最大事务嵌套深度的中止。
[0457] ·归因于正常完成的条件码0。
[0458] 备注:
[0459] 1.当B1字段为非零时,以下内容适用:
[0460] ·当起始最外部事务时,将提供可存取事务诊断区块(TDB)—即使事务从未中止亦如此。
[0461] ·因为TDB的可存取性是否针对嵌套事务被测试是不可预测的,所以应针对任何嵌套TBEGIN指令提供可存取TDB。
[0462] ·相比于B1字段为0时的情形,以下两者的执行可较慢:B1字段为非零的任何TBEGIN;及针对由B1字段为非零的最外部TBEGIN起始的事务而发生的任何中止处理。
[0463] 2.在一实施例中,若事务并不在事务凭借TRANSACTION END而正常地结束时中止,则仅恢复经指明以由一般寄存器储存屏敝储存的寄存器。在中止时仅恢复由最外部TRANSACTION BEGIN指令的GRSM指明的寄存器。
[0464] I2字段应指明提供由事务改变的输入值的所有寄存器对。因此,若事务中止,则当进入中止处理例程时,输入寄存器值将恢复为其原始内容。
[0465] 3.TRANSACTION BEGIN(TBEGIN)指令被预期为继之以条件分支指令,该条件分支指令将判定事务是否被成功地起始。
[0466] 4.若事务归因于并未引起中断的条件而中止,则由事务中止PSW指明的指令接收控制(亦即,在最外部TRANSACTION BEGIN(TBEGIN)之后的指令)。除了由TRANSACTION BEGIN(TBEGIN)指令设定的条件码以外,当事务中止时亦设定条件码1至3。
[0467] 因此,在最外部TRANSACTION BEGIN(TBEGIN)指令之后的指令序列应能够适应所有四个条件码,即使在此实例中TBEGIN指令仅设定码0亦如此。
[0468] 5.在大多数模型上,既在TRANSACTION BEGIN上又当事务中止时,可藉由指定在一般寄存器储存屏敝中进行储存及恢复所需要的寄存器的最小数目而实现改良型效能。
[0469] 6.在处于非受限事务执行模式时,程序可呼叫可变更存取寄存器或浮点寄存器(包括浮点控制寄存器)的服务功能。尽管此类服务例程可将已变更寄存器储存于项上且在结束时恢复这些寄存器,但事务可在例程的正常结束之前中止。若呼叫程序在CPU处于非受限事务执行模式时未为了保留这些寄存器而做好准备,则呼叫程序可不能容许这些寄存器的服务功能变更。
[0470] 为了在处于非受限事务执行模式时防止存取寄存器的非故意变更,程序可将允许AR修改控制(TRANSACTION BEGIN指令的I2字段的位12)设定为0。相似地,为了防止浮点寄存器的非故意变更,程序可将允许浮点运算控制(TBEGIN指令的I2字段的位13)设定为0。
[0471] 7.在TRANSACTION BEGIN(TBEGIN)指令的执行期间辨识的程序异常情况经受由任何外部TBEGIN指令设定的有效程序中断筛选控制。在最外部 TBEGIN指令的执行期间辨识的程序异常情况不经受筛选。
[0472] 8.为了以序列化方式更新多个储存位置,传统码序列可使用锁定字组(旗号)。若(a)事务执行用以实施多个储存位置的更新、(b)程序亦提供「后退」路径以在事务中止时被调用,且(c)后退路径使用锁定字组,则事务执行路径亦应针对锁定的可用性进行测试,且若锁定不可用,则凭借TRANSACTIONEND指令来结束事务且分支至后退路径。此情形确保对序列化资源的一致存取,而不管这些资源是否被事务地更新。
[0473] 或者,若锁定不可用,则程序可中止;然而,中止处理可显著地慢于经由TEND简单地结束事务。
[0474] 9.若有效程序中断筛选控制(PIFC)大于0,则CPU筛选大多数数据异常程序中断。若有效允许浮点运算(F)控制为0,则数据异常码(DXC)将由于归因于数据例外程序异常情况的中止而不在浮点控制寄存器中进行设定。在此情境(筛选适用且有效F控制为0)中,DXC被检测的唯一位置处于TBEGIN指定的TDB中。若程序的中止处理例程在此类情形中检测DXC,则一般寄存器B1应为非零,使得设定有效事务诊断区块地址(TDBA)。
[0475] 10.若PER储存变更或零地址侦测条件针对最外部TBEGIN指令的TBEGIN指定的TDB而存在,且PER事件抑制并不适用,则在指令的执行期间辨识PER事件,因此造成事务立即中止,而不管是否存在任何其他中止条件。
[0476] 在一实施例中,TBEGIN指令将事务中止地址隐含地设定为在TBEGIN之后的下一循序指令。此地址意欲为条件分支指令,该条件分支指令取决于条件码(CC)而判定是否进行分支。成功TBEGIN设定CC0,而已中止事务设定CC1、CC2或CC3。
[0477] 在一实施例中,TBEGIN指令提供指明事务诊断区块(TDB)的地址的选用储存操作数,若事务中止,则信息储存至该事务诊断区块(TDB)中。
[0478] 另外,TBEGIN指令提供包括以下各者的立即操作数:
[0479] 一般寄存器储存屏敝(GRSM),其指示一般寄存器的哪些对将在事务执行开始时被储存且在事务中止时被恢复;
[0480] 允许事务在事务修改存取寄存器时中止的位(A);
[0481] 允许事务在事务尝试执行浮点指令时中止的位(F);及
[0482] 程序中断筛选控制(PIFC),其在事务中止时允许个别事务层级略过程序中断的实际呈现。
[0483] A、F及PIFC控制在各种嵌套层级处可不同,且在内部事务层级结束时恢复为先前层级。
[0484] 此外,TBEGIN(或在另一实施例中,TBEGINC)用以形成事务令牌。视情况,可使该令牌与藉由TEND指令形成的令牌匹配。对于每一TBEGIN(或TBEGINC)指令,作为一实例,令牌由第一操作数地址形成。此令牌可独立于基底寄存器是否为0而形成(不同于仅在基底寄存器为非零时发生的TDB地址设定)。对于用非零基底寄存器而执行的每一TRANSACTION END指令,相似令牌由其储存操作数形成。若令牌并不匹配,则可辨识程序异常以向程序提醒未配对指令。
[0485] 令牌匹配提供意欲藉由确保TEND陈述式与TBEGIN(或TBEGINC)适当地配对而改良软件可靠性的机制。当TBEGIN指令在特定嵌套层级处执行时,令牌由识别事务的此执行个体的储存操作数地址形成。当执行对应TEND指令时,令牌由指令的储存操作数地址形成,且CPU比较用于嵌套层级的开始令牌与结束令牌。若令牌并不匹配,则辨识出异常情况。模型可针对仅某一数目个嵌套层级(或不针对嵌套层级)实施令牌匹配。令牌可不涉及储存操作数地址的所有位,或位可经由杂凑或其他方法而组合。令牌可藉由TBEGIN指令形成,即使不存取TBEGIN指令的储存操作数亦如此。
[0486] 概言之,非受限事务的处理如下:
[0487] · 若TND=0:
[0488] ο 若B1≠0,则自第一操作数地址设定事务诊断区块地址。
[0489] ο 将事务中止PSW设定为下一循序指令地址。
[0490] ο 将由I2字段指明的一般寄存器对储存于依赖于模型的位置中。
[0491] - 不能由程序直接地存取。
[0492] · 计算有效PIFC、A及F控制
[0493] ο 有效A=TBEGIN A及任何外部A
[0494] ο 有效F=TBEGIN F及任何外部F
[0495] ο 有效PIFC=max(TBEGIN PIFC,任何外部PIFC)
[0496] · 累加事务嵌套深度(TND)
[0497] · 若TND自0转变至1,则CPU进入事务执行模式
[0498] · 将条件码设定为0
[0499] ο 当在TBEGIN之后的指令接收控制时:
[0500] - TBEGIN成功由CC0指示
[0501] - 已中止事务由非零CC指示
[0502] · 异常:
[0503] ο 在嵌套深度超过时的中止码13
[0504] ο 在B1字段为非零且储存操作数不能被存取以进行储存操作时的存取异常(各种PIC中的一个)
[0505] ο 在TBEGIN指令为执行类型指令的目标时的执行异常(PIC 0003)
[0506] ο 在未安装事务执行设施时的操作异常(PIC 0001)
[0507] ο 在以下任一情形时的PIC 0006
[0508] - PIFC无效(为3的值)
[0509] - 第二操作数地址未双字组对准
[0510] ο 在事务执行控制(CR0.8)为0时的PIC 0013十六进位
[0511] ο 在受限TX模式下发出时的PIC 0018十六进位
[0512] 如上文所指示,事务(受限或非受限)可由TRANSACTION END(TEND)指令结束。参看图13来描述与事务结束(TEND)指令的处理相关的另外细节。执行TEND的CPU(亦即,处理器)执行图13的逻辑。
[0513] 参看图13,最初,基于处理器获得(例如,提取、接收等等)TEND指令,执行各种异常检查,且若存在异常(查询1300),则处置异常(步骤1302)。举例而言,若TRANSACTION END为执行类型指令的目标,则抑制操作且辨识出执行异常;且若事务执行控制(CR0的位8)为0,则辨识出特殊操作异常且抑制操作。再者,若于配置中未安装事务执行设施,则辨识出操作异常且抑制操作。
[0514] 返回至查询1300,若未辨识出异常,则使事务嵌套深度递减(例如,减1)(步骤1304)。进行关于事务嵌套深度在递减之后是否为0的判定(查询1306)。若事务嵌套深度为
0,则交付由事务(及事务嵌套内的其他事务(若存在),此事务为事务嵌套的部分)进行的所有储存存取(步骤1308)。另外,CPU离开事务执行模式(步骤1310),且指令完成(步骤1312)。
[0515] 返回至查询1306,若事务嵌套深度不等于0,则TRANSACTION END指令恰好完成。
[0516] 若CPU在操作开始时处于事务执行模式,则将条件码设定为0;否则,将条件码设定为2。
[0517] 应注意,有效允许浮点运算(F)控制、允许AR修改(A)控制及程序中断筛选控制(PIFC)经重设至其在起始正被结束的层级的TRANSACTION BEGIN指令之前的各别值。另外,在操作完成时执行序列化功能。
[0518] 在最外部TRANSACTION END指令完成时辨识的PER指令提取及事务结束事件不会引起事务中止。
[0519] 在一实例中,TEND指令亦包括基本字段B2及位移字段D2,该两个字段经组合(例如,添加)以建立第二操作数地址。在此实例中,可执行令牌匹配。举例而言,当B2为非零时,第二操作数地址的选择的位与藉由对应TBEGIN形成的事务令牌匹配。若存在失配,则存在异常(例如,PIC 0006)。
[0520] 除了以上内容以外,事务可由TRANSACTION ABORT指令隐含地或明确地中止。由TABORT或以其他方式使事务中止包括执行数个步骤。一般而言,参看图14来描述用于中止处理的步骤的实例。若基于中止由TABORT或以其他方式起始而存在处理差异,则在以下描述中指示该差异。在一实例中,处理器(例如,CPU)正执行图14的逻辑。
[0521] 参看图14,最初,基于TABORT指令或隐含中止的执行,交付在CPU处于事务执行模式时进行的非事务储存存取(步骤1400)。舍弃在CPU处于事务执行模式时进行的其他储存(例如,事务储存)(步骤1402)。
[0522] CPU离开事务执行模式(步骤1404),且后续储存非事务地发生。当前PSW用事务中止PSW的内容取代,惟条件码如上文所描述而被设定除外(不同于以下情形,其中若TDBA有效但区块为不可存取的,则CC=1)(步骤1406)。作为中止处理的部分或在中止处理之后,处理分支至事务中止PSW指定位置以执行动作。在事务为受限事务的一实例中,位置为TBEGINC指令,且动作为该指令的重新执行;且在事务为非受限事务的另外实例中,位置为在TBEGIN之后的指令,且动作为该指令的执行,其可为(例如)至中止处理例程的分支。
[0523] 紧接着,进行关于事务诊断区块地址是否有效的判定(查询1408)。当事务诊断区块地址有效时,将识别中止的原因的诊断信息及一般寄存器的内容储存于TBEGIN指定事务诊断区块中(步骤1410)。上文参考事务诊断区块来描述所储存的TDB字段及TDB字段被储存的条件。
[0524] 若事务诊断区块地址有效,但区块已变得不可存取,则在执行最外部TBEGIN指令之后,不存取该区块且条件码1适用。
[0525] 对于归因于引起中断的程序异常情况而中止的事务,储存程序中断TDB。
[0526] 返回至查询1408,若事务诊断区块地址无效,则不储存TBEGIN指定的TDB且条件码2或3适用,此取决于中止的原因。
[0527] 除了以上内容以外,亦将事务嵌套深度设定为等于0(步骤1412)。另外,恢复经指定以由最外部TBEGIN指令储存的任何一般寄存器对(步骤1414)。当事务中止时,不恢复未经指明以由最外部TBEGIN指令储存的一般寄存器对。
[0528] 另外,执行序列化功能(步骤1416)。序列化功能或操作包括:在发生概念上后续的储存存取(及相关参考位及改变位设定)之前,由CPU完成所有概念上先前的储存存取(且作为一实例,对于z/Architecture,相关参考位及改变位设定),如由其他CPU及I/O子系统所观察。序列化实现对存储器及对存储器金钥的所有CPU存取的序列,惟与ART表项及DAT表项提取相关联的存取除外。
[0529] 如由处于事务执行模式的CPU所观察,序列化正常地操作(如上文所描述)。如由其他CPU及I/O子系统所观察,由于使事务嵌套深度递减至0(正常结束)的TRANSACTION END指令或由于正被中止的事务,在CPU处于事务执行模式时执行的序列化操作在CPU离开事务执行模式时发生。
[0530] 对于以除了由TABORT以外的其他方式起始的中止处理,若事务归因于引起中断的异常情况而中止(查询1418),则将与中断相关联的中断码或参数储存于对应于中断类型的已指派储存位置处(步骤1420)。另外,如上文所设定,将当前PSW储存至中断旧PSW中(步骤1422)。此后,或若事务并未归因于引起中断的异常情况而中止,则指令以条件码0而结束。
[0531] 除了以上内容以外,亦在针对z/Architecture的解译性执行的一实施例中,当CPU处于事务执行模式且发生将正常地引起拦截码4、12、44、56、64、68或72的访客条件时,并不发生拦截。实情为,CPU保持于解译性执行模式,且向访客指示中止条件如下:
[0532] ·对于非受限事务,事务归因于受限定指令而中止(中止码11)。若侦测到并行PER事件且针对PER而启动CPU,则程序中断以中断码0280十六进制而发生。
[0533] ·对于受限事务,辨识事务限制异常。若侦测到并行PER事件且针对PER而启动CPU,则程序中断以中断码0298十六进制而发生。
[0534] 当事务归因于程序异常情况而中止时,程序中断筛选可禁止中断的实际呈现。对于可引起拦截的程序中断,筛选亦禁止拦截。
[0535] 在一个实施例中,为了便于失败事务的错误确定,调试包括受限和非受 限事务的事务(即,程序调试器单步调试事务以看它是如何执行的)。存在设施以单步调试待测码,包括作为z/Architecture的一部分由国际商业机器公司提供的程序事件记录(PER)设施。然而,如当前限定的那样,PER不使其自身调试事务,因为PER事件导致引起事务中止的程序中断。因此,根据一个实施例,提供控制以便于事务的调试。详言之,提供PER控制以便于使用PER来调试事务。
[0536] 在一个特定实施例中,提供两个PER控制,如下所示:
[0537] 事务结束事件控制:当未安装事务执行设施时,或者当安装设施且控制寄存器9的位38为0时,未识别出事务结束事件。当安装事务执行设施且位38为1时,作为最外部TRANSACTION END指令完成的结果,识别出事务结束事件。
[0538] 事务抑制(ES)控制:当CPU处于事务执行模式时,控制寄存器9的位41在为1时指定忽略例如寄存器的位32-34、36、37和39中的PER事件屏蔽并假定包含0。当CPU不处于事务执行模式时,或者当寄存器的位41为0时,所有PER事件屏蔽如限定的那样操作。在一个实施例中,可以抑制的PER事件的含义如下:
[0539] * 位32:成功分支事件;
[0540] * 位33:I(指令)提取事件;
[0541] * 位34:储存变更事件;
[0542] * 位36:使用真实地址存储事件;
[0543] * 位37:零地址检测事件;或
[0544] * 位39:I提取无效事件。
[0545] 当执行最外部TRANSACTION BEGIN指令且ES控制为1时,抑制任意PER存储变更或对于TBEGIN指定的TDB的零地址检测事件以及任意指令提取基本事件;然而,如果发生最外部TRANSACTION BEGIN,不抑制指令提取无效事件。
[0546] 可能设置(控制寄存器10-11中的)PER地址的范围的操作系统调试器可以使用事务结束事件控制和事件抑制控制以便于程序调试,其中所述范围包括事务执行的代码,如参照图15所述。在一实例中,处理器(如执行待调试的事务的处理器)正在执行该逻辑。
[0547] 参看图15,最初,例如,经由TBEGIN或TBEGINC而起始事务(步骤1500)。
[0548] 在事务的执行期间,若识别出PER事件(查询1502),则中断事务(步骤1504)。在一实例中,中断使得待执行的事务内的下一指令的地址被保存。
[0549] 为了在事务(受限或非受限)的执行期间防止识别出的PER事件之后的连续循环,控制程序可以重新分派事务,其中事务结束事件和事件抑制控制(控制寄存器9的位38和41)二者设为1(步骤1506-1508)。在重新分派中,在一实例中,在事务的开始处(如,在TRANSACTION BEGIN指令处)开始执行。设置控制使得事务中的任何其他PER事件(相同事件或其他事件)被忽略,直到TRANSACTION END指令(即,最外部TEND)为止(询问1512),此时通过通知控制程序以重设位38和41为0,PER事务结束事件便于正常PER操作的恢复。
[0550] 事件抑制控制允许控制程序的程序中断处置器快速地禁止所有PER事件(除了事务结束事件),而不需要对于其中维持当前PER设置的任何任务结构的存取。或者,如果控制程序具有对这种结构的存取,则可以重新驱动事务(如,受限事务),仅禁止识别出的PER事件并保持其他事件。
[0551] 在下文中在标题程序-事件记录之下描述关于由国际商业机器公司提供的PER设施的进一步细节。进一步,尽管在一个实施例中,正在抑制PER事件,但是在其他实施例中,可以抑制其他事件,包括但不限于引起中断的其他事件。PER事件仅为一个实例。
[0552] 事务执行可用于多种情境中,包括但不限于部分内嵌、理论式处理及锁定省略。在部分内嵌中,待包括于执行路径中的部分区包覆于TBEGIN/TEND中。TABORT可包括于其中以在侧向出口(side-exit)上回复状态。对于理论,诸如,以Java,对已取值指针的空值检查可藉由使用事务而延迟至循环边缘。若指针为空值,则事务可使用TABORT而安全地中止,TABORT包括于TBEGIN/TEND内。
[0553] 至于锁定省略,参看图16A至图16B及下文所提供的码片段来描述锁定省略的使用的一实例。
[0554] 图16A描绘多个队列元素1602a至1602d的双向链接清单1600。新队列元素1602e将插入至队列元素的双向链接清单1600中。每一队列元素1602a至1602e包括前向指针1604a至1604e及向后指针1606a至1606e。如图16B所示,为了将队列元素1602e添加于队列元素1602b与队列元素1602c之间,(1)将向后指针1606e设定为指向队列元素1602b、(2)将前向指针1604e设定为指向队列元素 1602c、(3)将向后指针1606c设定为指向队列元素1602e,且(4)将前向指针1604b设定为指向队列元素1602e。
[0555] 对应于图16A至图16B的实例码片段如下:
[0556]
[0557] 在一实例中,若事务用于锁定省略,但后退路径使用锁定,则事务将至少提取锁定字组以查看锁定字组是否可用。若另一CPU非事务地存取锁定,则处理器确保事务中止。
[0558] 如本文所使用,互换地使用存储器、中央存储器、主存储器、存储器及主存储器,除非藉由使用隐含地或明确地另有提及。另外,虽然在一实施例中事务有效地延迟包括延迟将事务储存交付至主存储器直至选择的事务完成;但在另一实施例中,事务有效地延迟包括允许对存储器的事务更新,但保持旧值且在中止时使存储器恢复为旧值。
[0559] 程序事件记录(PER)
[0560] 下面描述如对于由国际商业机器公司提供的z/Architecture限定的PER的一个实施例。
[0561] PER的目的在于协助调试程序。它允许程序变更为下面几种类型的事件。
[0562] * 成功的分支指令的执行。提供具有仅当分支目标位置在指明的存储区域内时发生的事件的选项。
[0563] * 从指明的存储区域的指令的提取。
[0564] * 指明的存储区域的内容的变更。提供具有仅当存储区域在指明的地址空间内时发生的事件的选项。
[0565] * STORE USING REAL ADDRESS指令的执行。
[0566] 程序可以选择性地指定一种或多种类型的事件被识别,除了对于STORE USING REAL ADDRESS的事件仅可以与储存变更事件一起指定之外。藉由程序中断将关于PER事件的信息提供到程序,其中在中断码中识别中断的原因。
[0567] PER指令提取无效
[0568] 在实施z/Architecture的模型上PER-3设施可以可用,并且在z/Architecture架构模式中可用。当安装该设施时,控制寄存器9的位39当为1时指定PER指令提取事件强制无效。当控制寄存器9的位33,指令提取PER事件屏蔽位,也为1时,为了该目的,位39有效。当位33为0时,未识别出PER指令提取事件,并且位39没有效果。当PER-3设施未安装或位39为0时,PER指令提取事件不强制无效。将强制无效的PER指令提取事件称为PER指令提取无效事件。将不强制无效的PER事件称为PER基本事件。
[0569] 当安装PER-3设施,并且位39为1时,在执行提取的指令之前出现由PER指令取回事件引起的中断,指示PER指令提取无效事件,报告没有其他PER事件并且没有其他程序中断条件,并且无效指令的执行。当未安装PER-3设施,或者位39为0时,不强制无效,指示PER指令提取基本事件,可以同时报告其他PER事件和其他程序中断条件,并且可以完成、终止、抑制或无效指令的执行。在不存在其他条件时,在提取的指令或其操作单元的执行完成之后,出现由PER指令提取基本事件引起的中断。
[0570] 控制寄存器分配和地址空间控制元素
[0571] 用于控制PER的信息驻留于控制寄存器9、10和11和地址空间控制元素中。控制寄存器中的信息具有如下格式:
[0572] 在一个实施例中,控制寄存器9包括:
[0573] PER事件屏蔽(EM):位32-34和36指定识别何种类型的事件。当安装PER-3设施时,还使用PER事件屏蔽的位39。在一实例中,分配各位如下:
[0574] 位32:成功分支事件
[0575] 位33:指令提取事件
[0576] 位34:储存变更事件
[0577] 位36:使用真实地址存储事件(位34也将是1)
[0578] 位39:指令提取无效事件(位33将是1)
[0579] 位32-34和位36在为1时指定识别出对应类型的事件。然而,当位34也为1时,为了该目的,位36有效。当位34为1时,识别出储存变更事件。当位34和36为1时,识别出储存变更事件和使用真实地址存储事件二者。当位为0时,未识别出对应类型的事件。当位34为0时,未识别出储存变更事件和使用真实地址存储事件二者。
[0580] 当未安装PER-3设施时,忽略位39。当位33也为1时,位39有效。当位33为1,并且安装PER-3设施,并且位39为1时,识别出PER指令提取无效事件。当位33为1且位39为0(或者未安装PER-3设施)时,识别出PER指令提取基本事件。当位33为0时,既未识别出PER指令提取基本事件也未识别出PER指令提取无效事件。
[0581] 分支地址控制(B):控制寄存器9的位40在为1时指定仅对于至指明的存储区域内的位置的分支出现成功分支事件。当位40为0时,无论分支目标地址如何,都出现成功分支事件。
[0582] 存储变更空间控制(S):控制寄存器9的位42在为1时指定作为对于仅位于指明的地址空间内的指明的存储区域的参照的结果而出现储存变更事件。将地址空间指明为藉由用于转译对于地址空间的参考的地址空间控制元素中储存变更事件位而出现储存变更事件的地址空间。当DAT(动态地址转译)不有效或位42为0时,储存变更事件不受限于仅对于特定地址空间出现。
[0583] 在一个实施例中,控制寄存器10包括:
[0584] PER开始地址:控制寄存器10的位0-63是指明存储区域的开始的地址。
[0585] 在一个实施例中,控制寄存器11包括:
[0586] PER结束地址:控制寄存器11的位0-63是指明存储区域的结束的地址。
[0587] 地址空间控制元素具有如下格式之一:
[0588] (A)区表或区段表指明(R=0),在一个实施例中,其包括:区表或 区段表原点(位0-51);子空间群组控制(G),位54;私有空间控制(P),位55;储存变更事件控制(S),位56;切换事件控制(X),位57;真实空间控制(R),位58;指明类型控制(DT),位60-61;以及区表或区段表长度(TL),位62-63。
[0589] (B)真实空间指明(R=1),在一个实施例中,其包括真实空间令牌原点(位0-51);G;P;S;X;以及R。
[0590] 储存变更事件位(S):当控制寄存器9中的储存变更空间控制为1时,地址空间控制元素的位56在为1时指定由地址空间控制元素限定的地址空间是可以出现储存变更事件的地址空间。当地址空间控制元素用于执行对于存储操作数存储参考的动态地址转译时,检验位56。地址空间控制元素可以分别是控制寄存器1、7或13中的PASCE(主要ASCE)、SASCE(次要ASCE)或HASCE(本籍ASCE),或者可以在存取寄存器转译期间从ASN第二表项获得。代替从主储存器中的ASN第二表项获得,位56可以从ART后备缓冲器(ALB)中的ASN第二表项获得。当储存变更空间控制为0时,忽略位56。
[0591] 编程备注:
[0592] 使能CPU用于PER指令提取无效可以用以在由控制寄存器10和11指明的储存区域内的任意指令的执行之前确定CPU的状态。无效的指令可以是在成功分支之后、LOAD PSW之后或LOAD PSW EXTENDED之后的第一指令;或者可以是在存储区域中且在循序执行的处理中存取的执行类型指令或最左侧指令的目标。在记录期望的信息以便允许CPU执行该指令之后,CPU将被禁止用于指令提取无效或,或者控制寄存器10和11将被改变以指明不同的储存区域。这可以与使能用于相同储存区域内的PER成功分支相比较,其使得PER事件仅在以上所述的第一情况中被报告,但是不需要特殊动作来继续。
[0593] 操作
[0594] PER处于PSW的位1,PER屏蔽的控制下。当PER屏蔽和特定PER事件屏蔽位均为1时,使能CPU用于对应类型的事件;否则,禁止它。然而,当储存变更屏蔽位和使用真实地址存储屏蔽位二者为1时,CPU被使能用于使用真实地址存储事件。
[0595] 当安装PER-3设施时,然后当指令提取事件屏蔽位,指令提取无效事件屏蔽位和PER屏蔽均为1时,使能CPU用于PER指令提取无效事件。归因于PER指令提取无效事件的中断引起使得事件无效的指令的执行。
[0596] 归因于PER基本事件的中断通常在造成该事件的指令的执行之后出现。事件的出现不影响指令的执行,其可以完成、部分完成、终止、抑制或无效。然而,储存变更事件的识别使得不多于4K字节储存于引起事件的字节开始,而这可能导致中断指令的部分完成。
[0597] 在造成事件的指令执行之前出现对于指令提取无效事件的中断,并且无效操作。
[0598] 当在特定PER事件发生时CPU被禁止用于特定PER事件时,通过PSW中的PER屏蔽或者通过控制寄存器9中的屏蔽,未识别出事件。
[0599] 对于PSW中的PER屏蔽或控制寄存器9、10和11中PER控制字段的改变影响PER以紧接下来的指令的执行开始。因此,如果作为改变的结果,指令提取无效事件应用于紧接下来的指令,则将无效该指令的执行并且将报告指令提取无效事件。
[0600] 对于控制寄存器1、7或13中的地址空间控制元素中的储存变更事件位的改变也影响PER以紧接下来的指令的执行开始。在主储存器或ALB中ASN第二表项的存取寄存器转译期间,可以获得的对于地址空间控制元素中的储存变更事件位的改变不一定对于PER具有立即影响,如果有的话。然而,在清除ALB的PURGE ALB或COMPARE AND SWAP AND PURGE执行之后PER被立即影响。
[0601] 如果在对于该种类型的事件将CPU从被使能改变为被禁止的指令的执行期间出现PER基本事件,那么识别出该PER事件。
[0602] PER基本事件可以在指令的试验执行中被识别,并且在指令之后,DAT表项和操作数可以对于实际执行重新提取。如果在试验执行和实际执行之间通过另一CPU或者通过信道程序来修改任意重新提取的字段,则指示的PER事件用于试验还是实际执行是不可预测的。
[0603] 原因的识别
[0604] PER的程序中断将中断码的位8设置为1,并将识别信息放置在真实存储位置150-159。当PER事件是储存变更事件,也将信息存储在位置161。通过程序旧PSW和ILC(中断长度码)中的指令地址来提供额外信息。
[0605] 在一实例中,位置150-151包括:
[0606] PER码:由位的位置0-2、4和7中的1来指示PER事件的出现。在一个实施例中,对于特定类型的事件的PER码中的位的位置如下:
[0607]
[0608] 位置150的位位置2中的1和位位置4中的0指示储存变更事件,而位位置2和4中的1指示使用真实地址存储事件。当程序中断发生时,可以同时指示多于一种类型的PER基本事件。另外,如果存在另一程序中断条件,则用于程序中断的中断码可以指示PER基本事件和其他条件二者。
[0609] 当对于PER指令提取无效事件出现程序中断时,在PER码中,位1和7设置为1。不能同时指示其他PER事件。
[0610] 位置150-151的位位置3和6中存储0。当未安装PER-3时,将0储存在位位置7中。
[0611] 寻址和转译模式标识(ATMID):在指示PER事件时的程序中断期间,引起事件的指令的执行开始时的PSW的位31、32、5、16和17可以分别储存在真实位置150-151的位位置8和10-13中。如果存储位31、32、5、16和17,那么1位储存在位置150-151的位位置9中。如果未储存位31、32、5、16和17,那么0位储存在位置150-151的位位置8中。
[0612] 真实位置150-151的位8-13命名为寻址和转译模式标识(ATMID)。位9命名为ATMID有效位。当位9为0时,指示存储了无效ATMID(所有0)。
[0613] 在一个实施例中,有效ATMID的各位的含义如下:
[0614]
[0615] 只有在PER事件由以下指令之一引起时才必须储存有效ATMID:
[0616] BRANCH AND SAVE AND SET MODE(BASSM),BRANCH AND SET AUTHORITY(BSA),BRANCH AND SET MODE(BSM),BRANCH IN SUBSPACE GROUP(BSG),LOAD PSW(LPWS),LOAD PSW EXTENDED(LPWSE),PROGRAM CALL(PC),PROGRAM RETURN(PR),PROGRAM TRANSFER(PT),PROGRAM TRANSFER WITH INSTANCE(PTI),RESUME PROGRAM(RP),SET ADDRESS SPACE CONTROL(SAC),SET ADDRESS SPACE CONTROL FAST(SACF),SET ADDRESSING MODE(SAM24,SAM31,SAM64),SET SYSTEM MASK(SSM),STORE THEN AND SYSTEM MASK(STNSM),STORE THEN OR SYSTEM MASK(STOSM),SUPERVISOR CALL(SVC),and TRAP(TRAP2,TRAP4)。
[0617] 如果PER事件由任何其他指令引起,则有效ATMID是否存储是不可预测的。PER指令提取无效事件屏蔽位的值不影响ATMID字段的内容。
[0618] PER ASCE标识(AI):在一实例中,如果PER码包含储存变更事件(位2是1且位4是0)的指示,并且当DAT启动时事件出现,则位置150-151的位14和15被设置以识别用以转译引起事件的参考的地址空间控制元素(ASCE),如下:
[0619]
[0620] 通过识别使用存取列表项令牌(ALET)00000000或00000001十六进制或ALET通过存取列表项指明包含ASCE或本籍ASCE的ASN第二表项,CPU可以 避免将位14和15设置为01。
[0621] 如果作为STORE HALFWORD RELATIVE LONG或STORE RELATIVE LONG的结果而出现PER储存变更事件,则位14和15对应于用以提取指令的ASCE:当CPU处于主要空间模式或存取寄存器模式时00,而当CPU处于本籍空间模式时11。
[0622] 如果以下任意为真,将0储存在位置150-151的位位置14和15中。
[0623] * ASCE不用于转译引起事件的参考。
[0624] * PER码指示储存变更事件和使用真实地址储存事件均不发生(即,码的位2为0)。
[0625] 备注:当DAT关闭时或者当限定操作数以包含真实地址时(如对于INVALIDATE DAT TABLE ENTRY,INVALIDATE PAGE TABLE ENTRY,LOAD USING REAL ADDRESS和STORE USING REAL ADDRESS的情况那样)ASCE不用于转译参考。当限定操作数以包含真实或绝对地址时(如对于PERFORM FRAME MANAGEMENT FUNCTION的情况那样)ASCE也不用于转译参考。
[0626] PER地址:位置152-159处的PER地址字段包含用以提取造成识别出的(一个或多个)PER事件的指令的指令地址。
[0627] 当指令是执行类型指令(EXECUTE或者EXECUTE RELATIVE LONG)的目标时,将用以提取执行类型指令的指令地址放置于PER地址字段中。
[0628] PER存取标识(PAID):如果在PER码中指示储存变更事件,并且PERASCE标识(AI,位置150-151的位14-15)包含01二进制,则将事件应用的地址空间的指示储存在位置161。使用的存取寄存器的数量储存在位置161的位位置4-7中,并且0储存在位位置0-3中。当PER ASCE标识不含有01二进制时,位置161的内容是不可预测的。
[0629] 指令地址:程序旧PSW中的指令地址是本来接下来要执行的指令的地址,除非还指示另一程序条件,在这种情况下,指令地址是由归因于该条件的指令结束所确定的指令地址。当识别出PER指令提取无效事件时,程序旧PSW中的指令地址是造成事件的指令的地址。这是真实储存位置152-159中PER地址字段中储存的相同地址。
[0630] ILC:对于PER指令无效事件,ILC为0。对于PER基本事件,ILC指示由PER地址指明的指令的长度,除了当由为0的ILC的LOAD PSW,LOAD PSW EXTENDED,PROGRAM RETURN或监督呼叫中断组引入的PSW的同时规格异常时。
[0631] 备注:
[0632] 1.PSW位13时扩展寻址模式位,且PSW位32是基本寻址模式位。当PSW位31和32二者为1时,它们指定寻址模式。当PSW位31为0时,如果PSW 32为0,则该位指定24位寻址模式,而如果该位为1,则指示31位寻址模式。PSW位5是DAT模式位,并且PSW位16和17是地址空间控制位。
[0633] 2.有效ATMID允许程序处理PER事件以确定提取引起事件的指令的地址空间,并且还确定何种转译模式应用于指令的储存操作数参考,如果有的话。必须储存有效ATMID的每一条指令可以改变一个或多个PSW位5、16和17,结果是由于PER事件而存储的程序旧PSW中那些位的值不一定是引起事件的指令的执行开始处存在的值。必须储存有效ATMID的指令仅为可以改变PSW位5、16和17的任意一个的指令。
[0634] 3.如果指示储存变更PER事件且当事件发生时DAT启动,则由PER ASCE标识,真实位置150-151的位14和15给出用以转译引起事件的参考的地址空间控制元素的指示。如果位14和15指示使用指定AR的地址空间控制元素,则可以使用真实位置161中的PER存取标识,以确定参考的地址空间。为了确定DAT是否启动,处理PER事件的程序应该首先检验ATMID有效位以确定是否存储有效ATMID,并且如果存储了有效ATMID,则检验ATMID中的DAT模式位。如果未存储有效ATMID,则程序应该检验程序旧PSW中的DAT模式位。
[0635] 4.如果存储了有效ATMID,则也允许处理PER事件的程序确定对于引起PER事件的指令存在的寻址模式(24位、31位或64位)。寻址模式的该知识允许程序在没有错误机会的情况下确定指令的储存操作数(如果有的话)和指令的地址的位位置0-39中的一位的含义,从而精确地确定指令和操作数的位置。注意,通过PER地址是真实位置152-159,不一定无错误地提供指令的地址,因为该地址可能是执行类型指令的地址,其中目标指令的地址仍然要从指定执行类型指令的第二操作数地址的字段确定。还要注意,错误的另一可能源是,在24位或31位寻址模式中,通过分别刚好在16M字节或2G字节边界以下开始,指令或操作数在存储器中可能环绕。
[0636] 5.对于可以改变寻址模式位的所有指令必须储存有效ATMID。然而,ATMID机构不提供可以精确地定位引起PER事件的指令并且指令的操作数的 完全确信,这是因为LOAD CONTROL和LOAD ADDRESS SPACE PARAMETERS可以改变用以提取指令的地址空间控制元素。
[0637] 指示的优先级
[0638] 当识别出PER指令提取无效事件且其他程序中断条件存在时,指示具有最高优先级的程序中断条件。
[0639] 当指示PER指令提取无效事件时,不指示其他PER事件。当不指示PER指令提取无效事件时,可以识别并报告多于一个的PER基本事件。该部分的剩余应用于这些情况。
[0640] 当程序中断出现且已经识别出多于一个的PER基本事件时,在PER码中同时指示所有识别出的PER事件。另外,如果另一程序中断条件同时存在,则用于程序中断的中断码指示PER条件和其他条件二者。
[0641] 在用于SUPERVISOR CALL的指令提取基本事件的情况下,程序中断紧接着监督呼叫中断之后出现。
[0642] 如果在指令的执行期间识别出PER基本事件,该指令也引入具有之前识别出的PSW格式错误的类型的新PSW,则在程序中断的中断码中同时指示规格异常和PER二者。如果PSW格式错误是之后识别出的类型,则在中断码中仅指示PER。在两种情况下,将无效PSW储存为程序旧PSW。
[0643] PER基本事件的识别通常不影响指令执行的结束。然而,在下面的情况中,通常不完成可中断指令的执行:
[0644] 1.当指令归因于异步条件(I/O、外部、重启或可抑制机器检验条件)中断时,在普通优先级顺序中,首先出现对于PER事件的程序中断,接下来出现其他中断(经历新PSW中的屏蔽位)。
[0645] 2.当执行停止功能时,指示PER事件的程序中断在CPU进入停止状态之前出现。
[0646] 3.当识别出任意程序异常时,同时指示对于该指令执行识别出的PER事件。
[0647] 4.取决于模型,在特定情形中,PER事件的识别可以出现以使得指令过早地中断,而没有程序异常的同时指示,没有对于任何异步条件的中断且没有CPU进入停止状态。特别地,储存变更事件的识别使得不多于4K字节以引起事件的字节开始地储存。
[0648] 在以上情况1和2中,如果已经识别出的唯一PER事件是指令提取基本事 件,并且指令的操作的另一单元仍然被执行,则可以舍弃事件,结果是不出现程序中断。是否舍弃事件是不可预测的。
[0649] PER指令提取无效事件的识别使得造成该事件的指令的执行无效。
[0650] 备注:
[0651] 1.在下面的情况下,指令可以引起对于PER基本事件的程序中断,并且改变控制用于PER事件的中断的字段的值。原始的字段值确定对于PER事件是否发生程序中断。
[0652] A.指令LOAD,PSW,LOAD PSW EXTENDED,SET SYSTEM MASK和SUPERVISOR CALL可以引起指令提取事件并禁止CPU用于PER中断。另外,STORE THEN AND SYSTEM MASK可以引起指示储存变更事件。在所有这些情况下,与用于PER事件的程序中断相关联的的程序旧PSW可以指示CPU被禁止用于PER事件。
[0653] B.在改变控制寄存器9中的PER事件屏蔽的值或控制指令提取事件的指示的控制寄存器10和11中的地址的值的LOAD CONTORL指令的执行期间,可以识别指令提取事件。
[0654] C.在存取寄存器模式中,由ASN第二表项(由存取列表项指明)中地址空间控制元素中储存变更事件位的1值允许的储存变更事件可以由任意储存类型指令引起,所述储存类型指令将位的值从1改变到0。
[0655] 2.当在可中断指令的执行期间出现用于PER基本事件的PER中断时,ILC适当地指示该指令的长度或执行类型指令的长度。当作为LOAD PSW,LOAD PSW EXTENDED,PROGRAM RETURN或SUPERVISOR CALL的结果而出现用于PER基本事件的PER中断时,ILC适当的指示该指令的长度或指明中断的类型的指令作为其目标的执行类型指令的长度,除非对于0的ILC的LOAD PSW,LOAD PSW EXTENDED或PROGRAM RETURN呼叫的同时规格异常。
[0656] 3.当通过分支引起PER中断时,PER地址识别分支指令(或适当地,执行类型指令),而旧PSW指向待执行的下一指令。当在可中断指令的执行期间出现中断时,PER地址和旧PSW中的指令地址相同。
[0657] 储存区域指明
[0658] 在一个实施例中,两种类型的PER事件指令提取和储存变更方式包括存储器中区域的指明。成功分支事件可以包括该指明。储存区域在由控制寄存器10中的开始地址指明的位置处开始,并且延伸至且包括由控制寄存器11中 的结束地址指明的位置。区域延伸至开始地址的右侧。
[0659] 只要从指明区域提取指令的第一字节或者目标或执行类型指令的第一字节,就出现指令提取事件。当通过使用限定为逻辑或虚拟地址的操作数地址来对于指明区域进行储存存取时,出现储存变更事件。然而,当DAT启动且控制寄存器9中的储存变更空间控制为1时,储存区域在地址空间控制元素中储存变更事件位为1的地址空间内。对于以限定为真实地址的操作数地址进行的储存存取,不出现储存变更事件。当控制寄存器9中的分支地址控制为1时,成功分支事件当分支目标指令的第一字节在指明区域内时出现。
[0660] 对于成功分支、指令提取和储存变更事件指明的地址组在地址264-1处环绕;即,认为地址0在地址264-1之后。当开始地址小于结束地址时,区域是连续的。当开始地址大于结束地址时,指明的位置组包括从地址0到且包括结束地址的区域。当开始地址等于结束地址时,仅指明那一个位置。
[0661] 通过使用64位地址来执行对于成功分支、指令提取和储存变更事件的地址比较。这在24位或31位寻址模式下通过在将左侧的虚拟、逻辑或指令地址与开始和结束地址比较之前,通过以40或33个0来延伸左侧的虚拟、逻辑或指令地址来完成。
[0662] 编程备注:在一些模型中,通过对于TLB中每一页表项的延伸来帮助地址范围检验的性能。在这种设施中,当成功分支、指令提取或储存变更事件屏蔽为1时,改变控制寄存器10和11中的内容,或者设置这些PER事件屏蔽的任意一个为1可以引起TLB清除各项。即使当CPU被禁止用于PER事件时也可以实践该降级。因此,当可能时,程序应该避免加载控制寄存器9、10或11。
[0663] PER事件
[0664] 成功分支
[0665] 当控制寄存器9中的分支地址控制为0时,依赖于分支目标地址,出现成功分支事件。当分支地址控制为1时,仅当分支目标指令的第一字节在由控制寄存器10和11指明的储存区域中时出现成功分支事件。
[0666] 经历分支地址控制的影响,只要如下指令之一引起分支就出现成功分支事件:BRANCH AND LINK(BAL,BALR);BRANCH AND SAVE(BAS,BASR);BRANCH AND SAVE AND SET MODE(BASSM);BRANCH AND SET AUTHORITY(BSA);BRANCH AND SET MODE(BSM);BRANCH AND STACK(BAKR);BRANCH IN SUBSPACE GROUP(BSG);BRANCH ON CONDITION(BC,BCR);BRANCH ON COUNT(BCT,BCTR,BCTG,BCTGR);BRANCH ON INDEX HIGH(BXH,BXHG);BRANCH ON INDEX LOW OR EQUAL(BXLE,BXLEG);BRANCH RELATIVE AND SAVE (BRAS);BRANCH RELATIVE AND SAVE LONG(BRASL);BRANCH RELATIVE ON CONDITION(BRC);BRANCH RELATIVE ON CONDITION LONG(BRCL);BRANCH RELATIVE ON COUNT(BRCT);BRANCH RELATIVE ON COUNT HIGH(BRCTH);BRANCH RELATIVE ON INDEX HIGH(BRXH,BRXHG);BRANCH RELATIVE ON INDEX LOW OR EQUAL(BRXLE,BRXLG);COMPARE AND BRANCH(CRB,CGRB);COMPARE AND BRANCH RELATIVE(CRJ,CGRJ);COMPARE IMMEDIATE AND BRANCH(CIB,CGIB);COMPARE IMMEDIATE AND BRANCH RELATIVE(CIJ,CGIJ);COMPARE LOGICAL AND BRANCH(CLRB,CLGRB);COMPARE LOGICAL AND BRANCH RELATIVE(CLRJ,CLGRJ);COMPARE LOGICAL IMMEDIATE AND BRANCH(CLIB,CLGIB);COMPARE LOGICALIMMEDIATE AND BRANCH RELATIVE(CLIJ,CLGIJ);RESUME PROGRAM(RP)和TRAP(TRAP2,TRAP4)。
[0667] 经历分支地址控制的影响,只要如下指令之一引起分支就也出现成功分支事件:PROGRAM CALL(PC);PROGRAM RETURN(PR);PROGRAM TRANSFER(PT);和PROGRAM TRANSFER WITH INSTANCE(PTI)。
[0668] 对于PROGRAM CALL,PROGRAM RETURN,PROGRAM TRANSFER,和PROGRAM TRANSFER WITH INSTANCE,将分支目标地址认为是通过指令置放于PSW中的新指令地址。
[0669] 如果PER事件屏蔽的位32为1且PSW中的PER屏蔽为1,则成功分支事件使得PER成功分支事件被识别。
[0670] 通过将位0或PER码设置为1来指示PER成功分支事件。
[0671] 指令提取
[0672] 如果指令的第一字节在由控制寄存器10和11指明的储存区域内,则出现指令提取事件。如果执行类型指令的目标的第一字节在指明的储存区域内,则也出现指令提取事件。
[0673] 指令提取基本事件:如果PSW中的PSW屏蔽为1且PER事件屏蔽的33为1且未安装PER-3设施或PER事件屏蔽的位39为0,则指令提取事件使得PER指 令提取基本事件被识别。
[0674] 如果指令提取基本事件是对于可中断指令识别出的唯一PER事件,所述可中断指令由于异步条件(I/O、外部、重启或可抑制机器检验条件)或停止功能的性能而中断,并且如果指令的操作的单元仍然被执行,则可以舍弃指令提取事件,并且是否舍弃是不可预测的。
[0675] 通过将PER码的位1和PER码的位7设置为0来指示PER指令提取基本事件。
[0676] 指令提取无效事件:如果PSW中的PER屏蔽为1且PER事件屏蔽的位33为1且安装PER-3设施且PER事件屏蔽的位39为1,则指令提取事件使得PER指令提取无效事件被识别。
[0677] 通过将PER码的位1和7设置为1来指示PER指令提取无效事件。
[0678] 储存变更
[0679] 只要CPU通过使用逻辑或虚拟地址来在没有存取异常的情况下对于由控制寄存器10和11指明的储存区域进行储存存取,就出现储存变更事件。然而,当DAT启动且控制寄存器9中的储存变更空间控制为1时,只有当地址空间控制元素中的储存变更事件位为1时才出现事件,所述地址空间控制元素由DAT使用以转译对于储存区域的参考。
[0680] 只要CPU执行了使得操作数的全部或部分储存在指明的储存区域内的指令,就认为存储器的内容已经被变更。只要认为为了指示保护异常的目的而发生储存,就认为发生变更,除了对于通过信道程序的数据的储存不出现识别。即使存储的值在原始值上相同,存储构成用于PER目的的变更。
[0681] 在执行中断的处理中或在跟踪项的形成中,不监控由CPU参照的暗示位置。这种位置包括PSW和中断码位置以及由控制寄存器12指明的跟踪项。然而,当通过一指令将信息明确地存储在那儿时,监控这些位置。类似地,监控不应用于通过信道程序的数据的储存。监控通过联动栈上操作的指令而存储进入的联动栈中的暗示位置。
[0682] 仅当储存实际发生时,认为I/O指令变更第二操作数位置。
[0683] 储存变更不应用于操作数被指定以具有真实或绝对地址的指令。因此,储存变更不应用于INVALIDATE DAT TABLE ENTRY(无效和清除操作),INVALIDATE PAGE TABLE ENTRY,PAGE IN,PERFORM FRAME MANAGEMENT FUNCTION,RESET REFERENCE BIT EXTENDED,RESET REFERENCE BITS MULTIPLE,SET STORAGE KEY EXTENDED,STORE USING REAL ADDRESS,TEST BLOCK和TEST PENDING INTERRUPTION(当有效地址为0时)。储存变更不应用于通过STORE FACILITY LIST的、至真实位置200的储存,也不应用于通过引起跟踪发生的指令的、至跟踪表的储存。
[0684] 如果PER事件屏蔽的位34为1且PSW中的PER屏蔽为1,则储存变更事件引起PER储存变更事件被识别。当确定PER储存变更事件是否被识别时忽略PER事件屏蔽的位36。
[0685] 通过将PER码的位2设置为1且将PER码的位4设置为0来指示PER储存变更事件。
[0686] 使用真实地址储存
[0687] 只要执行STORE USING REAL ADDRESS指令,就出现使用真实地址储存事件。
[0688] 在使用真实地址储存事件与指明的储存区域之间没有关系。
[0689] 如果PER事件屏蔽的位34和36为1且PSW中的PER屏蔽为1,则使用真实地址储存事件使得PER使用真实地址储存事件被识别。
[0690] 通过将PER码的位2和4设置为1来指示PER使用真实地址储存事件。
[0691] 与其他中断条件同时的PER事件的指示
[0692] 当报告PER指令提取无效事件时,不报告其他PER事件和其他程序中断条件。
[0693] 如下规则管理由同样引起程序异常、监控事件、空间切换事件或监督呼叫中断的指令引起的PER基本事件的指示。
[0694] 1.指令提取基本事件的指示不依赖于指令的执行是否完成、终止、抑制或无效。然而,抑制和无效的特殊情况如下:
[0695] A.当由PSW中的奇数指令地址指明指令时,不指示指令提取事件。
[0696] B.当存取异常应用于指令的第一、第二或第三半字,且安装PER-3设施时,不指示指令提取事件。然而,如果不安装PER-3,则是否指示指令提取事件是不可预测的。
[0697] C.当EXECUTE的目标地址是奇数,或者存取异常应用于目标指令的第一、第二或第三半字,并且安装PER-3设施时,对于目标位置,未指示指令提取事件。然而,如果未安装PER-3设施,则对于目标指令是否指示指令提取事 件是不可预测的,并且对于执行指令是否指示该事件是不可预测的。
[0698] 2.当完成或部分完成操作时,指示事件,无论是否也识别出任何程序异常、空间切换事件或监控事件。
[0699] 3.对于一操作,不指示成功分支、储存变更和使用真实地址储存,或者万一,对于被抑制或无效的操作的单元,指令可中断。
[0700] 4.当终止指令的执行时,只要已经出现事件,就指示储存变更。如果本应该出现的事件已经完成了指令的执行,则模型可以指示事件,即使变更结果字段的内容视操作数值而定。为了该限定的目的,允许终止(寻址、保护和数据)的那些异常的出现被认为引起终止。
[0701] 5.当LOAD PSW,LOAD PSW EXTENDED,PROGRAM RETURN,SET SYSTEM MASK,STORE THEN OR SYSTEM MASK或者SUPERVISOR CALL引起PER基本条件,并且同时引入具有紧接在PSW变为有效之后识别出的PSW格式错误的类型的新PSW时,中断码识别PER基本条件和规格异常二者。
[0702] 6.当LOAD PSW,LOAD PSW EXTENDED,PROGRAM RETURN或SUPERVISOR CALL引起PER条件且同时引入具有作为下面指令执行的部分而识别出的PSW格式错误的类型的新PSW时,将引入的PSW存储为旧PSW,而不提取下面的指令并且不识别规格异常。
[0703] 编程备注:
[0704] 1.可中断指令COMPARE AND FORM CODEWORD,COMPARE LOGICAL LONG,COMPARE UNTIL SUBSTRING EQUAL,COMPRESSION CALL,MOVE LONG,TEST BLOCK和UPDATE TREE的执行可以使得事件用于指令提取。可中断指令PERFORM FRAME MANAGEMENT FUNCTION(当安装高级DAT设施并且帧大小的码指明1M字节帧时)、SET STORAGE KEY EXTENDED(当安装高级DAT设施并且多块控制为1时)和TEST  BLOCK的执行可以引起事件用于指令提取。COMPRESSION CALL,MOVE LONG和UPDATE TREE可以用于指令提取和储存变更事件。
[0705] 这种指令的中断可以使得PER基本事件被多于一次地指示。因此,程序必须从PER数据移除冗余的事件指示。在一实例中,在这些指令的执行期间,如下规则管理可应用事件的指示:
[0706] A.只要提取指令用于执行,就指示指令提取基本事件,无论是初始执 行还是再继续,除了如果事件是待指示的唯一PER事件,中断归因于异步中断条件或停止功能的性能并且指令的操作的单元仍然被执行,则可以舍弃它。
[0707] B.仅当通过以上一次起始开始且以中断之前传送的最后字节结束的操作的部分,在指明的储存区域中已经存储了数据时指示储存变更事件。在事件的再继续时,关于事件是否将再次出现的过早中断不提供特殊指示。当指明的储存区域是单个字节位置时,在MOVE LONG或COMPRESSION CALL的执行中仅识别一次储存变更事件,但是对于UPDATE TREE可以识别多于一次。
[0708] 2.如下是程序将要采取以删除可中断指令的PER数据中PER基本事件的多项以便获得指令的每一完整执行的唯一一项的普通动作的概要:
[0709] A.检验以了解PER地址是否等于旧PSW中的指令地址并且执行的上一指令是否可中断。
[0710] B.如果两个条件都满足,则删除指令提取事件。
[0711] C.如果两个条件都满足且事件是储存变更,则如果剩余目的地操作数的某部分在指明的储存区域内,则删除事件。
[0712] 尽管以上描述了PER设施的一个实施例,但是其他实施例也是可能的。可以进行很多改变和变化。
[0713] 本领域的技术人员应了解,一个或多个方面可被体现为一系统、方法或计算机程序产品。因而,一个或多个方面可采取完全硬件实施例、完全软件实施例(包括固件、驻留软件、微码等等)或组合软件与硬件方面的实施例的形式,这些实施例在本文中皆可通称为“电路”、“模块”或“系统”。此外,一个或多个方面可采取以一个或多个计算机可读介质体现的计算机程序产品的形式,该一个或多个计算机可读介质具有体现于其上的计算机可读程序码。
[0714] 可利用一个或多个计算机可读介质的任何组合。计算机可读介质可为计算机可读储存介质。举例而言,计算机可读储存介质可为但不限于电子、磁性、光学、电磁、红外线或半导体系统、装置或器件,或前述各者的任何合适组合。计算机可读储存介质的更特定实例(非详尽清单)包括以下各者:具有一个或多个电线的电连接、携带型计算机磁片、硬碟、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便携型光碟只读存储器(CD-ROM)、光学储存器件、磁性储存器件或前述各者 的任何合适组合。在此文件的上下文中,计算机可读储存介质可为可含有或储存供指令执行系统、装置或器件使用或结合指令执行系统、装置或器件而使用的程序的任何有形介质。
[0715] 现在参看图17,在一实例中,计算机程序产品1700包括(例如)一个或多个非瞬态计算机可读储存介质1702以在其上储存计算机可读程序码构件或逻辑1704,以提供及促进一个或多个实施例。
[0716] 可使用适当介质(包括但不限于无线、有线、光纤缆线、RF等等,或前述各者的任何合适组合)传输体现于计算机可读介质上的程序码。
[0717] 可以一种或多种编程语言的任何组合来撰写用于进行一个或多个实施例的操作的计算机程序码,该一种或多种编程语言包括诸如Java、Smalltalk、C++或其类似者的面向对象的编程语言,及诸如“C”编程语言、汇编程序或相似编程语言的传统过程性编程语言。程序码可完全地在使用者计算机上执行、部分地在使用者计算机上执行、作为独立封装软件而执行、部分地在使用者计算机上执行且部分地在远端计算机上执行,或完全地在远端计算机或伺服器上执行。在后者情境中,远端计算机可经由任何类型的网络(包括局域网(LAN)或广域网(WAN))而连接至使用者的计算机,或可连接至外部计算机(例如,使用因特网服务提供者而经由因特网进行连接)。
[0718] 本文参考方法、装置(系统)及计算机程序产品的流程图说明和/或方块图来描述一个或多个实施例。应理解,可藉由计算机程序指令来实施这些流程图说明和/或方块图的每一方块及这些流程图说明和/或方块图中的方块的组合。可将这些计算机程序指令提供至一般用途计算机、特殊用途计算机或其他可程序化数据处理装置的一处理器以产生一机器,使得经由该计算机或其他可程序化数据处理装置的该处理器而执行的指令产生用于实施在该或这些流程图和/或方块图方块中指定的功能/动作的构件。
[0719] 亦可将这些计算机程序指令储存于一计算机可读介质中,其可指导计算机、其他可程序化数据处理装置或其他器件以特定方式起作用,使得储存于该计算机可读介质中的指令产生一制品,该制品包括实施在该或这些流程图和/或方块图方块中指定的功能/动作的指令。
[0720] 亦可将这些计算机程序指令载入至计算机、其他可程序化数据处理装置或其他器件上,以使一系列操作步骤在该计算机、其他可程序化装置或其他器件上执行以产生一计算机实施程序,使得在该计算机或其他可程序化装置 上执行的指令提供用于实施在该或这些流程图和/或方块图方块中指定的功能/动作的程序。
[0721] 这些图中的流程图及方块图说明根据各种实施例的系统、方法及计算机程序产品的可能实施的架构、功能性及操作。就此而言,流程图或方块图中的每一方块可表示程序码的一模块、区段或部分,其包含用于实施指定的逻辑功能的一个或多个可执行指令。亦应注意,在一些替代性实施中,区块中所提到的功能可不以诸图中所提到的次序而发生。举例而言,取决于所涉及的功能性,连续展示的两个区块实际上可实质上并行地执行,或这些区块有时可以相反次序执行。亦应注意,可藉由执行指定的功能或动作的基于特殊用途硬件的系统或特殊用途硬件及计算机指令的组合来实施方块图和/或流程图说明的每一方块及方块图和/或流程图说明中的方块的组合。
[0722] 除了以上内容以外,一个或多个方面亦可由提供客户环境的管理的服务提供者提供、部署、管理、服务等等。举例而言,服务提供者可为一个或多个客户建立、维持、支援等等执行一个或多个方面的计算机程序码和/或计算机基础结构。作为回报,作为实例,服务提供者可在订用和/或收费协议下向客户收取付款。或者或另外,服务提供者可根据广告内容至一个或多个第三方的销售而收取付款。
[0723] 在一方面中,可部署用于执行一个或多个实施例的应用程序。作为一实例,应用程序的部署包含提供可操作以执行一个或多个实施例的计算机基础结构。
[0724] 作为一另外方面,可部署一计算基础结构,其包含将计算机可读程序码整合至计算系统中,其中与该计算系统组合的程序码能够执行一个或多个实施例。
[0725] 作为又一方面,可提供用于整合计算基础结构的程序,其包含将计算机可读程序码整合至计算机系统中。计算机系统包含计算机可读介质,其中计算机介质包含一个或多个实施例。与该计算机系统组合的程序码能够执行一个或多个实施例。
[0726] 尽管上文描述各种实施例,但这些实施例仅为实例。举例而言,其他架构的计算环境可用以并入及使用一个或多个实施例。另外,可使用不同指令、指令格式、指令字段和/或指令值。此外,可抑制不同、其他和/或额外事件。许多变化是可能的。
[0727] 另外,其他计算环境类型可有益且被使用。作为一实例,适合于储存和/或执行程序码的数据处理系统是可用的,其包括直接地或经由系统总线间接地耦接至存储器元件的至少两个处理器。存储器元件包括(例如)在程序码的实际执行期间使用的本地存储器、大容量存储器及高速缓存,该高速缓存提供至少某一程序码的临时储存以便减少在执行期间必须自大容量存储器撷取程序码的次数。
[0728] 输入/输出或I/O器件(包括但不限于键盘、显示器、指针器件、DASD、磁带、CD、DVD、随身碟(thumb drive)及其他存储器介质等等)可直接地或经由介入I/O控制器耦接至该系统。网络适配器亦可耦接至系统以使数据处理系统能够经由介入的私用或公用网络耦接至其他数据处理系统或远端打印机或储存器件。调制解调器、缆线调制解调器及乙太网卡仅为可用网络适配器类型中的少数几种。
[0729] 参看图18,描绘实施一个或多个实施例的主机计算机系统5000的代表性组件。代表性主机计算机5000包含与计算机存储器(亦即,中央存储器)5002通信的一个或多个CPU 5001,以及用于与其他计算机或SAN及其类似者通信的至储存介质器件5011及网络5010的I/O接口。CPU 5001符合具有架构化的指令集及架构化的功能性的架构。CPU 5001可具有包括ART后备缓冲器(ALB)5013的存取寄存器转译(ART)5012,该存取寄存器转译(ART)5012用于选择待由动态地址转译(DAT)5003使用的地址空间从而将程序地址(虚拟地址)变换成存储器的真实地址。DAT通常包括用于对转译进行高速缓存,使得对计算机存储器5002的区块的稍后存取并不需要地址转译的延迟的转译后备缓冲器(TLB)5007。通常,高速缓存5009用于计算机存储器5002与处理器5001之间。高速缓存5009可为阶层式高速缓存,从而具有可用于一个以上CPU的大高速缓存及大高速缓存与每一CPU之间的较小的更快(较低层级)高速缓存。在一些实施中,较低层级高速缓存经分隔以提供分离的低层级高速缓存以用于指令提取及数据存取。在一实施例中,对于TX设施,事务诊断区块(TDB)5100及一个或多个缓冲器5101可储存于高速缓存5009及存储器5002中的一个或多者中。在一实例中,在TX模式下,数据最初储存于TX缓冲器中,且当TX模式结束(例如,最外部TEND)时,缓冲器中的数据储存(交付)至存储器,或若存在中止,则舍弃缓冲器中的数据。
[0730] 在一实施例中,经由高速缓存5009藉由指令提取单元5004自存储器5002 提取指令。指令在指令解码单元5006中被解码,且分派(在一些实施例中用其他指令)至指令执行单元5008。通常,使用若干执行单元5008,例如,算术执行单元、浮点执行单元及分支指令执行单元。另外,在TX设施的一实施例中,可使用各种TX控制5110。指令由执行单元执行,从而在需要时自指令指定的寄存器或存储器存取操作数。若将自存储器5002存取(载入或储存)操作数,则载入/储存单元5005通常在正被执行的指令控制下处置存取。指令可在硬件电路中或在内部微码(固件)中或由此两者的组合执行。
[0731] 根据TX设施的一个方面,处理器5001亦包括PSW 5102(例如,TX和/或中止PSW)、嵌套深度5104、TDBA 5106及一个或多个控制寄存器5108。
[0732] 如所提及,计算机系统包括本地(或主)存储器中的信息,以及寻址、保护以及参考及改变记录。寻址的一些方面包括地址的格式、地址空间的概念、各种地址类型,及一地址类型经转译至另一地址类型的方式。主存储器中的一些包括永久指派的储存位置。主存储器向系统提供数据的可直接寻址的快速存取储存。数据及程序两者在其可被处理之前将载入至主存储器中(自输入器件)。
[0733] 主存储器可包括有时被称作高速缓存的一个或多个较小较快存取缓冲存储器。高速缓存通常与CPU或I/O处理器实体地相关联。除了效能以外,相异储存介质的实体构造及使用的效应通常不能由程序观察。
[0734] 可维持用于指令且用于数据操作数的分离高速缓存。高速缓存内的信息维持于被称作高速缓存区块或高速缓存行(或简称为行)的整体边界上的连续字节中。模型可提供传回高速缓存行的以字节为单位的大小的EXTRACT CACHE ATTRIBUTE指令。模型亦可提供PREFETCH DATA及PREFETCH DATA RELATIVE LONG指令,其实现存储器至数据或指令高速缓存中的预取或数据自高速缓存的释放。
[0735] 存储器被视作长水平位字串。对于大多数操作,对存储器的存取以自左侧至右侧序列而行进。将位字串再分成八个位的单元。八位单元被称作字节,字节为所有信息格式的基本建置区块。存储器中的每一字节位置藉由唯一非负整数识别,该非负整数为该字节位置的地址,或简称为字节地址。邻近字节位置具有连续地址,其在左侧以0开始且以自左侧至右侧序列而行进。地址为无正负号二进位整数,且为24、31或64个位。
[0736] 在存储器与CPU或通道子系统之间一次一个字节或字节群组而传输信 息。除非另有指定,否则在(例如)z/Architecture中,存储器中的字节群组由该群组的最左侧字节寻址。群组中字节的数目由待执行的操作暗示或明确地指定。当用于CPU操作中时,字节群组被称作字段。在每一字节群组内,在(例如)z/Architecture中,位以自左侧至右侧序列被编号。在z/Architecture中,最左侧位有时被称作“高阶”位,且最右侧位被称作“低阶”位。然而,位号码并非储存地址。可仅寻址字节。为了对存储器中的字节的个别位进行操作,存取整个字节。字节中的位自左侧至右侧被编号为0至7(在(例如)z/Architecture中)。地址中的位对于24位地址可被编号为8至31或40至63,或对于31位地址可被编号为1至31或33至63;地址中的位对于64位地址被编号为0至63。在一实例中,位8至31及1至31应用于处于为
32个位宽的位置(例如,寄存器)中的地址,而位40至63及33至63应用于处于64位宽位置中的地址。在多个字节的任何其他固定长度格式内,构成该格式的位自0开始进行连续地编号。出于错误侦测的目的,且较佳地出于校正起见,可用每一字节或用一字节群组来传输一个或多个检查位。此类检查位由机器自动地产生且不能直接地受到程序控制。以字节的数目来表达储存容量。当储存操作数字段的长度由指令的操作码暗示时,字段据称具有固定长度,该固定长度可为一个、两个、四个、八个或十六个字节。较大字段可针对一些指令进行暗示。当储存操作数字段的长度未被暗示而是被明确地陈述时,字段据称具有可变长度。可变长度操作数长度可以一字节的增量(或用一些指令,以两个字节的倍数或其他倍数)发生变化。当将信息置放于存储器中时,包括于指定字段中的仅那些字节位置的内容被取代,即使至存储器的实体路径的宽度可大于正被储存的字段的长度亦如此。
[0737] 信息的某些单元将在存储器中的整体边界上。当储存地址为以字节为单位的单元的长度的倍数时,边界对于信息单元被称作整体。向整体边界上的2、4、8、16及32字节的字段提供特殊名称。半字组为二字节边界上的两个连续字节的群组,且为指令的基本建置区块。字组为四字节边界上的四个连续字节的群组。双字组为八字节边界上的八个连续字节的群组。四倍字组为16字节边界上的16个连续字节的群组。八倍字组为32字节边界上的32个连续字节的群组。当储存地址指明半字组、字组、双字组、四倍字组及八倍字组时,地址的二进位表示分别含有一个、两个、三个、四个或五个最右侧零位。指令将处于二字节整体边界上。大多数指令的储存操作数并不具有边界对准要 求。
[0738] 在实施用于指令及数据操作数的分离高速缓存的器件上,若将程序储存至供随后提取指令的高速缓存行中,则可经历显著延迟,而不管储存是否变更随后被提取的指令。
[0739] 在一实例中,实施例可由软件(有时指代已授权内码、固件、微码、毫码、皮码及其类似者,前述各者中任一者将与一个或多个实施例一致)实践。参看图18,体现一个或多个方面的软件程序码可由主机系统5000的处理器5001自诸如CD-ROM驱动器、磁带机或硬盘驱动器的长期储存介质器件5011存取。软件程序码可体现于多种已知介质中任一者上以供数据处理系统使用,诸如,磁片、硬盘驱动器或CD-ROM。程序码可散布于此类介质上,或可自计算机存储器5002散布至使用者或经由网络5010自一计算机系统的存储器散布至其他计算机系统以供此类其他系统的使用者使用。
[0740] 软件程序码包括控制各种计算机组件与一个或多个应用程序的功能及互动的操作系统。程序码正常地自储存介质器件5011传呼至程序码可用于由处理器5001进行处理的相对较高速度计算机存储器5002。用于将软件程序码体现于存储器中、实体介质上和/或经由网络散布软件码的技术及方法是熟知的,且在本文中将不予以进一步论述。程序码在建立及储存于有形介质(包括但不限于电子存储器模块(RAM)、快闪存储器、光碟(CD)、DVD、磁带及其类似者)上常常常被称作“计算机程序产品”。计算机程序产品介质通常可由较佳地在计算机系统中的处理电路读取以供处理电路执行。
[0741] 图19说明可实践一个或多个实施例的代表性工作站或伺服器硬件系统。图19的系统5020包含包括选用周边器件的代表性基本计算机系统5021,诸如,个人计算机、工作站或伺服器。基本计算机系统5021包括一个或多个处理器5026,及用以根据已知技术在处理器5026与系统5021的其他组件之间进行连接及启用处理器5026与其他组件之间的通信的总线。举例而言,总线将处理器5026连接至存储器5025及长期存储器5027,长期存储器5027可包括硬盘驱动器(包括(例如)磁性介质、CD、DVD及快闪存储器中任一者)或磁带机。系统
5021可能亦包括使用者接口适配器,其经由总线将微处理器5026连接至一个或多个接口器件,诸如,键盘5024、鼠标5023、打印机/扫描器5030和/或其他接口器件,这些其他接口器件可为诸如触敏式屏幕、数字化键入板(entry pad)等等的任何使用者接口器件。总线亦经由显示适配器将诸如LCD屏幕或 监视器的显示器件5022连接至微处理器5026。
[0742] 系统5021可凭借能够与网络5029通信5028的网络适配器而与其他计算机或计算机的网络通信。实例网络适配器为通信通道、令牌环、乙太网或调制解调器。或者,系统5021可使用诸如CDPD(蜂窝式数字封包数据)卡的无线接口进行通信。系统5021可与局域网(LAN)或广域网(WAN)中的此类其他计算机相关联,或系统5021可为具有另一计算机的用户端/伺服器配置中的用户端等等。在此项技术中知晓所有这些配置以及适当通信硬件及软件。
[0743] 图20说明可实践一个或多个实施例的数据处理网络5040。数据处理网络5040可包括多个个别网络,诸如,无线网络及有线网络,这些网络中每一者可包括多个个别工作站5041、5042、5043、5044。另外,本领域的技术人员应了解,可包括一个或多个LAN,其中LAN可包含耦接至主机处理器的多个智能工作站。
[0744] 仍参看图20,网络亦可包括大型主机计算机或伺服器,诸如,网关计算机(用户端伺服器5046)或应用程序伺服器(可存取数据储存库且亦可直接地自工作站5045进行存取的远端伺服器5048)。网关计算机5046充当至每一个别网络中的进入点。当将一个网络连接协定连接至另一网络连接协定时需要网关。网关5046可较佳地凭借通信链路耦接至另一网络(例如,因特网5047)。网关5046亦可使用通信链路直接地耦接至一个或多个工作站5041、5042、5043、5044。网关计算机可利用可购自国际商业机器公司的IBM eServer System z伺服器予以实施。
[0745] 同时参看图19及图20,可体现一个或多个方面的软件编程码5031可由系统5020的处理器5026自诸如CD-ROM驱动器或硬盘驱动器的长期储存介质5027存取。软件编程码可体现于多种已知介质中任一者上以供数据处理系统使用,诸如,磁片、硬盘驱动器或CD-ROM。程序码可散布于此类介质上,或可自存储器散布至使用者5050、5051或经由网络自一计算机系统的存储器散布至其他计算机系统以供此类其他系统的使用者使用。
[0746] 或者,编程码可体现于存储器5025中,且由处理器5026使用处理器总线而存取。此类编程码包括控制各种计算机组件与一个或多个应用程序5032的功能及互动的操作系统。程序码正常地自储存介质5027传呼至程序码可用于由处理器5026进行处理的高速度存储器5025。用于将软件编程码体现于存储器中、实体介质上和/或经由网络散布软件码的技术及方法是熟知的,且在本 文中将不予以进一步论述。程序码在建立及储存于有形介质(包括但不限于电子存储器模块(RAM)、快闪存储器、光碟(CD)、DVD、磁带及其类似者)上时常常被称作“计算机程序产品”。计算机程序产品介质通常可由较佳地在计算机系统中的处理电路读取以供处理电路执行。
[0747] 最易于可用于处理器的高速缓存(相比于处理器的其他高速缓存通常较快且较小)为最低(L1或层级1)高速缓存,且主存储器(主存储器)为最高层级高速缓存(若存在3个层级,则为L3)。最低层级高速缓存常常被划分成保持待执行的机器指令的指令高速缓存(I高速缓存),及保持数据操作数的数据高速缓存(D高速缓存)。
[0748] 参看图21,描绘用于处理器5026的例示性处理器实施例。通常,高速缓存5053的一个或多个层级用以缓冲存储器区块以便改良处理器效能。高速缓存5053为保持最可能使用的存储器数据的高速缓存行的高速度缓冲器。典型高速缓存行为64、128或256个字节的存储器数据。分离高速缓存除了用于高速缓存数据以外亦常常用于高速缓存指令。高速缓存连贯性(存储器及高速缓存中行的复本的同步)常常由本领浴公知的各种“窥探”演算法提供。处理器系统的主存储器存储器5025常常被称作高速缓存。在具有高速缓存5053的4个层级的处理器系统中,主存储器5025有时被称作层级5(L5)高速缓存,这是因为处理器系统通常较快且仅保持可用于计算机系统的非挥发性存储器(DASD、磁带等等)的部分。主存储器5025“高速缓存”由操作系统分页进及分页出主存储器5025的数据页。
[0749] 程序计数器(指令计数器)5061追踪待执行的当前指令的地址。z/Architecture处理器中的程序计数器为64个位,且可被截断为31或24个位以支援先前寻址极限。程序计数器通常体现于计算机的PSW(程序状态字组)中,使得程序计数器在上下文切换期间持续。因此,具有程序计数器值的在进展中的程序可由(例如)操作系统中断(自程序环境至操作系统环境的上下文切换)。程序的PSW在程序未处于作用中时维持程序计数器值,且操作系统的程序计数器(在PSW中)在操作系统正执行时被使用。通常,使程序计数器累加等于当前指令的字节的数目的量。RISC(精简指令集计算)指令通常具有固定长度,而CISC(复杂指令集计算)指令通常具有可变长度。IBM z/Architecture的指令为具有2、4或6个字节的长度的CISC指令。举例而言,程序计数器5061系藉由上下文切换操作或分支指令的分支采取操作而修改。在上下文切换操 作中,当前程序计数器值连同关于正被执行的程序的其他状态信息(诸如,条件码)一起储存于程序状态字组中,且载入新程序计数器值从而指向待执行的新程序模块的指令。分支采取操作经执行以便藉由将分支指令的结果载入至程序计数器5061中来准许程序作出决策或在程序内循环。
[0750] 通常,指令提取单元5055用以以处理器5026的名义来提取指令。提取单元提取“下一循序指令”、分支采取指令的目标指令或在上下文切换之后的程序的第一指令。现代指令提取单元常常使用预取技术以基于可能使用已预取指令的可能性来理论式地预取指令。举例而言,提取单元可提取包括下一循序指令的指令的16个字节及另外循序指令的额外字节。
[0751] 已提取指令接着由处理器5026执行。在一实施例中,已提取指令传递至提取单元的分派单元5056。该分派单元解码指令,且将关于已解码指令的信息转递至适当单元5057、5058、5060。执行单元5057通常将自指令提取单元5055接收关于已解码算术指令的信息,且将根据指令的操作码而对操作数执行算术运算。操作数较佳地自存储器5025、架构化寄存器5059或自正被执行的指令的立即字段提供至执行单元5057。执行的结果在被储存时储存于存储器5025、寄存器5059中或其他机器硬件(诸如,控制寄存器、PSW寄存器及其类似者)中。
[0752] 虚拟地址使用动态地址转译5062且视情况使用存取寄存器转译5063而转译成真实地址。
[0753] 处理器5026通常具有一个或多个单元5057、5058、5060以用于执行指令的功能。参看图22A,执行单元5057可凭借接口逻辑5071而与架构化一般寄存器5059、解码/分派单元5056、载入储存单元5060及其他处理器单元5065通信。执行单元5057可使用若干寄存器电路5067、5068、5069以保持算术逻辑单元(ALU)5066将进行运算的信息。ALU执行诸如加法、减法、乘法及除法的算术运算,以及诸如与、或及互斥或(XOR)、旋转及移位的逻辑功能。较佳地,ALU支援设计相依的特殊化运算。举例而言,其他电路可提供包括条件码及复原支援逻辑的其他架构化设施5072。通常,ALU运算的结果保持于输出寄存器电路5070中,输出寄存器电路5070可将结果转递至多种其他处理功能。存在处理器单元的许多配置,但本描述仅意欲提供一实施例的代表性理解。
[0754] ADD指令(例如)将在具有算术及逻辑功能性的执行单元5057中执行,而 浮点指令(例如)将在具有特殊化浮点能力的浮点执行中执行。较佳地,执行单元藉由对由指令识别的操作数执行操作码定义功能而对操作数进行运算。举例而言,ADD指令可由执行单元5057对在由该指令的寄存器字段识别的两个寄存器5059中发现的操作数执行。
[0755] 执行单元5057对两个操作数执行算术加法,且将结果储存于第三操作数中,其中第三操作数可为第三寄存器或两个来源寄存器中的一个。执行单元较佳地利用算术逻辑单元(ALU)5066,ALU 5066能够执行诸如移位、旋转、与、或及XOR的多种逻辑功能,以及包括加法、减法、乘法、除法中任一者的多种代数功能。一些ALU 5066经设计成用于纯量运算且一些ALU 5066经设计成用于浮点。取决于架构,数据可为字节由大到小(Big Endian)(其中最低有效字节处于最高字节地址)或字节由小到大(Little Endian)(其中最低有效字节处于最低字节地址)。IBM z/Architecture为字节由大到小。取决于架构,带正负号字段可为正负号及量值、1的补数,或2的补数。2的补数有利之处在于:ALU无需设计减法能力,这是因为2的补数中的负值或正值仅需要在ALU内的加法。举例而言,常常以速记法来描述数字,其中
12位字段定义4,096字节区块的地址,且通常被描述为4千字节区块。
[0756] 参看图22B,用于执行分支指令的分支指令信息通常发送至分支单元5058,分支单元5058常常使用诸如分支历史表5082的分支预测演算法以在其他条件操作完成之前预测分支的结果。当前分支指令的目标将被提取,且在条件操作完成之前被理论式地执行。当完成条件操作时,理论式执行的分支指令基于条件操作的条件及所理论结果而被完成或舍弃。典型分支指令可测试条件码,且在条件码满足分支指令的分支要求时分支至目标地址,目标地址可基于(例如)包括在寄存器字段或指令的立即字段中发现的数字的若干数字予以计算。分支单元5058可使用ALU 5074,ALU 5074具有多个输入寄存器电路5075、5076、5077及输出寄存器电路5080。举例而言,分支单元5058可与一般寄存器5059、解码分派单元
5056或其他电路5073通信5081。
[0757] 举例而言,指令群组的执行可由于多种原因而中断,这些原因包括由操作系统起始的上下文切换、造成上下文切换的程序异常或错误、造成上下文切换的I/O中断信号,或多个程序的多线程活动(在多线程化环境中)。较佳地,上下文切换动作储存关于当前执行程序的状态信息,且接着载入关于正被调用的另一程序的状态信息。举例而言,状态信息可储存于硬件寄存器中或存 储器中。状态信息较佳地包含指向待执行的下一指令的程序计数器值、条件码、存储器转译信息,及架构化寄存器内容。上下文切换活动可由硬件电路、应用程序、操作系统程序或固件码(微码、皮码或已授权内码(LIC))单独地或组合地演练。
[0758] 处理器根据指令定义方法而存取操作数。指令可使用指令的部分的值来提供立即操作数,可提供明确地指向一般用途寄存器或特殊用途寄存器(例如,浮点寄存器)的一个或多个寄存器字段。指令可利用由操作码字段识别的所暗示寄存器作为操作数。指令可将存储器位置用于操作数。如由z/Architecture长位移设施所例示,操作数的存储器位置可由寄存器、立即字段或寄存器与立即字段的组合提供,其中指令定义基底寄存器、索引寄存器及立即字段(位移字段),前述三者加在一起以提供(例如)操作数在存储器中的地址。本文中的位置通常暗示主存储器(主存储器)中的位置,除非另有指示。
[0759] 参看图22C,处理器使用载入/储存单元5060来存取存储器。载入/储存单元5060可藉由获得目标操作数在存储器5053中的地址且将操作数载入于寄存器5059或另一存储器5053的位置而执行载入操作,或可藉由获得目标操作数在存储器5053中的地址且将自寄存器5059或另一存储器5053的位置获得的数据储存于存储器5053中的目标操作数位置中而执行储存操作。载入/储存单元5060可为理论式,且可以相对于指令序列无序的序列存取存储器,然而,载入/储存单元5060对程序维持指令被按次序执行的外观。载入/储存单元5060可与一般寄存器5059、解码/分派单元5056、高速缓存/存储器接口5053或其他元件5083通信5084,且包含各种寄存器电路5086、5087、5088及5089、ALU5085及控制逻辑5090以计算储存地址且提供管线定序以使操作按次序。一些操作可无序,但载入/储存单元提供使无序操作对于程序看来像是已按次序被执行的功能性,如本领域中所公知的那样。
[0760] 较佳地,应用程序所“查看”的地址常常被称作虚拟地址。虚拟地址有时被称作“逻辑地址”及“有效地址”。这些虚拟地址为虚拟之处在于:其藉由多种动态地址转译(DAT)技术中的一个重新引导至实体存储器位置,这些技术包括但不限于简单地用偏移值来加前缀于虚拟地址、经由一个或多个转译表转译虚拟地址,转译表较佳单独地或组合地至少包含区段表及页表,较佳地,区段表具有指向页表的项。在z/Architecture中,提供转译阶层,包括区第一表、区第二表、区第三表、区段表及选用页表。常常藉由利用转译后备 缓冲器(TLB)来改良地址转译的效能,该TLB包含将虚拟地址映射至关联实体存储器位置的项。当DAT使用转移译来转译虚拟地址时建立这些项。虚拟地址的后续使用接着可利用快速TLB的项而非缓慢循序转译表存取。TLB内容可由包括LRU(最近最少使用)的多种取代演算法管理。
[0761] 在处理器为多处理器系统的处理器的状况下,每一处理器具有使诸如I/O、高速缓存、TLB及存储器的共用资源出于一致性而保持连锁的职责。通常,“窥探”技术将用来维持高速缓存一致性。在窥探环境中,可将每一高速缓存行标示为处于共用状态、独占状态、已改变状态、无效状态及其类似者中任一者以便促进共用。
[0762] 举例而言,I/O单元5054(图21)向处理器提供用于附接至包括磁带、碟片、打印机、显示器及网络的周边器件的构件。I/O单元常常由软件驱动程序呈现给计算机程序。在诸如可购自 的System z的大型主机中,通道适配器及开放系统适配器为在操作系统与周边器件之间提供通信的大型主机的I/O单元。
[0763] 另外,其他计算环境类型可受益于一个或多个方面。作为一实例,环境可包括模拟器(例如,软件或其他模拟机制),其中特定架构(包括(例如)指令执行、架构化功能(诸如,地址转译)及架构化寄存器)或其子集被模拟(例如,在具有处理器及存储器的原生计算机系统上)。在此类环境中,模拟器的一个或多个模拟功能可实施一个或多个实施例,即使执行该模拟器的计算机可具有不同于正被模拟的能力的架构亦如此。作为一实例,在模拟模式下,解码正被模拟的特定指令或操作,且建置适当模拟功能以实施个别指令或操作。
[0764] 在一模拟环境中,主机计算机包括(例如):存储器,其储存指令及数据;指令提取单元,其自存储器提取指令,且视情况提供用于已提取指令的本地缓冲;指令解码单元,其接收已提取指令且判定已被提取的指令类型;及指令执行单元,其执行这些指令。执行可包括将数据自存储器载入至寄存器中;将数据自寄存器储存回至存储器;或执行某一算术或逻辑运算类型,如由解码单元所判定。在一实例中,以软件来实施每一单元。举例而言,由这些单元执行的操作被实施为模拟器软件内的一个或多个子例程。
[0765] 更特定而言,在大型主机中,架构化机器指令常常凭借编译器应用程序供程序员(通常现今为“C”程序员)使用。储存于储存介质中的这些指令可原生地在z/Architecture伺服器中或者在执行其他架构的机器中执行。指令 可在现有及未来 大型主机伺服器中且在 的其他机器(例如,Power System伺服器及System x伺服器)上进行模拟。指令可在使用由 AMD及其他制造商制造的硬件的各种各样的机器上执行Linux的机器中执行。除了在依据z/Architecture的该硬件上的执行以外,亦可使用Linux以及数个使用由Hercules、UMX或FSI(Fundamental Software公司)进行的模拟的机器,在这些机器处执行通常处于模拟模式。在模拟模式下,模拟软件由原生处理器执行以对模拟处理器的架构进行模拟。
[0766] 原生处理器通常执行模拟软件,该模拟软件包含固件或原生操作系统以执行模拟处理器的模拟。模拟软件负责提取及执行模拟处理器架构的指令。模拟软件维持模拟程序计数器以追踪指令边界。模拟软件一次可提取一个或多个模拟机器指令,且将该一个或多个模拟机器指令转换成原生机器指令的对应群组以供原生处理器执行。这些已转换指令可被高速缓存,使得可实现较快转换。然而,模拟软件仍维持模拟处理器架构的架构规则以便确信针对模拟处理器撰写的操作系统及应用程序正确地操作。此外,模拟软件将提供由模拟处理器结构识别的资源,使得经设计成在模拟处理器上执行的操作系统或应用程序可在具有模拟软件的原生处理器上执行,这些资源包括但不限于控制寄存器、一般用途寄存器、浮点寄存器、包括(例如)区段表及页表的动态地址转译函数、中断机制、上下文切换机制、当日时间(TOD)时钟及至I/O子系统的架构化接口。
[0767] 解码正被模拟的指定指令,且呼叫子例程以执行个别指令的功能。对模拟处理器的功能进行模拟的模拟软件功能以(例如)以下各者予以实施:“C”子例程或驱动程序,或提供用于特定硬件的驱动程序的某一其他方法,此在理解较佳实施例的描述之后将在本领域技术人员的技艺内。包括但不限于以下各者的各种软件及硬件模拟专利说明多种已知方法来达成针对不同机器架构化的指令格式的模拟以用于可用于本领域技术人员的目标机器:Beausoleil等人的名为“Multiprocessor for Hardware Emulation”的美国专利证书第5,
551,013号;及Scalzi等人的名为“Preprocessing of Stored Target Routines for Emulating Incompatible Instructions on a Target Processor”的美国专利证书第6,
009,261号;及Davidian等人的名为“Decoding Guest Instruction to Directly Access Emulation Routines that Emulate the Guest Instructions”的美国专利证书第5,574,
873号;及Gorishek等人的名为“Symmetrical Multiprocessing Bus and Chipset Used for Coprocessor Support Allowing Non-Native Code to Run in a System”的美国专利证书第6,308,255号;及Lethin等人的名为“Dynamic Optimizing Object Code Translator for Architecture Emulation and Dynamic Optimizing Object Code Translation Method”的美国专利证书第6,463,582号;及Eric Traut的名为“Method for Emulating Guest Instructions on a Host Computer Through Dynamic Recompilation of Host Instructions”的美国专利证书第5,790,825号,前述专利证书中每一个的全文据此以引用方式并入本文中;及许多其他专利证书。
[0768] 在图23中,提供模拟主机计算机系统5092的实例,其模拟主机架构的主机计算机系统5000'。在模拟主机计算机系统5092中,主机处理器(CPU)5091为模拟主机处理器(或虚拟主机处理器),且包含具有不同于主机计算机5000'的处理器5091的原生指令集架构的原生指令集架构的模拟处理器5093。模拟主机计算机系统5092具有对于模拟处理器5093可存取的存储器5094。在实例实施例中,存储器5094经分割成主机计算机存储器5096部分及模拟例程5097部分。主机计算机存储器5096根据主机计算机架构可用于模拟主机计算机5092的程序。模拟处理器5093执行不同于模拟处理器5091的架构的架构的架构化的指令集的原生指令,这些原生指令自模拟例程存储器5097获得;且可藉由使用在序列与存取/解码例程中获得的一个或多个指令来自主机计算机存储器5096中的程序存取主机指令以供执行,序列与存取/解码例程可解码所存取的主机指令以判定用于模拟所存取的主机指令的功能的原生指令执行例程。举例而言,针对主机计算机系统5000'的架构定义的其他设施可藉由架构化的设施例程来模拟,包括作为一般用途寄存器、控制寄存器、动态地址转译及I/O子系统支援及处理器高速缓存的此类设施。模拟例程亦可利用在模拟处理器5093中可用的功能(诸如,一般寄存器及虚拟地址的动态转译)以改良模拟例程的效能。专用硬件及卸载引擎亦可经提供以在模拟主机计算机5000'的功能中协助处理器5093。
[0769] 本文所使用的术语仅出于描述特定实施例的目的,且并不意欲为限制性的。如本文所使用,除非上下文另有清楚指示,否则单数形式“一”及“该”意欲亦包括复数形式。应进一步理解,术语“包含”在用于本说明书中时指定存在所叙述特征、整数、步骤、操作、元件和/或组件,但并不排除存在或添加一种或多种其他特征、整数、步骤、操作、元件、组件和/或其群组。
[0770] 以下申请专利范围中的所有构件或步骤附加功能元件的对应结构、材料、动作及等效者(若有)意欲包括用于结合如特定主张的其他所主张元件执行功能的任何结构、材料或动作。出于说明及描述的目的已呈现一或多个实施例的描述,但该描述并不意欲为详尽的或将本发明限于所揭示的形式。许多修改及变化对于本领域技术人员将显而易见。选择及描述实施例以便最佳地解释各种方面及实践应用,且使其他本领域技术人员能够理解具有如适合于所涵盖的特定用途的各种修改的各种实施例。