CN103514032B - 用于促进计算环境内的处理的方法和计算机系统 - Google Patents

用于促进计算环境内的处理的方法和计算机系统 Download PDF

Info

Publication number
CN103514032B
CN103514032B CN201310236296.2A CN201310236296A CN103514032B CN 103514032 B CN103514032 B CN 103514032B CN 201310236296 A CN201310236296 A CN 201310236296A CN 103514032 B CN103514032 B CN 103514032B
Authority
CN
China
Prior art keywords
affairs
instruction
processor
transaction
program
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201310236296.2A
Other languages
English (en)
Other versions
CN103514032A (zh
Inventor
K·J·亚历山大
B·F·贝尔蒙
C·雅各比
R·W·菲雷
A·萨珀里托
T·J·斯利格尔
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of CN103514032A publication Critical patent/CN103514032A/zh
Application granted granted Critical
Publication of CN103514032B publication Critical patent/CN103514032B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30087Synchronisation or serialisation instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/466Transaction processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/466Transaction processing
    • G06F9/467Transactional memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/524Deadlock detection or avoidance

Abstract

本发明涉及一种限制处理器内的处理以促进事务完成的方法和计算机系统。通过采取操作以增加成功执行事务的机会,促进计算环境中的事务处理。维护提供事务中止频率的计数的计数器。每次中止所述事务时,所述计数器递增计数,并且当成功完成所述事务,或者出现导致不再重新执行所述事务的中断时,将所述计数器重置为0。如果所述计数达到阈值,则呈现中断并且事务执行不成功。但是,在所述计数达到所述阈值之前,可以采取多个操作以增加成功执行所述事务的机会。这些操作包括要在执行所述事务的处理器中执行的操作,和/或要再次执行的操作。

Description

用于促进计算环境内的处理的方法和计算机系统
技术领域
一个或多个方面一般地涉及多处理计算环境,具体地说,涉及此类计算环境中的事务处理。
背景技术
多处理器编程中的一项持久挑战是多个中央处理单元(CPU)更新同一存储位置的挑战。许多更新存储位置的指令,甚至包括简单的逻辑运算(例如“与”),都通过多次访问位置进行更新。例如,首先取回存储位置,然后存储回更新后的结果。
为使多个CPU安全地更新同一存储位置,序列化对位置的访问。一个指令—TESTAND SET指令(在国际商业机器公司以前提供的S/360架构中引入)—提供存储位置的互锁更新。互锁更新意味着如其它CPU和输入/输出(I/O)子系统(例如,通道子系统)所观察到的那样,该指令的整个存储访问看似以原子方式发生。随后,国际商业机器公司提供的S/370架构引入了COMPARE AND SWAP和COMPARE DOUBLE AND SWAP指令,它们提供执行互锁更新的更完善的手段,并允许实现通常所谓的锁字(或信号量(semaphore))。最近增加的指令提供了附加互锁更新能力,包括COMPARE AND SWAP AND PURGE和COMPARE AND SWAP ANDSTORE。但是,所有这些指令仅为单个存储位置提供互锁。
更复杂的程序技术可能需要多个存储位置的互锁更新,例如将元素添加到双向链表时。在此类操作中,正向和反向指针看似同时更新,如其它CPU和I/O子系统所观察到的那样。为了实现此类多位置更新,强制程序使用单独的单一序列化点,例如锁字。但是,锁字可能提供比所需级别粗 略得多的序列化;例如,即使只是更新两个元素,锁字也可能序列化包含数百万个元素的整个队列。程序可以构造数据以使用更细粒度的序列化(例如,锁点层次结构),但这会带来其它问题,例如潜在的死锁情况(如果违反层次结构)和恢复问题(如果程序在持有一个或多个锁时遇到错误,或者如果无法获得锁)。
除了上述情况,还存在多种情形,其中程序可以执行指令序列,这些指令可能导致也可能不导致异常条件。如果不出现异常条件,则程序继续;但是,如果识别到异常,则程序可以采取更正操作以消除异常条件。作为一个实例,Java可以例如在推测性执行、函数的部分内联和/或指针空值检查的重新排序中利用此类执行。
在传统的操作系统环境(例如国际商业机器公司提供的z/OS及其先前版本)中,程序建立恢复环境以便拦截可能遇到的任何程序异常条件。如果程序没有拦截异常,则操作系统通常针对操作系统未准备处理的异常,异常地终止程序。建立和利用此类环境成本高昂并且复杂。
发明内容
通过提供用于促进计算环境内的处理的计算机系统,克服了现有技术的不足,并且提供了优点。所述计算机系统包括存储器以及与所述存储器通信的处理器,其中所述计算机系统被配置为执行一种方法。所述方法包括:通过处理器确定在所述计算环境内执行的事务已经中止预定次数,所述事务有效地延迟向主存储器提交事务性存储,直到完成选择的事务;基于对所述事务已经中止预定次数的确定,在重试所述事务期间,执行限制所述处理器或另一个处理器的处理的操作;以及在执行所述操作之后,对所述事务进行一次或多次所选择次数的重试。
在此还描述并要求保护涉及一个或多个方面的方法和程序产品。此外,在此还描述并可要求保护涉及一个或多个方面的服务。
通过在此描述的技术实现其它特性和优点。在此详细描述了其它实施例和方面,并且这些实施例和方面被视为要求保护的发明的一部分。
附图说明
在说明书结尾处的权利要求中具体指出并明确要求保护了一个或多个方面。从下面结合附图的详细描述,上述和其它目标、特性和优点将变得显而易见,这些附图是:
图1示出了计算环境的一个实施例;
图2A示出了Transaction Begin(TBEGIN)指令的一个实例;
图2B示出了图2A的TBEGIN指令的字段的进一步细节的一个实施例;
图3A示出了Transaction Begin constrained(TBEGINC)指令的一个实例;
图3B示出了图3A的TBEGINC指令的字段的进一步细节的一个实施例;
图4示出了Transaction End(TEND)指令的一个实例;
图5示出了Transaction Abort(TABORT)指令的一个实例;
图6示出了嵌套事务的一个实例;
图7示出了NONTRANSACTIONAL STORE指令的一个实例;
图8示出了EXTRACT TRANSACTION NESTING DEPTH(ETND)指令的一个实例;
图9示出了事务诊断块的一个实例;
图10示出了实例中止原因以及关联的中止码和条件码;
图11示出了与执行TBEGINC指令关联的逻辑的一个实施例;
图12示出了与执行TBEGIN指令关联的逻辑的一个实施例;
图13示出了与执行TEND指令关联的逻辑的一个实施例;
图14示出了与事务中止处理关联的逻辑的一个实施例;
图15示出了与采取操作以促进完成受限事务关联的逻辑的一个实施例;
图16A-16C示出了用于在事务中止之后促进事务执行的逻辑的实施 例;
图17A-17B示出了将队列元素插入队列元素的双向链表的实例;
图18示出了计算机程序产品的一个实施例;
图19示出了主计算机系统的一个实施例;
图20示出了计算机系统的另一实例;
图21示出了包括计算机网络的计算机系统的另一个实例;
图22示出了计算机系统的各种元素的一个实施例;
图23A示出了图22的计算机系统的执行单元的一个实施例;
图23B示出了图22的计算机系统的分支单元的一个实施例;
图23C示出了图22的计算机系统的加载/存储单元的一个实施例;以及
图24示出了仿真的主计算机系统的一个实施例。
具体实施方式
在一个方面,提供了一种事务执行(TX)工具。该工具为指令提供事务处理,并且在一个或多个实施例中,提供不同的执行模式(如下所述)以及事务处理的嵌套级别。
事务性执行工具引入一种CPU状态,被称为事务执行(TX)模式。在CPU重置之后,CPU未处于TX模式。CPU通过TRANSACTIONBEGIN指令进入TX模式。CPU通过以下方式离开TX模式:(a)最外层TRANSACTION END指令(下面提供有关内部和外部的更多细节),或者(b)事务被中止。当处于TX模式时,CPU进行的存储访问看似为块并发,如其它CPU和I/O子系统所观察到的那样。存储访问(a)当最外层事务在没有中止的情况下结束时(即,例如在CPU本地的高速缓存或缓冲器中进行的更新被传播并存储在实存储器中,并且对其它CPU可见)被提交到存储器,或者(b)如果事务中止,则被丢弃。
可以嵌套事务。即,当CPU处于TX模式时,它可以执行另一个TRANSACTION BEGIN指令。导致CPU进入TX模式的指令被称为最外 层TRANSACTION BEGIN;同样,程序被称为最外层事务。TRANSACTION BEGIN的后续执行被称为内部指令;并且程序执行内部事务。模型提供最小嵌套深度和模型相关最大嵌套深度。EXTRACTTRANSACTION NESTING DEPTH指令返回当前嵌套深度值,并且在进一步实施例中,可以返回最大嵌套深度值。此类技术使用一种被称为“平面化嵌套”的模型,其中在任何嵌套深度处的中止条件均导致中止所有级别的事务,并且在最外层TRANSACTION BEGIN之后将控制返回到指令。
在事务处理期间,一个CPU进行的事务性访问被称为与以下访问冲突:(a)另一个CPU进行的事务性访问或非事务性访问,或者(b)I/O子系统进行的非事务性访问,前提是这两个访问针对同一高速缓存线中的任何位置,并且两个访问之一或全部是存储。换言之,为了提高事务性执行的效率,直到提交之前,不应观察CPU进行的事务性访问。此编程模型可能在某些环境中非常有效,例如,更新包含数百万个元素的双向链表中的两个点。但是,如果对其进行事务性访问的存储位置存在大量争用,则该模型可能不太有效。
在一种事务性执行模型(在此被称为非受限事务)中,当中止事务时,程序可能尝试重新驱动事务以希望不再存在中止条件,或者程序可能“回退”到等效的非事务性路径。在另一种事务性执行模型(在此称为受限事务)中,CPU自动重新驱动中止后的事务;如果未出现约束违规,则确保最终完成受限事务。
当启动事务时,程序可以指定各种控制,例如(a)如果中止事务,则哪些通用寄存器恢复到其原始内容,(b)是否允许事务修改浮点寄存器上下文,例如包括浮点寄存器和浮点控制寄存器,(c)是否允许事务修改存取寄存器(AR),以及(d)是否阻止某些程序异常条件导致中断。如果中止非受限事务,则可以提供各种诊断信息。例如,启动非受限事务的最外层TBEGIN指令可以指定程序指定的事务诊断块(TDB)。此外,如果分别由于导致解释执行结束的程序中断或条件而中止事务,则还可以使用 CPU的前缀区中的TDB或者由主机的状态描述指定的TDB。
上面指示了各种类型的寄存器。在此进一步详细解释这些寄存器。通用寄存器可以在通用算术和逻辑运算中用作累加器。在一个实施例中,每个寄存器包含64位位置,并且具有16个通用寄存器。通用寄存器由数字0-15标识,并且由指令中的四位R字段指定。某些指令通过具有若干R字段而对多个通用寄存器进行寻址。对于某些指令,将暗示使用特定的通用寄存器,而不是由指令的R字段显式指定。
除了在通用算术和逻辑运算中用作累加器之外,16个通用寄存器中的15个还在地址生成中用作基址和变址寄存器。在这些情况下,寄存器由指令中的四位B字段或X字段指定。B或X字段中的0值指定不应用基址或变址,因此通用寄存器0不应被指定为包含基址或变址。
浮点指令使用一组浮点寄存器。在一个实施例中,CPU具有16个浮点寄存器。浮点寄存器由数字0-15标识,并且由浮点指令中的四位R字段指定。每个浮点寄存器的长度为64位,并且可以包含短(32位)或长(64位)浮点操作数。
浮点控制(FPC)寄存器是32位寄存器,其包含掩码位、标志位、数据异常码和舍入模式位,并且用于处理浮点运算。
此外,在一个实施例中,CPU具有16个控制寄存器,每个具有64个位位置。为寄存器中的位位置分配系统中的特定工具(例如下面讨论的程序事件记录(PER)),并且这些位位置用于指定可以进行操作,或者用于提供工具所需的特殊信息。在一个实施例中,对于事务性工具,使用CR0(位8和9)和CR2(位61-63),如下所述。
CPU例如具有16个存取寄存器,编号为0-15。存取寄存器包括32个位位置,其中包含地址空间控制元素(ASCE)的间接指定。地址空间控制元素是一个参数,动态地址转换(DAT)机制使用它将引用转换为对应的地址空间。当CPU处于一种被称为存取寄存器模式(由程序状态字(PSW)中的位控制)的模式时,指令B字段(用于为存储操作数引用指定逻辑地址)指定存取寄存器,并且DAT将该存取寄存器指定的地址空 间控制元素用于所做出的引用。对于某些指令,使用R字段替代B字段。提供了用于加载和存储存取寄存器的内容并用于将一个存取寄存器的内容移动到另一个存取寄存器的指令。
每个存取寄存器1-15可以指定任何地址空间。存取寄存器0指定主指令空间。当存取寄存器1-15之一用于指定地址空间时,CPU通过转换存取寄存器的内容,确定指定了哪个地址空间。当使用存取寄存器0指定地址空间时,CPU将存取寄存器视为指定主指令空间,并且它不会检查存取寄存器的实际内容。因此,在任一时间,16个存取寄存器可以指定主指令空间和最多15个其它空间。
在一个实施例中,具有多种类型的地址空间。地址空间是连续的整数序列(虚拟地址)以及特定的转换参数,这些参数允许每个数字与存储器中的字节位置关联。序列在0开始,并且从左到右。
例如,在z/Architecture中,当CPU使用虚拟地址访问主存储设备(也被称为主存储器)时,首先通过动态地址转换(DAT)将虚拟地址转换为实地址,然后通过加前缀转换为绝对地址。DAT可以使用从一到五个级别的表(页、段、区域第三、区域第二和区域第一)作为转换参数。特定地址空间的最高级别表的指定(起始地址和长度)被称为地址空间控制元素,并且由DAT用于控制寄存器或者按照存取寄存器的指定而使用。备选地,地址空间的地址空间控制元素可以是实空间指定,其指示DAT只需将虚拟地址视为实地址而不使用任何表,即可转换虚拟地址。
在不同的时间,DAT使用不同控制寄存器中的地址空间控制元素,或者使用存取寄存器指定的地址空间控制元素。通过当前PSW中指定的转换模式确定选择。提供四种转换模式:主空间模式、辅助空间模式、存取寄存器模式和归属空间(home space)模式。可以根据转换模式,对不同的地址空间进行寻址。
在任何时刻,当CPU处于主空间模式或辅助空间模式时,CPU可以转换属于两个地址空间—主地址空间和辅助地址空间—的虚拟地址。在任何时刻,当CPU处于存取寄存器模式时,它可以转换最多16个地址空间— 主地址空间和最多15个AR的指定地址空间—的虚拟地址。在任何时刻,当CPU处于归属空间模式时,它可以转换归属地址空间的虚拟地址。
主地址空间被如此标识是因为它包括通过主地址空间控制元素(ASCE)转换的主虚拟地址。同样,辅助地址空间包括通过辅助ASCE转换的辅助虚拟地址;AR指定的地址空间包括通过AR指定的ASCE转换的AR指定的虚拟地址;以及归属地址空间包括通过归属ASCE转换的归属虚拟地址。主ASCE和辅助ASCE分别在控制寄存器1和7中。AR指定的ASCE在ASN第二表项中,这些表项使用控制寄存器2、5和8通过被称为存取寄存器转换(ART)的过程定位。归属ASCE在控制寄存器13中。
参考图1描述结合和使用在此描述的事务性工具的一个或多个方面的计算环境的一个实施例。
参考图1,在一个实例中,计算环境100基于z/Architecture,其由位于纽约阿蒙克的国际商业机器公司提供。在标题为“z/Architecture–Principles ofOperation”(z/Architecture—操作原理)的IBM出版物(第SA22-7932-08号出版物第9版,2010年8月,在此整体引入以便作为参考)中描述了z/Architecture。
Z/ARCHITECTURE、IBM以及Z/OS和Z/VM(在下面引用)是位于纽约阿蒙克的国际商业机器公司的注册商标。在此使用的其它名称可能是国际商业机器公司或其它公司的注册商标、商标或产品名称。
作为一个实例,计算环境100包括中央处理器复合体(CPC)102,其通过一个或多个控制单元108耦合到一个或多个输入/输出(I/O)设备106。中央处理器复合体102例如包括一个或多个中央处理器110、一个或多个分区112(例如,逻辑分区(LP))、逻辑分区系统管理程序114以及输入/输出子系统115,下面将描述其中的每一个。
中央处理器110是分配给逻辑分区的物理处理器资源。具体地说,每个逻辑分区112具有一个或多个逻辑处理器,每个逻辑处理器表示分配给该分区的物理处理器110的全部或部分。特定分区112的逻辑处理器可以 专用于该分区,以便针对该分区保留底层处理器资源110;或者与另一个分区共享,以便底层处理器资源可能用于另一个分区。
逻辑分区用作单独的系统并具有一个或多个应用,并且其中可选地具有常驻操作系统,每个逻辑分区的常驻操作系统可能不同。在一个实施例中,操作系统是位于纽约阿蒙克的国际商业机器公司提供的z/OS操作系统、z/VM操作系统、z/Linux操作系统或TPF操作系统。逻辑分区112由逻辑分区系统管理程序114管理,逻辑分区系统管理程序114由在处理器110上运行的固件实现。如在此使用的,固件例如包括处理器的微代码和/或毫代码。它例如包括用于实现更高级机器代码的硬件级别指令和/或数据结构。在一个实施例中,它例如包括典型地作为微代码提供的专用代码,专用代码包括特定于底层硬件的可信软件或微代码,并控制操作系统对系统硬件的访问。
逻辑分区和逻辑分区系统管理程序均包括一个或多个程序,这些程序驻留在与中央处理器关联的中央存储设备的相应分区中。逻辑分区系统管理程序114的一个实例是位于纽约阿蒙克的国际商业机器公司提供的Processor Resource/Systems Manager(PR/SM)。
输入/输出子系统115在输入/输出设备106和主存储设备(也被称为主存储器)之间定向信息流。它耦合到中央处理复合体,其中它可以是中央处理复合体的一部分或与其分离。I/O子系统减轻中央处理器直接与输入/输出设备通信的任务,并允许数据处理与输入/输出处理同时进行。为了提供通信,I/O子系统采用I/O通信适配器。具有各种类型的通信适配器,例如包括通道、I/O适配器、PCI卡、以太网卡、小型计算机存储接口(SCSI)卡等。在此处描述的特定实例中,I/O通信适配器是通道,因此I/O子系统在此被称为通道子系统。但是,这只是一个实例。可以使用其它类型的I/O子系统。
I/O子系统使用一个或多个输入/输出路径作为通信链路,以便管理进出输入/输出设备106的信息流。在该特定实例中,这些路径被称为通道路径,因为通信适配器是通道。
上述计算环境只是可以使用的计算环境的一个实例。可以使用其它环境,包括但不限于非分区环境、其它分区环境和/或仿真环境,并且并不限于任何一个环境。
根据一个或多个方面,事务性执行工具是CPU增强,其提供CPU可以用于执行指令序列(被称为事务)的手段,事务可以访问多个存储位置,包括更新这些位置。如其它CPU和I/O子系统所观察到的那样,事务(a)在整体上作为单个原子操作完成,或者(b)中止,可能未留下表明它曾经执行的任何证据(除了在此描述的某些条件之外)。因此,成功完成的事务可以更新多个存储位置,而没有在传统多处理模型中需要的任何特殊锁定。
事务性执行工具例如包括一个或多个控件;一个或多个指令;事务性处理,包括受限和非受限执行;以及中止处理,下面将进一步描述其中的每一个。
在一个实施例中,使用以下各项控制事务性执行工具:三个专用控件,包括事务中止程序状态字(PSW)、事务诊断块(TDB)地址以及事务嵌套深度;五个控制寄存器位;以及六个通用指令,包括TRANSACTION BEGIN(受限和非受限)、TRANSACTION END、EXTRACTTRANSACTION NESTING DEPTH、TRANSACTION ABORT以及NONTRANSACTIONAL STORE。当安装工具时,例如将其安装在配置中的所有CPU中。工具指示(在一种实施方式中为位73)为1时,指示安装了事务性执行工具。
当安装了事务性执行工具时,配置提供非受限事务性执行工具,并且可选地提供受限事务性执行工具,下面将描述其中的每一个。当工具指示50和73(作为实例)均为1时,安装受限事务性执行工具。将两个工具指示存储在存储器中的指定位置处。
如在此使用的,指令名称TRANSACTION BEGIN指指令具有助记符TBEGIN(非受限事务的Transaction Begin)和TBEGINC(受限事务的Transaction Begin)。与特定指令有关的讨论通过指令名称后跟在圆括号 或方括号中的助记符指示,或者仅通过助记符指示。
图2A-2B中示出了TRANSACTION BEGIN(TBEGIN)指令的格式的一个实施例。作为一个实例,TBEGIN指令200包括:操作码字段202,其包括指定非受限事务开始操作的操作码;基址字段(B1)204;位移字段(D1)206;以及立即字段(I2)208。当B1字段为非零值时,将B1204指定的通用寄存器的内容加到D1206以获得第一操作数地址。
当B1字段为非零值时,以下内容适用:
*当事务嵌套深度初始为0时,第一操作数地址指定256字节事务诊断块(被称为TBEGIN指定的TDB,下面进一步描述)的位置,如果中止事务,则可以将各种诊断信息存储到该位置。当CPU处于主空间模式或存取寄存器模式时,第一操作数地址指定主地址空间中的位置。当CPU处于辅助空间或归属空间模式时,第一操作数地址分别指定辅助或归属地址空间中的位置。当DAT关闭时,事务诊断块(TDB)地址(TDBA)指定实存储设备中的位置。确定对第一操作数的存储可访问性。如果可访问,则将操作数的逻辑地址放入事务诊断块地址(TDBA),并且TDBA有效。
*当CPU已经处于非受限事务性执行模式时,不修改TDBA,并且不可预测是否对第一操作数进行了可访问性测试。
当B1字段为0时,未针对第一操作数检测访问异常,并且对于最外层TBEGIN指令,TDBA无效。
在一个实例中,I2字段的位定义如下:
通用寄存器保存掩码(GRSM)210(图2B):I2字段的位0-7包含通用寄存器保存掩码(GRSM)。GRSM的每个位表示奇偶通用寄存器对,其中位0表示寄存器0和1,位1表示寄存器2和3,等等。当最外层TBEGIN指令的GRSM中的位为0时,不保存对应的寄存器对。当最外层TBEGIN指令的GRSM中的位为1时,将对应的寄存器对保存在模型相关的位置中,该位置不可由程序直接访问。
如果事务中止,则将保存的寄存器对恢复到其在执行最外层TBEGIN 指令时的内容。当事务中止时,不恢复所有其它(未保存的)通用寄存器的内容。
针对所有TBEGIN(除了最外层TBEGIN之外)忽略通用寄存器保存掩码。
允许AR修改(A)212:A控件(I2字段的位12)控制是否允许事务修改存取寄存器。有效的允许AR修改控件是TBEGIN指令中用于当前嵌套级别和所有外部级别的A控件的逻辑“与”。
如果有效的A控件为0,则尝试修改任何存取寄存器时,将中止事务并且中止码为11(受限指令)。如果有效的A控件为1,则修改存取寄存器时,将不中止事务(没有任何其它中止条件)。
允许浮点运算(F)214:F控件(I2字段的位13)控制是否允许事务执行指定的浮点指令。有效的允许浮点运算控件是TBEGIN指令中用于当前嵌套级别和所有外部级别的F控件的逻辑“与”。
如果有效的F控件为0,则(a)尝试执行浮点指令时,将中止事务并且中止码为11(受限指令),以及(b)将不会通过任何数据异常程序异常条件设置浮点控制寄存器(FPCR)的字节2中的数据异常码(DXC)。如果有效的F控件为1,则(a)尝试执行浮点指令时,将不中止事务(没有任何其它中止条件),以及(b)可以通过数据异常程序异常条件设置FPCR中的DXC。
程序中断过滤控件(PIFC)216:I2字段的位14-15是程序中断过滤控件(PIFC)。PIFC控制在CPU处于事务性执行模式时出现的某些类程序异常条件(例如,寻址异常、数据异常、运算异常、保护异常等)是否导致中断。
有效的PIFC是TBEGIN指令中用于当前嵌套级别和所有外部级别的PIFC的最高值。当有效的PIFC为0时,所有程序异常条件都导致中断。当有效的PIFC为1时,具有事务性执行类1和2的程序异常条件导致中断。(每个程序异常条件被分配至少一个事务性执行类,具体取决于异常的严重度。严重度基于重复执行事务性执行期间的恢复可能性,以及操作 系统是否需要看到中断)。当有效的PIFC为2时,具有事务性执行类1的程序异常条件导致中断。保留PIFC3。
I2字段的位8-11(指令的位40-43)被保留,并且应该包含0;否则,将来程序可能无法兼容运行。
参考图3A-3B描述了Transaction Begin constrained(TBEGINC)指令的格式的一个实施例。在一个实例中,TBEGINC300包括:操作码字段302,其包括指定受限事务开始操作的操作码;基址字段(B1)304;位移字段(D1)306;以及立即字段(I2)308。将B1304指定的通用寄存器的内容加到D1306以获得第一操作数地址。但是,对于transaction beginconstrained指令,不使用第一操作数地址访问存储设备。相反,指令的B1字段包括0;否则,识别到指定异常。
在一个实施例中,I2字段包括各种控件,图3B中示出了它们的一个实例。
在一个实例中,I2字段的位定义如下:
通用寄存器保存掩码(GRSM)310:I2字段的位0-7包含通用寄存器保存掩码(GRSM)。GRSM的每个位表示奇偶通用寄存器对,其中位0表示寄存器0和1,位1表示寄存器2和3,等等。当GRSM中的位为0时,不保存对应的寄存器对。当GRSM中的位为1时,将对应的寄存器对保存在模型相关的位置中,该位置不可由程序直接访问。如果事务中止,则将所保存的寄存器对恢复到其在执行最外层TRANSACTION BEGIN指令时的内容。当受限事务中止时,不恢复所有其它(未保存的)通用寄存器的内容。
当使用TBEGINC以在非受限事务执行模式中继续执行时,忽略通用寄存器保存掩码。
允许AR修改(A)312:A控件(I2字段的位12)控制是否允许事务修改存取寄存器。有效的允许AR修改控件是TBEGIN指令中用于当前嵌套级别和任何外部TBEGIN或TBEGINC指令的A控件的逻辑“与”。 如果有效的A控件为0,则尝试修改任何存取寄存器时,将中止事务并且中止码为11(受限指令)。如果有效的A控件为1,则修改存取寄存器时,将不中止事务(没有任何其它中止条件)。
I2字段的位8-11和13-15(指令的位40-43和45-47)被保留,并且应该包含0。
Transaction Begin指令的结束由TRANSACTION END(TEND)指令指定,图4中示出了该指令的格式。作为一个实例,TEND指令400包括操作码字段402,其包括指定事务结束操作的操作码。
针对事务性执行工具使用多个术语,因此,仅为方便起见,下面按字母顺序提供了术语列表。在一个实施例中,这些术语具有以下定义:
中止:当事务在导致事务嵌套深度为0的TRANSACTION END指令之前结束时,事务中止。在一个实施例中,当事务中止时,发生以下情况:
*事务的任何和所有级别进行的事务性存储访问被丢弃(即,不提交)。
*事务的任何和所有级别进行的非事务性存储访问被提交。
*最外层TRANSACTION BEGIN指令的通用寄存器保存掩码(GRSM)指定的寄存器被恢复到其在事务性执行之前的内容(即,恢复到其在执行最外层TRANSACTION BEGIN指令时的内容)。最外层TRANSACTION BEGIN指令的通用寄存器保存掩码未指定的通用寄存器不被恢复。
*存取寄存器、浮点寄存器以及浮点控制寄存器不被恢复。当事务中止时,在事务执行期间对这些寄存器的任何更改被保留。
事务可能由于各种原因而中止,包括尝试执行受限指令、尝试修改受限资源、事务冲突、超过各种CPU资源、任何解释执行拦截条件、任何中断、TRANSACTION ABORT指令以及其它原因。事务中止码提供事务为何可被中止的具体原因。
参考图5描述了TRANSACTION ABORT(TABORT)指令的格式的一个实例。作为一个实例,TABORT指令500包括:操作码字段502,其包括指定事务中止操作的操作码;基址字段(B2)504;以及位移字段(D2) 506。当B2字段为非零值时,将B2504指定的通用寄存器的内容加到D2506以获得第二操作数地址;否则,仅从D2字段形成第二操作数地址,并且B2字段被忽略。第二操作数地址并不用于对数据进行寻址;相反,该地址形成事务中止码,在中止处理期间该中止码被放在事务诊断块中。第二操作数地址的地址计算遵循地址运算的规则:在24位寻址模式中,位0-29被设为0;在31位寻址模式中,位0-32被设为0。
提交:在完成最外层TRANSACTION END指令时,CPU提交事务(即,最外层事务和任何嵌套级别)进行的存储访问,以便这些存储访问对其它CPU和I/O子系统可见。如其它CPU和I/O子系统所观察到的那样,当进行提交时,事务的所有嵌套级别进行的所有取回和存储访问看似作为单个并发操作发生。
提交过程不修改通用寄存器、存取寄存器、浮点寄存器以及浮点控制寄存器的内容。当提交事务的存储时,在事务执行期间对这些寄存器进行的任何更改被保留。
冲突:一个CPU进行的事务性访问与以下访问冲突:(a)另一个CPU进行的事务性访问或非事务性访问,或者(b)I/O子系统进行的非事务性访问,前提是这两个访问针对同一高速缓存线中的任何位置,并且一个或多个访问是存储。
可以通过CPU的推测性指令执行来检测冲突,即使可能未在概念序列中检测到冲突。
受限事务:受限事务是在受限事务执行模式中执行的事务,并且受到以下限制:
*通用指令的子集可用。
*可以执行有限数量的指令。
*可以访问有限数量的存储操作数位置。
*事务被限于单个嵌套级别。
如果未出现重复中断或与其它CPU或I/O子系统的冲突,则受限事务最终完成,因此不需要中止处理机例程。下面将详细描述受限事务。
当执行TRANSACTION BEGIN constrained(TBEGINC)指令,同时CPU已经处于非受限事务执行模式时,执行作为嵌套非受限事务继续。
受限事务执行模式:当事务嵌套深度为0,并且通过TBEGINC指令启动事务时,CPU进入受限事务执行模式。当CPU处于受限事务执行模式时,事务嵌套深度为1。
嵌套事务:当发出TRANSACTION BEGIN指令,同时CPU处于非受限事务性执行模式时,事务被嵌套。
事务性执行工具使用一种被称为平面化嵌套的模型。在平面化嵌套模式中,其它CPU和I/O子系统观察不到内部事务进行的存储,直到最外层事务提交其存储。同样,如果事务中止,则所有嵌套事务都中止,并且所有嵌套事务的所有事务性存储都被丢弃。
图6中示出了嵌套事务的一个实例。如图所示,第一TBEGIN600启动最外层事务601,TBEGIN602启动第一嵌套事务,TBEGIN604启动第二嵌套事务。在该实例中,TBEGIN604和TEND606定义最内层事务608。当TEND610执行时,针对最外层事务和所有内部事务提交事务性存储612。
非受限事务:非受限事务是在非受限事务性执行模式中执行的事务。尽管非受限事务在方式上不作为受限事务被限制,但它仍然可能由于各种原因而中止。
非受限事务性执行模式:当通过TBEGIN指令启动事务时,CPU进入非受限事务性执行模式。当CPU处于非受限事务性执行模式时,事务嵌套深度可从1变化到最大事务嵌套深度。
非事务性访问:非事务性访问是CPU在未处于事务性执行模式时进行的存储操作数访问(即,传统的事务外部存储访问)。此外,I/O子系统进行的访问是非事务性访问。此外,当CPU处于非受限事务性执行模式时,NONTRANSACTIONAL STORE指令可以用于导致非事务性存储访问。
参考图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时,对应的寄存器不参与相加。
64位第一操作数以非事务方式不加改变地放在第二操作数位置处。
通过DH2和DL2字段的串接形成的位移被视为20位带符号二进制整数。
第二操作数应在双字边界上对齐;否则,识别到指定异常并抑制该操作。
外部/最外层事务:具有较低编号的事务嵌套深度的事务是外部事务。事务嵌套深度值为1的事务是最外层事务。
最外层TRANSACTION BEGIN指令是当事务嵌套深度初始为0时执行的指令。最外层TRANSACTION END指令是导致事务嵌套深度从1转变为0的指令。在此实施例中,受限事务是最外层事务。
程序中断过滤:当由于某些程序异常条件而中止事务时,程序可以可选地防止发生中断。此类技术被称为程序中断过滤。程序中断过滤取决于中断的事务类、来自TRANSACTION BEGIN指令的有效程序中断过滤控制,以及控制寄存器0中的事务性执行程序中断过滤超控(override)。
事务:当CPU处于事务执行模式时,事务包括进行的存储操作数访问,以及改变的选定通用寄存器。对于非受限事务,存储操作数访问可以包括事务性访问和非事务性访问。对于受限事务,存储操作数访问被限于事务性访问。如其它CPU和I/O子系统所观察到的那样,CPU在处于事务执行模式时进行的所有存储操作数访问看似作为单个并发操作发生。如果中止事务,则事务性存储访问被丢弃,并且最外层TRANSACTION BEGIN指令的通用寄存器保存掩码指定的任何寄存器被恢复到其在事务执行之前的内容。
事务性访问:事务性访问是在CPU处于事务性执行模式时进行的存储操作数访问,并具有NONTRANSACTIONAL STORE指令导致的访问异常。
事务性执行模式:术语事务性执行模式(也被称为事务执行模式)描述非受限和受限事务执行模式的公共操作。因此,当描述操作时,术语非受限和受限用于限定事务性执行模式。
当事务嵌套深度为0时,CPU未处于事务性执行模式(也被称为非事务性执行模式)。
如CPU所观察到的那样,在事务性执行模式中进行的取回和存储与未在事务性执行模式中进行的那些取回和存储并无区别。
在z/Architecture的一个实施例中,事务性执行工具受控于控制寄存器0的位8-9、控制寄存器2的位61-63、事务嵌套深度、事务诊断块地址以及事务中止程序状态字(PSW)。
在初始CPU重置之后,控制寄存器0的位位置8-9的内容、控制寄存器2的位位置62-63的内容以及事务嵌套深度被设为0。当事务性执行控制(控制寄存器0的位8)为0时,无法将CPU置于事务性执行模式。
下面将描述有关各种控件的进一步细节。
如指示的那样,事务性执行工具由控制寄存器0中的两个位以及控制寄存器2中的三个位控制。例如:
控制寄存器0位:在一个实施例中,位分配如下:
事务性执行控制(TXC):控制寄存器0的位8是事务性执行控件。该位提供一种机制,控制程序(例如,操作系统)可以由此指示程序是否可使用事务性执行工具。位8为1可成功进入事务性执行模式。
当控制寄存器0的位8为0时,尝试执行EXTRACT TRANSACTION NESTING DEPTH、TRANSACTION BEGIN和TRANSACTION END指令将导致特殊的操作执行。
参考图8描述了EXTRACT TRANSACTION NESTING DEPTH指令的格式的一个实施例。作为一个实例,EXTRACT TRANSACTION NESTING DEPTH指令800包括:操作码字段802,其指定指示提取事务嵌套深度操作的操作码;以及寄存器字段R1804,其指定通用寄存器。
当前事务嵌套深度被放在通用寄存器R1的位48-63中。寄存器的位0-31保持不变,并且寄存器的位32-47被设为0。
在另一实施例中,最大事务嵌套深度也被放在通用寄存器R1中,例如在位16-31中。
事务执行程序中断过滤超控(PIFO):控制寄存器0的位9是事务性执行程序中断过滤超控。该位提供一种机制,控制程序可以由此确保在CPU处于事务性执行模式时出现的任何程序异常条件都导致中断,与TRANSACTION BEGIN指令(多个)指定或暗示的有效程序中断过滤控件无关。
控制寄存器2位:在一个实施例中,位分配如下:
事务诊断范围(TDS):控制寄存器2的位61控制寄存器的位62-63中的事务诊断控制(TDC)的适用性,如下所示:
TDS
值含义
0应用TDC,不管CPU是处于问题状态还是管理程序状态(supervisor state)。
1仅当CPU处于问题状态时才应用TDC。当CPU处于管理程序状态时,处理犹如包含0的TDC。
事务诊断控件(TDC):控制寄存器2的位62-63是2位无符号整数,其可以用于导致随机中止事务以实现诊断目的。在一个实例中,TDC的编码如下:
TDC
值含义
0正常操作;作为TDC的结果,不中止事务。
1在随机指令中,但在执行最外层TRANSACTION END指令之前, 中止每一个事务。
2在随机指令处中止随机事务。
3保留
当由于非零TDC而中止事务时,则可能发生以下任何一种情况:
*中止码被设为代码7-11、13-16或255中的任何一个,并且代码的值由CPU随机选择;设置对应于中止码的条件码。下面将进一步描述中止码。
*对于非受限事务,条件码被设为1。在此类情况下,中止码不适用。
是否实现TDC值1与模型相关。如果不实现,则值1的操作犹如指定2。
对于受限事务,TDC值为1的处理犹如指定TDC值为2。
如果指定TDC值为3,则结果不可预测。
事务诊断块地址(TDBA)
当指令的B1字段为非零值时,从最外层TRANSACTION BEGIN(TBEGIN)指令的第一操作数地址设置有效的事务诊断块地址(TDBA)。当CPU处于主空间或存取寄存器模式时,TDBA指定主地址空间中的位置。当CPU处于辅助空间或归属空间模式时,TDBA分别指定辅助或归属地址空间中的位置。当关闭DAT(动态地址转换)时,TDBA指定实存储设备中的位置。
如果随后中止事务,则CPU使用TDBA定位事务诊断块(被称为TBEGIN指定的TDB)。TDBA的最右侧三个位为0,意味着TBEGIN指定的TDB在双字边界上。
当最外层TRANSACTION BEGIN(TBEGIN)指令的B1字段为0时,事务性诊断块地址无效,并且如果随后中止事务,则不存储TBEGIN指定的TDB。
事务中止PSW(TAPSW)
当嵌套深度初始为0时,在TRANSACTION BEGIN(TBEGIN)指令的执行期间,事务中止PSW被设为当前PSW的内容;并且事务中止 PSW的指令地址指定下一顺序指令(即,在最外层TBEGIN之后的指令)。当嵌套深度初始为0时,在TRANSACTION BEGIN constrained(TBEGINC)指令的执行期间,事务中止PSW被设为当前PSW的内容,只是事务中止PSW的指令地址指定TBEGINC指令(而不是在TBEGINC之后的下一顺序指令)。
当中止事务时,事务中止PSW中的条件码被指示中止条件严重度的代码取代。随后,如果由于未导致中断的原因而中止事务,则从事务中止PSW加载PSW;如果由于导致中断的原因而中止事务,则事务中止PSW被存储为中断旧PSW。
在执行任何内部TRANSACTION BEGIN指令期间,不改变事务中止PSW。
事务嵌套深度(TND)
事务嵌套深度例如是16位无符号值,每次完成TRANSACTION BEGIN指令并且条件码为0时,该值递增,每次完成TRANSACTION END指令时,该值递减。当事务中止或由CPU重置时,事务嵌套深度被重置为0。
在一个实施例中,实现最大TND为15。
在一种实施方式中,当CPU处于受限事务性执行模式时,事务嵌套深度为1。此外,尽管最大TND可以表示为4位值,但TND被定义为16位值以便于其在事务诊断块中的检查。
事务诊断块(TDB)
当中止事务时,可以将各种状态信息保存在事务诊断块(TDB)中,如下所示:
1.TBEGIN指定的TDB:对于非受限事务,当最外层TBEGIN指令的B1字段为非零值时,指令的第一操作数地址指定TBEGIN指定的TDB。这是应用程序指定的位置,其可以由应用的中止处理机检查。
2.程序中断(PI)TDB:如果由于未过滤的程序异常条件而中止非受 限事务,或者如果由于任何程序异常条件(即,导致识别到程序中断的任何条件)而中止受限事务,则PI-TDB被存储到前缀区中的位置。这可供操作系统在PI-TDB可以提供的任何诊断报告中检查并登出(log out)。
3.拦截TDB:如果由于导致拦截的任何程序异常条件(即,条件导致解释执行结束并将控制返回到主机程序)而中止事务,则TDB被存储到来宾操作系统的状态描述块中指定的位置。
在一个实施例中,仅当TDB地址有效时(即,当最外层TBEGIN指令的B1字段为非零值时)才存储TBEGIN指定的TDB。
对于由于未过滤的程序异常条件导致的中止,仅存储PI-TDB或拦截TDB中的一个。因此,可以针对中止存储零个、一个或两个TDB。
下面将描述有关每个TDB的一个实例的进一步细节:
TBEGIN指定的TDB:有效的事务诊断块地址指定的256字节位置。当事务诊断块地址有效时,在事务中止时存储TBEGIN指定的TDB。TBEGIN指定的TDB取决于在执行最外层TRANSACTION BEGIN指令时有效的所有存储保护机制。在执行最外层TBEGIN期间(而不是在事务中止处理期间),检测TBEGIN指定的TDB的任何部分的PER(程序事件记录)存储更改事件。
PER的一个用途是有助于调试程序。它允许将程序改变为以下类型的事件(作为实例):
*执行成功的分支指令。提供以下选项:仅当分支目标位置在指定的存储区中时才发生事件。
*从指定的存储区取回指令。
*改变指定的存储区的内容。提供以下选项:仅当存储区在指定的地址空间中时才发生事件。
*执行STORE USING REAL ADDRESS指令。
*执行TRANSACTION END指令。
程序可以选择性地指定识别上面一种或多种类型的事件,只是STORE USING REALADDRESS的事件仅可以与存储更改事件一起指定。借助程序中断为程序提供有关PER事件的信息,并且在中断码中标识中断原因。
当事务诊断块地址无效时,不存储TBEGIN指定的TDB。
程序中断TDB:实位置6,144-6,399(1800-18FF十六进制)。当由于程序中断而中止事务时,存储程序中断TDB。当由于其它原因而中止事务时,程序中断TDB的内容不可预测。
程序中断TDB不取决于任何保护机制。当程序中断TDB在程序中断期间被存储时,不针对程序中断TDB检测PER存储更改事件。
拦截TDB:状态描述的位置488-495指定的256字节主机实位置。当中止后的事务导致来宾程序中断拦截(即,拦截码8)时,存储拦截TDB。当由于其它原因而中止事务时,拦截TDB的内容不可预测。拦截TDB不取决于任何保护机制。
如图9中所示,在一个实施例中,事务诊断块900的字段如下:
格式902:字节0包含有效性和格式指示,如下所示:
值含义
0 TDB的剩余字段不可预测。
1 格式-1TDB,下面将描述其剩余字段。
2-255保留
其中格式字段为0的TDB被称为空(null)TDB。
标志904:字节1包含各种指示,如下所示:
冲突标记有效性(CTV):当由于取回或存储冲突(即,分别为中止码9或10)而中止事务时,字节1的位0是冲突标记有效性指示。当CTV指示为1时,TDB的字节16-23中的冲突标记910包含在该处检测到冲突的逻辑地址。当CTV指示为0时,TDB的字节16-23不可预测。
当由于取回或存储冲突之外的任何原因而中止事务时,字节1的位0被存储为0。
受限事务指示(CTI):当CPU处于受限事务性执行模式时,字 节1的位1被设为1。当CPU处于非受限事务性执行模式时,字节1的位1被设为0。
保留。字节1的位2-7被保留,并被存储为0。
事务嵌套深度(TND)906:字节6-7包含事务中止时的事务嵌套深度。事务中止码(TAC)908:字节8-15包含64位无符号事务中止码。每个代码点指示事务中止的原因。
当由于程序中断之外的条件而中止事务时,事务中止码是否被存储在程序中断TDB中与模型相关。
冲突标记910:对于由于取回或存储冲突(即,分别为中止码9和10)而中止的事务,字节16-23包含在该处检测到冲突的存储位置的逻辑地址。当CTV位(字节1的位0)为1时,冲突标记有意义。
当CTV位为0时,字节16-23不可预测。
因为CPU进行推测性执行,冲突标记可能指定不一定由事务的概念执行序列访问的存储位置。
中止事务指令地址(ATIA)912:字节24-31包含指令地址,该地址标识当检测到中止时正在执行的指令。当由于中止码2、5、6、11、13或256或更高代码而中止事务时,或者当由于中止码4或13而中止事务,并且使程序异常条件无效时,ATIA直接指向正在被执行的指令。当由于中止码4或12而中止事务,并且未使程序异常条件无效时,ATIA经过正在被执行的指令。
当由于中止码7-10、14-16或255而中止事务时,ATIA不一定指示导致中止的确切指令,但可能指向事务中的较前或较后的指令。
如果由于作为执行型指令的目标的指令而中止事务,则ATIA标识执行型指令,指向该指令或经过该指令,具体取决于如上所述的中止码。ATIA不指示执行型指令的目标。
ATIA取决于事务中止时的寻址模式。在24位寻址模式中,字段的位0-40包含0。在31位寻址模式中,字段的位0-32包含0。
当由于程序中断之外的条件而中止事务时,中止事务指令地址是否被 存储在程序中断TDB中与模型相关。
当由于中止码4或12而中止事务,并且未使程序异常条件无效时,ATIA不指向导致中止的指令。通过从ATIA中减去中断长度码(ILC)指示的半字数量,可以在抑制或终止的条件中标识导致中止的指令,或者针对正在完成的非PER事件标识导致中止的指令。当由于PER事件而中止事务,并且不存在其它程序异常条件时,ATIA不可预测。当事务诊断块地址有效时,可以在TBEGIN指定的TDB的字节36-39中的程序中断标识(PIID)中检查ILC。当不应用过滤时,可以在实存储设备中的位置140-143的PIID中检查ILC。
异常访问标识(EAID)914:对于由于某些过滤后的程序异常条件而中止的事务,TBEGIN指定的TDB的字节32包含异常访问标识。在z/Architecture的一个实例中,EAID的格式及其存储情况,与异常条件导致中断时的实位置160中描述的相同,如上面引入的参考“操作原理”中所述。
对于由于其它原因(包括导致程序中断的任何异常条件)而中止的事务,字节32不可预测。在程序中断TDB中,字节32不可预测。
该字段仅被存储在事务诊断块地址指定的TDB中;否则,字段被保留。仅针对以下各项存储EAID:访问列表控制或DAT保护、ASCE类型、页转换、区域第一转换、区域第二转换、区域第三转换以及段转换程序异常条件。
数据异常码(DXC)916:对于由于过滤后的数据异常程序异常条件而中止的事务,TBEGIN指定的TDB的字节33包含数据异常码。在z/Architecture的一个实例中,DXC的格式及其存储情况,与异常条件导致中断时的实位置147中描述的相同,如上面引入的参考“操作原理”中所述。在一个实例中,位置147包括DXC。
对于由于其它原因(包括导致程序中断的任何异常条件)而中止的事务,字节33不可预测。在程序中断TDB中,字节33不可预测。
该字段仅被存储在事务诊断块地址指定的TDB中;否则,字段被保留。 仅针对数据程序异常条件存储DXC。
程序中断标识(PIID)918:对于由于过滤后的程序异常条件而中止的事务,TBEGIN指定的TDB的字节36-39包含程序中断标识。在z/Architecture的一个实例中,PIID的格式与条件导致中断时的实位置140-143中描述的相同(如上面引入的参考“操作原理”中所述),只是PIID的位13-14中的指令长度码对应于在该处检测到异常条件的指令。
对于由于其它原因(包括导致程序中断的异常条件)而中止的事务,字节36-39不可预测。在程序中断TDB中,字节36-39不可预测。
该字段仅被存储在事务诊断块地址指定的TDB中;否则,字段被保留。仅针对程序异常条件存储程序中断标识。
转换异常标识(TEID)920:对于由于以下任何一个过滤后的程序异常条件而中止的事务,TBEGIN指定的TDB的字节40-47包含转换异常标识。
*访问列表控制或DAT保护
*ASCE类型
*页转换
*区域第一转换
*区域第二转换
*区域第三转换
*段转换异常
在z/Architecture的一个实例中,TEID的格式与条件导致中断时的实位置168-175中描述的相同,如上面引入的参考“操作原理”中所述。对于由于其它原因(包括导致程序中断的异常条件)而中止的事务,字节40-47不可预测。在程序中断TDB中,字节40-47不可预测。该字段仅被存储在事务诊断块地址指定的TDB中;否则,字段被保留。停止事件(breaking event)地址922:对于由于过滤的程序异常条件而中止的事务,TBEGIN指定的TDB的字节48-55包含停止事件地址。 在z/Architecture的一个实例中,停止事件地址的格式与条件导致中断时的实位置272-279中描述的相同,如上面引入的参考“操作原理”中所述。
对于由于其它原因(包括导致程序中断的异常条件)而中止的事务,字节48-55不可预测。在程序中断TDB中,字节48-55不可预测。
该字段仅被存储在事务诊断块地址指定的TDB中;否则,字段被保留。下面将描述与停止事件相关的进一步细节。
在z/Architecture的一个实施例中,当安装了PER-3工具时,它为程序提供在CPU顺序执行中导致停止的上一指令的地址。停止事件地址记录可以用作自然分支检测的调试帮助。该工具例如在CPU中提供64位寄存器,被称为停止事件地址寄存器。每次TRANSACTIONABORT之外的指令在顺序指令执行中导致停止(即,PSW中的指令地址被取代,而不是按指令长度增加)时,该指令的地址被放在停止事件地址寄存器中。每当发生程序中断时,无论是否指示PER,停止事件地址寄存器的当前内容都被放在实存储设备位置272-279中。
如果导致停止事件的指令是执行型指令(EXECUTE或EXECUTE RELATIVE LONG)的目标,则用于取回执行型指令的指令地址被放在停止事件地址寄存器中。
在z/Architecture的一个实施例中,每当以下指令之一导致分支时,便会视为发生停止事件:BRANCH AND LINK(BAL、BALR);BRANCH AND SAVE(BAS、BASR);BRANCH ANDSAVE AND SET MODE(BASSM);BRANCH AND SET MODE(BSM);BRANCH AND STACK(BAKR);BRANCH ON CONDITION(BC、BCR);BRANCH ON COUNT(BCT、BCTR、BCTG、BCTGR);BRANCH ONINDEX HIGH(BXH、BXHG);BRANCH ON INDEX LOW OR EQUAL(BXLE、BXLEG);BRANCH RELATIVEON CONDITION(BRC);BRANCH RELATIVE ON CONDITION LONG(BRCL);BRANCH RELATIVE ONCOUNT(BRCT、 BRCTG);BRANCH RELATIVE ON INDEX HIGH(BRXH、BRXHG);BRANCH RELATIVEON INDEX LOW OR EQUAL(BRXLE、BRXLG);COMPARE AND BRANCH(CRB、CGRB);COMPARE ANDBRANCH RELATIVE(CRJ、CGRJ);COMPARE IMMEDIATE AND BRANCH(CIB、CGIB);COMPAREIMMEDIATE AND BRANCH RELATIVE(CIJ、CGIJ);COMPARE LOGICAL AND BRANCH(CLRB、CLGRB);COMPARE LOGICAL AND BRANCH RELATIVE(CLRJ、CLGRJ);COMPARE LOGICALIMMEDIATE AND BRANCH(CLIB、CLGIB);以及COMPARE LOGICAL IMMEDIATE AND BRANCHRELATIVE(CLIJ、CLGIJ)。
每当完成以下指令之一时,也会视为发生停止事件:BRANCH ANDSET AUTHORITY(BSA);BRANCH IN SUBSPACE GROUP(BSG);BRANCH RELATIVE AND SAVE(BRAS);BRANCHRELATIVE AND SAVE LONG(BRASL);LOAD PSW(LPSW);LOAD PSW EXTENDED(LPSWE);PROGRAMCALL(PC);PROGRAM RETURN(PR);PROGRAM TRANSFER(PT);PROGRAM TRANSFER WITHINSTANCE(PTI);RESUME PROGRAM(RP);以及TRAP(TRAP2、TRAP4)。
停止事件不会被视为作为中止事务(隐式或作为TRANSACTION ABORT指令的结果)的结果发生。
模型相关诊断信息924:字节112-127包含模型相关诊断信息。
对于除了12(过滤后的程序中断)之外的所有中止码,模型相关诊断信息被保存在每个所存储的TDB中。
在一个实施例中,模型相关诊断信息包括以下各项:
*字节112-119包含64位向量,被称为事务执行分支指示(TXBI)。向量的前63位中的每个位指示当CPU处于事务性执行模式时,执行分支指令的结果,如下所示:
值含义
0指令完成而没有分支。
1指令完成而具有分支。
位0表示第一个此类分支指令的结果,位1表示第二个此类指令的结果,以此类推。
当CPU处于事务性执行模式时,如果执行少于63个分支指令,则不对应于分支指令的最右侧位被设为0(包括位63)。当执行多于63个分支指令时,TXBI的位63被设为1。
TXBI中的位由能够导致停止事件的指令(如上面列出的)设置,以下情况除外:
-任何受限指令未导致在TXBI中设置位。
-对于例如z/Architecture的指令,当BRANCH ON CONDITION、BRANCH RELATIVEON CONDITION或BRANCH RELATIVE ON CONDITION LONG指令的M1字段为0时,或者当以下指令的R2字段为0时,执行指令是否导致在TXBI中设置位与模型相关。
*BRANCH AND LINK(BALR);BRANCH AND SAVE(BASR);BRANCH AND SAVE AND SETMODE(BASSM);BRANCH AND SET MODE(BSM);BRANCH ON CONDITION(BCR);以及BRANCH ONCOUNT(BCTR、BCTGR)
*对于由主机访问异常导致的中止条件,字节127的位位置0被设为1。对于所有其它中止条件,字节127的位位置0被设为0。
*对于加载/存储单元(LSU)检测到的中止条件,字节127的最右侧五位包含原因指示。对于LSU未检测到的中止条件,字节127被保留。
通用寄存器930:字节128-255包含事务被中止时的通用寄存器0-15的内容。寄存器按升序存储,始于字节128-135中的通用寄存器0,字 节136-143中的通用寄存器1,以此类推。
保留:所有其它字段被保留。除非另外指明,否则被保留字段的内容不可预测。
如其它CPU和I/O子系统所观察到的那样,在事务中止期间存储TDB(多个)是在任何非事务性存储之后发生的多个访问引用。
可能由于在其中执行事务的立即配置范围之外的原因而中止事务。例如,系统管理程序(例如LPAR或z/VM)识别到的瞬态事件可能导致事务中止。
在事务诊断块中提供的信息用于诊断目的,并且基本上正确。但是,因为可能由立即配置范围之外的事件导致中止,诸如中止码或程序中断标识之类的信息可能不会准确地反映配置中的条件,因此不应该用于确定程序操作。
除了保存在TDB中的诊断信息之外,当由于任何数据异常程序异常条件而中止事务,并且AFP寄存器控件(控制寄存器0的位45)和有效的允许浮点运算控件(F)都为1时,数据异常码(DXC)被放到浮点控制寄存器(FPCR)的字节2,而不管是否向程序异常条件应用过滤。当中止事务,并且AFP寄存器控件或有效的允许浮点运算控件之一或全部为0时,不将DXC放入FPCR。
在一个实施例中,如在此指示的,当安装了事务性执行工具时,提供以下通用指令。
*EXTRACT TRANSACTION NESTING DEPTH
*NONTRANSACTIONAL STORE
*TRANSACTION ABORT
*TRANSACTION BEGIN
*TRANSACTION END
当CPU处于事务性执行模式时,尝试执行某些指令被限制,并且导致事务中止。
当在受限事务性执行模式中发出时,尝试执行受限指令也可能导致事 务约束程序中断,或者可能导致执行继续,犹如事务未被限制。
在z/Architecture的一个实例中,受限指令包括(作为实例)以下非特权指令:COMPARE AND SWAP AND STORE;MODIFY RUNTIME INSTRUMENTATION CONTROLS;PERFORMLOCKEDOPERATION;PREFETCH DATA(RELATIVE LONG),当M1字段中的代码为6或7时;STORECHARACTERS UNDER MASK HIGH,当M3字段为0并且R1字段中的代码为6或7时;STOREFACILITY LIST EXTENDED;STORE RUNTIME INSTRUMENTATION CONTROLS;SUPERVISORCALL;以及TEST RUNTIME INSTRUMENTATION CONTROLS。
在上面的列表中,COMPARE AND SWAP AND STORE和PERFORM LOCKED OPERATION是复杂指令,可以通过在TX模式中使用基本指令更高效地实现。在代码6和7释放高速缓存线时,PREFETCH DATA和PREFETCH DATA RELATIVE LONG的情况被限制,从而需要在事务完成之前提交数据。SUPERVISOR CALL被限制,因为其导致中断(导致事务中止)。
在下面列出的条件下,限制以下指令:
*BRANCH AND LINK(BALR)、BRANCH AND SAVE(BASR)以及BRANCH AND SAVE ANDSET MODE,当指令的R2字段为非零值并且启用分支跟踪时。
*BRANCH AND SAVE AND SET MODE和BRANCH AND SET MODE,当R2字段为非零值并且启用模式跟踪时;SET ADDRESSING MODE,当启用模式跟踪时。
*MONITOR CALL,当识别到监视事件条件时。
上面的列表包括可能形成跟踪项的指令。如果允许这些指令以事务方式执行并形成跟踪项,并且随后中止事务,则控制寄存器12中的跟踪表指针将增加,但到跟踪表的存储被丢弃。这在跟踪表中留下不一致的间隙。因此,在指令形成跟踪项的情况下,将限制指令。
当CPU处于事务性执行模式时,是否限制以下指令与模型相关:CIPHER MESSAGE;CIPHER MESSAGE WITH CFB;CIPHER MESSAGE WITH CHAINING;CIPHER MESSAGE WITHCOUNTER;CIPHER MESSAGE WITH OFB;COMPRESSION CALL;COMPUTE INTERMEDIATE MESSAGEDIGEST;COMPUTE LAST MESSAGE DIGEST;COMPUTE MESSAGE AUTHENTICATION CODE;CONVERT UNICODE-16TO UNICODE-32;CONVERT UNICODE-16TO UNICODE-8;CONVERTUNICODE-32TO UNICODE-16;CONVERT UNICODE-32TO UNICODE-8;CONVERT UNICODE-8TOUNICODE-16;CONVERT UNICODE-8TO UNICODE-32;PERFORM CRYPTOGRAPHIC COMPUTATION;RUNTIME INSTRUMENTATION OFF;以及RUNTIME INSTRUMENTATION ON。
上面的每个指令当前由硬件协处理器实现,或者已在过去机器中并因此被视为受限。
当有效的允许AR修改(A)控件为0时,限制以下指令:COPYACCESS;LOAD ACCESSMULTIPLE;LOAD ADDRESS EXTENDED;以及SET ACCESS。
上面的每个指令导致修改存取寄存器的内容。如果TRANSACTION BEGIN指令中的A控件为0,则程序显式指示不允许存取寄存器修改。
当有效的允许浮点运算(F)控件为0时,限制浮点指令。
在某些情况下,可能限制以下指令:EXTRACT CPU TIME;EXTRACT PSW;STORECLOCK;STORE CLOCK EXTENDED;以及STORE CLOCK FAST。
上面的每个指令都取决于解释执行状态描述中的拦截控制。如果系统管理程序针对这些指令设置了拦截控制,则指令的执行可能由于系统管理程序实现而延期;因此,如果发生拦截,则这些指令被视为受限。
当由于尝试执行受限指令而中止非受限事务时,事务诊断块中的事务 中止码被设为11(受限指令),并且条件码被设为3,以下情况除外:当由于尝试执行指令(该指令以其他方式导致特权操作异常)而中止非受限事务时,不可预测中止码被设为11(受限指令)还是4(识别到特权操作程序中断导致的未过滤的程序中断)。当由于尝试执行以下指令而中止非受限事务时:PREFETCH DATA(RELATIVE LONG)(当M1字段中的代码为6或7时)或STORECHARACTERS UNDER MASK HIGH(当M3字段为0并且R1字段中的代码为6或7时),不可预测中止码被设为11(受限指令)还是16(缓存其它)。当由于尝试执行MONITOR CALL而中止非受限事务,并且存在监视事件条件和指定异常条件两者时,不可预测中止码被设为11还是4,或者被设为12(如果过滤程序中断)。
在受限事务中,可能限制其它指令。尽管这些指令当前未在非受限事务中被定义为受限,但在将来处理器的非受限事务中,它们可能在某些情况下受限。
在将来处理器的事务执行模式中,可能允许某些受限指令。因此,程序不应该依赖于由于尝试执行受限指令而中止事务。应该使用TRANSACTION ABORT指令可靠地导致中止事务。
在非受限事务中,程序应该提供备选非事务性代码路径,以便容纳由于受限指令中止的事务。
在操作中,当事务嵌套深度为0时,如果执行导致条件码0的TRANSACTION BEGIN(TBEGIN)指令,则导致CPU进入非受限事务性执行模式。当事务嵌套深度为0时,如果执行导致条件码0的TRANSACTION BEGIN constrained(TBEGINC)指令,则导致CPU进入受限事务性执行模式。
除了另外显式说明之外,适用于非事务性执行的所有规则也适用于事务执行。下面是在CPU处于事务性执行模式时的处理的其它特性。
当CPU处于非受限事务性执行模式时,如果执行导致条件码0的TRANSACTIONBEGIN指令,则导致CPU仍然处于非受限事务性执行模式。
如CPU所观察到的那样,在事务执行模式中进行的取回和存储与未在事务性执行模式中进行的那些取回和存储并无区别。如其它CPU和I/O子系统所观察到的那样,在CPU处于事务性执行模式时进行的所有存储操作数访问看似单个块并发访问。即,访问半字、字、双字或四字中的所有字节被指定为看似块并发,如其它CPU和I/O(例如,通道)程序所观察到的那样。在本节中,半字、字、双字或四字被称为块。当取回型引用被指定为看似在块中并发时,当正在取回包含在该块中的字节期间,不允许另一个CPU或I/O程序对该块进行存储访问。当存储型引用被指定为看似在块中并发时,当正在存储该块中的字节期间,不允许另一个CPU或I/O程序访问该块(取回或存储)。
指令的存储访问以及DAT和ART(存取寄存器表)表取回遵循非事务性规则。
CPU通常通过TRANSACTION END指令离开事务性执行模式,该指令导致事务嵌套深度转变为0,在此类情况下完成事务。
当CPU通过完成TRANSACTION END指令而离开事务性执行模式时,在处于事务性执行模式时进行的所有存储被提交,即,存储看似作为单个块并发操作发生,如其它CPU和I/O子系统所观察到的那样。
可以由于各种原因而隐式中止事务,或者可以通过TRANSACTION ABORT指令而显式中止事务。下面将描述事务中止的实例可能原因、对应的中止码以及被放入事务中止PSW的条件码。
外部中断:事务中止码被设为2,并且事务中止PSW中的条件码被设为2。事务中止PSW被存储为外部旧PSW,作为外部中断处理的一部分。
程序中断(未过滤):导致中断的程序异常条件(即,未过滤的条件)将导致中止事务,并且代码为4。特定于程序中断码而设置事务中止PSW中的条件码。事务中止PSW被存储为程序旧PSW,作为程序中断处理的一部分。
另外导致由于操作异常而中止事务的指令可能产生备选结果:对于非 受限事务,事务可能反而中止,并且中止码为11(受限指令);对于受限事务,可能识别到事务约束程序中断而不是操作异常。
当识别到PER(程序事件记录)事件以及任何其它未过滤的程序异常条件时,条件码被设为3。
机器检查中断:事务中止码被设为5,并且事务中止PSW中的条件码被设为2。事务中止PSW被存储为机器检查旧PSW,作为机器检查中断处理的一部分。
I/O中断:事务中止码被设为6,并且事务中止PSW中的条件码被设为2。事务中止PSW被存储为I/O旧PSW,作为I/O中断处理的一部分。
取回溢出:当事务尝试从超过CPU所支持的位置取回时,检测到取回溢出条件。事务中止码被设为7,并且条件码被设为2或3。
存储溢出:当事务尝试存储到超过CPU所支持的位置时,检测到存储溢出条件。事务中止码被设为8,并且条件码被设为2或3。
如果响应于取回或存储溢出中止而允许条件码为2或3,则允许CPU指示可能重试的情况(例如,条件码2指示事务的重新执行可以提高效率,而条件码3不建议重新执行)。
取回冲突:当另一个CPU或I/O子系统尝试存储到该CPU以事务方式取回的位置时,检测到取回冲突条件。事务中止码被设为9,并且条件码被设为2。
存储冲突:当另一个CPU或I/O子系统尝试访问在该CPU的事务性执行期间已存储的位置时,检测到存储冲突条件。事务中止码被设为10,并且条件码被设为2。
受限指令:当CPU处于事务性执行模式时,尝试执行受限指令导致中止事务。事务中止码被设为11,并且条件码被设为3。
当CPU处于受限事务性执行模式时,不可预测尝试执行受限指令导致事务约束程序中断还是由于受限指令而产生的中止。事务仍被中止,但中止码可能指示任一原因。
程序异常条件(过滤):不导致中断的程序异常条件(即,过滤后的条件)将导致中止事务,并且事务中止码为12。条件码被设为3。
超过嵌套深度:当事务嵌套深度处于配置的最大可允许值,并且执行TRANSACTIONBEGIN指令时,检测到超过嵌套深度条件。中止事务,并且事务中止码为13,条件码被设为3。
高速缓存取回相关条件:CPU的高速缓存电路检测到与事务取回的存储位置相关的条件。中止事务,并且事务中止码为14,条件码被设为2或3。
高速缓存存储相关条件:CPU的高速缓存电路检测到与事务存储的存储位置相关的条件。中止事务,并且事务中止码为15,条件码被设为2或3。
高速缓存其它条件:CPU的高速缓存电路检测到高速缓存其它条件。中止事务,并且事务中止码为16,条件码被设为2或3。
在事务性执行期间,如果CPU使用映射到同一绝对地址的不同逻辑地址访问指令或存储操作数,则是否中止事务与模型相关。如果由于使用映射到同一绝对地址的不同逻辑地址访问而中止事务,则设置中止码14、15或16,具体取决于条件。
杂项条件:杂项条件是CPU识别到的可导致事务中止的任何其它条件。事务中止码被设为255,条件码被设为2或3。
当在同一机器(例如,逻辑分区或虚拟机)中执行多个配置时,事务可能因为外部机器检查或不同配置中的I/O中断而中止。
尽管上面提供了实例,但是可以提供其它具有对应中止码和条件码的事务中止原因。例如,原因可以是“重新启动中断”,其中事务中止码被设为1,并且事务中止PSW中的条件码被设为2。事务中止PSW作为重新启动处理的一部分,被存储为重新启动旧(restart-old)PSW。作为进一步的实例,原因可以是“管理程序调用”条件,其中中止码被设为3,并且事务中止PSW中的条件码被设为3。其它或不同的实例也是可能的。
注意事项:
1.杂项条件可以是以下任一项:
*由配置中的另一CPU执行的指令,例如,在z/Architecture中,COMPARE ANDREPLACE DAT TABLE ENTRY、COMPARE AND SWAP AND PURGE、INVALIDATE DAT TABLEENTRY、INVALIDATE PAGE TABLE ENTRY、PERFORM FRAME MANAGEMENT FUNCTION,其中NQ控件为0,SK控件为1,SET STORAGE KEY EXTENDED,其中NQ控件为0;条件码被设为2。
*在CPU上执行的运算符函数,例如reset、restart或stop,或者等价的SIGNALPROCESSOR命令。
*上面未列出的任何其它条件;条件码被设为2或3。
2.检测到取回与存储冲突的位置可以是同一高速缓存线中的任一位置。
3.在特定条件下,CPU可能不能区分类似的中止条件。例如,取回或存储溢出可能无法与各自的取回或存储冲突进行区分。
4.CPU对多个指令路径的推测性执行可能导致事务因冲突条件或溢出条件而中止,即使此类条件不会在概念序列中发生。当处于受限事务性执行模式时,CPU可能临时禁止推测性执行,从而允许事务尝试在不推测性地检测此类冲突或溢出的情况下完成。
执行TRANSACTION ABORT指令导致事务中止。事务中止码通过第二操作数地址设置。条件码被设为2或3,分别具体取决于第二操作数地址的位63是0还是1。
图10总结了事务诊断方框中存储的中止码实例,以及对应的条件码(CC)。图10中的描述示出一个特殊的实现。值的其它实现和编码也是可能的。
在一个实施例中,如上所述,事务性工具提供受限事务和非受限制事 务,以及与它们关联的处理。首先介绍受限事务,然后介绍非受限事务。
受限事务在事务性模式中执行而无需回退(fall-back)路径。这是一种对紧致函数(compact function)很有用的处理模式。如果未出现重复中断或与其它CPU或I/O子系统的冲突(即,由不允许事务成功完成的条件导致),受限事务将最终完成;因此,不需要中止处理机例程,也不进行指定。例如,如果未出现无法处理的条件违规(例如,以0作为除数时);不允许事务完成的条件(例如,不允许指令执行的计时器中断;热I/O等);或者与受限事务关联的限制或约束违规,事务将最终完成。
当事务嵌套深度初始为0时,受限事务通过TRANSACTION BEGIN constrained(TBEGINC)指令启动。在一个实施例中,受限事务受到以下约束。
1.事务执行的指令数不超过32个,其中不包括TRANSACTIONBEGIN constrained(TBEGINC)和TRANSACTION END指令。
2.事务中的所有指令将位于256个连续存储字节中,其中包括TRANSACTION BEGINconstrained(TBEGINC)和任何TRANSACTION END指令。
3.除了受限指令,下面的限制也适用于受限事务。
a.指令限于那些被称为通用指令的指令,其中例如包括add(加)、substract(减)、multiply(乘)、divide(除)、shift(移位)、rotate(旋转)等。
b.分支指令限于以下指令(在一个实例中,所列的指令是z/Architecture的指令):
*BRANCH RELATIVE ON CONDITION,其中M1非零,RI2字段包含正值。
*BRANCH RELATIVE ON CONDITION LONG,其中M1字段为非零值,RI2字段包含不会导致地址回绕的正值。
*COMPARE AND BRANCH RELATIVE、COMPARE IMMEDIATE AND BRANCH RELATIVE、COMPARE LOGICAL AND BRANCH RELATIVE,以及COMPARE LOGICAL IMMEDIATE AND BRANCHRELATIVE,其中M3字段为非零值,RI4字段包含正值(即,仅转发带有非零分支掩码的分支)。
c.除了TRANSACTION END和导致指定操作数序列化的指令之外,限制导致序列化功能的指令。
d.限制存储-存储操作(SS-),以及带有扩展操作码的存储-存储操作(SSE-)指令。
e.限制下面所有通用指令(在该实例中,是z/Architecture的指令):CHECKSUM;CIPHER MESSAGE;CIPHER MESSAGE WITH CFB;CIPHER MESSAGE WITH CHAINING;CIPHERMESSAGE WITH COUNTER;CIPHER MESSAGE WITH OFB;COMPARE AND FORM CODEWORD;COMPARE LOGICAL LONG;COMPARE LOGICAL LONG EXTENDED;COMPARE LOGICAL LONGUNICODE;COMPARE LOGICAL STRING;COMPARE UNTIL SUBSTRING EQUAL;COMPRESSIONCALL;COMPUTE INTERMEDIATE MESSAGE DIGEST;COMPUTE LAST MESSAGE DIGEST;COMPUTEMESSAGE AUTHENTICATION CODE;CONVERT TO BINARY;CONVERT TO DECIMAL;CONVERTUNICODE-16TO UNICODE-32;CONVERT UNICODE-16TO UNICODE-8;CONVERT UNICODE-32TOUNICODE-16;CONVERT UNICODE-32TO UNICODE-8;CONVERT UNICODE-8TO UNICODE-16;CONVERT UNICODE-8TO UNICODE-32;DIVIDE;DIVIDE LOGICAL;DIVIDE SINGLE;EXECUTE;EXECUTE RELATIVE LONG;EXTRACT CACHE ATTRIBUTE;EXTRACT CPU TIME;EXTRACT PSW;EXTRACT TRANSACTION NESTING DEPTH;LOAD ANDADD;LOAD AND ADD LOGICAL;LOAD ANDAND;LOAD AND EXCLUSIVE OR;LOAD AND OR;LOAD PAIR DISJOINT;LOAD PAIR FROMQUADWORD;MONITOR CALL;MOVE LONG;MOVE LONG EXTENDED;MOVE LONG UNICODE;MOVESTRING;NON-TRANSACTIONAL STORE;PERFORM CRYPTOGRAPHIC COMPUTATION;PREFETCHDATA;PREFETCH DATA RELATIVE LONG;RUNTIME INSTRUMENTATION EMIT;RUNTIMEINSTRUMENTATION NEXT;RUNTIME INSTRUMENTATION OFF;RUNTIME INSTRUMENTATION ON;SEARCH STRING;SEARCH;STRING UNICODE;SET ADDRESSING MODE;STORE CHARACTERSUNDER MASK HIGH,当M3字段为0时,R1字段中的代码位6或7;STORE CLOCK;STORE CLOCKEXTENDED;STORE CLOCK FAST;STORE FACILITY LIST EXTENDED;STORE PAIR TOQUADWORD;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 TOONE;以及TRANSLATE TWO TO TWO。
4.事务的存储操作数访问的八字的数量不超过四个。注意:LOAD ON CONDITION和STORE ON CONDITION被视为引用存储,与条件码无关。八字例如是32字节边界上由32个连续字节构成的组。
5.在此CPU上执行的事务或其它CPU或I/O子系统的存储不会访问 任何包含256字节的以TRANSACTION BEGIN constrained(TBEGINC)指令开头的存储设备的4K字节块中的存储操作数。
6.事务不使用映射到同一绝对地址的不同逻辑地址访问指令或存储操作数。
7.事务所做的操作数引用应位于单个双字内,除了对于LOAD ACCESS MULTIPLE、LOAD MULTIPLE、LOAD MULTIPLE HIGH、STORE ACCESS MULTIPLE、STORE MULTIPLE和STOREMULTIPLE HIGH,操作数引用应位于单个八字内。
如果受限事务违反上面列出的约束1-7中的任一项,便会(a)识别到事务约束程序中断,或者(b)执行继续,就像事务未受约束那样,除了进一步的约束违规仍会导致事务约束的程序中断。无法预测将采取哪个操作,所采取的操作可能根据所违反的约束而变化。
如果未出现约束违规、重复中断或与其它CPU或I/O子系统发生冲突,受限事务将最终完成,如上所述。
1.如果事务满足以下准则,将提高成功完成受限事务的几率:
a.所发出的指令数小于最大值32。
b.存储操作数引用小于最大值4个八字。
c.存储操作数引用位于同一高速缓存线上。
d.所有事务对同一位置的存储操作数引用以同一顺序发生。
2.受限事务不一定第一次执行便成功。但是,如果受限事务在未违反所列任何约束的情况下中止,CPU将采用电路确保事务的重复执行接着成功完成。
3.在受限事务内,TRANSACTION BEGIN为受限制令,因此无法嵌套受限事务。
4.受限事务违反上面约束1-7中的任一项都可能导致程序循环。
5.受限事务的限制类似于比较并交换循环的限制。由于来自其它CPU和I/O子系统的潜在干扰,不能从架构上保证COMPARE AND SWAP指令始终可以以条件码0成功完成。受限事务可能受到类似干扰的影 响,这些干扰采取取回或存储冲突或者热中断的形式。
CPU采用公平算法确保在没有任何约束违规的情况下,受限事务最终完成。
6.为了确定完成受限事务所需的重复迭代数量,程序可以在不受通用寄存器保存掩码限制的通用寄存器中采用计数器。下面示出一个实例:
*R15现在包含重复事务尝试的计数。
注意,在该实例中,不恢复寄存器14和15。另请注意,在某些模型上,如果CPU在完成TBEGINC指令之后,但是在完成AHI指令之前检测到中止条件,通用寄存器15中的计数可以很低。
CPU将观察到,在事务性执行模式中做出的取回和存储与未在事务执行模式中做出的取回和存储没有任何不同。
在一个实施例中,用户(即,事务创建者)选择是否约束事务。将参考图11描述与受限事务处理(具体是指与TBEGINC指令关联的处理)关联的逻辑的一个实施例。执行TBEGINC指令导致CPU进入受限事务性执行模式或停留在非受限制执行模式中。执行TBEGINC的CPU(即,处理器)将执行图11的逻辑。
参考图11,根据TBEGINC指令的执行,执行序列化功能,步骤1100。序列化功能或操作包括由CPU完成所有概念上的先前存储访问(以及,例 如对于z/Architecture,完成相关引用位和变更位设置),如其它CPU或I/O子系统所观察到的,然后进行概念上的后续存储访问(以及相关引用位和变更位设置)。序列化影响CPU对存储和存储键的所有访问的顺序,除了与ARI表项和DAT表项取回关联的访问以外。
处于事务性执行模式中的CPU将观察到,序列化正常执行(如上所述)。其它CPU或I/O子系统将观察到,当TRANSACTION END指令将事务嵌套深度递减为0(正常结束),或者事务中止导致CPU离开事务性执行模式时,将发生在CPU处于事务性执行模式期间执行的序列化操作。
在执行序列化之后,在询问1102,判定是否识别到异常,如果是,则在步骤1104处理异常。例如,如果事务性执行控件(控制寄存器0的位8)为0,则识别到特殊操作异常并抑制操作。作为进一步的实例,如果指令的B1字段的位16-19为非零值;则识别到指定异常并抑制操作;如果TBEGINC是执行型指令的目标,则识别到执行异常并抑制操作;以及如果配置中未安装事务性执行工具,则识别到操作异常并抑制操作。如果CPU已经处于受限事务执行模式中,则识别到事务受限例外程序异常并抑制操作。此外,在递增1的情况下,如果事务嵌套深度超过模型相关最大事务嵌套深度,则事务中止,中止码为13。可以识别和处理其它或不同的异常。
但是,如果未出现异常,则在询问1106判定事务嵌套深度是否为0。如果事务嵌套深度为0,则在步骤1108认为事务诊断块地址无效;在步骤1110,通过当前PSW的内容设置事务中止PSW,只是事务中止PSW的指令地址指定TBEGINC指令,而非下一顺序指令;以及在步骤1112,将通用寄存器保存掩码指定的通用寄存器对的内容保存在不能被程序直接访问的模型相关位置中。此外,在步骤1114,将嵌套深度设为0。附加地,在步骤1116,将允许浮点运算(F)和程序中断过滤控件(PIFC)的有效值设为0。此外,在步骤1118,确定允许AR修改(A)控件(指令的I2字段的位12字段)的有效值。例如,对于当前级别和任何外部TBEGINC 指令,有效的A控件是TBEGINC指令中A控件的逻辑“与”。
返回到询问1106,如果事务嵌套深度大于0,则在步骤1120,嵌套深度递增1。此外,在步骤1122,允许浮点运算(F)的有效值被设为0,程序中断过滤控件(PIFC)的有效值保持不变。然后处理继续执行步骤1118。在一个实施例中,成功启动事务导致条件码0。这将结束与执行TBEGINC指令关联的逻辑的一个实施例。
在一个实施例中,上面提供的异常检查可以按照各种顺序发生。下面示出此异常检查的一种顺序:
与一般情况下的程序中断条件的优先级相同的异常。
由于包含非零值的B1字段导致的指定异常。
由于超过事务嵌套深度导致的中止。
由于正常完成导致的条件码0。
此外,在一个或多个实施例中,应用以下规则:
1.只有当事务中止,而非事务通过TRANSACTION END正常结束时,才恢复被指定由通用寄存器保存掩码保存的寄存器。只有由最外层TRANSACTION BEGIN指令的GRSM指定的寄存器才在中止时被恢复。
I2字段应该指定所有提供由受限事务更改的输入值的寄存器对。因此,如果事务中止,输入寄存器值将在重新执行受限事务时恢复到其原始内容。
2.在多数模型上,可通过指定需要在通用寄存器保存掩码中保存和恢复的最小寄存器数量,同时在TRANSACTION BEGIN上以及在事务中止时实现性能提升。
3.下面示出了基于当前事务嵌套深度(TND)的TRANSACTION BEGIN指令(TBEGIN和TBEGINC)的结果,并且当TND为非零值时,CPU是处于非受限还是受限事务性执行模式中:
指令 TND=0
TBEGIN 进入非受限事务性执行模式
TBEGINC 进入受限事务性执行模式
说明:
CTX CPU处于受限事务性执行模式中
NTX CPU处于非受限事务性执行模式中
TND 指令开始处的事务嵌套深度
总言之,受限事务的处理如下所示:
*如果已经处于受限TX模式中,识别到事务受限异常。
*如果当前TND(事务嵌套深度)>0,就像非受限事务那样,事务继续。
)有效F控件被设为0
)有效PIFC保持不变
)允许外部非受限TX调用可能使用,也可能不使用受限TX的服务功能
*如果当前TND = 0
)事务诊断块地址无效
-中止时不存储指令指定的TDB
)事务中止PSW被设为TBEGINC的地址
-并非下一顺序指令
)模型相关位置中保存的GRSM指定的通用寄存器对不能被程序访问
)可选地(从D2操作数)形成事务标记。事务标记是事务的标识符。它可以等于存储操作数地址或另一值。
*有效的A=TBEGINC A和任何外部A
*TND递增
)如果TND从0转变为1,CPU进入受限TX模式
)否则,CPU保持非受限TX模式
*指令以CC0完成
*异常:
)如果B1字段为非零值,出现指定异常(PIC(程序中断码)0006)
)如果事务执行控件(CR0.8)为0,出现特殊操作异常(PIC0013hex)
)如果在受限TX模式中发出,出现事务受限异常(PIC0018hex)
)如果未安装受限事务性执行工具,出现操作异常(PIC0001)
)如果指令是执行型指令的目标,出现执行异常(PIC0003)
)如果超过嵌套深度,出现中止码13
*受限事务中的中止条件
)中止PSW指向TBEGINC指令
-并非它后面的指令
-中止条件导致重新驱动整个TX
*无失败路径
)CPU采取特殊措施确保重新驱动时成功完成
)假设没有持续的冲突、中断或受限违规,确保事务最终完成
*约束违规:
)PIC0018hex-指示违反事务约束
)或者,事务就像不受约束那样运行
如上所述,除了受限事务处理(可选处理)之外,在一个实施例中,事务性工具还提供非受限事务处理。将参考图12描述有关非受限事务的处理(具体地说,与TBEGIN指令关联的处理)的进一步细节。TBEGIN指令的执行导致CPU进入或停留在非受限事务性执行模式中。执行TBEGIN的CPU(即,处理器)执行图12的逻辑。
现在参考图12,根据TBEGIN指令的执行,在步骤1200执行序列化功能(如上所述)。执行序列化之后,在询问1202判定是否识别到异常。如果是,则在步骤1204处理异常。例如,如果事务性执行控件(控制寄存器0的位8)为0,则识别到特殊操作异常并抑制操作。此外,如果程序中断过滤控件(指令的I2字段位14-15)包含值“3”;或者第一操作数地址未指定双字边界,则识别到指定异常并抑制操作。如果配置中未安装事务性执行工具,则识别到操作异常并抑制操作;以及如果TBEGIN是执行型指令的目标,则识别到执行异常并抑制操作。此外,如果CPU处于受限事务性执行模式中,则识别到事务受限例外程序异常并抑制操作。此外,当递增1时,如果事务嵌套深度超过模型相关最大事务嵌套深度,则事务中止,中止码为13。
此外,当指令的B1字段为非零值并且CPU未处于事务性执行模式(即,事务嵌套深度为0)时,确定对第一操作数的存储可访问性。如果无法访问第一操作数进行存储,则识别到访问异常并且取消、抑制或终止操作,具体取决于特定的访问异常条件。此外,将识别到第一操作数的任何PER存储变更事件。当B1字段为非零值并且CPU已经处于事务性执行模式时,无法预测是否确定对第一操作数的存储可访问性,并检测到第一操作数的PER存储变更事件。如果B1字段为0,则不访问第一操作数。
除了异常检查之外,还在询问1206判定CPU是否处于事务性执行模式(即,事务嵌套深度为0)。如果CPU未处于事务性执行模式,则在步骤1208保存选定通用寄存器对的内容。具体而言,通用寄存器保存掩码指 定的通用寄存器对的内容保存在不能被程序直接访问的模型相关位置中。
此外,在询问1210判定指令的B1字段是否为0。如果B1字段不等于0,在步骤1214将第一操作数地址放入事务诊断块地址中,并且该事务诊断块地址有效。此外,在步骤1216,从当前PSW的内容设置事务中止PSW。事务中止PSW的指令地址指定下一顺序指令(即,最外层TBEGIN后面的指令)。
此外,在步骤1218确定允许AR修改(A)控件(指令的I2字段的位12)的有效值。对于当前级别和所有外部级别,有效的A控件是TBEGIN指令中A控件的逻辑“与”。此外,在步骤1220确定允许浮点运算(F)控件(指令的I3字段的位13)的有效值。对于当前级别和所有外部级别,有效的F控件是TBEGIN指令中F控件的逻辑“与”。此外,在步骤1222确定程序中断过滤控件(PIFC)(指令的I2字段的位14-15)的有效值。对于当前级别和所有外部级别,有效的PIFC值是TBEGIN指令中的最高值。
另外,在步骤1224将值“1”加到事务嵌套深度,然后在步骤1226,指令以设置条件码0完成。如果事务嵌套深度从0转变为1,则CPU进入非受限事务性执行模式;否则,CPU停留在非受限事务性执行模式。
返回到询问1210,如果B1等于0,在步骤1211确认事务诊断地址无效,并且处理继续执行步骤1218。类似地,如果在询问1206确定CPU处于事务性执行模式,处理继续执行步骤1218。
执行TBEGIN的结果条件码例如包括:
0事务启动成功
1--
2--
3--
程序异常例如包括:
*访问(存储,第一操作数)
*操作(未安装事务性执行工具)
*特殊操作
*指定
*事务受约束(由于受限指令)
在一个实施例中,上面提供的异常检查可以以变化的顺序执行。异常检查的一种特殊顺序如下所示:
*与一般情况的程序中断条件的优先级相同的异常。
*由于保留的PIFC值导致的指定异常。
*由于第一操作数地址不在双字边界上导致的指定异常。
*访问异常(当B1字段为非零值时)
*由于超过最大事务嵌套深度导致的中止。
*由于正常完成导致的条件码0。
注意:
1.当B1字段为非零值时,应用以下规则:
*当启动最外层事务时,提供可访问事务诊断块(TDB)—即使事务永不中止。
*由于无法预测是否针对嵌套事务测试TDB的可访问性,因此,应该针对任何嵌套的TBEGIN指令提供可访问的TDB。
*其中B1字段为非零值的任何TBEGIN的执行、针对其中B1字段为非零值的最外层TBEGIN启动的事务发生的任何中止处理的执行可以慢于当B1字段为零时的执行。
2.在一个实施例中,只有在事务中止,而非当事务通过TRANSACTION END正常结束时,才恢复被指定通过通用寄存器保存掩码保存的寄存器。只有由最外层TRANSACTIONBEGIN指令的GRSM指定的寄存器才在中止时被恢复。
I2字段应该指定所有提供由事务更改的输入值的寄存器对。因此,如果事务中止,输入寄存器值将在进入中止处理机时恢复到其原始内容。
3.希望在TRANSACTION BEGIN(TBEGIN)指令之后执行判定事务是否成功启动的条件分支指令。
4.如果事务由于未导致中断的条件而中止,则由事务中止PSW指定的指令接收控制(即,最外层TRANSACTION BEGIN(TBEGIN)之后的指令)。除了通过TRANSACTION BEGIN(TBEGIN)指令设置的条件码之外,当事务中止时,另外还会设置条件码1-3。
因此,最外层TRANSACTION BEGIN(TBEGIN)指令后面的指令序列应该能够包含所有四个条件码,尽管在该实例中,TBEGIN指令仅设置代码0。
5.在多数模型上,可通过指定需要在通用寄存器保存掩码中保存和恢复的最小寄存器数量,同时在TRANSACTION BEGIN上以及在事务中止时实现性能提升。
6.当处于非受限事务性执行模式时,程序可以调用可修改访问寄存器或浮点寄存器(包括浮点控制寄存器)的服务功能。虽然此类服务例程可以在进入时修改寄存器并在退出时恢复它们,但是在正常退出例程之前,事务可能已中止。当CPU处于非受限事务性执行模式时,如果调用程序不采取措施来保护这些寄存器,就有可能无法容忍服务功能修改寄存器。
为了防止在处于非受限事务性执行模式时无意间修改访问寄存器,程序可以将允许AR修改控件(TRANSACTION BEGIN指令的I2字段的位12)设为0。类似地,为了防止无意间修改浮点寄存器,程序可以将允许浮点运算控件(TBEGIN指令的I2字段的位13)设为0。
7.在执行TRANSACTION BEGIN(TBEGIN)指令期间识别的程序异常条件受任何外部TBEGIN指令设置的有效程序中断过滤控件的影响。在执行最外层TBEGIN指令期间识别的程序异常条件不受过滤的影响。
8.为了以序列化方式更新多个存储位置,传统的代码序列可以采用锁字(信号量)。如果(a)使用事务性执行实现多个存储位置的更新,(b)程序还提供在事务中止时调用的“回退”路径,以及(c)回退路径采用锁字,则事务性执行路径也应该测试锁的可用性,如果锁不可用,借助TRANSACTION END指令结束事务并转移到回退路径。这确保对序列化资源的一致访问,而不考虑它们是否以事务的方式被更新。
备选地,如果锁不可用,程序可中止,但是中止处理可能显著慢于简单地经由TEND结束事务。
9.如果有效的程序中断过滤控件(PIFC)大于0,则CPU过滤多数数据异常程序中断。如果有效的允许浮点运算(F)控制为0,作为由于数据异常程序异常条件导致的中止的结果,将不会在浮点控制寄存器中设置数据异常码(DXC)。在此类情况下(应用过滤并且有效的F控件为0),其中检查DXC的唯一位置位于TBEGIN指定的TDB中。如果程序的中止处理机在此类情况下检查DXC,则通用寄存器B1应为非零值,以便设置有效的事务诊断块地址(TDBA)。
10.如果针对最外层TBEGIN指令的TBEGIN指定的TDB存在PER存储修改或0地址检测条件,并且PER事件抑制不适用,则在执行指令期间识别到PER事件,从而导致事务立即中止,而不管是否存在任何其它中止条件。
根据一个方面,TBEGIN指令隐式地将事务中止地址设为TBEGIN之后的下一顺序指令。该地址旨在作为条件分支指令,该指令判定是否根据条件码(CC)执行分支操作。成功的TBEGIN设置CC0,而中止的事务设置CC1、CC2或CC3。
在一个实施例中,TBEGIN指令提供可选的存储操作数,指定在事务中止时存储信息的事务诊断块(TDB)的地址。
此外,它提供立即操作数,包括以下项:
通用寄存器保存掩码(GRSM),指示在事务执行开始时保存哪些通 用寄存器对,以及在事务中止时恢复哪些通用寄存器对;
位(A),允许在事务修改访问寄存器时中止事务;
位(F),允许在事务尝试执行浮点指令时中止事务;
程序中断过滤控件(PIFC),允许个体事务级别在事务中止时绕过程序中断的实际呈现。
A、F和PIFC控件可以在不同的嵌套级别有所不同并在内部事务级别结束时恢复到先前级别。
此外,TBEGIN(或者另一实例中,TBEGINC)用于形成事务标记。可选地,该标记可以与TEND指令形成的标记相匹配。对于每个TBEGIN(或TBEGINC)指令,作为一个实例,从第一操作数地址形成标记。该标记可以独立形成,与基址寄存器是否为0无关(不同于仅在基址寄存器为非零值的情况下才执行的TDB地址设置)。对于使用非零基址寄存器执行的每个TRANSACTION END指令,从其存储操作数形成类似的标记。如果标记不匹配,可以识别程序异常并修改未配对指令的程序。
标记匹配提供的机制旨在通过确保TEND语句正确地与TBEGIN(或TBEGINC)配对来提高软件的可靠性。当TBEGIN指令在特定嵌套级别执行时,从识别该事务实例的存储操作数地址形成标记。当对应的TEND指令执行时,从该指令的存储操作数地址形成标记,并且CPU将该嵌套级别的开始标记与结束标记进行比较。如果标记不匹配,将识别到异常条件。一种模型可以仅针对特定数量的嵌套级别(或不针对任何嵌套级别)实现标记匹配。标记可以不涉及存储操作数地址的所有位,或者可以通过散列运算或其它方法组合各个位。可以由TBEGIN指令形成标记,即使未访问其存储操作数也是如此。
简言之,非受限事务的处理如下所示:
*如果TND=0:
)如果B1γ0;从第一操作数地址设置事务诊断块地址。
)事务中止PSW被设为下一顺序指令地址。
)由I2字段指定的通用寄存器对保存在模型相关的位置中。
-不可被程序直接访问
*计算有效的PIFC、A和F控件
)有效的A=TBEGIN A加任何外部A
)有效的F=TBEGIN F加任何外部F
)有效的PIFC=max(TBEGIN PIFC,任何外部PIFC)
*事务嵌套深度(TND)递增
*如果TND从0转变为1,CPU进入事务性执行模式
*条件码被设为0
)当TBEGIN后面的指令接收控制时:
-CC0指示TBEGIN成功
-非零CC指示中止的事务
*异常:
)如果超过嵌套深度,出现中止码13
)如果B1字段为非零值,出现访问异常(各种PIC之一),并且无法针对存储操作访问存储操作数
)如果TBEGIN指令是执行型指令的目标,出现执行异常(PIC0003)
)如果未安装事务性执行工具,出现操作异常(PIC0001)
)如果发生下面任一情况,出现PIC0006
-PIFC无效(值为3)
-第二操作数地址未双字对齐
)如果事务执行控件(CR0.8)为0,出现PIC0013hex
)如果在受限TX模式中发出,出现PIC0018hex
如上所述,受限或非受限事务可以由TRANSACTION END(TEND)指令结束。将参考图13描述有关事务结束(TEND)指令的处理的进一步细节。执行TEND的CPU(即,处理器)执行图13的逻辑。
参考图13,首先,根据获取(例如,取回、接收等)TEND指令的处理器,执行各种异常检查并且如果在询问1300确定具有异常,则在步骤1302处理异常。例如,如果TRANSACTIONEND是执行型指令的目标,则抑制操作并且识别到执行异常;如果事务性执行控件(CR0的位8)为0,则识别到特殊操作异常并抑制操作。进一步地,如果配置中未安装事务性执行工具,则识别到操作异常并抑制操作。
返回到询问1300,如果未识别到异常,则在步骤1304,递减事务嵌套深度(例如,递减1)。在询问1306判定事务嵌套深度在递减之后是否为0。如果事务嵌套深度为0,则在步骤1308提交事务(以及该事务所属的事务嵌套内的其它事务(如果有))所进行的所有存储访问。此外,在步骤1310,CPU离开性事务执行模式,不强在步骤1312,指令完成。
返回到询问1306,如果事务嵌套深度不等于0,则TRANSACTION END指令恰好完成。
如果CPU在操作开始时处于事务性执行模式中,则将条件码设为0;否则将条件码设为2。
需要注意,有效的允许浮点运算(F)控件、允许AR修改(A)控件,以及程序中断过滤控件(PIFC)被重置为它们各自在执行TRANSACTION BEGIN指令(启动正在结束的级别)之前的值。此外,在操作完成时执行序列化功能。
在完成最外层TRANSACTION END指令时识别到的PER指令取回和事务结束事件不会导致事务中止。
在一个实例中,TEND指令还包括基址字段B2和位移字段D2,它们组合(例如,相加)以产生第二操作数地址。在该实例中,可以执行标记 匹配。例如,当为B2非零值时,将第二操作数地址的选定位与由对应TBEGIN形成的事务标记进行匹配。如果失配,则出现异常(例如,PIC0006)。
除了上述方式之外,还可由TRANSACTION ABORT指令隐式或显式地中止事务。通过TABORT或其它方式中止事务包括执行多个步骤。总体上参考图14描述用于中止处理的步骤的一个实例。如果在基于中止是通过TABORT还是通过其它方式启动的处理中存在差别,这将在下面的描述中指出。在一个实例中,处理器(例如,CPU)执行图14的逻辑。
参考图14,首先,根据TABORT指令的执行或隐式中止,在步骤1400提交当CPU处于事务性执行模式时做出的非事务性存储访问。在步骤1402,丢弃当CPU处于事务性执行模式时做出的其它存储(例如,事务性存储)。
在步骤1404,CPU离开事务性执行模式,后续存储以非事务的方式发生。在步骤1406,当前PSW被事务中止PSW的内容取代,除了根据上面的描述设置条件码之外(与下面的情况不同,在下面的情况中,如果TDBA有效,但是块不能访问,则CC=1)。作为中止处理之后的一部分,处理转移到事务中止PSW指定的位置以执行操作。在其中事务为受限事务的一个实例中,该位置为TBEGINC指令,并且操作为重新执行该指令;在其中事务为非受限事务的另一实例中,该位置为TBEGINC后面的指令,并且操作为执行该指令,此操作例如可以是到中止处理机的分支。
接着,在询问1408判定事务诊断块地址是否有效。当事务诊断块地址有效时,在步骤1410,将标识中止原因和通用寄存器内容的诊断信息存储在TBEGIN指定的事务诊断块中。所存储的TDB字段以及存储它们所依据的条件已在上文参考事务诊断块进行了描述。
如果事务诊断块地址有效,但是该块已变得不可访问,则在执行最外层TBEGIN指令之后,不访问该块,并且应用条件码1。
对于由于导致中断的程序异常条件而中止的事务,存储程序中断TDB。
返回询问1408,如果事务诊断块地址无效,则不存储任何TBEGIN指定的TDB并应用条件码2或3,具体取决于中止原因。
除了上述步骤之外,在步骤1412将事务嵌套深度设为0。此外,在步骤1414恢复被指定通过最外层TBEGIN指令保存的任何通用寄存器对。未被指定通过最外层TBEGINC指令保存的通用寄存器对不会在事务中止时被恢复。
此外,在步骤1416执行序列化功能。序列化功能或操作包括由CPU完成所有概念上在前的存储访问(以及,例如对于z/Architecture,完成相关引用位和变更位设置),如其它CPU或I/O子系统观察到的那样,然后执行概念上在后的存储访问(以及相关引用位和变更位设置)。序列化影响CPU对存储设备和存储键的所有访问的顺序,除了与ARI表项和DAT表项取回关联的那些访问以外。
处于事务性执行模式中的CPU将观察到,序列化正常执行(如上所述)。其它CPU或I/O子系统将观察到,当TRANSACTION END指令将事务嵌套深度递减为0(正常结束),或者事务中止导致CPU离开事务性执行模式时,将发生在CPU处于事性务执行模式期间执行的序列化操作。
对于通过TABORT之外的方式启动的中止处理,如果在询问1418确定由于导致中断的异常条件造成事务中止,则在步骤1420,将与中断关联的中断码或参数存储在对应于中断类型的已分配存储位置。此外,在步骤1422将上述设置的当前PSW存储在中断的旧PSW中。之后,或者如果事务未因导致中断的异常条件而中止,则指令以条件码0结束。
除了上述步骤之外,在z/Architecture的解释执行的一个实施例中,当CPU处于事务性执行模式并且发生来宾条件(通常导致拦截码4、12、44、56、64、68或72)时,不会发生拦截。而是,CPU停留在解释执行模式,并且通过以下方式向来宾指示中止条件:
*对于非受限事务,事务因为受限指令(中止码11)而中止。如果检
测到并发PER事件并且针对PER启用了CPU,则以中断码0280hex
发生程序中断。
*对于受限事务,识别到事务受限异常。如果检测到并发PER事件并
且针对PER启用了CPU,则以中断码0298hex发生程序中断。
当事务因为程序异常条件而中止时,程序中断过滤可以禁止呈现中断。对于可导致拦截的程序中断,过滤还禁止拦截。
在一个实施例中,在事务中止之后,可以重新执行事务以尝试成功完成事务。为了促进成功完成,可执行一个或多个选定操作以限制计算环境内的处理,然后重新执行事务以促进事务的成功完成。选定操作例如可以基于事务中止的次数。此外,随着事务中止的次数增加,可以采取额外的操作以进一步限制处理。而且,随着事务的中止次数增加,可执行更严厉的或更具限制性的操作。
典型地,事务性存储器架构不提供有关事务完成的保证。因此,需要依赖软件在事务重复中止的情况下提供回退路径。但是,对于某些事务,例如在一个实施例中的受限事务,由硬件(例如,硅硬件和/或固件)确保事务最终完成,即,事务仅中止有限次。
参考图15描述用于促进事务成功完成的逻辑的概述的一个实施例。在一个实例中,诸如检测中止的处理器之类的处理器执行该逻辑。在该实施例中,事务为受限事务;但是,在其它实施例中,它可以是其它类型的事务,其中包括非受限事务。
参考图15,首先,在步骤1500,处理器执行由TBEGINC指令开始的受限事务。如果在询问1502遇到未导致中断的中止条件,则在步骤1504,处理器如在此描述的那样,可选地(例如,根据中止次数和/或中止原因)采取一个或多个操作,以确保完成。此外,在步骤1506,处理器重新执行TBEGINC指令,然后处理继续执行步骤1500。
返回到询问1502,如果没有中止条件或者具有导致中断的中止条件,处理将继续执行,直到在询问1508完成事务(例如,TEND)或中断。如果中断,则CPU加载与中断类型关联的PSW。根据完成或中断,事务结束;否则,继续执行处理。
在此描述有关选择和执行操作以促进事务完成的进一步细节。在一个实施例中,提供一项或多项技术来促进事务完成,例如包括:(a)管理中止计数器并根据达到阈值中断次数而呈现程序中断;(b)提升到阻止在同一处理器上乱序执行的指令导致事务冲突;和/或(c)停止(lock-out)冲突的处理器。这些技术中的每一项可以单独使用或以某种组合使用,并且每一项将在下面详细地进行描述。
在一个实施例中,为了帮助促进事务成功执行,使用事务中止次数计数器。该计数器例如由中止处理机维护,该处理机例如通过固件或者硬件和/或软件实现。当事务中止时,递增与该事务关联的计数器。当达到中止阈值时,呈现中断。但是,在该点之前,可采取其它操作提高成功完成事务的几率。所采取的操作接着限制计算环境内(例如,执行事务的处理器内或其它处理器内)的处理。在一个实例中,一个或多个操作在处理事务期间限制处理器能够采取的操作(即,处理器能够执行处理的方式)。随着中止次数的增加,选定操作的严厉性或主动性也可增加。
参考图16A描述有关中止计数器和在达到阈值(即,预定值)时呈现程序中断的进一步细节的一个实施例。图16A的逻辑由诸如启动事务的处理器之类的处理器执行。
参考图16A,首先,在步骤1600将特定事务的中止计数器(在此也被称为计数器)设为0,在步骤1602,启动事务。在一个实例中,该事务为受限事务,因此,该事务由TBEGINC指令启动。
在询问1604,判定事务是否成功结束。如果事务成功结束(例如,通过TEND),则在步骤1606重置计数器(例如,设为0),然后处理完成。但是,如果事务已中止,则在询问1608,询问中止是否由使程序进入其它程序位置的中断(例如,程序中断、I/O中断)造成。如果是,在步骤1610,将指令地址设为新位置(即,TBEGINC位置以外的位置),在步骤1606,重置计数器,然后处理结束。
另一方面,如果在询问1608判定中止并非由中断导致,而是由立即返回到TBEGINC指令以重试事务的中止条件导致,则在询问1612进一步 判定中止计数器是否处于阈值(在此也被称为最大值或预定值)。如果中止计数器处于阈值,则在步骤1614呈现中断,并且在步骤1606重置计数器,然后处理结束。
但是,如果中止计数器未处于阈值,则在步骤1616,递增计数器(例如,计数器=计数器+1),并且在询问1618判定是否采取操作以提高成功完成的几率。即,根据中止计数,在重试事务之前,可采取某些操作,其中包括在处理器中设置特殊模式以提高重试时成功完成事务的几率。这将在下面更详细地描述。
如果要采取操作,则在步骤1620执行操作。之后,或者如果不执行操作,则在步骤1622,将程序指令地址设为TRANSACTION BEGIN指令。然后在步骤1624重试事务。
参考图16B描述有关确定是否应采取操作来增加重新执行事务的成功完成几率的逻辑的进一步细节。该逻辑由处理器(例如执行图16A中的逻辑的处理器)执行。
首先,在步骤1640通过中止计数器检查事务中止的次数。在询问1641确定中止计数是否支持采取操作来促进事务的执行。例如,如果中止计数小于4,则在一个实例中,不采取任何操作,仅重试事务并且递增计数器。但是,在该实例中,如果计数为4或更大,则中止计数支持采取操作。因此,处理继之以在询问1642判定中止计数是否支持在处理器内采取操作以提高成功完成已中止的事务的几率。例如,在一个实施例中,当执行事务时,允许处理器执行正常推测或推测性处理(例如,乱序执行,分支预测、预取等)。预测性执行可能导致事务中止,例如,因为预测性访问可导致与事务的冲突。此类冲突可以例如由于以下原因发生:a)在程序的推测性路径上访问太多不同的高速缓存线;b)推测性指令从作为事务性存储占用(footprint)一部分的高速缓存线执行取回操作;和/或c)访问与实际事务占用同义的虚拟地址。
为了防止在同一推测性路径上重复“绊倒”,当中止计数增加时,连续应用各种操作(也被称为处理器模式或模式)。这些操作连续应用,因 为每个操作致使处理变缓,从而过早启用将导致性能降低。下面介绍在不同的中止计数实例处应用的模式。需要指出,计数中没有重叠;因此,可采取一个或多个操作。在一个实施例中,针对特定计数的所有操作例如并发执行。在另一实施例中,当没有重叠时,例如,根据从列表中按顺序选择、基于选定功能的随机选择,以及通过其它技术实现从众多操作中选择一个操作。
在一个实施例中,当继续到中止计数的下一级别时,选定的操作取代上一操作。例如,启用之前禁用的任何功能,然后采取新操作。但是,在另一实施例中,新操作是之前操作的补充。因此,如在此使用的那样,另一操作取代之前操作,作为之前操作的补充,或它们的组合。此外,可以执行与之前操作相同或不同的操作。
下面列出可以在特定计数处执行的操作实例:
计数 操作
8-20禁用分支预测(例如,经由切换器)。
8-20禁用在当前指令的高速缓存线边界外执行推测性指令取回。通过在流水线后端为空时仅允许指令取回时的高速缓存线边界跨越来实现。
8-20禁用超标量分派(例如,经由切换器)。
8-20禁用乱序执行(例如,经由切换器)。
8-20独占地取回所有高速缓存未命中,即使对于仅取回请求也是如此。
21-23在整个流水线中,一次执行一个指令(慢模式)。
24-28禁用超标量分派(例如,经由切换器)。
32-63在整个流水线中,一次执行一个指令,并独占地取回所有高速缓存未命中。
在还将计数器重置为0的相同条件下,每次升级都被自动重置为“正常模式”(全速模式)。
如果中止计数支持在处理器内采取操作,则在步骤1644,根据中止计数以及任何其它所需的选择准则选择操作,然后执行此选定操作。在另一实施例中,可选择并执行一个或多个操作。在一个实施例中,通过固件执行操作,该固件设置启用特殊处理模式的硬件位(例如,禁用分支预测等)。在重置计数器的相同条件下,硬件自动重置该位。
返回到询问1642,但是,如果中止计数不支持在处理器内采取操作,则在步骤1646,针对其它冲突的处理器采取操作。即,在多处理器环境中,事务可以因为与其它处理器执行的访问发生冲突而中止。这些其它访问可以是事务性访问,也可以是非事务性访问。在一个实例中,在重新尝试事务之前插入随机延迟(即,将事务的重新执行延迟特定时间量或延迟特定的机器周期数等);如果事务只是与其它事务发生冲突,通过此技术,并且可通过连续扩大随机延迟范围,事务最终有可能完成。但是,此技术无助于解决与其它非中止或非事务性访问的冲突。因此,根据一个实施例,在特定中止计数(例如,计数4-15)处提供随机延迟作为试探,这将减少调用更严厉的技术的次数。
根据一个实施例,如果中止计数导致上述同一处理器内的其它升级或随机延迟不成功,则在一个实施例中,应用信号量(例如,锁)以对其它处理器进行互锁。参考图16C描述此处理的一个实例。图16C的逻辑由处理器(例如执行图16A-16B中的逻辑的处理器)执行。
参考图16C,在一个实施例中,根据达到特定中止计数(例如,24-63)或级别,在步骤1660调用固件例程以在步骤1662获取信号量。在特殊系统存储位置处保存信号量,并且固件例如使用比较并交换(Compare and Swap)机制获取信号量。如果信号量忙碌(即,另一处理器已经拥有它,因为该处理器也由于重复的事务中止升级到此模式),则处理器等待,除了该信号量之外而不访问任何存储位置。
一旦获取信号量,便在步骤1664,将中断广播发送到所有其它处理器。其它处理器接收中断,并在接收中断时检查信号量,然后等待直至信号量再次被清除。在等待期间,除了信号量之外,它们不访问任何存储位置。一旦信号量被清除或释放(例如,被设为0),其它处理器便从它们被中断的位置继续。如果中断在事务内部发生,则事务中止并重新开始。
在步骤1666,发送广播的处理器离开固件例程并重试事务。它可以执行多次重试,因为其它处理器可能不会立即停止。但是,所有其它处理器最终都将等待信号量;因此,不与处理器发生进一步的冲突,并且事务最终完成。
在询问1668,当发送处理器结束事务(例如,成功的TEND完成),或者发生导致不再重试事务的中断(例如,程序中断)时,在步骤1670,固件例程通过在其中存储0而重置信号量,从而有效地释放其它处理器以继续它们的工作。
在另一实施例中,可使用多个信号量位置。此外,在一个实施例中,并非使用广播中断对所有处理器进行寻址,只对那些不太可能导致冲突的处理器进行寻址。一个实施例将中断所有属于系统管理程序环境中的同一虚拟系统(例如,同一分区或LPAR)的处理器。如果在中断所有可能的处理器之后,事务仍不能完成,并且达到第二阈值计数,处理器然后可以获取主信号量并中断所有处理器。其它变型也是可能的。
上面描述了在重复中止之后促进事务成功完成的实施例。在一个实施例中,硬件维护提供事务中止频率计数的计数器。每当事务中止时,计数器都会递增计数,在事务成功完成或者出现导致不再重新执行事务的中断时,计数器重置为0。如果计数达到阈值(例如,计数为63),则呈现中断,事务执行不成功,并且重置计数器。但是,在计数达到阈值之前,可以采取多个操作以提高成功执行事务的几率。这些操作包括在执行事务的处理器内执行的操作和/或针对发生冲突的处理器(CPU)执行的操作。
在同一处理器内,可执行以下一个或多个操作,具体取决于中止计数和针对具有相同或重叠中止计数的操作的选择准则:重新执行事务(计数 1-3);禁用分支预测(计数8-20);禁用在当前指令的高速缓存线边界之外执行推测性指令取回(计数8-20);禁用超标量分派(计数8-20);禁用乱序执行(计数8-20);独占地取回所有高速缓存未命中,即使对于仅取回请求也是如此(计数8-20);在整个流水线中,一次执行一个指令(计数21-23);禁用超标量分派(计数24-28);以及在整个流水线中,一次执行一个指令,并独占地取回所有高速缓存未命中(计数32-63)。在采用一部分这些操作时,针对重复性事务中止而连续限制处理器流水线的推测主动性。根据事务的成功完成或不再导致事务重试的中断而恢复处理器流水线的完全推测主动性。
如果事务在执行一个或多个上述操作之后继续中止并且计数达到选定值或级别,则可以针对发生冲突的处理器采取操作。例如,在中止4-15,可执行随机延迟;以及在中止16-23,可针对该处理器执行所在的分区(例如,LPAR区域)中的其它处理器获取信号量,因此,停止其它处理器处的操作。类似地,在计数24-63,可针对整个系统获取信号量,其中系统中的所有处理器都要停止操作,直到信号量清除。在此处理模式中,根据达到其中要获取信号量的选定级别,调用固件例程以便例如使用比较并交换机制获取信号量。获取信号量时,将中断广播到相应的处理器(例如,同一分区内的处理器或系统中的所有处理器,或者其它子集)。然后,处理器离开固件例程并重新执行事务一次或多次,直到成功完成或中断。当已成功完成事务或不再重试事务时,重置信号量。
通过执行上述一个或多个操作,至少促进事务的成功执行。这些操作可以针对不同类型的事务执行,其中包括受限事务和非受限事务。在一个实施例中,针对受限事务使用上述技术确保成功完成事务,假设此类完成是可能的(例如,不违反约束限制或不具有其它某种违规)。
尽管在上面的实施例中,根据中止计数选择操作,但是在其它实施例中,可以根据中止原因和/或根据计数选择操作。因此,可以认为根据中止条件采取操作,其中所述条件为计数、中止原因或计数与中止原因的组合。例如,处理器可以检测到中止由另一CPU造成,然后获取信号量。此检测 可以与计数相结合,例如“如果中止>16并且中止源于与另一CPU发生冲突→获取信号量”。存在许多变型和可能性。
在一个实例中,根据计数器达到事务的阈值中止数而自动重置用于跟踪中止次数的计数器,从而导致呈现中断,或者针对其中不重新执行事务的事务呈现中断。
除了促进事务执行,上面还提供了在没有典型(粗粒度)序列化(例如,锁定)的情况下更新存储器中的多个非连续对象的有效方式,此方式提供了显著提升多处理器性能的可能。即,在不实施典型技术(例如,锁和信号量)提供的更粗粒度存储访问排序的情况下更新多个非连续对象。所提供的推测性执行没有繁杂的恢复设置,并且针对简单的小占用更新提供了受限事务。
事务性执行可用于各种情况,其中包括—但不限于—部分内联(partialinlining)、推测性处理和锁省略。在部分内联的情况下,要包括在执行路径中的部分区域封装在TBEGIN/TEND内。TABORT可包括在其中以在侧面退出时回滚状态。为进行推测,例如在Java中,可通过使用事务将针对解引用指针的空检查延迟到循环边缘。如果指针为空,则可使用TABORT安全地中止事务,该指令包括在TBEGIN/TEND内。
对于锁省略,将参考图17A-18A描述其使用的一个实例并且下面提供了代码段。
图17A示出多个队列元素1702a-1702d的双向链表1700。要将新队列元素1702e插入队列元素的双向链表1700。每个队列元素1702a-1702e包括正向指针1704a-1704e以及反向指针1706a-1706e。如图17B所示,为在队列元素1702b与1702c之间插入队列元素1702e,(1)将反向指针1706e设为指向队列元素1702b,(2)将正向指针1704e设为指向队列元素1702c,(3)将反向指针1706c设为指向队列元素1702e,以及(4)将正向指针1704b设为指向队列元素1702e。
下面是对应于图17A-17B的代码段实例:
*R1-要插入的新队列元素地址。
*R2-插入点地址;新元素插在R2指向的元素前。
在一个实例中,如果事务用于锁省略,但是回退路径使用锁,则事务至少取回锁字以查看它是否可用。如果另一CPU以非事务的方式访问锁,则处理器确保该事务中止。
如此处使用的那样,存储设备、中央存储设备、主存储设备、存储器和主存储器可以互换地使用,除非另外通过使用暗示指出或显式指出。此外,尽管在一个实施例中,事务有效地延迟包括延迟将事务性存储提交到 主存储器,直到完成选定事务;但是在另一实施例中,有效地延迟包括允许对存储器进行事务更新,但是保留旧值并在中止时将存储器恢复到旧值。
所属技术领域的技术人员知道,一个或多个方面可以实现为系统、方法或计算机程序产品。因此,一个或多个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、驻留软件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“系统”。此外,在一些实施例中,一个或多个方面还可以实现为在一个或多个计算机可读介质中的计算机程序产品的形式,该计算机可读介质中包含计算机可读的程序代码。
可以采用一个或多个计算机可读介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是—但不限于—电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
现在参考图18,在一个实例中,计算机程序产品1800例如包括一个或多个非瞬时性计算机可读存储介质1802,以便在其上存储计算机可读程序代码装置或逻辑1804,从而提供并促进一个或多个实施例。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括—但不限于—无线、有线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言的任意组合来编写用于执行一个或多个实施例的操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在 用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
在此参照方法、装置(系统)和计算机程序产品的流程图和/或框图描述一个或多个实施例。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机程序指令实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得这些指令在通过计算机或其它可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。
也可以把这些计算机程序指令存储在计算机可读介质中,这些指令使得计算机、其它可编程数据处理装置、或其它设备以特定方式工作,从而,存储在计算机可读介质中的指令就产生出包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的指令的制造品(article of manufacture)。
也可以把计算机程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机或其它可编程装置上执行的指令能够提供实现流程图和/或框图中的一个或多个方框中规定的功能/操作的过程。
附图中的流程图和框图显示了根据各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能可以以 不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
除了上述,一个或多个方面可由服务提供商提供、许诺(offer)、部署、管理、服务等,该服务提供商提供用户环境的管理。例如,服务提供商可创建、维持、支持等计算机代码和/或计算机基础设施,其为一个或多个用户执行一个或多个方面。反过来,服务提供商可例如根据预订和/或费用协议从用户接受付费。额外地或可替换地,服务提供商可从向一个或多个第三方销售广告内容接受付费。
在一个方面,可部署用于执行一个或多个实施例的应用。作为一个例子,部署应用包括提供计算机基础设施,其可操作以执行一个或多个实施例。
作为又一个方面,可部署计算基础设施,其包括将计算机可读代码集成到计算机系统,其中与计算系统结合的代码能够执行一个或多个实施例。
作为再一个方面,可提供用于集成计算基础设施包括将计算机可读码集成到计算机系统的过程。计算机系统包括计算机可读介质,其中计算机介质包括一个或多个实施例。与计算机系统结合的代码能够执行一个或多个实施例。
尽管上面描述了各种实施例,但这些只是实例。例如,可以使用其它架构的计算环境。此外,可以使用不同的指令、指令格式、指令字段和/或指令值。此外,可以提供/使用不同、其它和/或额外的操作。此外,可以在不同的中止计数和/或根据各种中止原因来选择操作。可能具有许多变型。
而且,其它类型的计算环境可受益于一个或多个方面并被使用。作为例子,可使用适于存储和/或执行程序代码的数据处理系统,其包括至少两个通过系统总线直接或间接耦合到存储元件的处理器。存储元件包括,例 如,在程序代码的实际执行期间使用的本地存储器、大容量存储器以及高速缓冲存储器,其提供至少一些程序代码的临时存储,以便减少在执行期间必须从大容量存储器取回代码的次数。
输入/输出或I/O设备(包括但不限于键盘、显示器、指点设备、DASD、磁带、CD、DVD、拇指驱动器(thumb drive)以及其它的存储介质等)可直接或通过介于其间的I/O控制器被耦合到系统。网络适配器也可被耦合到系统以使得数据处理系统能够通过介于其间的私有或公共网络而耦合到其它的数据处理系统或远程打印机或存储设备。调制解调器、电缆调制解调器和以太网卡仅是一些可获得的网络适配器类型。
参考图19,示出了用于实现一个或多个实施例的主计算机系统5000的代表性组件。代表性主计算机5000包括一个或多个与计算机存储器(即,中央存储设备)5002通信的CPU5001,以及到存储介质设备5011和网络5010的I/O接口,以便与其它计算机或SAN等通信。CPU5001与具有架构指令集和架构功能的架构兼容。CPU5001可以具有存取寄存器转换(ART)5012,其包括ART后备缓冲器(ALB)5013,其可选择动态地址转换(DAT)5003用于将程序地址(虚拟地址)转换为存储器的实地址的地址空间。DAT典型地包括转换后备缓冲器(TLB)5007,其用于缓存转换,以便随后对计算机存储器5002的块的访问不需要地址转换的延迟。典型地,在计算机存储器5002和处理器5001之间采用高速缓存5009。高速缓存5009可以是分层的,具有可用于多个CPU的大型高速缓存,以及在大型高速缓存和每个CPU之间的更小、更快(较低级)的高速缓存。在某些实施方式中,拆分较低级高速缓存以提供单独的低级高速缓存,以用于指令取回和数据访问。在一个实施例中,对于TX工具,事务诊断块(TDB)5100以及一个或多个缓冲器5101可以被存储在高速缓存5009和存储器5002的一个或多个中。在一个实例中,在TX模式中,数据初始被存储在TX缓冲器中,并且当TX模式结束(例如,最外层TEND)时,缓冲器中的数据被存储(提交)到存储器,或者如果存在中止,则缓冲器中的数据被丢弃。
在一个实施例中,指令取回单元5004经由高速缓存5009从存储器5002中取回指令。指令在指令解码单元5006中进行解码,并分派(在某些实施例中,与其它指令一起)到一个或多个指令执行单元5008。典型地,采用多个执行单元5008,例如算术执行单元、浮点执行单元以及分支指令执行单元。此外,在TX工具的一个实施例中,可以采用各种TX控件5110。执行单元执行指令,根据需要从指令指定的寄存器或存储器中访问操作数。如果从存储器5002中访问(加载或存储)操作数,则加载/存储单元5005典型地在被执行指令的控制下处理访问。可以在硬件电路或内部微代码(固件)中执行指令,或者由这两者的组合执行指令。
根据TX工具的一个方面,处理器5001还包括PSW5102(例如TX和/或中止PSW)、嵌套深度5104、TDBA5106以及一个或多个控制寄存器5108。
需注意的是,计算机系统包括本地(或主)存储器中的信息,以及寻址、保护以及引用和改变记录。寻址的一些方面包括地址格式、地址空间的概念、地址的各种类型和其中一种类型的地址被转换为另一种类型的地址的方式。一些主存储器包括永久分配的存储位置。主存储器向系统提供直接可被寻址的快速访问的数据存储。数据和程序在可被处理之前都将(从输入设备)被加载到主存储器。
主存储器可包括一个或多个更小、更快速访问的缓冲存储器,有时候被称为高速缓存。高速缓存典型地与CPU或I/O处理器物理地关联。物理结构以及不同存储介质的使用的效果,除了在性能上,通常不会被程序观察到。
可维护用于指令和数据操作数的单独的高速缓存。高速缓存中的信息可被维护为相邻的字节,所述字节位于被称为高速缓存块或高速缓存线(或简称为线)的整数边界上。模型可提供EXTRACT CACHE ATTRIBUTE(提取高速缓存属性)指令,其返回高速缓存线的字节大小。模型也可提供PREFETCH DATA(预取数据)和PREFETCH DATA RELATIVE LONG(预取较长数据)指令,其实现存储到数据或指令高速缓存中的预 取,或数据从高速缓存的释放。
存储器被视为位的长水平串。对于大部分操作来说,以从左到右的顺序进行对存储器的访问。位串被细分为八个位的单位。八位单位被称为字节,其是所有信息格式的基本构件。存储器中的每个字节位置由唯一的非负整数标识,该非负整数是该字节位置的地址,或简称为字节地址。相邻的字节位置具有连续的地址,在左侧从0开始且以从左到右的顺序进行。地址是无符号二进制整数,且是24、31或64位。
信息在存储设备和CPU或通道子系统之间传输,每次一个字节或一组字节。除非另外指定,否则例如在z/Architecture中,存储设备中的一组字节通过组的最左侧字节进行寻址。组中的字节数由要执行的操作隐式或显式指定。当用于CPU操作时,一组字节被称为字段。例如在z/Architecture中,在每组字节中,位按从左到右的顺序编号。在z/Architecture中,最左侧位有时被称为“高阶”位,最右侧位被称为“低阶”位。但是,位编号不是存储地址。仅可以对字节进行寻址。为了处理存储设备中的字节的单独位,将访问整个字节。字节中的位从左到右编号为0至7(例如,在z/Architecture中)。地址中的位可以编号为8-31或40-63(对于24位地址),或者1-31或33-63(对于31位地址);对于64位地址,它们编号为0-63。在一个实例中,位8-31和1-31适用于宽度为32位的位置(例如,寄存器)中的地址,而位40-63和33-63适用于宽度为64位的位置中的地址。在包含多个字节的任何其它固定长度格式中,组成格式的位连续编号,从0开始。为了进行错误检测,并且优选地为了纠正,可以与每个字节或一组字节一起传输一个或多个校验位。此类校验位由机器自动产生,并且无法直接由程序控制。存储容量以字节数表示。当存储操作数字段的长度由指令的操作码暗示时,字段被视为具有固定长度,其可以是一、二、四、八或十六字节。可以针对某些指令暗示较大字段。当存储操作数字段的长度未被暗示而是显式声明时,字段被称为具有可变长度。可变长度操作数可以以一个字节的增量变化(或者对于某些指令,以两字节的倍数或其它倍数变化)。当信息被放在存储设备中时,只有包括在指定字段中的那些 字节位置的内容被取代,尽管到存储设备的物理路径宽度可能大于被存储的字段的长度。
某些信息单元位于存储设备中的整数边界上。对于信息单位,当其存储地址是单位长度(字节)的倍数时,边界被称为整数边界。为整数边界上的2、4、8、16和32字节的字段提供特殊名称。半字是两字节边界上由两个连续字节构成的组,并且是指令的基本构件块。字是四字节边界上由四个连续字节构成的组。双字是八字节边界上由八个连续字节构成的组。四字是16字节边界上由16个连续字节构成的组。八字是32字节边界上由32个连续字节构成的组。当存储地址指定半字、字、双字、四字以及八字时,地址的二进制表示分别包含一、二、三、四或五个最右侧零位。指令位于两字节整数边界上。大多数指令的存储操作数没有边界对齐要求。
在为指令和数据操作数实现单独的高速缓存的设备上,如果程序在高速缓存线中存储且指令被随后从该高速缓存线取回,可经历显著的延迟,不管该存储是否改变随后被取回的指令。
在一个实例中,实施例可被软件(有时候被称为许可的内部代码、固件、微代码、毫代码、微微代码(pico-code)等,其任何一个都将符合一个或多个实施例)实施。参考图19,体现一个或多个实施例的软件程序代码可由主系统5000的处理器5001从长期存储介质设备5011(诸如CD-ROM驱动器、磁带驱动或硬盘驱动器)访问。软件程序代码可体现在与数据处理系统一起使用的各种已知介质(诸如软磁盘、硬盘驱动或CD-ROM)中的任何一个上。代码可在这样的介质上被分发,或可从一个计算机系统的计算机存储器5002或存储设备通过网络5010被分发给其它计算机系统的用户,以由这样的其它系统的用户使用。
软件程序代码包括操作系统,其控制各种计算机组件和一个或多个应用程序的功能和交互。程序代码通常可从存储介质设备5011调页到相对更高速的计算机存储器5002,在此它可用于由处理器5001进行处理。用于在存储器中、物理介质上体现软件程序代码和/或经由网络分发软件代码的技术和方法是公知的,不会在此进一步讨论。当程序代码被创建并存储在 有形介质(包括但不限于电子存储模块(RAM)、闪存、光盘(CD)、DVD、磁带等)上时,其经常被称为“计算机程序产品”。计算机程序产品介质典型地可由优选地位于计算机系统中的处理电路读取以由处理电路执行。
图20示出了可在其中实施一个或多个方面的代表性工作站或服务器硬件系统。图20的系统5020包括代表性基本计算机系统(base computer system)5021,诸如个人计算机、工作站或服务器,包括可选的外围设备。根据已知技术,基本计算机系统5021包括一个或多个处理器5026以及被用于连接并使能处理器5026和系统5021的其它组件之间的通信的总线。总线将处理器5026连接到存储器5025以及可包括例如硬盘驱动器(例如,包括磁介质、CD、DVD和闪存中的任何一个)或磁带驱动器的长期存储器5027。系统5021也可包括用户接口适配器,其经由总线将微处理器5026连接到一个或多个接口设备,诸如键盘5024、鼠标5023、打印机/扫描仪5030和/或其它接口设备,其可以是任何用户接口设备,诸如触摸敏感屏、数字化输入垫(digitized entry pad)等。总线也可经由显示适配器将诸如LCD屏幕或监视器的显示设备5022连接到微处理器5026。
系统5021可通过能与网络5029通信5028的网络适配器与其它计算机或计算机网络通信。示例性网络适配器是通信通道、令牌环网、以太网或调制解调器。或者,系统5021可使用诸如CDPD(蜂窝数字分组数据)卡的无线接口来通信。系统5021可与局域网(LAN)或广域网(WAN)中的这样的其它计算机关联,或系统5021可以是与另一个计算机的客户机/服务器安排中的客户机等。所有这些配置以及合适的通信硬件和软件在本领域中是已知的。
图21示出了其中可实施一个或多个实施例的数据处理网络5040。数据处理网络5040可包括多个单独的网络,诸如无线网和有线网,其每个可包括多个单独的工作站5041、5042、5043、5044。此外,本领域技术人员将理解,可包括一个或多个LAN,其中LAN可包括多个耦合到主处理机的智能工作站。
仍然参考图21,网络也可包括大型计算机或服务器,诸如网关计算机(客户机服务器5046)或应用服务器(远程服务器5048,其可访问数据储存库,且也可直接从工作站5045被访问)。网关计算机5046用作到每个单独网络的进入点。当将一个联网协议连接到另一个时,需要网关。网关5046可通过通信链路优选地耦合到另一个网络(例如因特网5047)。也可使用通信链路将网关5046直接耦合到一个或多个工作站5041、5042、5043、5044。可以利用可从国际商业机器公司获得的IBM eServer System z服务器来实现网关计算机。
同时参考图20和21,可体现一个或多个方面的软件编程代码5031可被系统5020的处理器5026从诸如CD-ROM驱动器或硬盘驱动器的长期存储介质5027访问。软件编程代码可被体现在与数据处理系统一起使用的各种已知介质(诸如软盘、硬盘驱动器或CD-ROM)中的任一个上。代码可在这样的介质上被分发,或从一个计算机系统的存储器或存储设备通过网络被分发到其它计算机系统的用户5050、5051,以供这样的其它系统的用户使用。
备选地,编程代码可体现在存储器5025中,且由处理器5026使用处理器总线访问。这样的编程代码包括操作系统,其控制各种计算机组件和一个或多个应用5032的功能和交互。程序代码通常从存储介质5027调页到高速存储器5025,在此它可用于由处理器5026进行处理。用于在存储器中、在物理介质上体现软件编程代码和/或经由网络分发软件代码的技术和方法是公知的,不会在此进一步讨论。程序代码,当其被创建且在有形介质(包括但不限于电子存储模块(RAM)、闪存、光盘(CD)、DVD、磁带等)上存储时,通常被称为“计算机程序产品”。计算机程序产品介质典型地可以被优选地位于计算机系统中的处理电路读取以由处理电路执行。
最容易被处理器使用的高速缓存(通常比处理器的其它高速缓存更快更小)是最低级(L1或级别1)高速缓存,且主存储(主存储器)是最高级高速缓存(如果有三个级别的话是L3)。最低级高速缓存经常被分为保 持将被执行的机器指令的指令高速缓存(I-高速缓存),和保持数据操作数的数据高速缓存(D-高速缓存)。
参考图22,为处理器5026示出了示例性处理器实施例。典型地,使用一个或多个级别的高速缓存5053来缓冲存储器块,以便改善处理器性能。高速缓存5053是高速缓冲器,其保持很可能被使用的存储器数据的高速缓存线。典型的高速缓存线是64、128或256字节的存储器数据。通常使用单独的高速缓存以用于高速缓存指令而不是高速缓存数据。高速缓存一致性(存储器和高速缓存中的线的副本的同步)通常由本领域中熟知的各种“窥探”算法提供。处理器系统的主存储器5025通常被称为高速缓存。在具有4个级别的高速缓存5053的处理器系统中,主存储器5025有时候被称为级别5(L5)高速缓存,因为它典型地更快,且仅保持可被计算机系统使用的非易失性存储器(DASD、磁带等)的一部分。主存储器5025可“缓存”由操作系统向主存储器5025调页入或从其调页出的数据页。
程序计数器(指令计数器)5061保持跟踪将被执行的当前指令的地址。z/Architecture处理器中的程序计数器是64位的,且可被截短为31或24位以支持先前的寻址边界。程序计数器典型地体现在计算机的PSW(程序状态字)中,这样它可在上下文转换中持续。因此,具有程序计数器值的进行中的程序可被例如操作系统中断(从程序环境到操作系统环境的上下文转换)。当程序不活动时,程序的PSW维持程序计数器值,且在操作系统执行时,操作系统的(PSW中的)程序计数器被使用。典型地,程序计数器以等于当前指令的字节数的量增量。RISC(精简指令集计算)指令典型地是固定长度,而CISC(复杂指令集计算)指令典型地是可变长度。IBM z/Architecture的指令是具有长度为2、4或6字节的CISC指令。程序计数器5061被例如上下文转换操作或分支指令的分支采取操作修改。在上下文转换操作中,当前的程序计数器值与关于正被执行的程序的其它状态信息(诸如条件码)一起被保存在程序状态字中,且新程序计数器值被载入并指向将被执行的新程序模块的指令。执行分支采取操作,以通过将分支指令的结果加载到程序计数器5061中而允许程序进行决定或在程序 内循环。
典型地,使用指令取回单元5055代表处理器5026取回指令。取回单元可取回“下一顺序指令”、分支采取指令的目标指令或上下文转换后的程序的第一指令。现在的指令取回单元通常使用预取技术基于被预取的指令将被使用的可能性来推测性地预取指令。例如,取回单元可取回16字节的指令,其包括下一顺序指令以及进一步的序列指令的额外字节。
取回的指令随后被处理器5026执行。在一实施例中,取回的指令被传递给取回单元的分派单元5056。分派单元解码指令并将关于解码的指令的信息转送给合适的单元5057、5058、5060。执行单元5057将典型地从指令取回单元5055接收关于解码的算术指令的信息,并将根据指令的操作码对操作数执行算术操作。优选地从存储器5025、架构寄存器5059或从正被执行的指令的立即字段(immediate field)向执行单元5057提供操作数。执行的结果,当被存储时,被存储在存储器5025、寄存器5059或其它机器硬件(诸如控制寄存器、PSW寄存器等)中。
使用动态地址转换5062,并且可选地使用存取寄存器转换5063,将虚拟地址转换为实地址。
处理器5026典型地具有一个或多个用于执行指令的功能的单元5057、5058、5060。参考图23A,执行单元5057可通过接口逻辑5071与架构通用寄存器5059、解码/分派单元5056、加载存储单元5060和其它5065处理器单元通信。执行单元5057可使用几个寄存器电路5067、5068、5069来保持算术逻辑单元(ALU)5066将操作的信息。ALU执行诸如加减乘除的算术操作,以及诸如“与”、“或”以及“异或(XOR)”、旋转和移位的逻辑运算。优选地,ALU支持依赖于设计的专门操作。其它电路可提供其它架构工具5072,例如包括条件码和恢复支持逻辑。典型地,ALU操作的结果被保持在输出寄存器电路5070中,该输出寄存器电路可将结果转送到多种其它处理功能。有许多处理器单元安排,本说明书仅旨在提供对一个实施例的代表性理解。
例如,ADD指令将在具有算术和逻辑功能的执行单元5057中被执行, 而例如浮点指令将在具有专用浮点能力的浮点执行中被执行。优选地,执行单元通过在操作数上执行操作码定义的功能在由指令标识的操作数上操作。例如,ADD指令可被执行单元5057在由指令的寄存器字段标识的两个寄存器5059中发现的操作数上执行。
执行单元5057对两个操作数执行算术加法,并在第三操作数中存储结果,其中第三操作数可以是第三寄存器或两个源寄存器中的一个。执行单元优选地利用算术逻辑单元(ALU)5066,其能执行多种逻辑功能,诸如移位、旋转、和、或、异或,以及多种代数函数,包括加减乘除中的任何一个。有些ALU5066被设计为用于标量运算,有些用于浮点。根据架构,数据可以是大端(big endian)(其中最低有效字节位于最高字节地址)或小端(littleendian)(其中最低有效字节位于最低字节地址)。IBMz/Architecture是大端。根据架构,带符号字段可以是符号和幅度、1的补码或2的补码。2的补码数是有利的,其在于ALU不需要设计减法能力,因为不管是2的补码中的负值还是正值,都仅要求ALU中的加法。数字通常以速记描述,其中12位的字段定义了4096字节块的地址,且通常被描述为例如4Kbyte(千字节)块。
参考图23B,用于执行分支指令的分支指令信息典型地被发送到分支单元5058,该分支单元经常使用诸如分支历史表5082的分支预测算法,在其它条件运算完成前预测分支结果。在条件运算完成前,当前分支指令的目标将被取回并推测性地执行。当条件运算完成时,基于条件运算的条件和推测的结果,推测性执行的分支指令或被完成或被丢弃。典型的分支指令可测试条件码,以及如果条件码满足分支指令的分支要求,分支到目标地址,目标地址可基于若干数被计算,所述数包括例如在寄存器字段或是指令的立即字段中找到的数。分支单元5058可利用具有多个输入寄存器电路5075、5076、5077和一个输出寄存器电路5080的ALU5074。分支单元5058可与例如通用寄存器5059、解码分派单元5056或其它电路5073通信5081。
一组指令的执行可由于多个原因中断,所述原因包括例如由操作系统 发起的上下文转换、引起上下文转换的程序异常或错误、引起上下文转换的I/O中断信号或多个程序(在多线程环境中)的多线程活动。优选地,上下文转换动作保存关于当前执行的程序的状态信息,且随后加载关于正被调用的另一个程序的状态信息。状态信息可被保存在例如硬件寄存器或存储器中。状态信息优选地包括指向将被执行的下一个指令的程序计数器值、条件码、存储器转换信息和架构寄存器内容。上下文转换活动可被硬件电路、应用程序、操作系统程序或固件代码(微代码、微微代码或许可内部码(LIC))单独地或其组合实现。
处理器根据指令定义的方法而访问操作数。指令可使用指令的一部分的值提供立即操作数,可提供一个或多个寄存器字段,其显式地指向通用寄存器或专用寄存器(例如浮点寄存器)。指令可利用由操作码字段确定的暗示的寄存器作为操作数。指令可利用用于操作数的存储器位置。可由寄存器、立即字段或寄存器和立即字段的组合提供操作数的存储器位置,如由z/Architecture长位移工具(facility)所例示的,其中该指令定义了基寄存器、索引寄存器和立即字段(位移字段),它们加到一起,以提供例如存储器中的操作数的地址。除非另外指明,此处的位置典型地意味着主存储器(主存储设备)中的位置。
参考图23C,处理器使用加载/存储单元5060访问存储设备。加载/存储单元5060可以通过在存储器5053中获得目标操作数的地址,并在寄存器5059或另一个存储器5053位置中加载操作数,执行加载操作,或者可以通过在存储器5053中获得目标操作数的地址,并将目标操作数位置中从寄存器5059或另一个存储器5053位置中获得的数据存储在存储器5053中,执行存储操作。加载/存储单元5060可以是推测性的,并可以以相对于指令序列而言乱序的顺序访问存储器,但是加载/存储单元5060保持向程序显示指令按顺序执行。加载/存储单元5060可以与通用寄存器5059、解码/分派单元5056、高速缓存/存储器接口5053或其它元件5083通信5084,并包括各种寄存器电路5086、5087、5088和5089、ALU5085以及控制逻辑5090,以便计算存储地址并提供流水线定序以保持操作按顺序。 某些操作可以是乱序的,但加载/存储单元提供功能以使乱序操作对于程序而言看似按顺序执行,如本领域公知的那样。
优选地,应用程序“看到的”地址通常被称为虚拟地址。虚拟地址有时候被称为“逻辑地址”和“有效地址”。这些虚拟地址之所以虚拟,在于它们由多种动态地址转换(DAT)技术中的一种重定向到物理存储器位置,所述动态地址转换技术包括但不限于简单地用偏移值给虚拟地址加前缀、经由一个或多个转换表转换虚拟地址,所述转换表优选地包括至少一个段表和一个页表(单独地或组合地),优选地,段表具有指向页表的项。在z/Architecture中,提供转换分级结构,包括区域第一表、区域第二表、区域第三表、段表和可选的页表。地址转换的性能通常通过利用转换后备缓冲器(TLB)被改善,该转换后备缓冲器包括将虚拟地址映射到相关的物理存储器位置的项。当DAT使用转换表转换虚拟地址时,创建项。于是,虚拟地址的随后使用可利用快的TLB的项,而不是慢的顺序转换表访问。TLB内容可由包括LRU(最少最近使用)的多个替换算法来管理。
在处理器是多处理器系统的处理器的情况下,每个处理器具有保持共享资源的责任,所述共享资源诸如I/O、高速缓存、TLB和存储器,它们互锁以实现一致性。典型地,“窥探”技术将被用于维持高速缓存一致性。在窥探环境中,每个高速缓存线可被标记为正处于共享状态、独占状态、改变状态、无效状态等中的一个,以便有助于共享。
I/O单元5054(图22)向处理器提供用于附加到例如包括磁带、盘、打印机、显示器和网络的外围设备的装置。I/O单元通常由软件驱动器向计算机程序呈现。在诸如来自的System z的大型计算机中,通道适配器和开放系统适配器是提供操作系统和外围设备之间的通信的大型计算机的I/O单元。
而且,其它类型的计算环境可受益于一个或多个方面。作为例子,环境可包括仿真器(例如,软件或其它仿真机制),其中特定架构(包括例如指令执行、诸如地址转换的架构功能、以及架构寄存器)或其子集被仿真(例如,在具有处理器和存储器的本机计算机系统中)。在这样的环境 中,仿真器的一个或多个仿真功能可实施一个或多个实施方式,即使执行仿真器的计算机可具有与正被仿真的能力不同的架构。作为一个例子,在仿真模式中,解码正被仿真的特定指令或操作,且建立合适的仿真功能以实施单个指令或操作。
在仿真环境中,主计算机包括例如存储器以存储指令和数据;指令取回单元以从存储器取回指令,且可选地,提供用于取回的指令的本地缓冲;指令解码单元以接收取回的指令并确定已被取回的指令的类型;以及指令执行单元以执行该指令。执行可包括将数据从存储器加载到寄存器;从寄存器将数据存储回存储器;或执行如由解码单元确定的某种类型的算术或逻辑运算。在一个例子中,每个单元在软件中实现。例如,被所述单元执行的操作被实现为仿真器软件中的一个或多个子例程。
更具体地,在大型计算机中,程序员(通常是如今的“C”程序员)一般通过编译器应用使用架构机器指令。存储在存储介质中的这些指令可以在z/Architecture服务器中本机地执行,或在执行其它架构的机器中执行。它们可在现有的和未来的大型计算机服务器以及的其它机器(例如,Power Systems服务器和System x服务器)中被仿真。它们可在使用由AMD等制造的硬件的各种机器上运行Linux的机器中被执行。除了在z/Architecture下的该硬件上执行,Linux也可被用于这样的机器,其使用由Hercules,UMX或FSI(Fundamental Software,Inc)(其中一般地执行是处于仿真模式中)提供的仿真。在仿真模式中,仿真软件由本机处理器执行以仿真被仿真处理器的架构。
本机处理器典型地执行仿真软件,其包括固件或本机操作系统,以执行被仿真处理器的仿真程序。仿真软件负责取回并执行被仿真处理器架构的指令。仿真软件维护仿真的程序计数器以保持跟踪指令边界。仿真软件可一次取回一个或多个仿真的机器指令,并将所述一个或多个仿真的机器指令转换为对应的本机机器指令组,以由本机处理器执行。这些转换的指令可被高速缓存,这样可完成更快的转换。然而,仿真软件将维持被仿真的处理器架构的架构规则以保证为被仿真处理器编写的操作系统和应用正 确操作。而且,仿真软件将提供由被仿真的处理器架构确定的资源,包括但不限于控制寄存器、通用寄存器、浮点寄存器、例如包括段表和页表的动态地址转换功能、中断机制、上下文转换机制、日中时间(TOD)时钟和到I/O子系统的架构接口,这样被设计为在被仿真处理器上运行的操作系统或应用程序可在具有仿真软件的本机处理器上运行。
解码正被仿真的特定指令,且调用子例程以执行该单个指令的功能。仿真被仿真处理器的功能的仿真软件功能例如在“C”子例程或驱动器中实现,或由提供用于特定硬件的驱动器的其它方法实现,如本领域技术人员在理解优选实施例的描述后将理解的。包括但不限于Beausoleil等人的标题为“Multiprocessor for Hardware Emulation”的美国专利证书号5,551,013;以及Scalzi等人的标题为“Preprocessing of Stored TargetRoutines for Emulating Incompatible Instructions on a Target Processor”的美国专利证书号6,009,261;以及Davidian等人的标题为“Decoding Guest Instruction toDirectly Access Emulation Routines that Emulate the Guest Instructions”的美国专利证书号,5,574,873;以及Gorishek等人的标题为“Symmetrical Multiprocessing Busand Chipset Used for Coprocessor Support Allowing Non-Native Code to Run in aSystem”的美国专利证书号6,308,255;以及Lethin等人的标题为“Dynamic OptimizingObject Code Translator for Architecture Emulation and Dynamic OptimizingObject Code Translation Method”的美国专利证书号6,463,582;以及Eric Traut的标题为“Method for Emulating Guest Instructions on a Host Computer Through DynamicRecompilation of Host Instructions”的美国专利证书号5,790,825(这些在这里都整体引用以便作为参考);以及许多其它专利的各种软件和硬件仿真专利示出各种已知的方式来实现针对可为本领域技术人员获得的目标机器对为不同机器进行架构设计的指令格式的仿真。
在图24中,提供了仿真主计算机系统5092的例子,其仿真主架构的主计算机系统5000’。在仿真主计算机系统5092中,主处理器(CPU)5091是仿真主处理器(或虚拟主处理器),并包括具有与主计算机5000’ 的处理器5091不同的本机指令集架构的仿真处理器5093。仿真主计算机系统5092具有可被仿真处理器5093访问的存储器5094。在示例性实施例中,存储器5094被分区为主计算机存储器5096部分和仿真例程5097部分。根据主计算机架构,主计算机存储器5096对于仿真主计算机5092的程序来说是可用的。仿真处理器5093执行与被仿真处理器5091不同架构的架构指令集的本机指令(即来自仿真例程处理器5097的本机指令),且可通过使用从顺序和访问/解码例程获得的一个或多个指令从主计算机存储器5096中的程序访问用于执行的主机指令,所述顺序和访问/解码例程可解码访问的主机指令,以确定用于仿真被访问的主机指令的功能的本机指令执行例程。被定义用于主计算机系统5000’架构的其它工具可被架构工具例程仿真,所述架构工具例程包括诸如通用寄存器、控制寄存器、动态地址转换和I/O子系统支持和处理器高速缓存等工具。仿真例程也可利用在仿真处理器5093中可获得的功能(诸如通用寄存器和虚拟地址的动态转换)以改善仿真例程的性能。也可提供专用硬件和卸载引擎以辅助处理器5093来仿真主计算机5000’的功能。
在此使用的术语仅是为了描述特定实施例,且不旨在限制本发明。如在此使用的,单数形式“一”、“一个”和“该”也旨在包括复数形式,除非上下文另外清楚地指明。还将理解,当在本说明书中使用时,术语“包括”和/或“包含”指明存在所述的特征、整体、步骤、操作、元件和/或组件,但不排除存在或附加一个或多个其它特征、整体、步骤、操作、元件、组件和/或其组。
下面权利要求中的对应结构、材料、操作以及所有装置或步骤和功能元件的等同替换,旨在包括任何用于与在权利要求中具体指出的其它元件相组合地执行该功能的结构、材料或操作。出于示例和说明目的给出了对一个或多个实施例的描述,但所述描述并非旨在是穷举的或是限于所公开的形式。对于所属技术领域的普通技术人员来说许多修改和变化都将是显而易见的。实施例的选择和描述是为了最佳地解释各个方面和实际应用,并且当适合于所构想的特定使用时,使得所属技术领域的其它普通技术人员能够理解具有各种修改的各种实施例。

