部分完成的指令的迁移的制作方法

文档序号:25442700发布日期:2021-06-11 22:02阅读:138来源:国知局
部分完成的指令的迁移的制作方法

一个或多个方面一般涉及促进计算环境内的处理,尤其涉及促进指令处理。



背景技术:

在计算环境内执行的指令可能需要大量执行周期来完成操作。当指令需要大量执行周期来完成时,指令可被定义为可中断的。因此,为了最终完成指令,要执行额外的处理。



技术实现要素:

通过提供一种用于促进计算环境內的处理的计算机程序产品来克服现有技术的缺点并且提供附加的优点。所述计算机程序产品包含计算机可读存储介质,所述计算机可读存储介质是处理电路可读的且存储用于执行一种方法的指令。所述方法包括确定在处理器上执行的指令的操作的处理在完成之前已被中断,和在选定的处理器上重新执行所述指令以恢复对所述指令的向前处理。所述重新执行包括确定是否将由所选定的处理器在重新执行所述指令时使用模型相关元数据。基于确定将使用所述模型相关元数据,在重新执行所述指令时使用所述模型相关元数据。基于确定将不使用所述模型相关元数据,在不使用所述模型相关元数据的情况下继续重新执行所述指令。通过模型相关元数据,减少了存储访问这节省了时间,改善了操作和执行指令的处理器的性能。

在一个实施例中,所述确定是否将使用该模型相关元数据包括将已被中断的所述处理器的模型版本指示与所选定的处理器的模型版本指示进行比较,其中,基于所述处理器的模型版本指示与所选定的处理器的模型版本指示具有预定义关系,所述模型相关元数据将在重新执行所述指令时被使用。例如,所述预定义关系是相等。

在一个实施例中,所述处理器的模型版本指示是存储在所述指令指定的位置中的模型版本号。所述位置包括存储器中的参数块。进一步,存储器中的所述参数块包括所述模型相关元数据。

例如,所述重新执行进一步包括检查继续指示符以确定所述操作是否部分完成。基于所述继续指示符被设置得指示所述操作部分完成,执行所述确定是否将使用所述模型相关元数据。所述继续指示符例如被存储在存储器中的所述参数块中。

在一个实施例中,所述使用所述模型相关元数据包括从由所述指令指定的位置提取所述模型相关元数据,以及将从所述位置提取的所述模型相关元数据加载到所选定的处理器的一个或多个选择位置中,其中,在不重复一个或多个任务以产生所述模型相关元数据的情况下,将所述模型相关元数据提供到所选定的处理器。例如,由所述指令指定的位置包括由所述指令指定的存储器中的参数块的继续状态缓冲器。

本文还描述了并要求保护涉及一个或多个方面的计算机实现的方法和系统。进一步,本文中还描述了并且可以要求保护涉及一个或多个方面的服务。

其它的特征和优点通过本文所描述的技术而实现。本文中详细描述了其他实施例和方面,并且这些实施例和方面被认为是所要求保护的各方面的一部分。

附图说明

在说明书结尾处的权利要求书中特别指出并清楚地要求保护作为示例的一个或多个方面。从以下结合附图的详细描述中,一个或多个方面的上述和目的、特征和优点是显而易见的,其中:

图1a示出结合和使用本发明的一个或多个方面的计算环境的一个示例;

图1b示出根据本发明的一个或多个方面的图1a的处理器的进一步细节;

图2示出包括且使用本发明的一个或多个方面的计算环境的另一示例;

图3a示出根据本发明的一个方面的列表排序(sortlists)指令的一种格式;

图3b示出根据本发明的一个方面的由列表排序指令使用的隐式寄存器(通用寄存器0)的字段的一个示例;

图3c示出根据本发明的一个方面的用于列表排序指令的功能代码的一个示例;

图3d示出根据本发明的一个方面的由列表排序指令使用的隐式寄存器(通用寄存器1)的字段的一个示例;

图3e描述了根据本发明的一个方面的由列表排序指令指定的寄存器r1的内容的一个示例;

图3f示出根据本发明的一个方面的由列表排序指令使用的寄存器r1+1的内容的一个示例;

图3g示出根据本发明的一个方面的由列表排序指令指定的寄存器r2的内容的一个示例;

图3h示出根据本发明的一个方面的由列表排序指令使用的寄存器r2+1的内容的一个示例;

图3i示出根据本发明的一个方面的由列表排序指令的sortl-qaf功能使用的参数块的内容的一个示例;

图3j示出根据本发明的一个方面的由列表排序指令使用的固定长度记录格式的一个示例;

图3k示出根据本发明的一个方面的由列表排序指令的sortl-sflr功能使用的参数块的内容的一个示例;

图4a-4b示出根据本发明的一个或多个方面的sortl-sflr示例;

图5a描述了根据本发明的一个方面的sortl-sflr功能的输入的值的汇总的一个示例;

图5b示出根据本发明的一个方面的对sortl-sflr功能的输入列表地址和长度字段的修改的限制的一个示例;

图6a示出根据本发明的一个方面的在执行合并模式指示被设置为零的sortl之前的第一操作数位置/第一操作数的一个示例;

图6b示出根据本发明的一个方面的在执行合并模式指示被设置为零的sortl之后的第一操作数位置/第一操作数的一个示例;

图6c示出根据本发明的一个方面的在执行合并模式指示被设置为零的sortl之前的第二操作数位置/第二操作数的一个示例;

图6d示出根据本发明的一个方面的在执行合并模式指示被设置为零的sortl之后的第二操作数位置/第二操作数的一个示例;

图7a示出根据本发明的一个方面的在执行合并模式指示被设置为1的sortl之前的第一操作数位置/第一操作数的一个示例;

图7b示出根据本发明的一个方面的在执行合并模式指示被设置为1的sortl之后的第一操作数位置/第一操作数的一个示例;

图8示出根据本发明的一个方面使用的参数块的某些字段的一个示例;

图9示出根据本发明的一个方面的由列表排序指令使用的可变长度记录格式的一个示例;

图10a-10b示出根据本发明的一个方面的与指令的中断和指令的重新执行相关联的处理的一个示例;

图11a-11b示出根据本发明的一个方面的促进计算环境内的处理的一个示例;

图12a示出包括且使用本发明的一个或多个方面的计算环境的另一示例;

图12b示出图12a的存储器的进一步细节;

图13示出云计算环境的一个实施例;和

图14示出抽象模型层的一个示例。

具体实施方式

根据本发明的一个方面,提供了一种促进计算环境內的处理的能力。作为一个示例,提供单个指令(例如,硬件/软件接口处的单一架构的硬件机器指令)来执行操作,以诸如排序和/或合并数据记录。该指令例如在通用处理器上执行。

在执行指令时,可能需要大量执行周期来完成操作。因此,在一个方面,所述指令被定义为是可中断的。当指令被中断时,操作(例如,排序和/或合并)仅部分完成。指令的执行以将条件代码设置为向程序(例如,发出指令的程序)通知操作的部分完成的值而结束。然后,程序可以重新执行指令以恢复处理。

在一个实施例中,指令采用多个(例如,显著数量的)执行周期来在产生结果之前为处理器提供元数据。每次执行或重新执行指令时,都用元数据来启动处理器。因此,根据本发明的一个方面,存储和使用先前产生的元数据,使得在重新执行指令时不必重新产生先前产生的元数据。

在一个实例中,指令是对输入到指令的一个或多个输入列表的记录进行排序和/或合并的排序(sort)指令。针对这样的实例,元数据包括处理器的内部状态,包括例如关于输入列表的信息,诸如关于输入列表的记录的先前比较以便确定要进行的下一比较的信息。

处理器提取元数据并且将其存储在由程序提供的位置中。然后,当指令在中断之后被重新执行时,元数据被从该位置提取并加载到处理器中,而不使用任务来重新生成元数据。这节省了原本为生成操作的元数据所需的时间。

在一个实例中,元数据是正在计算环境中执行的指令(例如,排序指令)的执行期间累积的模型相关(model-dependent)元数据,该计算环境可以包括不同模型的机器或处理器。作为示例,模型相关元数据包括关于输入列表的信息,诸如关于输入列表的记录的先前比较以便确定要进行的下一比较的信息;元数据之所以是模型相关,是因为例如它可以针对每个处理器被不同地存储(例如,以不同的格式)。模型相关元数据对重新执行指令来说并非必要,但是在特定情况下使用模型相关元数据来最小化在恢复指令的部分完成的操作时的开销。例如,当恢复操作的处理器能够解译所捕获的模型相关元数据时,使用模型相关元数据。

参照图1a描述包括和使用本发明的一个或多个方面的计算环境的一个实施例。计算环境100包括例如处理器102(例如,中央处理单元),存储器104(例如,主存储器;又名系统存储器、主存储装置、中央存储装置、存储装置),以及通过例如一个或多个总线108和/或其他连接而彼此耦合的一个或多个输入/输出(i/o)设备和/或接口106。

在一个示例中,处理器102基于由纽约州阿蒙克市的国际商业机器公司提供的硬件架构,并且是诸如ibm服务器之类的服务器的一部分,该服务器也由国际商业机器公司提供并实现z/architecture硬件架构。z/architecture硬件架构的一个实施例在名称为“z/architectureprinciplesofoperation”的出版物(ibm公开号sa22-7832-11,第12版,2017年9月)中描述,特此将其通过引用全文并入本文。然而,z/architecture硬件架构仅是一个示例架构;其他架构和/或其他类型的计算环境可包括和/或使用本发明的一个或多个方面。在一个示例中,处理器执行操作系统,诸如也由国际商业机器公司提供的操作系统。

处理器102包括用于执行指令的多个功能组件。如图1b中所描绘的,这些功能组件包括:例如,指令提取组件120,用于提取要执行的指令;指令解码单元122,用于对所提取的指令进行解码并且获得经解码的指令的操作数;指令执行组件124,用于执行解码的指令;存储器访问组件126,用于在必要时为指令执行而访问存储器;以及回写组件130,用于提供所执行的指令的结果。根据本发明的一个或多个方面,这些组件中的一个或多个组件可以包括提供排序/合并处理(或可以使用本发明的一个或多个方面的其他处理)的一个或多个其他组件的至少一部分或能够访问一个或多个其他组件。一个或多个其他组件例如包括排序/合并组件(或其他组件)136。组件136所提供的功能在下文进一步详细描述。

参看图2来描述用以并入且使用本发明的一个或多个方面的计算环境的另一示例。在一个示例中,计算环境基于z/architecture硬件架构;然而,计算环境可基于由国际商业机器公司或其他公司提供的其他架构。

参照图2,在一个示例中,计算环境包括中央电子复合体(cec)200。cec200包括多个部件,例如耦接到一个或多个处理器(又名中央处理单元(cpu))204和输入/输出子系统206的存储器202(又名系统存储器、主存储器、主存储装置、中央存储装置、存储装置)。

存储器202包括例如一个或多个逻辑分区208、管理逻辑分区的管理程序(hypervisor)210和处理器固件212。管理程序210的一个示例是由纽约armonk的国际商业机器公司提供的processorresource/systemmanager(pr/smtm)管理程序。如本文所使用的,固件包括例如处理器的微代码。其包括例如在更高级机器代码的实现中使用的硬件级指令和/或数据结构。在一个实施例中,其包括例如通常作为微代码递送的专有代码,所述微代码包括可信软件或特定于底层硬件的微代码,并控制对系统硬件的操作系统访问。

每个逻辑分区208能够充当单独的系统。即,每个逻辑分区可以被独立地重置,运行诸如z/os操作系统或另一操作系统的客户操作系统220,并且用不同的程序222操作。在逻辑分区中运行的操作系统或应用程序看上去有权访问完整的系统,但是实际上,其仅一部分是可用的。

存储器202耦合到处理器(例如,cpus)204,其是可以被分配给逻辑分区的物理处理器资源。例如,逻辑分区208包括一个或多个逻辑处理器,每个逻辑处理器表示可以被动态地分配给逻辑分区的物理处理器资源204的全部或共享。

进一步,存储器202耦合到i/o子系统206。i/o子系统206可以是中央电子复合体的一部分或与其分离。它引导主存储器202和输入/输出控制单元230以及耦接到中央电子复合体的输入/输出(i/o)设备240之间的信息流。

可以使用许多类型的i/o设备。一个特定类型是数据存储设备250。数据存储设备250可以存储一个或多个程序252、一个或多个计算机可读程序指令254和/或数据等。计算机可读程序指令可以被配置以执行本发明的各方面的实施例的功能。