Claims (18)

1.一种用于促进计算环境内的处理的计算机系统,所述计算机系统包括:
用于通过处理器确定在所述计算环境内执行的事务已经中止预定次数的模块,所述事务有效地延迟向主存储器提交事务性存储,直到完成选择的事务;
用于基于对所述事务已经中止预定次数的确定,在重试所述事务期间,执行限制所述处理器或另一个处理器的处理的操作的模块,其中,所述限制所述处理器或另一个处理器的处理的操作是基于与所述事务相关的中止计数选择的,存在多个中止计数范围,一个或多个可选择操作与所述多个中止计数范围相关联,并且所述限制所述处理器或另一个处理器的处理的操作包括与一个中止计数范围相关联的一个或多个可选择操作中的一个或多个操作,所述一个中止计数范围包含与所述事务相关的中止计数;以及
用于在执行所述限制所述处理器或另一个处理器的处理的操作之后,对所述事务进行一次或多次所选择次数的重试的模块。
2.根据权利要求1所述的计算机系统,其中所述计算机系统还包括:
用于基于对所述事务进行一次或多次所选择次数的重试,确定重试的事务是否已经中止的模块;以及
用于基于重试一次或多次所选择的次数后所述重试的事务中止,执行进一步限制所述处理器或另一个处理器的处理的另一个操作的模块;以及用于在执行所述另一个操作后重试所述事务的模块。
3.根据权利要求2所述的计算机系统,其中所述计算机系统还包括:用于基于重复的中止而一次或多次执行一个或多个其他操作,直到所述事务成功地完成或呈现用于所述事务的中断的模块。
4.根据权利要求1所述的计算机系统,其中所述计算机系统还包括:
用于确定所述事务的中止次数达到特定级别的模块;
用于基于达到所述特定级别,指示所述计算环境的一个或多个其他处理器停止操作的模块,所述一个或多个其他处理器包括至少所述另一个处理器;以及
用于基于对所述一个或多个其他处理器的指示,重新执行所述事务一次或多次以完成所述事务的模块。
5.根据权利要求4所述的计算机系统,其中所述指示包括获得信号量并且向所述一个或多个其他处理器发送中断。
6.根据权利要求5所述的计算机系统,其中所述计算机系统还包括:
用于通过所述一个或多个其他处理器接收所述中断的模块;
用于基于对所述中断的接收,停止操作并监视所述信号量的模块;以及
用于基于指示重设所述信号量的监视,继续操作的模块。
7.根据权利要求4所述的计算机系统,其中所述一个或多个其他处理器中的一个处理器正在造成中止冲突。
8.根据权利要求1所述的计算机系统,其中所述计算机系统还包括:
用于确定所述事务已经中止最大次数的模块;以及
用于基于所述事务中止最大次数而呈现中断的模块。
9.根据权利要求1所述的计算机系统,其中所述计算机系统还包括:用于基于所述事务成功完成或呈现用于所述事务的中断,恢复所述处理器或所述另一个处理器的处理的模块。
10.根据权利要求1所述的计算机系统,其中所述限制所述处理器或另一个处理器的处理的操作包括以下之一:禁用分支预测;禁用推测性指令取回;禁用超标量分派;禁用乱序执行;独占地取回高速缓存未命中;通过指令流水线执行单个指令;或者采用信号量来锁定一个或多个处理器。
11.根据权利要求1所述的计算机系统,其中所述计算机系统还包括用于选择要执行的操作的模块,所述选择基于中止条件。
12.根据权利要求1所述的计算机系统,其中所述事务是具有与之关联的多个限制的受限事务,并且transaction begin指令是transactionbegin constrained指令。
13.一种用于促进计算环境内的处理的方法,所述方法包括:
通过处理器确定在所述计算环境内执行的事务已经中止预定次数,所述事务有效地延迟向主存储器提交事务性存储,直到完成选择的事务;
基于对所述事务已经中止预定次数的确定,在重试所述事务期间,执行限制所述处理器或另一个处理器的处理的操作,其中,所述限制所述处理器或另一个处理器的处理的操作是基于与所述事务相关的中止计数选择的,存在多个中止计数范围,一个或多个可选择操作与所述多个中止计数范围相关联,并且所述限制所述处理器或另一个处理器的处理的操作包括与一个中止计数范围相关联的一个或多个可选择操作中的一个或多个操作,所述一个中止计数范围包含与所述事务相关的中止计数;以及
在执行所述限制所述处理器或另一个处理器的处理的操作之后,对所述事务进行一次或多次所选择次数的重试。
14.根据权利要求13所述的方法,其中所述方法还包括:
基于对所述事务进行一次或多次所选择次数的重试,确定重试的事务是否已经中止;以及
基于重试一次或多次所选择的次数后所述重试的事务中止,执行进一步限制所述处理器或另一个处理器的处理的另一个操作;以及
在执行所述另一个操作后重试所述事务。
15.根据权利要求13所述的方法,其中所述方法还包括:
通过所述处理器确定所述事务的中止次数达到特定级别;
基于达到所述特定级别,所述处理器指示所述计算环境的一个或多个其他处理器停止操作,所述一个或多个其他处理器包括至少所述另一个处理器;以及
基于对所述一个或多个其他处理器的指示,重新执行所述事务一次或多次以完成所述事务。
16.根据权利要求13所述的方法,其中所述方法还包括:
确定所述事务已经中止最大次数;以及
基于所述事务中止最大次数而呈现中断。
17.根据权利要求13所述的方法,其中所述方法还包括:基于所述事务成功完成或呈现用于所述事务的中断,恢复所述处理器或所述另一个处理器的处理。
18.根据权利要求13所述的方法,其中所述方法还包括选择要执行的操作,所述选择基于中止条件。
CN201310236296.2A 2012-06-15 2013-06-14 用于促进计算环境内的处理的方法和计算机系统 Active CN103514032B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/524,833 2012-06-15
US13/524,833 US9442737B2 (en) 2012-06-15 2012-06-15 Restricting processing within a processor to facilitate transaction completion

Publications (2)

Publication Number Publication Date
CN103514032A CN103514032A (zh) 2014-01-15
CN103514032B true CN103514032B (zh) 2017-04-12

Family

ID=49757057

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310236296.2A Active CN103514032B (zh) 2012-06-15 2013-06-14 用于促进计算环境内的处理的方法和计算机系统

Country Status (3)

Country Link
US (2) US9442737B2 (zh)
JP (1) JP6218433B2 (zh)
CN (1) CN103514032B (zh)

Families Citing this family (35)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9361115B2 (en) 2012-06-15 2016-06-07 International Business Machines Corporation Saving/restoring selected registers in transactional processing
US9740549B2 (en) 2012-06-15 2017-08-22 International Business Machines Corporation Facilitating transaction completion subsequent to repeated aborts of the transaction
US9448796B2 (en) 2012-06-15 2016-09-20 International Business Machines Corporation Restricted instructions in transactional execution
US9384004B2 (en) 2012-06-15 2016-07-05 International Business Machines Corporation Randomized testing within transactional execution
US9348642B2 (en) 2012-06-15 2016-05-24 International Business Machines Corporation Transaction begin/end instructions
US9336046B2 (en) 2012-06-15 2016-05-10 International Business Machines Corporation Transaction abort processing
US9772854B2 (en) 2012-06-15 2017-09-26 International Business Machines Corporation Selectively controlling instruction execution in transactional processing
US10437602B2 (en) 2012-06-15 2019-10-08 International Business Machines Corporation Program interruption filtering in transactional execution
US9367323B2 (en) * 2012-06-15 2016-06-14 International Business Machines Corporation Processor assist facility
US20130339680A1 (en) 2012-06-15 2013-12-19 International Business Machines Corporation Nontransactional store instruction
US9436477B2 (en) 2012-06-15 2016-09-06 International Business Machines Corporation Transaction abort instruction
US20140281236A1 (en) * 2013-03-14 2014-09-18 William C. Rash Systems and methods for implementing transactional memory
US9304935B2 (en) 2014-01-24 2016-04-05 International Business Machines Corporation Enhancing reliability of transaction execution by using transaction digests
US9465746B2 (en) * 2014-01-24 2016-10-11 International Business Machines Corporation Diagnostics for transactional execution errors in reliable transactions
US9336097B2 (en) * 2014-02-27 2016-05-10 International Business Machines Corporation Salvaging hardware transactions
US10120681B2 (en) 2014-03-14 2018-11-06 International Business Machines Corporation Compare and delay instructions
US9558032B2 (en) 2014-03-14 2017-01-31 International Business Machines Corporation Conditional instruction end operation
US9454370B2 (en) 2014-03-14 2016-09-27 International Business Machines Corporation Conditional transaction end instruction
US10235172B2 (en) * 2014-06-02 2019-03-19 International Business Machines Corporation Branch predictor performing distinct non-transaction branch prediction functions and transaction branch prediction functions
US10503538B2 (en) * 2014-06-02 2019-12-10 International Business Machines Corporation Delaying branch prediction updates specified by a suspend branch prediction instruction until after a transaction is completed
US10261826B2 (en) * 2014-06-02 2019-04-16 International Business Machines Corporation Suppressing branch prediction updates upon repeated execution of an aborted transaction until forward progress is made
US9830159B2 (en) * 2014-06-02 2017-11-28 International Business Machines Corporation Suspending branch prediction upon entering transactional execution mode
US10289414B2 (en) 2014-06-02 2019-05-14 International Business Machines Corporation Suppressing branch prediction on a repeated execution of an aborted transaction
US9477469B2 (en) * 2014-06-02 2016-10-25 International Business Machines Corporation Branch predictor suppressing branch prediction of previously executed branch instructions in a transactional execution environment
US11410176B2 (en) * 2014-06-27 2022-08-09 Tigergraph, Inc. System and method for enhanced detection of fraudulent electronic transactions
US9792124B2 (en) * 2015-02-13 2017-10-17 International Business Machines Corporation Speculative branch handling for transaction abort
US10366013B2 (en) * 2016-01-15 2019-07-30 Futurewei Technologies, Inc. Caching structure for nested preemption
US9772874B2 (en) 2016-01-29 2017-09-26 International Business Machines Corporation Prioritization of transactions based on execution by transactional core with super core indicator
US20180069767A1 (en) * 2016-09-06 2018-03-08 Advanced Micro Devices, Inc. Preserving quality of service constraints in heterogeneous processing systems
US11947978B2 (en) 2017-02-23 2024-04-02 Ab Initio Technology Llc Dynamic execution of parameterized applications for the processing of keyed network data streams
US10831509B2 (en) 2017-02-23 2020-11-10 Ab Initio Technology Llc Dynamic execution of parameterized applications for the processing of keyed network data streams
EP3462312B1 (en) * 2017-09-29 2022-08-17 ARM Limited Permitting unaborted processing of transaction after exception mask update instruction
CN111936972A (zh) * 2018-04-11 2020-11-13 Arm有限公司 事务中的异常处理
CN113795836A (zh) * 2019-05-13 2021-12-14 康明斯公司 用于检测车辆系统中的侵入的方法和系统
US11182316B2 (en) 2019-05-20 2021-11-23 International Business Machines Corporation Program interrupt code conversion