在一个示例中,处理器204包括排序/合并组件(或其他组件)260,用于执行一个或多个排序和/或合并(或可以使用本发明的一个或多个方面的其他操作)。在不同示例中,可存在一个或多个执行这些任务的组件。许多变化是可能的。

中央电子复合体200可以包括和/或耦合到可移除/不可移除、易失性/非易失性计算机系统存储介质。例如,它可以包括和/或耦合到不可移除的非易失性磁性介质(通常称为“硬盘驱动器”)、用于从一个可移除的非易失性磁盘(例如,“软盘”)中读取和向其写入的磁盘驱动器、和/或用于从可移除的非易失性光盘(例如cd-rom、dvd-rom或其他光学介质)读取或向可移除的非易失性光盘写入的光盘驱动器。应当理解,其他硬件和/或软件组件可以与中央电子复合体200结合使用。示例包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动器阵列、raid系统、磁带驱动器和数据归档存储系统等。

进一步,中央电子复合体200可以与许多其他通用或专用计算系统环境或配置一起操作。可以适用于中央电子复合体200的公知的计算系统、环境和/或配置的例子包括但不限于:个人计算机(pc)系统、服务器计算机系统、瘦客户机、厚客户机、手持式或膝上型设备、多处理器系统、基于微处理器的系统、机顶盒、可编程消费电子产品,网络pc、小型计算机系统、大型计算机系统和包括任何上述系统或设备的分布式云计算环境,等等。

虽然本文描述了计算环境的不同示例,但本发明的一个或多个方面可与许多类型的环境一起使用。本文提供的计算环境仅是示例。此外,尽管是参照排序指令来描述本发明的一个或多个方面的,但是一个或多个方面适用于使用大量执行周期且可中断的其他处理和/或指令。排序指令只是一个例子。

根据本发明的一个方面,处理器(例如处理器102或204)采用一种提供用于将多个未排序输入数据列表排序成一个或多个排序的输出数据列表的机制的增强排序设施。在一个示例中,当将设施指示符设定为例如1时,在系统中安装该增强排序设施。作为z/architecture硬件架构的一个特定示例,当以z/architecture架构模式安装增强排序设施时,将设施比特150设定为(例如)1。在一个实施例中,该设施还提供用于将多个排序的输入数据列表合并到单个排序的输出数据列表中的机制。该设施包括例如列表排序指令,下文描述其实施例。

参照图3a-3k描述与列表排序指令相关的细节的一个实施例。在一个示例中,该指令在通用处理器(例如,处理器102或204)上执行。在本文的描述中,指示特定位置、特定字段和/或字段的特定大小(例如,特定字节和/或比特)。然而,可以提供其他位置、字段和/或大小。进一步,虽然指定将某比特(bit)设定为特定值(例如,1或0),但这仅是示例。在其他示例中,可将该比特设定为不同值,例如相反值或另一值。许多变化是可能的。

参照图3a,在一个示例中,列表排序(sortl)指令300的格式是表示具有扩展操作码的寄存器和寄存器操作的rre格式。作为示例,所述指令包含具有指示排序和/或合并操作的操作码的操作码字段302(例如,比特0-15),指定第一对通用寄存器的第一寄存器字段(r1)304(例如,比特24-27)和指定第二对通用寄存器的第二寄存器字段(r2)306(例如,比特28-31)。由r1字段304指定的寄存器的内容指定第一操作数(在存储装置中)的位置,且由r2字段306指定的寄存器的内容指定第二操作数(在存储装置中)的位置。r1+1的内容指定第一操作数的长度,r2+1的内容指定第二操作数的长度。在一个示例中,指令的比特16-23是保留位且应含有零;否则,程序在未来可能不兼容地操作。如本文所使用的,程序是发布列表排序指令的程序。它可以是用户程序、操作系统或另一种类型的程序。

在一个实施例中,指令的执行包括使用一个或多个隐式通用寄存器(即,指令未明确指定的寄存器)。例如,通用寄存器0和1用于执行列表排序指令,如本文中所描述。在一个示例中,使用通用寄存器0来指定是否将执行合并且指定将由指令执行的排序功能,且使用通用寄存器1来提供由指令使用的参数块的位置。在另一示例中,不是用通用寄存器0来指定是否将执行合并;相反,合并是由机器(例如,处理器)设定/不设定的,且不可由模式指示符改变。其他变化是可能的。

作为示例,参看图3b,通用寄存器0(308)包含合并模式字段310(下文描述)和功能代码字段312。在一个特定示例中,通用寄存器0的比特位置57-63含有功能代码;但是在其他实施例中,可以使用其他比特来包含功能代码。在一个示例中,当通用寄存器0的比特57-63指定未指派或未安装的功能代码时,识别出指定异常。

列表排序指令的示例分配的功能代码在图3c中示出,包括例如:指示sortl-qaf(查询可用功能)功能的功能代码0(313);指示sortl-sflr(固定长度记录排序)功能的功能代码1(315);以及指示sortl-svlr(可变长度记录排序)功能的功能代码2(317)。每个代码均使用参数块,且在一个示例中,参数块的大小取决于功能。例如,对于sortl-qaf功能,参数块为32字节;对于sortl-sflr和sortl-svlr,参数块为576+16xnis,其中nis是由接口大小指定的输入列表的数目。在此示例中,未指派其他功能代码。尽管描述了示例功能和功能代码,但是可以使用其他功能和/或功能代码。

如先前所指示,通用寄存器0还包含合并模式字段310。在一个示例中,通用寄存器0的比特56指定应用于例如sortl-sflr和sorlt-svlr功能的操作模式(合并模式)。在一个示例中,当指定功能为sortl-qaf时,忽略通用寄存器0的比特56。进一步,在一个示例中,忽略通用寄存器0的比特位置0-55。

参看图3d关于由列表排序指令使用的另一隐式寄存器(通用寄存器1)描述的进一步细节。通用寄存器1(314)的内容例如指定存储装置中的参数块的最左边字节的逻辑地址316。在一个示例中,在双字边界上指定参数块;否则,识别出指定异常。下文进一步描述关于参数块的进一步细节。

对于指定功能(例如,sortl-qaf、sortl-sflr、sortl-svlr)来说,不修改通用寄存器0和1的内容。进一步,在一个示例中,r1字段304指定通用寄存器的偶-奇对(even-oddpair)。要指定偶数寄存器,不要指定通用寄存器0;否则,识别出指定异常。当指定的功能是sortl-sflr或sortl-svlr时,如图3e-3f所示,通用寄存器r1318的内容指定例如第一操作数的最左字节的逻辑地址320,而通用寄存器r1+1(322)的内容指定第一操作数的长度324,例如字节数。当指定功能是sortl-sflr或sortl-svlr时,例如第一操作数要在双字边界上被指定;否则,识别出指定异常。从输入列表的集合中选择记录形式的数据,并将数据存储在第一操作数位置处(例如,在用r1指定的地址处开始)。当指定sortl-qaf功能时,忽略通用寄存器r1和r1+1的内容。

此外,对于指定功能(例如,sortl-qaf、sortl-sflr、sortl-svlr)来说,在一个示例中,r2字段306指定通用寄存器的偶-奇对。要指定偶数寄存器,不要指定通用寄存器0;否则,识别出指定异常。当指定功能为sortl-sflr或sortl-svlr,且合并模式(mm)为零时,如图3g-3h所示,通用寄存器r2326的内容指定例如第二操作数的最左字节的逻辑地址328,通用寄存器r2+1(330)的内容指定第二操作数的长度332,例如字节数。在一个示例中,当指定功能为sortl-sflr或sortl-svlr且合并模式(mm)为零时,要在双字边界上指定第二操作数;否则,识别出指定异常。当mm为零时,每个输出列表的起始地址和长度(被称为输出列表描述(old))被存储在第二操作数位置处(例如,在用r2指定的地址处开始)。当指定sortl-qaf功能或mm为1时,忽略通用寄存器r2和r2+1的内容。

在执行中,在一个实施例中,执行由通用寄存器0中的功能代码指定的功能。在一个实施例中,作为当指定的功能是sortl-sflr或sortl-svlr时的操作的一部分,发生以下操作:

将通用寄存器r1中的地址递增存储于第一操作数位置处的字节数,且将通用寄存器r1+1中的长度递减相同数。

当mm为0时,将通用寄存器r2中的地址递增存储于第二操作数位置处的字节数,且将通用寄存器r2+1中的长度递减相同数。

在一个示例中,地址和长度的形成和更新取决于寻址模式。

在24位寻址模式中,在一个实施例中,以下适用:

通用寄存器1的比特位置40-63、r1和r2的内容分别构成参数块、第一操作数和第二操作数的地址,并且忽略比特位置0-39的内容。

更新的第一操作数及第二操作数地址的比特40-63分别替换通用寄存器r1及r2中的对应比特。忽略更新的地址的比特位置40的进位,且将通用寄存器r1和r2的比特位置32-39的内容设定为0。通用寄存器r1和r2的比特位置0至31的内容保持不变。

通用寄存器r1+1和r2+1的比特位置32-63的内容形成分别指定第一和第二操作数中的字节数的32位无符号二进制整数。忽略通用寄存器r1+1和r2+1的比特位置0至31的内容。

更新的第一操作数和第二操作数长度的比特32-63分别替换通用寄存器r1+1和r2+1中的对应位。通用寄存器r1+1和r2+1的比特位置0至31的内容保持不变。

在31位寻址模式中,在一个实施例中,以下适用:

通用寄存器1的比特位置33-63、r1和r2的内容分别构成参数块、第一操作数和第二操作数的地址,并且忽略比特位置0-32的内容。

更新的第一操作数及第二操作数地址的比特33-63分别替换通用寄存器r1及r2中的对应位。忽略更新的地址的比特位置33的进位,且将通用寄存器r1和r2的比特位置32的内容设定为0。通用寄存器r1和r2的比特位置0-31的内容保持不变。

通用寄存器r1+1和r2+1的比特位置32-63的内容形成分别指定第一和第二操作数中的字节数的32位无符号二进制整数。忽略通用寄存器r1+1和r2+1的比特位置0-31的内容。

更新的第一操作数和第二操作数长度的比特32-63分别替换通用寄存器r1+1和r2+1中的对应位。通用寄存器r1+1和r2+1的比特位置0-31的内容保持不变。

在64位寻址模式中,在一个实施例中,以下适用:

通用寄存器1的比特位置0-63、r1和r2的内容分别构成参数块、第一操作数和第二操作数的地址。

更新的第一操作数及第二操作数地址的比特0-63分别替换通用寄存器r1及r2中的对应位。忽略更新的地址的比特位置0的进位。

通用寄存器r1+1和r2+1的比特位置0-63的内容形成分别指定第一操作数和第二操作数中的字节数的64位无符号二进制整数。

更新的第一操作数及第二操作数长度的比特0-63分别替换通用寄存器r1+1及r2+1中的对应位。

在访问寄存器模式中,访问寄存器1、r1和r2分别指定包含参数块、第一操作数和第二操作数的地址空间。

关于不同功能的进一步细节描述如下:

功能代码0:sortl-qaf(查询可用功能)(queryavailablefunctions)

sortl-qaf(query)(查询)功能提供一种指示所有安装的功能的可用性、安装的参数块格式和可用的接口大小的机制。接口大小是可用于程序的输入列表的数目。sort-sflr和sort-svlr功能的参数块的大小与由程序指定的接口大小成比例。

参照图3i描述sortl-qaf功能的参数块的一个示例格式。在一个示例中,用于sortl-qaf功能(例如,功能代码0)的参数块340包含已安装功能向量342、已安装接口大小向量344和已安装参数块格式向量346。在一个特定示例中,这些向量被分别存储到参数块的字节0至15、字节16及字节24至25。下文进一步描述这些向量中的每一个。

作为示例,已安装功能向量342的比特0-127分别对应于列表排序指令的功能代码0-127。如果某比特是例如1时,安装了相应的功能;否则,该功能未安装。

进一步,在一个示例中,已安装接口大小向量344的比特0-7指示程序可用的接口大小。接口大小是由用于sort-sflr和sortl-svlr功能的程序指定的输入列表的数量。在一个示例中,已安装接口大小向量344的位0-7对应于以下接口大小:位0、1、5-7保留;位2–32个输入列表;位3–64个输入列表;以及位4–128个输入列表。其他示例也是可能的。

当已安装接口大小向量344的某比特是例如1时,对应的接口大小是程序可用的。可以将一个或多个比特存储为1。例如,二进制值00101000指示32和128个输入列表的接口大小是可用的。在一个示例中,比特0-1和5-7是保留位且存储为0。进一步,在一个示例中,当安装了增强排序设施时,32个输入列表的接口大小是可用的。因此,比特2被存储为1。其他示例也是可能的。

除了上文所述的之外,在一个示例中,已安装参数块格式向量346的比特0-15分别对应于参数块格式0至15。当某比特为1时,则安装了相应的参数块格式,否则该参数块格式未安装。在一个示例中,将0存储到参数块的保留字节17-23和26-31。

sort-qaf功能忽略通用寄存器r1、r2、r1+1和r2+1的内容。

适用时,针对参数块识别per(程序事件记录)(programeventrecording)存储变更事件。适用时,针对参数块识别per零地址检测事件。

条件代码0在sortl-qaf功能的执行完成时设置;在一个示例中,条件代码1、2和3不适用于查询功能。

功能代码1:sortl-sflr(固定长度记录排序)(sortfixed-lengthrecords)

在一个示例中,将输入列表集合排序并在第一操作数位置处存储为输出列表集合。每个列表是一组记录,参照图3j,每个记录350包括键352(例如,固定长度键)和有效载荷354(例如,固定长度有效载荷)。

基于键的值对来自输入列表的记录进行排序。如下文所述,可按升序或降序对记录进行排序,如在与功能代码1相关联的参数块的排序顺序(so)字段中所指定的那样。输入列表的记录可以按排序顺序或不按排序顺序列出。

输出列表的记录可源自多个输入列表,并且按排序顺序存储。存储在第一操作数位置处的输出列表的数量取决于输入数据。在一个示例中,当每个活动输入列表包含以与在so字段中指定的相同顺序列出的记录时,仅产生一个输出列表。

如上文所指示,通用寄存器0的比特56指定适用于sortl-sflr功能的操作模式(称作合并模式(mm))。当合并模式为(例如)0时,对于存储在第一操作数位置处的每一输出列表,在第二操作数位置处存储对应的输出列表描述(old)。每个old包括例如8字节old-地址和8字节old-长度,该8字节old-地址指定对应输出列表中的第一记录的位置,该8字节old-长度指定对应输出列表的例如按字节计的长度。当合并模式是1时,认为输入列表是预排序的。即,认为每一个活动输入列表包含与参数块的so字段所指定的顺序相同的记录。

当mm为1且每一输入列表都是预排序的时,存储在第一操作数位置处的结果是按排序顺序的单个输出记录列表。当mm为1且每一输入列表不是预排序的时,结果是不可预测的。

当mm为(例如)1时,忽略通用寄存器r2和r2+1的内容,且不在第二操作数位置处存储信息。当mm为1时,可不执行用于区分输出列表之间分隔的程序,进而潜在地改进操作的性能。当mm为1时,不将数据存储到下文所描述的继续记录再调用缓冲区(continuationrecordrecallbuffer)。

在一个示例中,为了从按随机顺序的记录集合中生成按排序顺序的单个记录列表,程序可以执行以下过程:

1.在初始列表集合中均匀地划分记录集合,其中每个列表包含随机顺序的记录。以初始列表集合作为输入列表且合并模式等于0来执行列表排序指令,以产生中间列表集合(其中每一列表含有按排序顺序的记录),以及中间列表集合中的每一列表的存储位置和长度。

2.以中间列表集合作为输入列表且合并模式等于1来执行列表排序指令,以产生最终且单一的列表,其含有按排序顺序的记录。

图4a中例示了合并模式等于0的sortl-sflr的一个示例。该示例中包括输入和结果输出。如图所示,有三个输入列表400:输入list0、输入list1和输入list2。进一步,示出了结果第一操作数402和第二操作数404的示例。在一个示例中,第一操作数402(图4a)中有三个列表,并且如第二操作数中404所示,一个在地址1000处开始并且具有18的长度;另一个在地址1018处开始且具有28的长度;并且第三个在地址1040处开始且具有20的长度。

在一个示例中,当两个操作在合并模式等于0的情况下对相同的未排序输入记录集合执行相同的sortl-sflr功能并且两个操作之间的唯一差异是用于指定输入数据的输入列表的数量时,具有较大数量的输入列表的操作导致较少数量的输出列表。图4b示出了使用六个输入列表450来对与使用三个输入列表的图4a中的示例相同的输入数据进行操作的示例。还示出了具有两个输出列表而非三个输出列表的结果第一操作数452和提供两个输出列表的描述的第二操作数454。

如所指出过的那样,sortl-sflr功能使用参数块,其示例参照图3k来描述。在本文所描述的示例参数块中,指出了用于特定字段和字段的特定大小的参数块内的特定位置(例如,特定字节和/或比特)。然而,可以为一个或多个字段提供其他位置和/或大小。进一步,虽然指定将比特设定为特定值(例如,1或0),但这仅是示例。在其他示例中,可将比特设定为不同值,例如相反值或另一值。许多变化是可能的。

在一个示例中,sortl-sflr功能的参数块360包含以下各项:

参数块版本号(pbvn/parameterblockversionnumber)362:参数块的字节0-1指定参数块的版本和大小。pbvn的比特0-7具有与用于sortl-qaf(查询)功能的参数块的安装的接口大小列表向量(字节16)的比特0-7相同的格式和定义。比特0-7指定参数块中所描述的输入列表的数目nis。通过评估公式(576+16xnis)来确定参数块的大小(以字节计)。比特0-7中的一个比特要具有值1;否则,识别出通用操作数数据异常。pbvn的比特8-11是保留位且应包含0;否则,程序将来可能不能兼容地操作。pbvn的比特12-15包含指定参数块的格式的无符号二进制整数。sortl-qaf功能提供指示可用的参数块格式的机制。当指定的参数块的大小或格式不受模型支持时,识别出通用操作数数据异常。pbvn由程序指定,并且在指令的执行期间不被修改。

模型版本号(mvn/modelversionnumber)364:参数块的字节2是标识执行指令的模型的无符号二进制整数。mvn在例如由处理器执行指令期间更新。mvn中存储的值是模型相关。

当下文描述的继续标志(cf/continuationflag)368为1时,mvn为对操作的输入。当cf为1且mvn标识与当前执行指令的模型相同的模型时,来自下文描述的继续状态缓冲区(csb/continuationstatebuffer)390的数据可用以恢复操作。当cf为1且mvn标识与当前执行指令的模型不同的模型时,可忽略csb字段的部分或全部。

在一个示例中,程序将mvn初始化为零。期望在为了恢复操作的目的而重新执行指令的情况下,程序不修改mvn;否则,结果是不可预测的。

排序顺序(so/sortorder)366:参数块的比特56为0时,指定升序排序顺序,为1时,指定降序排序顺序。当指定升序顺序时,输出列表的每一记录含有大于或等于同一输出列表中(例如左侧)的相邻记录的键的键。当指定降序顺序时,输出列表的每一记录含有小于或等于同一输出列表中(例如左侧)的相邻记录的键的键。在指令的执行期间不更新so。

继续标志(cf)368:参数块的比特63,当为1时,指示操作部分完成且继续状态缓冲区390的内容,且当合并模式(mm)为0时,可以用继续记录再调用缓冲区的内容来恢复操作。程序将继续标志(cf)初始化为零,且在指令为了恢复操作的目的而被重新执行的情况下不修改cf;否则,结果是不可预测的。在一个示例中,处理器在指令将被重新执行的情况下修改cf。

记录键长度370:参数块的字节10-11包含无符号二进制整数,其指定在操作期间处理的记录中的键的以字节计的大小。在一个示例中,针对以下条件中的任何条件识别出通用操作数数据异常:

指定零字节的键大小。

指定不是8的倍数的键大小。

指定大于4096字节的键大小。

在指令的执行期间不更新记录键长度。

记录有效载荷长度372:当指定sortl-sflr功能时,参数块的字节14-15包含无符号二进制整数,其指定在操作期间处理的记录中的有效载荷的按字节计的大小。在一个示例中,针对以下条件中的任何条件识别出通用操作数数据异常:

指定了不是8的倍数的有效载荷大小。

指定的键与有效载荷大小之和大于4096字节。

为零的有效载荷大小是有效的。

当指定sortl-svlr功能时,忽略参数块的记录载荷长度字段。在指令的执行期间不更新记录有效载荷长度。

操作数访问意图(oai/operandaccessintent)374:参数块的字节32的比特0-1向cpu示意对输入列表和第一操作数的未来访问意图。所提供的访问意图可以用于修改用于存储层次结构中不同级别的高速缓存处的对应存储位置的高速缓存行安装和替换策略。

当oai字段的比特0是1时,被指定为包含用于任何活动输入列表的数据的存储位置将被引用作为后续指令的一个或多个操作数。当oai字段的比特0为0时,被指定为包含用于任何活动输入列表的数据的存储位置将不被引用作为后续指令的一个或多个操作数。

当oai字段的比特1为1时,被指定为包含第一操作数的存储位置将被引用作为后续指令的一个或多个操作数。当oai字段的比特1为0时,被指定为包含第一操作数的存储位置将不被引用作为后续指令的一个或多个操作数。

不能保证cpu使用该信息。可以使用该信息的持续时间是无定义的,但是是有限的。

当下一指令访问意图(niai/nextinstructionaccessintent)之后的下一顺序指令是列表排序(sortl)时,sortl的执行不受niai影响。

oai在指令的执行期间不被更新。

活动输入列表计数代码(ailcc/activeinputlistscountcode)376:参数块的字节33的比特1-7是7位无符号整数,其指定指示活动输入列表与非活动输入列表之间的边界的输入列表的数目。具有例如小于或等于ailcc字段的值的列表编号的输入列表处于活动状态。具有例如大于ailcc字段的值的列表编号的输入列表处于不活动状态。处于活动状态的输入列表的数量比ailcc字段中的值多1。

处于活动状态的输入列表参与操作。处于非活动状态的输入列表不参与操作。

参数块的字节33的比特0是保留位且应含有零;否则,程序将来可能操作不兼容。

在一个示例中,当ailcc字段的值加一大于参数块中所描述的输入列表的数目(如由pbvn字段的比特0至7指定的)时,识别出通用操作数数据异常。

在ailcc字段中指定的值不影响参数块的大小。访问异常适用于对指定对应于非活动状态的输入列表的输入列表地址或长度的参数块的字段的引用。

ailcc在指令的执行期间不更新。

空输入列表控制(eilcl/emptyinputlistscontrol)378:当参数块的字节40的比特0为1时,当在操作期间输入list0的长度变为零时,操作结束。当参数块的字节40的比特0为零时,当在操作期间输入list0的长度变为零时,操作继续进行。当参数块的字节40的比特1为1时,当在操作期间除了输入list0之外的活动输入列表的长度变为零时,操作结束。当参数块的字节40的比特1为零时,当在操作期间除了输入list0之外的活动输入列表的长度变为零时,操作继续进行。

当活动输入列表的长度在执行指令之前最初为零时,eilcl的对应比特不适用。

eilcl在指令的执行期间不被更新。

期望在为了恢复操作的目的而重新执行指令的情况下,程序不修改eilcl;否则,结果是不可预测的。

空输入列表标志(eilf/emptyinputlistflag)380:当eilcl为二进制11,且操作由于活动输入列表的经更新长度等于零而结束,且设定了条件代码2时,则例如由处理器将值1存储到参数块的字节40的比特2;否则,将值0存储到参数块的字节40的比特2。当eilf包含值1时,将在操作期间变为空的输入列表的输入列表号放置在参数块的eiln字段中。在一个示例中,程序将eilf初始化为零。

当正在恢复操作时,可以在指令的执行开始时引用eilf。预期在为了恢复操作的目的而重新执行指令的情况下,程序不修改eilf;否则,结果是不可预测的。

空输入列表号(eiln/emptyinputlistnumber)382:当条件使得值1被存储在eilf字段中时,在操作期间变为空的输入列表的输入列表号例如由处理器存储在参数块的字节41中;否则,将值0存储在参数块的字节41中。

在操作开始时忽略eiln。在一个示例中,程序将eiln初始化为零。

不完整输入列表标志(iilf/incompleteinputlistflag)384:当操作由于试图处理不完整输入列表而结束时,将值1存储到参数块的字节46的比特0;否则,例如由处理器将值0存储到参数块的字节46的比特0。当对应的输入列表长度大于零且小于由输入列表地址指定的记录的字节数时,认为活动输入列表是不完整的。此条件可存在于操作开始时,或可在操作期间遇到此条件。当iilf包含值1时,将所遇到的不完整输入列表的输入列表号放置在参数块的iiln字段中。在一个示例中,程序将iilf初始化为零。