Family Cites Families (191)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA1174370A (en) 1980-05-19 1984-09-11 Hidekazu Matsumoto Data processing unit with pipelined operands
US4488227A (en) 1982-12-03 1984-12-11 Honeywell Information Systems Inc. Program counter stacking method and apparatus for nested subroutines and interrupts
US5063497A (en) 1987-07-01 1991-11-05 Digital Equipment Corporation Apparatus and method for recovering from missing page faults in vector data processing operations
US5471591A (en) 1990-06-29 1995-11-28 Digital Equipment Corporation Combined write-operand queue and read-after-write dependency scoreboard
DE4216871C2 (de) 1991-05-21 2001-09-06 Digital Equipment Corp Ausführungsordnen zum Sicherstellen der Serialisierbarkeit verteilter Transaktionen
US5701480A (en) 1991-10-17 1997-12-23 Digital Equipment Corporation Distributed multi-version commitment ordering protocols for guaranteeing serializability during transaction processing
WO1994027215A1 (en) 1993-05-07 1994-11-24 Apple Computer, Inc. Method for decoding guest instructions for a host computer
US5925125A (en) 1993-06-24 1999-07-20 International Business Machines Corporation Apparatus and method for pre-verifying a computer instruction set to prevent the initiation of the execution of undefined instructions
US5551013A (en) 1994-06-03 1996-08-27 International Business Machines Corporation Multiprocessor for hardware emulation
US5748964A (en) 1994-12-20 1998-05-05 Sun Microsystems, Inc. Bytecode program interpreter apparatus and method with pre-verification of data type restrictions
US5655100A (en) 1995-03-31 1997-08-05 Sun Microsystems, Inc. Transaction activation processor for controlling memory transaction execution in a packet switched cache coherent multiprocessor system
EP0870228B1 (en) 1995-10-06 2003-08-13 Advanced Micro Devices, Inc. Unified multi-function operation scheduler for out-of-order execution in a superscalar processor
US5790825A (en) 1995-11-08 1998-08-04 Apple Computer, Inc. Method for emulating guest instructions on a host computer through dynamic recompilation of host instructions
TW384447B (en) 1996-01-22 2000-03-11 Infinite Technology Inc Processor with reconfigurable arithmetic data path
JPH103416A (ja) 1996-06-14 1998-01-06 Canon Inc 情報処理装置およびその方法
US6035313A (en) 1997-03-24 2000-03-07 Motorola, Inc. Memory address generator for an FFT
US5937199A (en) 1997-06-03 1999-08-10 International Business Machines Corporation User programmable interrupt mask with timeout for enhanced resource locking efficiency
US7076784B1 (en) 1997-10-28 2006-07-11 Microsoft Corporation Software component execution management using context objects for tracking externally-defined intrinsic properties of executing software components within an execution environment
US6000029A (en) 1997-11-03 1999-12-07 Motorola, Inc. Method and apparatus for affecting subsequent instruction processing in a data processor
KR100246537B1 (ko) 1997-11-25 2000-03-15 정선종 코드분할 다중접속 시스템에서 파일럿 심벌을 이용한 동기식이중 채널 큐피에스케이 송수신기의 구조
SE9704476L (sv) 1997-12-02 1999-06-23 Ericsson Telefon Ab L M Utökad instruktionsavkodning
US6009261A (en) 1997-12-16 1999-12-28 International Business Machines Corporation Preprocessing of stored target routines for emulating incompatible instructions on a target processor
US6202067B1 (en) 1998-04-07 2001-03-13 Lucent Technologies, Inc. Method and apparatus for correct and complete transactions in a fault tolerant distributed database system
US6119129A (en) 1998-05-14 2000-09-12 Sun Microsystems, Inc. Multi-threaded journaling in a configuration database
US6308255B1 (en) 1998-05-26 2001-10-23 Advanced Micro Devices, Inc. Symmetrical multiprocessing bus and chipset used for coprocessor support allowing non-native code to run in a system
EP0992916A1 (en) 1998-10-06 2000-04-12 Texas Instruments Inc. Digital signal processor
US6151669A (en) 1998-10-10 2000-11-21 Institute For The Development Of Emerging Architectures, L.L.C. Methods and apparatus for efficient control of floating-point status register
US6463582B1 (en) 1998-10-21 2002-10-08 Fujitsu Limited Dynamic optimizing object code translator for architecture emulation and dynamic optimizing object code translation method
US7761857B1 (en) 1999-10-13 2010-07-20 Robert Bedichek Method for switching between interpretation and dynamic translation in a processor system based upon code sequence execution counts
US6738892B1 (en) 1999-10-20 2004-05-18 Transmeta Corporation Use of enable bits to control execution of selected instructions
US6604188B1 (en) 1999-10-20 2003-08-05 Transmeta Corporation Pipeline replay support for multi-cycle operations wherein all VLIW instructions are flushed upon detection of a multi-cycle atom operation in a VLIW instruction
JP3776653B2 (ja) 1999-11-24 2006-05-17 富士通株式会社 演算処理装置
US6754809B1 (en) 1999-12-30 2004-06-22 Texas Instruments Incorporated Data processing apparatus with indirect register file access
US6665863B1 (en) 2000-05-31 2003-12-16 Microsoft Corporation Data referencing within a database graph
US6826682B1 (en) 2000-06-26 2004-11-30 Transmeta Corporation Floating point exception handling in pipelined processor using special instruction to detect generated exception and execute instructions singly from known correct state
US7246123B2 (en) 2000-08-04 2007-07-17 Carr Scott Software Incorporated Automatic transaction management
US6886094B1 (en) 2000-09-28 2005-04-26 International Business Machines Corporation Apparatus and method for detecting and handling exceptions
US6671686B2 (en) 2000-11-02 2003-12-30 Guy Pardon Decentralized, distributed internet data management
US7346632B2 (en) 2001-02-22 2008-03-18 International Business Machines Corporation Mechanism for executing nested transactions in an execution environment supporting flat transactions only
US6963919B1 (en) 2001-02-28 2005-11-08 Agilent Technologies, Inc. Method and system for improving computer network performance
US6745272B2 (en) 2001-04-04 2004-06-01 Advanced Micro Devices, Inc. System and method of increasing bandwidth for issuing ordered transactions into a distributed communication system
US7185234B1 (en) 2001-04-30 2007-02-27 Mips Technologies, Inc. Trace control from hardware and software
US7305678B2 (en) 2001-05-17 2007-12-04 International Business Machines Corporation Method and system for reducing synchronization waits when allocating sequenced identifiers in a multi-threaded server
US7613762B2 (en) 2001-05-25 2009-11-03 Sun Microsystems, Inc. Floating point remainder with embedded status information
KR100625595B1 (ko) 2001-05-28 2006-09-20 한국전자통신연구원 트랜잭션 처리 시스템의 병렬 로깅 방법 및 트랜잭션 로그 처리 시스템
US7185183B1 (en) 2001-08-02 2007-02-27 Mips Technologies, Inc. Atomic update of CPO state
US20060218556A1 (en) 2001-09-28 2006-09-28 Nemirovsky Mario D Mechanism for managing resource locking in a multi-threaded environment
US7174463B2 (en) 2001-10-04 2007-02-06 Lenovo (Singapore) Pte. Ltd. Method and system for preboot user authentication
US7546446B2 (en) 2002-03-08 2009-06-09 Ip-First, Llc Selective interrupt suppression
US7496494B2 (en) 2002-09-17 2009-02-24 International Business Machines Corporation Method and system for multiprocessor emulation on a multiprocessor host system
US6892286B2 (en) 2002-09-30 2005-05-10 Sun Microsystems, Inc. Shared memory multiprocessor memory model verification system and method
US7103597B2 (en) 2002-10-03 2006-09-05 Mcgoveran David O Adaptive transaction manager for complex transactions and business process
US7634638B1 (en) 2002-10-22 2009-12-15 Mips Technologies, Inc. Instruction encoding for system register bit set and clear
US7568023B2 (en) 2002-12-24 2009-07-28 Hewlett-Packard Development Company, L.P. Method, system, and data structure for monitoring transaction performance in a managed computer network environment
US7269717B2 (en) 2003-02-13 2007-09-11 Sun Microsystems, Inc. Method for reducing lock manipulation overhead during access to critical code sections
US7269693B2 (en) 2003-02-13 2007-09-11 Sun Microsystems, Inc. Selectively monitoring stores to support transactional program execution
US7398355B1 (en) 2003-02-13 2008-07-08 Sun Microsystems, Inc. Avoiding locks by transactionally executing critical sections
US7398359B1 (en) 2003-04-30 2008-07-08 Silicon Graphics, Inc. System and method for performing memory operations in a computing system
CA2472887A1 (en) 2003-06-30 2004-12-30 Gravic, Inc. Methods for ensuring referential integrity in multithreaded replication engines
US7836450B2 (en) 2003-08-28 2010-11-16 Mips Technologies, Inc. Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts
US7197586B2 (en) 2004-01-14 2007-03-27 International Business Machines Corporation Method and system for recording events of an interrupt using pre-interrupt handler and post-interrupt handler
US7206903B1 (en) 2004-07-20 2007-04-17 Sun Microsystems, Inc. Method and apparatus for releasing memory locations during transactional execution
US7703098B1 (en) 2004-07-20 2010-04-20 Sun Microsystems, Inc. Technique to allow a first transaction to wait on condition that affects its working set
US7395382B1 (en) 2004-08-10 2008-07-01 Sun Microsystems, Inc. Hybrid software/hardware transactional memory
US7840785B1 (en) 2004-09-14 2010-11-23 Azul Systems, Inc. Transparent concurrent atomic execution
US20060064508A1 (en) 2004-09-17 2006-03-23 Ramesh Panwar Method and system to store and retrieve message packet data in a communications network
US7373554B2 (en) 2004-09-24 2008-05-13 Oracle International Corporation Techniques for automatic software error diagnostics and correction
US7856537B2 (en) 2004-09-30 2010-12-21 Intel Corporation Hybrid hardware and software implementation of transactional memory access
EP1657118A1 (en) 2004-11-11 2006-05-17 IEE INTERNATIONAL ELECTRONICS & ENGINEERING S.A. Collision recognition device for a vehicle
US7984248B2 (en) * 2004-12-29 2011-07-19 Intel Corporation Transaction based shared data operations in a multiprocessor environment
US7631073B2 (en) 2005-01-27 2009-12-08 International Business Machines Corporation Method and apparatus for exposing monitoring violations to the monitored application
US20060212757A1 (en) 2005-03-15 2006-09-21 International Business Machines Corporation Method, system, and program product for managing computer-based interruptions
US7421544B1 (en) 2005-04-04 2008-09-02 Sun Microsystems, Inc. Facilitating concurrent non-transactional execution in a transactional memory system
US7496726B1 (en) 2005-04-18 2009-02-24 Sun Microsystems, Inc. Controlling contention via transactional timers among conflicting transactions issued by processors operating in insistent or polite mode
US7464161B2 (en) 2005-06-06 2008-12-09 International Business Machines Corporation Enabling and disabling byte code inserted probes based on transaction monitoring tokens
US7350034B2 (en) 2005-06-20 2008-03-25 International Business Machines Corporation Architecture support of best-effort atomic transactions for multiprocessor systems
US20070005828A1 (en) 2005-06-30 2007-01-04 Nimrod Diamant Interrupts support for the KCS manageability interface
CN1713164A (zh) 2005-07-21 2005-12-28 复旦大学 可自主处理多事务传输要求的dma控制器及数据传输方法
US7870369B1 (en) 2005-09-28 2011-01-11 Oracle America, Inc. Abort prioritization in a trace-based processor
US20070136289A1 (en) 2005-12-14 2007-06-14 Intel Corporation Lock elision with transactional memory
US8117605B2 (en) 2005-12-19 2012-02-14 Oracle America, Inc. Method and apparatus for improving transactional memory interactions by tracking object visibility
US7730286B2 (en) 2005-12-30 2010-06-01 Intel Corporation Software assisted nested hardware transactions
US7810072B2 (en) 2006-01-06 2010-10-05 International Business Machines Corporation Exception thrower
US20070186056A1 (en) 2006-02-07 2007-08-09 Bratin Saha Hardware acceleration for a software transactional memory system
US8065499B2 (en) 2006-02-22 2011-11-22 Oracle America, Inc. Methods and apparatus to implement parallel transactions
US8099538B2 (en) * 2006-03-29 2012-01-17 Intel Corporation Increasing functionality of a reader-writer lock
US8180977B2 (en) 2006-03-30 2012-05-15 Intel Corporation Transactional memory in out-of-order processors
US8180967B2 (en) 2006-03-30 2012-05-15 Intel Corporation Transactional memory virtualization
US7930695B2 (en) 2006-04-06 2011-04-19 Oracle America, Inc. Method and apparatus for synchronizing threads on a processor that supports transactional memory
US7636829B2 (en) 2006-05-02 2009-12-22 Intel Corporation System and method for allocating and deallocating memory within transactional code
US7707394B2 (en) 2006-05-30 2010-04-27 Arm Limited Reducing the size of a data stream produced during instruction tracing
US7849446B2 (en) 2006-06-09 2010-12-07 Oracle America, Inc. Replay debugging
MY149658A (en) 2006-06-12 2013-09-30 Mobile Money Internat Sdn Bhd Transaction server
US20070300013A1 (en) 2006-06-21 2007-12-27 Manabu Kitamura Storage system having transaction monitoring capability
US20080005504A1 (en) 2006-06-30 2008-01-03 Jesse Barnes Global overflow method for virtualized transactional memory
US20080016325A1 (en) 2006-07-12 2008-01-17 Laudon James P Using windowed register file to checkpoint register state
US7617421B2 (en) 2006-07-27 2009-11-10 Sun Microsystems, Inc. Method and apparatus for reporting failure conditions during transactional execution
US7748618B2 (en) 2006-08-21 2010-07-06 Verizon Patent And Licensing Inc. Secure near field transaction
US7865885B2 (en) 2006-09-27 2011-01-04 Intel Corporation Using transactional memory for precise exception handling in aggressive dynamic binary optimizations
US20080086516A1 (en) 2006-10-04 2008-04-10 Oracle International Automatically changing a database system's redo transport mode to dynamically adapt to changing workload and network conditions
EP1918540B1 (en) 2006-11-06 2009-08-26 GM Global Technology Operations, Inc. Operating method for a particulate filter, data processor program product and control apparatus therefore
CN101178787A (zh) 2006-11-10 2008-05-14 上海市卢湾区东南医院 用于社区老干部保健管理的信息沟通方法
US7669040B2 (en) 2006-12-15 2010-02-23 Sun Microsystems, Inc. Method and apparatus for executing a long transaction
JP2008165370A (ja) 2006-12-27 2008-07-17 Internatl Business Mach Corp <Ibm> オンライントランザクション処理を分割し、分散環境で実行するための方法および装置。
US7802136B2 (en) 2006-12-28 2010-09-21 Intel Corporation Compiler technique for efficient register checkpointing to support transaction roll-back
US8086827B2 (en) 2006-12-28 2011-12-27 Intel Corporation Mechanism for irrevocable transactions
US7627743B2 (en) 2007-01-12 2009-12-01 Andes Technology Corporation Method and circuit implementation for multiple-word transfer into/from memory subsystems
US20080244544A1 (en) 2007-03-29 2008-10-02 Naveen Neelakantam Using hardware checkpoints to support software based speculation
US8332374B2 (en) 2007-04-13 2012-12-11 Oracle America, Inc. Efficient implicit privatization of transactional memory
US9009452B2 (en) 2007-05-14 2015-04-14 International Business Machines Corporation Computing system with transactional memory using millicode assists
US8117403B2 (en) 2007-05-14 2012-02-14 International Business Machines Corporation Transactional memory system which employs thread assists using address history tables
US7814378B2 (en) 2007-05-18 2010-10-12 Oracle America, Inc. Verification of memory consistency and transactional memory
US20080320282A1 (en) 2007-06-22 2008-12-25 Morris Robert P Method And Systems For Providing Transaction Support For Executable Program Components
US8266387B2 (en) 2007-06-27 2012-09-11 Microsoft Corporation Leveraging transactional memory hardware to accelerate virtualization emulation
US7779232B2 (en) 2007-08-28 2010-08-17 International Business Machines Corporation Method and apparatus for dynamically managing instruction buffer depths for non-predicted branches
US8209689B2 (en) * 2007-09-12 2012-06-26 Intel Corporation Live lock free priority scheme for memory transactions in transactional memory
US7904434B2 (en) 2007-09-14 2011-03-08 Oracle International Corporation Framework for handling business transactions
US7890472B2 (en) 2007-09-18 2011-02-15 Microsoft Corporation Parallel nested transactions in transactional memory
US20090127332A1 (en) 2007-11-16 2009-05-21 Kyung Yang Park System for processing payment employing off-line transaction approval mode of mobile card and method thereof
US20090138890A1 (en) 2007-11-21 2009-05-28 Arm Limited Contention management for a hardware transactional memory
CN101170747A (zh) 2007-11-30 2008-04-30 中兴通讯股份有限公司 中继状态调节方法和装置
US9391789B2 (en) 2007-12-14 2016-07-12 Qualcomm Incorporated Method and system for multi-level distribution information cache management in a mobile environment
US8195898B2 (en) 2007-12-27 2012-06-05 Intel Corporation Hybrid transactions for low-overhead speculative parallelization
US8065491B2 (en) 2007-12-30 2011-11-22 Intel Corporation Efficient non-transactional write barriers for strong atomicity
US8706982B2 (en) 2007-12-30 2014-04-22 Intel Corporation Mechanisms for strong atomicity in a transactional memory system
US7966459B2 (en) 2007-12-31 2011-06-21 Oracle America, Inc. System and method for supporting phased transactional memory modes
US8140497B2 (en) 2007-12-31 2012-03-20 Oracle America, Inc. System and method for implementing nonblocking zero-indirection transactional memory
US20090182983A1 (en) 2008-01-11 2009-07-16 International Business Machines Corporation Compare and Branch Facility and Instruction Therefore
US8041900B2 (en) 2008-01-15 2011-10-18 Oracle America, Inc. Method and apparatus for improving transactional memory commit latency
US8176279B2 (en) 2008-02-25 2012-05-08 International Business Machines Corporation Managing use of storage by multiple pageable guests of a computing environment
US8380907B2 (en) 2008-02-26 2013-02-19 International Business Machines Corporation Method, system and computer program product for providing filtering of GUEST2 quiesce requests
US8161273B2 (en) 2008-02-26 2012-04-17 Oracle America, Inc. Method and apparatus for programmatically rewinding a register inside a transaction
EP2096564B1 (en) 2008-02-29 2018-08-08 Euroclear SA/NV Improvements relating to handling and processing of massive numbers of processing instructions in real time
US8688628B2 (en) 2008-02-29 2014-04-01 Red Hat, Inc. Nested queued transaction manager
US20090260011A1 (en) 2008-04-14 2009-10-15 Microsoft Corporation Command line transactions
JP5385545B2 (ja) 2008-04-17 2014-01-08 インターナショナル・ビジネス・マシーンズ・コーポレーション トランザクションの実行を制御する装置及び方法
US9367363B2 (en) 2008-05-12 2016-06-14 Oracle America, Inc. System and method for integrating best effort hardware mechanisms for supporting transactional memory
US8612950B2 (en) 2008-06-19 2013-12-17 Intel Corporation Dynamic optimization for removal of strong atomicity barriers
US7996686B2 (en) 2008-07-07 2011-08-09 International Business Machines Corporation Branch trace methodology
KR20110044884A (ko) 2008-07-28 2011-05-02 어드밴스드 마이크로 디바이시즈, 인코포레이티드 가상화가능한 진보된 동기화 기능
US9449314B2 (en) 2008-10-02 2016-09-20 International Business Machines Corporation Virtualization of a central processing unit measurement facility
US8191046B2 (en) 2008-10-06 2012-05-29 Microsoft Corporation Checking transactional memory implementations
US20100122073A1 (en) 2008-11-10 2010-05-13 Ravi Narayanaswamy Handling exceptions in software transactional memory systems
JP4702962B2 (ja) 2008-11-12 2011-06-15 インターナショナル・ビジネス・マシーンズ・コーポレーション メモリ制御装置、プログラム及び方法
US8789057B2 (en) 2008-12-03 2014-07-22 Oracle America, Inc. System and method for reducing serialization in transactional memory using gang release of blocked threads
US20100153776A1 (en) 2008-12-12 2010-06-17 Sun Microsystems, Inc. Using safepoints to provide precise exception semantics for a virtual machine
US10210018B2 (en) 2008-12-24 2019-02-19 Intel Corporation Optimizing quiescence in a software transactional memory (STM) system
US9274855B2 (en) 2008-12-24 2016-03-01 Intel Corporation Optimization for safe elimination of weak atomicity overhead
US8914620B2 (en) * 2008-12-29 2014-12-16 Oracle America, Inc. Method and system for reducing abort rates in speculative lock elision using contention management mechanisms
US8799582B2 (en) 2008-12-30 2014-08-05 Intel Corporation Extending cache coherency protocols to support locally buffered data
CN101710433A (zh) 2008-12-31 2010-05-19 深圳市江波龙电子有限公司 一种电子支付卡的交易方法及电子支付卡
US9170844B2 (en) 2009-01-02 2015-10-27 International Business Machines Corporation Prioritization for conflict arbitration in transactional memory management
CN101819518B (zh) 2009-02-26 2013-09-11 国际商业机器公司 在事务内存中快速保存上下文的方法和装置
US8266107B2 (en) 2009-03-11 2012-09-11 International Business Machines Corporation Method for mirroring a log file by threshold driven synchronization
US9940138B2 (en) 2009-04-08 2018-04-10 Intel Corporation Utilization of register checkpointing mechanism with pointer swapping to resolve multithreading mis-speculations
US8489864B2 (en) 2009-06-26 2013-07-16 Microsoft Corporation Performing escape actions in transactions
DE112009005006T5 (de) 2009-06-26 2013-01-10 Intel Corporation Optimierungen für ein ungebundenes transaktionales Speichersystem (UTM)
US8973004B2 (en) 2009-06-26 2015-03-03 Oracle America, Inc. Transactional locking with read-write locks in transactional memory systems
US8281185B2 (en) 2009-06-30 2012-10-02 Oracle America, Inc. Advice-based feedback for transactional execution
US8229907B2 (en) 2009-06-30 2012-07-24 Microsoft Corporation Hardware accelerated transactional memory system with open nested transactions
US8688964B2 (en) 2009-07-20 2014-04-01 Microchip Technology Incorporated Programmable exception processing latency
GB2472620B (en) 2009-08-12 2016-05-18 Cloudtran Inc Distributed transaction processing
US8392694B2 (en) 2009-09-15 2013-03-05 International Business Machines Corporation System and method for software initiated checkpoint operations
GB2474446A (en) 2009-10-13 2011-04-20 Advanced Risc Mach Ltd Barrier requests to maintain transaction order in an interconnect with multiple paths
US8327188B2 (en) 2009-11-13 2012-12-04 Oracle America, Inc. Hardware transactional memory acceleration through multiple failure recovery
US8516202B2 (en) 2009-11-16 2013-08-20 International Business Machines Corporation Hybrid transactional memory system (HybridTM) and method
US8290991B2 (en) 2009-12-15 2012-10-16 Juniper Networks, Inc. Atomic deletion of database data categories
US9092253B2 (en) 2009-12-15 2015-07-28 Microsoft Technology Licensing, Llc Instrumentation of hardware assisted transactional memory system
US8095824B2 (en) 2009-12-15 2012-01-10 Intel Corporation Performing mode switching in an unbounded transactional memory (UTM) system
US8316194B2 (en) 2009-12-15 2012-11-20 Intel Corporation Mechanisms to accelerate transactions using buffered stores
US8301849B2 (en) 2009-12-23 2012-10-30 Intel Corporation Transactional memory in out-of-order processors with XABORT having immediate argument
US8549468B2 (en) 2010-02-08 2013-10-01 National Tsing Hua University Method, system and computer readable storage device for generating software transaction-level modeling (TLM) model
US20110208921A1 (en) 2010-02-19 2011-08-25 Pohlack Martin T Inverted default semantics for in-speculative-region memory accesses
US8438568B2 (en) 2010-02-24 2013-05-07 International Business Machines Corporation Speculative thread execution with hardware transactional memory
US8739164B2 (en) 2010-02-24 2014-05-27 Advanced Micro Devices, Inc. Automatic suspend atomic hardware transactional memory in response to detecting an implicit suspend condition and resume thereof
US8402227B2 (en) * 2010-03-31 2013-03-19 Oracle International Corporation System and method for committing results of a software transaction using a hardware transaction
US8464261B2 (en) 2010-03-31 2013-06-11 Oracle International Corporation System and method for executing a transaction using parallel co-transactions
US8631223B2 (en) 2010-05-12 2014-01-14 International Business Machines Corporation Register file supporting transactional processing
US9626187B2 (en) 2010-05-27 2017-04-18 International Business Machines Corporation Transactional memory system supporting unbroken suspended execution
US20110302143A1 (en) 2010-06-02 2011-12-08 Microsoft Corporation Multi-version concurrency with ordered timestamps
US9880848B2 (en) 2010-06-11 2018-01-30 Advanced Micro Devices, Inc. Processor support for hardware transactional memory
US8560816B2 (en) 2010-06-30 2013-10-15 Oracle International Corporation System and method for performing incremental register checkpointing in transactional memory
US8479053B2 (en) 2010-07-28 2013-07-02 Intel Corporation Processor with last branch record register storing transaction indicator
US8561033B2 (en) 2010-07-30 2013-10-15 International Business Machines Corporation Selective branch-triggered trace generation apparatus and method
US8549504B2 (en) 2010-09-25 2013-10-01 Intel Corporation Apparatus, method, and system for providing a decision mechanism for conditional commits in an atomic region
US9552206B2 (en) 2010-11-18 2017-01-24 Texas Instruments Incorporated Integrated circuit with control node circuitry and processing circuitry
US9122476B2 (en) 2010-12-07 2015-09-01 Advanced Micro Devices, Inc. Programmable atomic memory using hardware validation agent
US8442962B2 (en) 2010-12-28 2013-05-14 Sap Ag Distributed transaction management using two-phase commit optimization
US8818867B2 (en) 2011-11-14 2014-08-26 At&T Intellectual Property I, L.P. Security token for mobile near field communication transactions
US9442824B2 (en) 2012-03-16 2016-09-13 International Business Machines Corporation Transformation of a program-event-recording event into a run-time instrumentation event
US9311101B2 (en) 2012-06-15 2016-04-12 International Business Machines Corporation Intra-instructional transaction abort handling