当操作以设置条件代码2结束且iilf字段中的结果值为零时,操作是由于空输入列表而结束的。当操作以设置条件代码2结束且iilf字段中的结果值为1时,操作是由于输入列表不完整而结束的。

当正在恢复操作时,iilf可以在指令的执行开始时被引用。预期在为了恢复操作的目的而重新执行指令的情况下,程序不修改iilf;否则,结果是不可预测的。

不完整输入列表号(iiln/incompleteinputlistnumber)386:当条件致使值1存储在iilf字段中时,例如由处理器将所遇到的不完整输入列表的输入列表号存储在参数块的字节47中;否则,将零值存储在参数块的字节47中。当多个输入列表不完整时,将哪个不完整输入列表号存储到iiln字段依赖于模型。在一个示例中,程序将iiln初始化为零。

在操作开始时忽略iiln。

继续记录再调用缓冲区起点(continuationrecordrecallbufferorigin)388:存储装置中的4k字节缓冲区(称为继续记录再调用缓冲区)由程序提供以供cpu存储和引用相同列表排序指令的两次执行之间的数据(在操作结束且稍后可以恢复的情况下)。参数块的从字节56的比特0开始到字节62的比特3的52个比特含有在形成继续记录再调用地址时使用的无符号二进制整数,其在4k字节边界上对准。继续记录再调用地址是例如继续记录再调用缓冲区的最左边字节的逻辑地址。

在24位寻址模式中,具有附加到右侧的12个零的继续记录再调用缓冲区起点的比特40到51形成继续记录再调用地址。在31位寻址模式中,具有附加到右侧的12个零的继续记录再调用缓冲区起点的比特33-51形成继续记录再调用地址。在64位寻址模式中,具有附加到右侧的12个零的继续记录再调用缓冲区起点的比特0至51形成继续记录再调用地址。

在访问寄存器模式中,访问寄存器1指定存储装置中包含继续记录再调用缓冲区的地址空间。

当合并模式(mm)为零,在存储一个或多个记录之后操作结束,且不发生正常完成时,存储到第一操作数的最后记录的键也被存储到继续记录再调用缓冲区。当mm为1时,忽略继续记录再调用缓冲区起点。

在指令的执行期间不修改继续记录再调用缓冲区起点。

预期在为了恢复操作的目的而重新执行指令的情况下,程序不修改继续记录再调用缓冲区起点;否则,结果是不可预测的。

继续状态缓冲区(csb/continuationstatebuffer)390:当条件使得值1被存储在cf字段中时,例如由处理器将内部状态数据存储到参数块的字节64-575;否则,参数块的字节64-575无定义且可修改。所存储的内部状态数据是模型相关,并且可随后用于当指令被重新执行时恢复操作。在一个示例中,程序将继续状态缓冲区初始化为零。预期在为了恢复操作的目的而重新执行指令的情况下,程序不修改继续状态缓冲区;否则,结果是不可预测的。

作为示例,内部状态数据包括与输入列表有关的信息,诸如关于输入列表的记录的先前比较以确定要进行的下一比较的信息。内部状态数据是模型相关,因为它可以取决于处理器模型而被不同地存储或提交。其他变化是可能的。

在一个实施例中,指令可部分地由配置中的一个模型完成,并且执行可以在配置中的不同模型上恢复。虽然在一个实施例中不同的模型可以维持不同的内部状态,但是在一个示例中,每个模型都要能够解释csb的那些用于恢复操作的内容(如果有的话)。当操作恢复时,mvn指示机器能够解释csb的哪些内容(如果有的话)。

输入列表n地址(inputlistnaddress)392、394、396:该参数块定义多个输入列表。参数块中定义的输入列表的数量nis由pbvn362的比特0-7指定。输入列表从零到(nis-1)进行编号。对于每个输入列表,参数块指定例如8字节的输入列表地址。对于第n个输入列表,参数块的字节576+16xn到583+16xn的内容指定例如存储装置中的第n个输入列表的最左边字节的逻辑地址。

由ailcc字段指定的、处于活动状态的输入列表对应的每个输入列表地址,是对操作的输入,并且由操作更新。由ailcc字段指定的处于非活动状态的输入列表对应的每个输入列表地址,被操作忽略。

在一个实施例中,当输入列表地址是对操作的输入时,以下适用:

在24位寻址模式中,输入列表地址的比特40-63指定输入列表的最左字节在存储装置中的位置,且输入列表地址的比特0-39的内容被视为0。

在31位寻址模式中,输入列表地址的比特33-63指定输入列表的最左字节在存储装置中的位置,且输入列表地址的比特0-32的内容被视为0。

在64位寻址模式中,输入列表地址的比特0-63指定输入列表的最左边字节在存储装置中的位置。

在访问寄存器模式中,访问寄存器1指定存储装置中含有活动输入列表的地址空间。

对于处于活动状态的输入列表,要在双字边界上指定对应的输入列表地址;否则,在一个示例中,识别出通用操作数数据异常。

在一个实施例中,当通过操作更新输入列表地址时,以下适用:

当输入列表的一个或多个记录已经作为操作的一部分被处理时,将相应的输入列表地址递增经处理的记录在存储装置中占据的字节数。输入列表地址的形成和更新取决于寻址模式。

在24位寻址模式中,更新的输入列表地址的比特40-63替换参数块的输入列表地址字段中的对应位,忽略更新的输入列表地址的比特位置40的进位(carryout),将参数块的输入列表地址字段的比特位置0-39的内容设置为零。

在31位寻址模式中,更新的输入列表地址的比特33-63替换参数块的输入列表地址字段中的对应位,忽略更新的输入列表地址的比特位置33的进位,将参数块的输入列表地址字段的比特位置0-32的内容设置为零。

在64位寻址模式中,更新的输入列表地址的比特0-63替换参数块的输入列表地址字段中的对应位,忽略更新的输入列表地址的比特位置0的进位。

在24位和31位寻址模式中,当指令的执行结束且指令未被抑制、无效化或终止时,即使当地址未递增时,也更新对应于活动输入列表的每一64位的输入列表地址。

输入列表n长度(inputlistnlength)393、395、397:对于每个输入列表,参数块指定8字节的输入列表长度。对于第n个输入列表,参数块的字节584+16xn至591+16xn包含指定第n个输入列表中的字节数目的无符号整数。

由ailcc字段指定的处于活动状态的输入列表对应的每个输入列表长度,是对操作的输入,并且由操作更新。由ailcc字段指定的处于非活动状态的输入列表对应的每个输入列表长度,被操作忽略。

在各种寻址模式中,输入列表长度字段的比特位置0-63的内容指定对应输入列表的长度。

当输入列表的一个或多个记录已经作为操作的一部分被处理时,将相应的输入列表长度减掉被处理的记录在存储装置中占据的字节数。在各种寻址模式中,经更新的输入列表长度的比特0-63替换参数块的对应输入列表长度字段中的比特0-63。

保留字段:参数块中有多个保留字段(例如不包含其他信息的字段)。作为操作的输入,保留字段应该包含零;否则,将来程序的操作可能不兼容。当操作结束时,保留字段可以被存储为零或者可以保持不变。

图5a-5b总结了包括参数块中的字段在内用于sortl-sflr功能的输入的原始值和最终值的一个示例。

在一个实施例中,不需要且不期望程序为了恢复操作的目的而在以条件代码3被设置而结束操作与分支回到指令之间修改参数块以重新执行指令。

在一个实施例中,sortl-sflr功能包括来自不同输入列表的记录的键之间的多重比较。在一个例子中,当比较键时,以下适用:

将键视为无符号二进制整数,也称为非结构化数据。

当确定哪个键包含最低或最高值时,可以不必访问正被比较的每个键的所有字节。每次比较的每个键的字节数(称为键比较的单位)是模型相关。被访问的键的字节数是键比较的整数个单位。

当比较相等值的键时,在一个示例中,将来自输入列表的具有最高输入列表号的键,选择为按照排序顺序位于具有相同值的其他键之前。在这种情况下,将来自具有最高输入列表号的输入列表的对应记录,存储到具有相同键值的其他记录之前的第一操作数。这适用于升序和降序排序顺序。

一个实现方式可以维护来自活动输入列表的记录之间的先前比较的历史。当该历史可用且适用时,可以引用该历史,以代替访问和比较先前比较了的记录。对该历史的引用减少了生成结果所需的执行时间,从而改进了计算环境內的处理。

sortl-sflr功能包括以指定的排序顺序从输入列表集合中选择记录,并且将所选择的记录放置在第一操作数位置处。随着操作进行,维持第一操作数地址和活动输入列表的地址的当前值。该功能以操作为单元(units)而进行。在每一操作单元期间,对于每一活动输入列表,检查由对应当前输入列表地址指定的键,且将一个记录置于第一操作数位置处。

当合并模式(mm)为零时,活动输入列表以随机次序例如从左到右指定列表,所述列表中的每一者被视为包含记录。当mm为零时,存储到第一操作数位置的记录构成一个或多个输出列表,并且每个输出列表的起始地址和长度都被存储到第二操作数位置。当mm为零时,每个操作单元按指定的顺序包括作为一个示例的以下步骤:

1.确定是否可以将待存储到第一操作数位置的下一记录包括在最近输出列表(包括最近存储到第一操作数位置的记录的输出列表)中,如下:

当继续标志(cf)为零且第一操作单元正被处理时,尚无记录被存储到第一操作数位置,且待存储的下一记录将是输出列表的第一记录。

当cf为1时,指令的先前执行以条件代码1结束,且正在针对指令的当前执行而处理第一操作单元时,待存储的下一记录将是输出列表的第一记录。

当cf为1,iilf为零,eilf为零,指令的先前执行以条件代码2结束,且正在针对指令的当前执行而处理第一操作单元时,待存储的下一记录将是输出列表的第一记录。

当cf为1,iilf或eilf为1,指令的先前执行以条件代码2结束,且正在针对指令的当前执行而处理第一操作单元时,待存储的下一记录可以包含在最近输出列表中。

当cf为1时,指令的先前执行以条件代码3结束,且正在针对指令的当前执行而处理第一操作单元时,待存储的下一记录可以包含在最近输出列表中。

当正被处理的操作单元不是指令的当前执行的第一操作单元时,待存储的下一记录可以包含在最近输出列表中。

2.当待存储的下一记录可以包括在最近输出列表中时,确定有资格包括在最近输出列表中的记录集合。对于活动、非空且并非不完整的每个输入列表,将由当前输入列表地址指定的记录的键(当前输入键)与最近存储到第一操作数位置的记录的键(先前存储的键)进行比较。为此目的,对先前存储的键的引用不是对第一操作数位置的引用。相反,它是对从中选择键的输入列表的引用,或者它是对继续记录再调用缓冲区的引用。当操作正被恢复并且指令的当前执行尚未将任何记录放置在第一操作数位置处时,它是对继续记录再调用缓冲区的引用。

当排序顺序是升序且当前输入键的值大于或等于先前存储的键的值时,将当前输入键视为属于有资格包含在最近输出列表中的键集合。当排序顺序是降序且当前输入键的值小于或等于先前存储的键的值时,将当前输入键视为属于有资格包含在最近输出列表中的键集合。当有资格包括在最近输出列表中的键集合中的键的数目为零时,待存储的下一记录将为输出列表的第一个记录。当有资格包括在最近输出列表中的键集合中的键的数目为非零时,待存储的下一记录将被包括在最近输出列表中。

3.当待存储的下一记录包括在最近输出列表中时,比较有资格包括在最近输出列表中的键集合中的键。当排序顺序为升序时,选择最小的键值和对应的记录。当排序顺序是降序时,选择最大的键值和相应的记录。

4.当待存储的下一记录将是输出列表的第一个记录时,比较由与活动、非空且不不完整的输入列表对应的当前输入列表地址指定的记录的键。当排序顺序为升序时,选择最小的键值和对应的记录。当排序顺序为降序时,选择最大的键值和相应的记录。

5.将所选记录放置在当前第一操作数位置处。

6.将当前第一操作数地址递增等于所选记录长度的字节数。

7.将与包含所选记录的输入列表对应的当前输入列表地址递增等于所选记录长度的字节数。

作为合并模式为零时的操作的部分,对于存储在第一操作数位置处的每一输出列表,将对应输出列表描述(old)存储在第二操作数位置处。每个old包括指定对应输出列表中的第一记录的位置的例如8字节的old地址,以及指定对应输出列表的长度(以字节计)的例如8字节的old长度。当操作以等于1的条件代码3、条件代码2和eilf等于1或者以等于1的条件代码2和iilf结束时,在操作结束时正处理的最近输出列表可以是部分处理且不完全处理的。即,部分处理的输出列表中的记录的数量是个中间值,并且可以在操作恢复时增加。在此情况下,不将对应于部分处理的输出列表的输出列表描述(old)放置在第二操作数位置处,直到恢复了操作且完全处理了输出列表之后。

当合并模式为零且在存储一个或多个记录之后操作结束且正常完成未发生时,存储到第一操作数位置的最后记录的键也被存储到继续记录再调用缓冲区。

当合并模式为零且操作由于正常完成而结束时,一个或多个输出列表已经被放置于第一操作数位置处,且输出列表已经被描绘放置于第二操作数位置处。程序可以将输出列表描述用作后续sortl操作的参数块中的输入列表地址和长度值。

图6a-6d示出在以等于零的合并模式执行sortl-sflr之前和之后的第一操作数和第二操作数。参照图6a-6b,fosa600是第一操作数起始地址:由r1指定的位置;foea602是第一操作数结尾地址:由r1+(r1+1)–1指定的位置;并且ol604是输出列表(例如,输出列表1……输出列表n)。进一步地,参照图6c-6d,sosa610是第二操作数起始地址:r2指定的位置;soea612是第二操作数结尾地址:由r2+(r2+1)–1指定的位置;并且old614是输出列表指定(例如,输出列表指定1……输出列表指定n)。

当合并模式(mm)为1时,活动输入列表指定每一个都被视为含有从左到右按参数块的so字段所指定的排序顺序的记录的列表。当mm为1时,存储到第一操作数位置的记录构成单个输出列表。当mm为1时,每个单元操作例如包括按指定顺序的以下步骤:

1.比较由对应于活动、非空、且不完整的输入列表的当前输入列表地址指定的记录的键。当排序顺序为升序时,选择最小的键值和对应的记录。当排序顺序为降序时,选择最大的键值和相应的记录。

2.将所选记录放置在当前第一操作数位置处。

3.将当前第一操作数地址递增等于所选记录长度的字节数。

4.将对应于包含所选记录的输入列表的当前输入列表地址递增等于所选记录长度的字节数。

图7a-7b例示了在以合并模式等于1执行sortl-sflr之前和之后的第一操作数。参照图7a-7b,fosa700是第一操作数起始地址:由r1指定的位置;foea702是第一操作数结尾地址:由r1+(r1+1)–1指定的位置;并且ol704是输出列表(例如,输出列表1)。

作为当合并模式为零或一时的操作的部分,更新处于活动状态的输入列表的输入列表地址和长度。对于处于活动状态的每个输入列表,将输入列表地址递增来自输入列表的在操作期间被选择并放置在第一操作数位置处的记录的字节数,并且将输入列表长度递减相同的数。输入列表地址的形成和更新取决于寻址模式。

随着操作进行,可能遇到不完整的输入列表。在试图引用来自不完整的输入列表的记录的操作单元期间,识别出不完整的输入列表。在识别出不完整的输入列表之前可能完成多个操作单元。这在合并模式是0或1时适用。

随着操作进行,可能遇到对输入列表、第一操作数或第二操作数(在适用时)的访问的访问异常。在试图访问存储位置而存在针对该位置的访问异常的的操作单元期间,识别出访问异常。在识别出不完整的输入列表之前可能完成多个操作单元。这在合并模式是0或1时适用。

当操作以部分完成而结束时,可以将可能包含记录之间的先前比较的历史的内部状态数据存储到参数块的继续状态缓冲区(csb)字段。随后,当重新执行指令时,为了恢复操作的目的,csb的内容可被加载到实现中,并且可以在操作恢复时引用该历史。这在合并模式是0或1时适用。

当来自活动输入列表的记录已经被排序并且存储到第一操作数时,正常完成发生。

在一个实施例中,当操作由于正常完成而结束时,发生以下情形:

通用寄存器r1和r1+1中的地址和长度分别被更新。

当mm为零时,通用寄存器r2和r2+1中的地址和长度分别被更新。

为处于活动状态的输入列表更新输入listn地址和输入listn长度字段。

设置模型版本号被设置。

继续标志被设置为零。

空输入列表标志被设置为零。

空输入列表号被设置为零。

不完整输入列表标志被设置为零。

不完整输入列表号被设置为零。

条件代码0被设置。

地址和长度的形成和更新取决于寻址模式。

当发生正常完成时,操作结束后参数块的csb字段无定义。

在一个实施例中,当已经处理了cpu确定的字节数时,操作结束并且发生以下情形:

通用寄存器r1和r1+1中的地址和长度分别被更新。

当mm为零时,通用寄存器r2和r2+1中的地址和长度分别被更新。

为处于活动状态的输入列表更新输入listn地址和输入listn长度字段。

模型版本号被设置。

继续标志被设置为1。

当mm为零且在指令的执行期间已将一个或多个记录放置在第一操作数位置处时,将键值存储到继续记录再调用缓冲区。

继续状态缓冲区被更新。

空输入列表标志被设置为零。

空输入列表号被设置为零。

不完整输入列表标志被设置为零。

不完整输入列表号被设置为零。

条件代码3被设置。

地址和长度的形成和更新取决于寻址模式。

cpu确定的字节数取决于模型,且每次执行指令时可以是不同的数目。cpu确定的字节数通常是非零的。虽然这个数字可以是零并且表现为无进展情况(no-progresscase),但是cpu保护免于无进展情况的不断重现。

在指令以例如条件代码3被设置而结束之后,期望程序不修改指令的任何输入或输出规格并且分支返回以重新执行指令以恢复操作。

在一个实施例中,当空输入列表控制(eilcl)的比特0是1,且输入list0的长度在操作期间变为零,且正常完成不适用时,操作结束并且发生以下情况:

通用寄存器r1和r1+1中的地址和长度分别被更新。

当mm为零时,通用寄存器r2和r2+1中的地址和长度分别被更新。

为处于活动状态的输入列表更新输入listn地址和输入listn长度字段。

模型版本号被设置。

继续标志被设置为1。

当eilcl为二进制10且mm为零时,可将键值存储到继续记录再调用缓冲区。当eilcl为二进制11且mm为零时,将键值存储到继续记录再调用缓冲区。在任一情况下,在指令的执行期间已经将一个或多个记录放置在第一操作数位置处。

继续状态缓冲区被更新。

空输入列表标志被设置(参照图8,其示出了当操作结束时的各种参数块字段)。

空输入列表号被设置(参照图8)。

不完整输入列表标志被设置为零。

不完整输入列表号被设置为零。

条件代码2被设置。

地址和长度的形成和更新取决于寻址模式。

在一个实施例中,当空输入列表控制(eilcl)的比特1是1,且除了输入列表0之外的活动输入列表的长度在操作期间变为零,且正常完成不适用时,操作结束并且发生以下情况:

通用寄存器r1和r1+1中的地址和长度分别被更新。

当mm为零时,通用寄存器r2和r2+1中的地址和长度分别被更新。

为处于活动状态的输入列表更新输入listn地址和输入listn长度字段。

模型版本号被设置。

继续标志被设置为1。

当eilcl为01二进制且mm为0时,可以将键值存储到继续记录再调用缓冲区。当eilcl为二进制11且mm为零时,将键值存储到继续记录再调用缓冲区。在任一情况下,在指令的执行期间已经将一个或多个记录放置在第一操作数位置处。

继续状态缓冲区被更新。

空输入列表标志被设置(参照图8)。

空输入列表号被设置(参照图8)。

不完整输入列表标志被设置为零。

不完整输入列表号被设置为零。

条件代码2被设置。

地址和长度的形成和更新取决于寻址模式。

在一个实施例中,当遇到处于活动状态的不完整输入列表时,操作结束并且发生以下情形:

通用寄存器r1和r1+1中的地址和长度分别被更新。

当mm为零时,通用寄存器r2和r2+1中的地址和长度分别被更新。

为处于活动状态的输入列表更新输入listn地址和输入listn长度字段。

模型版本号被设置。

继续标志被设定为1。

当mm为零且在指令的执行期间已将一个或多个记录放置在第一操作数位置处时,将键值存储到继续记录再调用缓冲区。

继续状态缓冲区被更新。

空输入列表标志被设置为零。

空输入列表号被设置为零。

不完整输入列表标志(iilf)被设定为1。

所遇到的不完整输入列表的输入列表号被放置在参数块的不完整输入列表号(iiln)字段中。

条件代码2被设置。

地址和长度的形成和更新取决于寻址模式。

在一个实施例中,当第一操作数的长度不足以存储另一记录时,操作结束,且发生以下情形:

分别更新通用寄存器r1和r1+1中的地址和长度。

当mm为零时,分别更新通用寄存器r2和r2+1中的地址和长度。

为处于活动状态的输入列表更新输入listn地址和输入listn长度字段。

设置模型版本号被设置。

将继续标志设定为1。

当mm为零且在指令的执行期间已将一个或多个记录放置在第一操作数位置处时,可将键值存储到继续记录再调用缓冲区。

更新继续状态缓冲区。

空输入列表标志被设置为零。

空输入列表号被设置为零。

不完整输入列表标志被设置为零。

不完整输入列表号被设置为零

设置条件代码1。

地址和长度的形成和更新取决于寻址模式。

在一个实施例中,当合并模式(mm)为零且第二操作数的长度小于16时,操作结束,且发生以下情形:

分别更新通用寄存器r1和r1+1中的地址和长度。

分别更新通用寄存器r2和r2+1中的地址和长度。

为处于活动状态的输入列表更新输入listn地址和输入listn长度字段。

设置模型版本号。

将继续标志设定为1。

当在指令的执行期间已将一个或多个记录放置在第一操作数位置处时,可将键值存储到继续记录再调用缓冲区。

更新继续状态缓冲区。

空输入列表标志被设置为零。

空输入列表号被设置为零。

不完整输入列表标志被设置为零。

不完整输入列表号被设置为零。

设置条件代码1。

地址和长度的形成和更新取决于寻址模式。

当指令的执行在完成中结束(不是在抑制、无效或终止中结束)并且正常完成没有发生时,操作结束条件被称为部分完成。

适用时,针对第一操作数位置、第二操作数位置、继续记录再调用缓冲区和所存储的参数块的部分识别per(programeventrecording/程序事件记录)存储变更事件。当识别出per存储变更事件时,在报告事件之前,将少于4k的额外字节存储到与指定的per存储区域相交的操作数位置。

适用时,针对参数块、第一操作数位置和第二操作数位置识别per零地址检测事件。零地址检测不适用于在参数块中指定的输入列表地址和继续记录再调用缓冲区起点。

对于应用于sortl-sflr功能的其他条件的示例的描述,参考下面的其他条件(otherconditions)。

当指令以条件代码1结束时,程序可以适当地修改第一操作数地址、第一操作数长度、第二操作数地址、第二操作数长度、任何活动输入列表地址和任何活动输入列表长度,随后恢复操作。

当指令以条件代码2、iilf等于零和eilf等于零结束时,程序可以适当地修改第一操作数地址、第一操作数长度、第二操作数地址、第二操作数长度、任何活动输入列表地址和任何活动输入列表长度,随后恢复操作。

当指令以条件代码2和eilf等于1的结束时,程序可以适当地修改由eiln指定的输入列表的输入列表地址和长度,随后恢复操作。在此情况下,当合并模式(mm)为1时,程序还可修改第一操作数地址和第一操作数长度。

当指令以条件代码2和iilf等于1结束时,程序可以适当地修改由iiln指定的输入列表的输入列表地址和长度,随后恢复操作。在此情况下,当合并模式(mm)为1时,程序还可修改第一操作数地址和第一操作数长度。

当指令以条件代码3结束时、且在为了恢复操作而重新执行指令之前,程序修改任何活动输入列表地址或长度、第一操作数地址或长度、或第二操作数地址或长度,结果是不可预测的。

功能代码2:sortl-svlr(可变长度记录排序)(sortvariable-lengthrecords)

除了以下各项之外,sortl-svlr功能的操作与sortl-sflr功能的相同:

记录包括例如如图9所示的固定长度键900、8字节有效载荷长度(pl)902和可变长度有效载荷904。因此,记录具有可变长度。

忽略sortl-svlr功能的参数块的字节14至15。

每个记录的有效载荷长度字段的最低有效—例如—2字节包含的无符号二进制整数指定同一记录中的有效载荷的以字节为单位的长度。有效载荷长度零是有效的。在一个示例中,有效载荷长度将是例如8的倍数;否则,识别出通用操作数数据异常。有效载荷长度字段的最高有效—例如—6字节是保留字节并且应当包含零;否则,将来程序的操作可能不兼容。键长度8与有效载荷长度之和不大于例如4096;否则,在一个示例中,识别出通用操作数数据异常。当由于不适当的有效载荷长度而识别出通用操作数数据异常时,与遇到异常的活动输入列表相对应的输入列表地址指定错误记录的最左字节的逻辑地址。当可变长度记录被存储到第一操作数位置时,有效载荷长度字段的保留字节不被修改。

在仅试图引用来自输入列表长度大于键大小且小于记录大小的输入列表的记录的键的操作单元期间,不可以识别出不完整输入列表。在这种情况下,当试图将来自不完整输入列表的记录存储到第一操作数位置时,将识别出不完整输入列表。

sortl-svlr功能的参数块与sortl-sflr功能的参数块相同,如上文所示的字节14至15除外。

对于适用于sortl-svlr功能的其他条件的描述,请参考下面的其他条件。特殊条件(specialconditions)

在一个实施例中,当试图执行列表排序且以下的任何一项适用时,识别出指定异常:

通用寄存器0的比特57-63指定未指派或未安装的功能代码。

r1字段指定奇数号寄存器或通用寄存器0。

r2字段指定奇数号寄存器或通用寄存器0。这在合并模式(mm)为0或1时适用。

参数块不在双字边界上指定。

指定sortl-sflr功能或sortl-svlr功能,且不在双字边界上指定第一操作数。

当mm为零时,指定sortl-sflr或sortl-svlr功能,且不在双字边界上指定第二操作数。

在一个实施例中,当试图执行列表排序且以下中的任何一项适用时,识别出指定异常:

指定了sortl-sflr或sort-svlr功能,且参数块版本号的比特0-7中没有位或多个位包含值1,在这种情况下,操作被抑制。

指定了sortl-sflr或sortl-svlr功能,且由参数块版本号指定的参数块的大小或格式不被模型支持,在这种情况下,操作被抑制。

指定了sortl-sflr或sortl-svlr功能,且记录键长指定为0的键大小、不是8的倍数的键大小或大于4096的键大小,在这种情况下,操作被抑制。

指定了sortl-sflr功能,且记录有效载荷长度指定不是8的倍数的有效载荷大小,或有效载荷大小与键大小相加时大于4096,在这种情况下,操作被抑制。

指定了sortl-svlr功能,且记录有效载荷长度指定不是8的倍数的有效载荷大小,或有效载荷大小与键大小相加时大于4088,在这种情况下,操作是被抑制还是终止取决于模型。

指定了sortl-sflr或sortl-svlr功能,且活动输入列表计数码(ailcc)加一的值大于参数块所描述的输入列表的数目,在这种情况下,操作被抑制。

指定sortl-sflr或sortl-svlr功能,并且在双字边界上不指定对应于活动输入列表的输入列表地址,在这种情况下,操作被抑制。

其他条件

在一个实施例中,以下条件适用:

指令的执行是可中断的。当发生中断时,更新通用寄存器r1和r2中的地址、通用寄存器r1+1和r2+1中的长度以及参数块的特定字段,以使得指令在重新执行时在中断点处恢复。

对于在由第一操作数地址指定的位置右侧的大于4k字节的位置,访问异常不被识别。对于在由输入列表地址指定的位置右侧的大于4k字节的位置,访问异常不被识别。

如果访问异常是由于针对第一操作数、第二操作数或任何输入列表而被识别的,则结果是识别出异常或条件代码3被设置。如果条件代码3被设置,假设异常条件仍然存在,则当再次执行指令以继续处理相同的操作数时将识别出异常。

当记录的键跨越页边界并且对于两个页都存在访问异常条件时,可以识别出任一访问异常。

当对于在单个操作单元期间正在处理的多个键存在访问异常条件时,可以识别出这些条件中的任何一个。

当参数块跨越页边界并且对于两个页都存在访问异常条件时,识别出最左边页的访问异常。

当操作以部分完成而结束时,多达4k字节的数据可能已存储在第一操作数内位于由更新的第一操作数地址指定的位置处或其右侧的位置处。这样的存储导致设置改变位(当适用时)和识别per存储变更事件(当适用时)。当再次执行指令以继续处理相同操作数时,将重复存储到这些位置。

如由该cpu、其他cpu和通道程序所观察到的,对参数块、第一操作数、输出列表描述缓冲区和处于活动状态的输入列表的引用可以是多个访问引用,对这些存储位置的访问不一定是块并行的,并且这些访问或引用的序列是无定义的。

在一个实施例中,当指定功能是sortl-sflr或sortl-svlr并且以下任何一项适用时,结果是不可预测的:

参数块与任何活动输入列表或第一操作数重叠。

任何活动输入列表与第一操作数重叠。

合并模式为零,且参数块与第二操作数或继续记录再调用缓冲区重叠。

合并模式为零,且任何活动输入列表与第二操作数或继续记录再调用缓冲区重叠。

合并模式为零,且第一操作数与第二操作数或继续记录再调用缓冲区重叠。

合并模式为零,且第二操作数与继续记录再调用缓冲区重叠。

另一cpu或通道程序存储到输入列表或继续记录再调用缓冲区中的记录的键。

示例结果条件代码:

0正常完成

1第一操作数的长度小于记录的大小,或者合并模式为零且第二操作数的长度小于16(即,第一或第二操作数长度不足以继续)

2遇到不完整输入列表(iilf=1),或者eilcl为非零且输入列表的长度在操作期间变为等于零(即,遇到不完整的或空的输入列表)

3cpu确定的数据量被处理(即,cpu确定的完成)

程序异常:

访问(提取、输入列表;提取和存储、参数块和继续记录再调用缓冲区;存储、操作数1和2)

具有dxc(dataexceptioncode/数据异常码)0的数据,通用操作数

操作(如果未安装增强排序设施)

规格

事务约束

下文展示列表排序指令的执行优先级。当存在具有以13开头的优先级值的多个条件时,所识别的条件是随着操作进行而首先遇到的条件。当操作正被恢复时(在指令的执行开始时继续标志是1),可使用键之间的先前比较的历史来代替初始访问活动的且不为空的输入列表。结果,与不使用先前比较的历史时相比,在同一处理点处可能不会遇到对特定输入列表的访问的访问异常。当可变长度记录被处理时,作为记录长度的功能的条件,可以在有效载荷长度被确定之前部分地进行评估,并在有效载荷长度被确定之后完全地进行评估。结果,当在仅部分评估要求之后而不是在完全评估所有要求之后确定条件存在时,在这样的条件之中观察到的优先级可以不同。

执行优先级(sortl)

1.-6.具有与用于一般情况的程序中断条件的优先级相同的优先级的异常。

7.a第二指令半字的访问异常。

7.b操作异常。

7.c事务约束。

8.归因于无效功能代码或无效寄存器编号的指定异常(specificationexception)。

8.b归因于未在双字边界上指定的第一操作数的指定异常。

8.c归因于未在双字边界上指定的第一操作数的指定异常。

8.d归因于未在双字边界上指定的第二操作数且合并模式为零的指定异常。

9.访问参数块的字节0-7的访问异常。

10.参数块中pbvn字段的不支持值引起的通用操作数数据异常。

11.访问参数块中除字节0-7以外的字节的访问异常。

12.参数块中除pbvn之外的字段的无效值引起的通用操作数数据异常。

13.a访问活动输入列表的访问异常。

13.b当合并模式为0时访问继续记录再调用缓冲区的访问异常。

13.c访问第一操作数的访问异常。

13.d合并模式为0时访问第二操作数的访问异常。

13.e归因于不完整输入列表的条件代码2。

13.f归因于第一操作数的不足长度的条件代码1

13.g归因于在合并模式为0时第二操作数的长度不足的条件代码1。

13.h归因于可变长度记录的无效有效载荷长度的通用操作数数据异常。

13.i归因于空输入列表的条件代码2。

14.条件代码3。

编程注解(programmingnotes)。在一个实施例中:

1.空输入列表控制(emptyinputlistscontrol/eilcl)的预期用途如下:

eilcl(0:1)

(二进制)描述

00在活动输入列表的记录(例如,所有活动输入列表的所有记录)被排序之后停止。

10在输入list0(总是活动的)变为空之后停止。

11在任何活动输入列表变空之后停止。

2.当活动输入列表计数代码(ailcc)为零时,存在例如仅一个活动输入列表,且存储在第一操作数位置处的结果与从输入list0获取的数据相同。

3.实现单独指令和数据高速缓存的模型可使用指令高速缓存来执行对活动输入列表中的数据的存储操作数获取引用。

4.当程序期望以等于零的合并模式多次调用列表排序时,作为处理大数据集合的一部分,在一个示例中,该程序利用可用的输入列表并且在输入列表之间均匀地划分记录。这减少了在对整个数据集进行排序时访问数据的次数。

5.在合并模式等于零的列表排序操作以条件代码0被设置和第二操作数中的多个输出列表描述(old)结束之后,旨在按排序顺序生成单个记录列表的程序要调用另一个列表排序操作,其中指定输入列表为来自先前列表排序调用的结果old。在此情况下,在一个示例中,对列表排序的第二次调用指定等于1的合并模式。

类似地,在一个实施例中,在按需要或期望多次调用合并模式等于零的列表排序之后,为了从大量随机排序的记录生成排序的列表的完整集合,在一个示例中,按需要或期望多次调用合并模式等于1的列表排序,以生成单个排序的列表。

6.在一个实施例中,为了减少在将多个排序的列表合并成(例如)按升序排序的单个列表时每个记录被访问的次数,程序执行以下处理:

确定可用于列表排序的输入列表的最大数目n。

比较尚未合并到单个列表中的排序的列表的第一记录的键。选择第一键值最小的n个列表。

执行合并模式(mm)等于1的列表排序,其中空输入列表控制(eilcl)等于二进制10,输入list0仅指定选定的n个列表的具有最高第一键值的列表的第一记录,且剩余输入列表指定其他n-1个选定的列表。

在以条件代码2、iilf等于零且eilf等于零结束的列表排序之后,重复所述过程。

7.在列表排序以条件代码1被设置而结束之后,在一个示例中,在再次调用列表排序之前,程序执行以下动作以恢复操作:

如果第一操作数长度小于正被处理的记录的最大记录长度,则应适当更新第一操作数长度或第一操作数地址和长度。

如果合并模式(mm)为零并且第二操作数长度小于16,则应适当更新第二操作数长度或第二操作数地址和长度。

如果任何活动输入列表的长度等于零,则可以更新对应的输入列表地址和长度以指定将被包括在排序操作中的另一记录列表。

8.在列表排序以条件代码2被设置而结束之后,在一个示例中,在再次调用列表排序之前,程序执行以下动作以恢复操作:

如果不完整输入列表标志(iilf)为1,则应适当地更新输入列表长度或输入列表地址以及由不完整输入列表号(iiln)标识的输入列表的长度。

如果空输入列表标志(eilf)为1,则应适当地更新输入列表长度或输入列表地址和由空输入列表号(eiln)标识的输入列表的长度。

如果iilf为零,eilf为零,且输入list0长度为零,则应适当地更新输入list0长度或输入list0地址和长度。此外,还可以更新活动输入列表的输入列表地址和长度,如果仅存在一个最初由输入list0指定的记录,并且空输入列表控制(eilcl)是二进制10,那么这可能是适当的动作。

如果合并模式(mm)为1且第一操作数长度小于正被处理的记录的最大记录长度,则应适当地更新第一操作数长度或第一操作数地址和长度。

如果mm为零并且iilf为1或eilf为1,则不应更新第一操作数地址和长度以及第二操作数地址和长度。

如果mm为零、iilf为零、eilf为零,并且第一操作数长度小于正被处理的记录的最大记录长度,则应适当地更新第一操作数长度或第一操作数地址和长度。

如果mm为零、iilf为零、eilf为零,并且第二操作数长度小于16,则应适当地更新第二操作数长度或第二操作数地址和长度。

如本文中所描述,在一个方面中,提供单个指令(例如,单一架构的机器指令、列表排序)以在通用处理器上执行排序和/或合并操作。在一个示例中,实现针对数据库的排序和/或合并操作并且在通用处理器上执行的程序能够用单个指令替换基本指令的重要子集以实现操作。该指令例如是指令集架构(isa)中定义的硬件指令。结果,减少了与排序和/或合并操作相关的程序的复杂度。此外,提高了操作的性能,并因此提高了处理器的性能。

有利地,在通用处理器(例如,中央处理单元,本文中称为处理器)上而非专用处理器(诸如图形处理单元(gpu)、数据库引擎(dbe)或其他类型的专用处理器)上执行列表排序指令。

尽管描述了不同字段和寄存器,本发明的一个或多个方面可以使用其他、附加或更少的字段或寄存器,或其他大小的字段和寄存器等。许多变化是可能的。例如,可以使用隐式寄存器来代替显式指定的指令寄存器或字段,和/或可以使用显式指定的寄存器或字段来代替隐式寄存器或字段。其他变化也是可能的。

在一个示例中,列表排序指令对数据库(例如商业数据库)的大量数据(诸如兆字节或兆字节)起作用。因此,指令是可中断的,并且处理可在中断的地方恢复。

当指令被中断时,操作(如排序和/或合并)仅部分完成。指令的执行以将条件代码设置为一个值而结束,该值将操作的部分完成通知程序(例如,发出指令的程序)。然后,程序可重新执行指令以恢复处理。

在一个实施例中,该指令采用一定数量(例如,显著数量的)的执行周期,以在产生结果之前向处理器提供元数据。每次执行或重新执行指令时,都会使用元数据启动处理器。因此,根据本发明的一个方面,存储和使用先前产生的元数据,使得在重新执行指令时不必重新生成先前产生的元数据。

在一个示例中,元数据包括处理器的内部状态,包括例如关于输入列表的信息,例如关于输入列表的记录的先前比较的信息,以便确定要进行的下一比较。

处理器提取元数据并将其存储在程序提供的位置。然后,当中断后要重新执行指令时,将从该位置提取元数据并将其加载到处理器中,而不使用任务来重新生成元数据。这节省了原本要为操作生成元数据所需的时间。

在一个特定实例中,计算环境是包括多个系统的计算复合体,该多个系统可以链接在一起作为单一系统镜像运行。各个系统(例如,处理器)可以不是相同的模型类型或版本。可以发布程序以在计算复合体内的任何处理器上执行。进一步,个别指令可以在一个处理器上执行,以部分完成而结束,并且在不同处理器上重新执行以恢复操作。在一个实施例中,指令支持保存和加载模型相关数据,模型相关数据并非恢复操作所必须的,但是可以用于最小化与恢复操作相关联的开销。模型相关元数据是根据处理器的模型而存储/加载并且在指令(例如,排序指令)的执行期间累积的元数据。如果例如重新执行指令的处理器能够解译模型相关元数据,则在指令的重新执行时使用模型相关元数据。基于重新执行指令作出关于处理器是否能够解译模型相关元数据的确定。如果是,则在一个实例中,在重新执行指令时使用模型相关元数据,以改善操作处理和计算环境内的性能。

在一个实施例中,将在中断之前执行指令的处理器的版本的指示(例如,模型版本号)保存在由指令指定的位置中(例如,参数块中)。如果重新执行指令且先前执行指令的处理器的模型版本号与被选择来重新执行指令的处理器的模型版本号具有预定义关系(例如,相等),则在重新执行指令时使用模型相关元数据。

参照图10a-10b描述恢复执行操作的一个实施例的进一步细节。例如,图10a描绘与部分完成的指令相关联的处理;图10b描绘与恢复部分完成的指令的执行相关联的处理。在此示例中,指令是执行排序和/或合并的指令,例如列表排序(sortlist)指令;然而,在其他示例中,指令可以是其它可中断的指令。图10a-10b的处理例如由处理器(例如,处理器102或204)执行。

首先参照图10a,在处理器上执行的并且执行诸如排序和/或合并等操作的指令在完成操作之前被中断,步骤1000。基于该部分完成,将继续指示符(例如,参数块360的继续标志368)例如设置为1,以指示部分完成,步骤1002。此外,将处理器的模型相关元数据,例如对于排序或合并操作,关于输入列表的记录的先前比较的信息,存储在参数块中,例如,存储在继续状态缓冲区390中,步骤1004。

之后,参照图10b,在选择的处理器上执行指令(例如,排序/合并指令)(步骤1050)。如果这是指令的重新执行,则处理器是例如先前执行指令的相同处理器或计算复合体的不同处理器。确定继续指示符是否被设置得指示此为指令的重新执行(问询1052)。如果继续指示符被设置为指示操作的恢复(步骤1053),则在一个实施例中,进一步确定选择的处理器的模型类型或版本是否与在指令被中断时执行指令的处理器的模型类型或版本相同或兼容。例如,确定先前处理器的模型版本号是否与选择的处理器的模型版本号相同(问询1054)。如果模型版本号相同(或者有处理器兼容的另一指示),那么提取保存在例如继续状态缓冲器390中的模型相关数据(步骤1056),将其加载到处理器内的一个或多个选择位置中(步骤1058)。然后在重新执行指令时使用所提取和加载的模型相关数据(步骤1060)。例如,不是重复先前执行的比较,而是使用模型相关数据来确定要进行的下一比较,由此减少执行时间并提高性能。

返回到问询1054,如果模型版本号不相同,则在一个实施例中,在不使用模型相关数据的情况下继续对指令的重新执行,步骤1062。进一步,在一个实施例中,如果继续指示符未被设置(问询1052),则此指令开始操作,而不是恢复操作(步骤1064)。因此,在一个实施例中,操作在不使用来自参数块360的继续状态缓冲器390的数据(例如,模型相关数据)的情况下进行(步骤1066)。

本发明的一个或多个方面与计算机技术密不可分,有助于计算机内部的处理,从而提高其性能。在中断后重新执行指令时,使用所提取和保存的元数据,而不是重新生成元数据,节省了时间并提高了计算环境內的性能。

在一个特定实例中,被重新执行的指令是列表排序指令,其是单一架构的机器指令,用于代替多条软件指令来执行数据库的大量数据库记录的排序和/或合并,从而改进计算环境内的性能。这些排序的和/或合并的记录可以用于许多管理和/或使用大量数据的技术领域,如计算机处理、医疗处理、安全性等。通过在排序/合并中提供优化,这些技术领域由于减少在获取信息和使用信息时的执行时间,以及减少存储要求,从而得到改进。

参照图11a-11b描述了在计算环境内促进处理的一个实施例的进一步细节,因为它涉及本发明的一个或多个方面。

参照图11a,在一个实施例中,确定在处理器上执行的指令的操作的处理在完成之前已经被中断(1100)。在选择的处理器上重新执行指令以恢复指令的向前处理(1102)。重新执行包含确定选择的处理器在重新执行指令时是否要使用模型相关元数据(1104)。基于确定要使用模型相关元数据,在重新执行指令中使用模型相关元数据(1106)。基于确定不要使用模型相关元数据,在不使用模型相关元数据的情况下继续重新执行指令(1108)。

在一个实施例中,确定是否要使用模型相关元数据包括将已经被中断的处理器的模型版本指示与选择的处理器的模型版本指示进行比较(1110)。基于选择的处理器的模型版本指示与所述处理器的模型版本指示具有预定义关系,模型相关元数据要在重新执行指令中被使用(1112)。作为示例,预定义关系是相等(1114)。

在一个实施例中,所述处理器的模型版本指示是存储在由指令指定的位置中的模型版本号(1116)。该位置例如是存储器中的参数块(1118)。进一步,存储器中的参数块还包括模型相关元数据(1120)。

作为示例,参照图11b,重新执行指令进一步包括检查继续指示符以确定所述操作是否部分完成(1122)。基于继续指示符被设置得指示所述操作部分完成,确定是否要使用模型相关元数据(1124)。继续指示符例如存储在存储器中的参数块中(1126)。

在一个实施例中,使用模型相关元数据包括从由指令指定的位置提取模型相关元数据(1128);以及将从该位置提取的模型相关元数据加载到选择的处理器的一个或多个选择位置中(1130)。将模型相关元数据提供给选择的处理器而不重复一个或多个产生模型相关元数据的任务(1132)。作为示例,由指令指定的位置包含由指令指定的存储器中的参数块的继续状态缓冲器(1134)。

其他变化和实施例皆有可能。

本发明的方面可由许多类型的计算环境使用。参看图12a描述用以并入且使用本发明的一个或多个方面的计算环境的另一实施例。在此示例中,计算环境1100包含(例如)本地中央处理单元(cpu)12、存储器14和通过(例如)一个或多个总线18和/或其他连接而彼此耦合的一个或多个输入/输出装置和/或接口16。作为示例,计算环境100可以包括由纽约州阿蒙克市的国际商业机器公司提供的处理器;具有intelitaniumii处理器的hpsuperdome,其由美国加州paloalto惠普公司提供;和/或基于由国际商业机器公司、惠普、英特尔公司、甲骨文或其他公司提供的架构的其他机器。ibm、z/architecture、ibmz、z/os、pr/sm和powerpc是国际商业机器公司在至少一个管辖区域中的商标或注册商标。intel和itanium是英特尔公司或其子公司在美国和其他国家的商标或注册商标。

本地中央处理单元12包括一个或多个本地寄存器20,诸如在环境内的处理期间使用的一个或多个通用寄存器和/或一个或多个专用寄存器。这些寄存器包括表示环境在任何特定时间点的状态的信息。

此外,本地中央处理单元12执行存储在存储器14中的指令和代码。在一个特定示例中,中央处理单元执行存储在存储器14中的仿真器代码22。此代码使在一个架构中配置的计算环境能够模拟另一架构。例如,仿真器代码22允许基于除z/architecture硬件架构之外的架构的机器(诸如powerpc处理器、hpsuperdome服务器或其他)仿真z/architecture硬件架构并执行基于z/architecture硬件架构开发的软件和指令。

参照图12b描述与仿真器代码22有关的进一步细节。存储在存储器14中的客户指令30包括为在不同于本地cpu12的架构的架构中执行的而开发的软件指令(例如,与机器指令相关)。例如,客户机指令30可能已经被设计得用以在基于z/architecture硬件架构处理器上执行,但改为在本地cpu12上仿真,所述本地cpu12可为(例如)intelitaniumii处理器。在一个示例中,仿真器代码22包括指令获取例程32,以从存储器14获得一个或多个客户指令30,并且可选地为所获得的指令提供本地缓冲。它还包括指令转换例程34以确定已经获得的客户指令的类型并将客户指令转换成一个或多个对应的本机指令36。此转换包含(例如)识别将由客户指令执行的功能及选择原生指令以执行所述功能。

进一步,仿真器代码22包括仿真控制例程40以使得本机指令被执行。仿真控制例程40可致使本地cpu12执行模拟一个或多个先前获得的客户指令的本地指令的例程,且在此执行结束时,将控制返回到指令获取例程以模拟下一客户指令或一组客户指令的获得。本机指令36的执行可包含如由转换例程确定的将数据从存储器14加载到寄存器中;将数据从寄存器存储回存储器;或执行某种类型的算术或逻辑运算。

每一例程例如以软件实现,所述软件存储在存储器中且由本地中央处理单元12执行。在其他示例中,在固件、硬件、软件或其某一组合中实施例程或操作中的一个或多个。仿真处理器的寄存器可使用本地cpu的寄存器20或通过使用存储器14中的位置来模拟。在实施例中,客户指令30、本机指令36和仿真器代码22可以驻留在相同的存储器中或者可以分布在不同的存储器设备之间。

上文所描述的计算环境仅为可使用的计算环境的示例。可以使用其他环境,包括但不限于其他非分区环境、其他分区环境和/或其他仿真环境;实施例不限于任何一个环境。

每个计算环境都能够被配置得包括本发明的一个或多个方面。例如,根据本发明的一个或多个方面,每个计算环境可以被配置得提供进行排序和/或合并。

一个或多个方面可以涉及云计算。

应当理解,尽管本公开包括关于云计算的详细描述,但是本文所引用的教导的实现不限于云计算环境。相反,本发明的实施例能够结合现在已知或以后开发的任何其他类型的计算环境来实现。

云计算是一种服务交付模型,用于实现对可配置计算资源(例如,网络、网络带宽、服务器、处理、存储器、存储、应用、虚拟机和服务)的共享池的方便、按需的网络访问,所述可配置计算资源可以用最小的管理努力或与服务提供商的交互来快速配置和释放。该云模型可以包括至少五个特性、至少三个服务模型和至少四个部署模型。

特性如下:

按需自助服务:云消费者可按需自动地单方面供应计算能力,诸如服务器时间和网络存储,而无需与服务提供商进行人工交互。

广泛的网络接入:通过网络提供功能,并通过标准机制进行访问,所述标准机制促进由异构的瘦客户端或厚客户端平台(例如,移动电话、膝上型计算机和pda)的使用。

资源池化:提供者的计算资源被汇集起来以使用多租户模型来服务于多个消费者,不同的物理和虚拟资源根据需要被动态分配和重新分配。存在位置独立性的意义,因为消费者通常对所提供资源的确切位置不具有控制权或知识,但可能能够指定更高抽象层级的位置(例如,国家、州或数据中心)。

快速弹性:在某些情况下,可以快速且弹性地配置功能,以快速扩展缩小并迅速释放以快速收缩。对于消费者而言,可用于配置的功能通常似乎是无限的,可以在任何时间以任何数量购买。

度量的服务:云系统通过利用与服务类型(例如,存储、处理、带宽和活动用户帐户)相适应的某种抽象层级的计量能力,自动控制和优化资源使用。可以监视、控制和报告资源使用情况,为所使用服务的提供者和使用者提供透明性。

服务模型如下:

软件即服务(saas):向消费者提供的能力是使用在云基础设施上运行的提供者的应用。这些应用可通过诸如web浏览器(例如,基于web的电子邮件)的瘦客户端接口从不同客户端设备访问。消费者不管理或控制包括网络、服务器、操作系统、存储或甚至个体应用功能的底层云基础结构,可能的例外是有限的用户特定的应用配置设置。

平台即服务(paas):向消费者提供的能力是在云基础结构上部署消费者创建或获取的应用,所述应用是用提供者所支持的编程语言和工具创建的。消费者不管理或控制包括网络、服务器、操作系统或存储的底层云基础结构,但是具有对所部署的应用以及可能的应用托管环境配置的控制。

基础设施即服务(iaas):向消费者提供的能力是提供消费者能够部署和运行可包括操作系统和应用的任意软件的处理、存储、网络和其他基本计算资源。消费者不管理或控制底层云基础结构,而是具有对操作系统、存储、所部署的应用的控制,以及对所选联网组件(例如,主机防火墙)的可能有限的控制。

部署模型如下:

私有云:云基础结构仅为组织运营。它可以由组织或第三方管理,并且可存在于场所内或场所外。

社区云:云基础结构由多个组织共享,并支持具有共同关注点(例如,任务、安全要求、策略和合规性考虑)的特定社区。它可以由组织或第三方管理,并且可存在于场所内或场所外。

公共云:云基础结构可供公众或大型行业团体使用,并由销售云服务的组织拥有。

混合云:云基础结构是由两个或更多个云(私有、社区或公共的)组成的,这些云仍然是唯一性实体,但通过标准化或专有技术来绑定在一起,这些技术实现数据和应用的可移植性(例如,用于云之间的负载平衡的云突发)。

云计算环境是面向服务的,着重于无状态性、低耦合、模块化和语义互操作性。云计算的核心是包括互连节点网络的基础架构。

现在参照图13,描绘说明性云计算环境50。如图所示,云计算环境50包括一个或多个云计算节点52,云消费者使用的本地计算设备(诸如个人数字助理(pda)或蜂窝电话54a、台式计算机54b、膝上型计算机54c和/或汽车计算机系统54n)可与云计算节点52通信。节点52可以彼此通信。它们可以在一个或多个网络中,诸如在上文所述的私有云、社区云、公共云或混合云或其组合中,被物理地或虚拟地分组(未示出)。这允许云计算环境50提供基础结构、平台和/或软件作为服务,云消费者不需要为其在本地计算设备上维护资源。应当理解,图13中所示的计算设备54a-n的类型仅旨在是说明性的,并且计算节点52和云计算环境50可通过任何类型的网络和/或网络可寻址连接(例如,使用网络浏览器)与任何类型的计算机化设备进行通信。

现在参照图14,示出了由云计算环境50(图13)提供的一组功能抽象层。应预先理解,图14中所示的部件、层和功能旨在仅是说明性的,并且本发明的实施例不限于此。如图所示,提供了以下层和相应的功能:

硬件和软件层60包括硬件和软件组件。硬件组件的示例包括:主机61;基于risc(精简指令集计算机)架构的服务器62;服务器63;刀片服务器64;存储65;以及网络和联网组件66。在一些实施例中,软件组件包括网络应用服务器软件67和数据库软件68。

虚拟化层70提供抽象层,从该抽象层可以提供虚拟实体的以下示例:虚拟服务器71;虚拟存储72;虚拟网络73,包括虚拟专用网络;虚拟应用和操作系统74;以及虚拟客户端75。

在一个示例中,管理层80可提供下文所描述的功能。资源供应81提供用于执行云计算环境内的任务的计算资源和其他资源的动态获取。计量和定价82在云计算环境内利用资源时提供成本跟踪,并针对这些资源的消费进行计费或开票。在一个示例中,这些资源可以包括应用软件许可证。安全性为云消费者和任务提供身份验证,以及对数据和其他资源的保护。用户门户83为消费者和系统管理员提供对云计算环境的访问。服务水平管理84提供云计算资源分配和管理,使得满足所需的服务级别。服务水平协议(sla)计划和履行85为根据sla预期的云计算资源的未来要求提供云计算资源的预安排和采购。

工作负载层90提供可以利用云计算环境的功能的示例。可以从该层提供的工作负荷和功能的示例包括:地图和导航91;软件开发和生命周期管理92;虚拟教室教育交付93;数据分析处理94;事务处理95;以及排序和/或合并处理96。

本发明的各个方面可以是处于任何可能的技术细节集成水平的系统、方法和/或计算机程序产品。所述计算机程序产品可包含上面具有计算机可读程序指令的计算机可读存储介质(或媒体),所述计算机可读程序指令用于致使处理器执行本发明的方面。

计算机可读存储介质可以是可以保留和存储指令以供指令执行设备使用的有形设备。计算机可读存储介质可以是例如但不限于电子存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或前述各项的任何合适的组合。计算机可读存储介质的更具体例子的非穷举列表包括以下:便携式计算机盘,硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦除可编程只读存储器(eprom或闪存),静态随机存取存储器(sram)、便携式致密盘只读存储器(cd-rom),数字通用盘(dvd)、记忆棒、软盘、机械编码设备(诸如穿孔卡片)或具有记录在其上的指令的凹槽中的凸起结构),以及上述的任意合适的组合。如本文中所使用的计算机可读存储介质不应被解释为瞬态信号本身,诸如无线电波或其他自由传播的电磁波、通过波导或其他传输介质传播的电磁波(例如,通过光纤电缆的光脉冲)、或通过导线传输的电信号。

本文所述的计算机可读程序指令可从计算机可读存储介质下载到相应的计算/处理设备,或经由网络(例如,互联网、局域网、广域网和/或无线网络)下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光传输光纤、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配器卡或网络接口从网络接收计算机可读程序指令并且转发这些计算机可读程序指令以便存储在对应的计算/处理设备内的计算机可读存储介质中。

用于执行本技术方案的操作的计算机可读程序指令可以是汇编指令,指令集架构(isa)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据,集成电路的配置数据,或以一种或多种编程语言的任何组合编写的源代码或目标代码,包括面向对象的smalltalk、c++等编程语言,以及过程式编程语言,例如“c”编程语言或类似的编程语言。计算机可读程序指令可完全在用户的计算机上执行、部分在用户的计算机上执行、作为独立软件包执行、部分在用户的计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在后一种情形中,远程计算机可以通过任何类型的网络(包括局域网(lan)或广域网(wan))连接到用户的计算机,或者可以连接到外部计算机(例如,通过使用互联网服务提供商的互联网)。在一些实施例中,电子电路(包括例如可编程逻辑电路、现场可编程门阵列(fpga)或可编程逻辑阵列(pla))可以通过使用计算机可读程序指令的状态信息来执行计算机可读程序指令以使电子电路个性化,以便执行本技术方案的各方面。

在此参照根据技术方案的实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图来描述本技术方案的各方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令来实现。

这些计算机可读程序指令可以被提供给通用计算机的处理器,专用计算机或其他可编程数据处理装置,以产生机器,其通过计算机或其他可编程数据处理装置的处理器执行,创建用于实现在流程图和/或方框图的一个或多个方框中指定的功能/动作的装置。这些计算机可读程序指令还可存储在可指导计算机的计算机可读存储介质中,可编程数据处理装置,和/或以特定方式起作用的其他设备,使得具有存储在其中的指令的计算机可读存储介质包括制品,该制品包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各方面的指令。

计算机可读程序指令还可以加载到计算机、其他可编程数据处理装置上,或使得在计算机上执行一系列操作步骤的其他装置,其他可编程装置或其他设备,以产生计算机实现的过程,使得在计算机上执行的指令,其他可编程装置或其他设备实现流程图和/或框图中的一个或多个方框中指定的功能和动作。

附图中的流程图和框图示出了根据本技术方案的不同实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。对此,流程图或框图中的每个方框可以代表模块、段或指令的一部分,其包括用于实现规定的逻辑功能的一个或多个可执行指令。在一些替代实施例中,框中所标注的功能可以不以图中所标注的次序发生。例如,取决于所涉及的功能,连续示出的两个框实际上可以基本上同时执行,或者这些框有时可以以相反的顺序执行。还将注意的是,框图和/或流程图中的每个框、以及框图和/或流程图中的框的组合可以由基于专用硬件的系统来实现,所述基于专用硬件的系统执行指定的功能或动作或执行专用硬件与计算机指令的组合。

除上述之外,一个或多个方面可由提供客户环境管理的服务提供商提供、承诺、部署、管理、服务等。例如,服务提供商可创建、维护、支持为一个或多个客户执行一个或多个方面的计算机代码和/或计算机基础设施。作为回报,服务提供商例如可根据订阅和/或费用协议从消费者接收支付。附加地或替代地,服务提供商可以从广告内容向一个或多个第三方的销售接收支付。

在一个方面,可部署用于执行一个或多个实施例的应用程序。作为一个示例,应用程序的部署包括提供可操作用于执行一个或多个实施例的计算机基础设施。

作为另一方面,可部署计算基础架构,包括将计算机可读代码集成到计算系统中,其中与计算系统结合的代码能够执行一个或多个实施例。

作为又一方面,可提供一种用于集成计算基础结构的过程,所述过程包括将计算机可读代码集成到计算机系统中。计算机系统包括计算机可读介质,其中计算机介质包括一个或多个实施例。与计算机系统结合的代码能够执行一个或多个实施例。

尽管上面描述了各种实施例,但是这些仅是示例。例如,可以使用其他架构的计算环境来包括和使用一个或多个实施例。进一步,可使用不同的指令或操作。另外,可以使用不同的寄存器和/或可以指定其他类型的指示(除寄存器号之外)。许多变化是可能的。

进一步,其他类型的计算环境可以受益并且可以被使用。作为示例,适合于存储和/或执行程序代码的数据处理系统是可用的,其包括直接地或通过系统总线间接地耦合到存储器元件的至少两个处理器。存储器元件包括例如在程序代码的实际执行期间采用的本地存储器、大容量存储装置以及提供至少一些程序代码的临时存储以便减少在执行期间必须从大容量存储装置检索代码的次数的高速缓冲存储器。

输入/输出或i/o设备(包括但不限于键盘、显示器、指点设备、dasd、磁带、cd、dvd、拇指驱动器和其他存储介质等)可以直接地或通过中间i/o控制器耦合到系统。网络适配器也可以耦合到系统,以使得数据处理系统能够通过居间的私有或公共网络变得耦合到其他数据处理系统或远程打印机或存储设备。调制解调器、电缆调制解调器和以太网卡仅是网络适配器的可用类型中的少数几种。

在此使用的术语仅用于描述具体实施例的目的并且不旨在是限制性的。如在此使用的,单数形式“一个”、“一种”和“该”旨在也包括复数形式,除非上下文另外清楚地指示。将进一步理解的是,当在本说明书中使用术语“包括”和/或“包含”时,其指定所陈述的特征、整数、步骤、操作、元件和/或组件的存在,但不排除一个或多个其他特征、整数、步骤、操作、元件、组件和/或其组的存在或添加。

以下权利要求中的所有装置或步骤加上功能元件(如果有的话)的相应结构、材料、动作和等效物旨在包括用于结合如具体要求保护的其他要求保护的元件来执行功能的任何结构、材料或动作。出于说明和描述的目的已经给出了对一个或多个实施例的描述,但是并不旨在是详尽的或限于所公开的形式。许多修改和变化对本领域的普通技术人员将是明显的。选择和描述实施例以便最好地解释各个方面和实际应用,并且使得本领域普通技术人员能够理解具有适合于所预期的特定用途的不同修改的不同实施例。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1