Also Published As

Publication number Publication date
JP2014002728A (ja) 2014-01-09
US20130339684A1 (en) 2013-12-19
US20130339703A1 (en) 2013-12-19
CN103514032A (zh) 2014-01-15
JP6218433B2 (ja) 2017-10-25
US9442737B2 (en) 2016-09-13
US9442738B2 (en) 2016-09-13

Similar Documents

Publication Publication Date Title
CN103514032B (zh) 用于促进计算环境内的处理的方法和计算机系统
CN103513960B (zh) 促进事务重复中止之后的事务完成的方法和计算机系统
CN104335164B (zh) 事务中止处理
CN104350463B (zh) 在事务执行中的受限指令
CN104335165B (zh) 用于在计算环境中执行机器指令的方法和计算机系统
AU2012382778B2 (en) Saving/restoring selected registers in transactional processing
AU2012382779B2 (en) Constrained transaction execution
TWI574207B (zh) 非異動儲存指令
TWI533219B (zh) 用於控制一異動在一計算環境中之執行之電腦程式產品、電腦系統及方法
EP2862071B1 (en) Selectively controlling instruction execution in transactional processing
CN104335186B (zh) 处理器辅助设施
CN104335184B (zh) 事务执行分支指示
EP2834739B1 (en) Transaction diagnostic block
TWI554948B (zh) 於異動執行中篩選程式中斷之電腦程式產品、電腦系統及方法
US20150039868A1 (en) Intra-instructional transaction abort handling
MX2014015356A (es) Instrucción de aborto de la transacción.

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant