便利无环境主机干预下的可分页模式虚拟环境存储管理的制作方法

文档序号:6619448阅读:235来源:国知局
专利名称:便利无环境主机干预下的可分页模式虚拟环境存储管理的制作方法
技术领域
本发明通常涉及输入/输出(I/O)处理,并尤其涉及便利管理在I/O处理期间使用的虚拟存储器。
背景技术
提高输出/输出(I/O)处理的效率不断地取得很大进展;但是,仍需要进一步提高。作为一个例子,需要提高对在输入/输出处理期间使用的虚拟存储器的管理。例如,需要提高在可分页模式的虚拟环境内对缺页的处理。
目前,当在可分页模式的虚拟机内执行的客户(guest)操作系统执行一引用当前不被物理存储器支持的数据页的操作时,发生到主机的缺页中断。该中断造成从客户执行模式转到主机执行模式的上下文切换开销;主机页分配;主机页表修正;以及主机启动的从主机执行模式转到客户执行模式的另一个上下文切换。该上下文切换和/或其他处理会导致大量开销,从而使得效率降低并且成本增加。
虚拟存储器管理的其他方面,包括例如在管理客户I/O缓冲器页期间(例如在排队直接输入/输出(QDIO)体系结构的虚拟化所需的客户和主机队列同步期间)在物理存储器中钉住(pin)页以及释放(unpin)被钉住的页,也需要改进以减小开销并降低成本。
因此,需要能够提高输入/输出处理的能力。例如,需要能够便利管理可分页模式的虚拟环境的存储器的能力。

发明内容
通过提供一种便利管理可分页模式的虚拟环境的存储器的方法克服了现有技术中的缺点并提供了额外的优点。该方法包括例如管理一可分页模式的虚拟环境中的存储器,该管理由该可分页模式的虚拟环境中的处理器在不存在该可分页模式的虚拟环境的主机干预的情况下执行。
管理存储器的例子包括解决存储故障(storage fault),在物理存储器中钉住页,以及释放被钉住的页。
这里还说明和要求保护了对应于上述方法的系统和计算机程序产品。
通过本发明的技术还可实现了其他的特征和优点。本发明的其他实施例和方面在本说明书中作了详细说明,并且被认为是被要求保护的本发明的一部分。


在说明书结尾部分的权利要求中具体指出和明确要求保护了本发明的主题。从下面结合附图的详细说明中可清楚地了解本发明的前述和其他目标、特征和优点。在该些附图中图1A示出一结合并使用本发明的一个或多个方面的计算环境的实施例;图1B示出根据本发明的一个方面的、图1a的I/O子系统的进一步细节;图2A-2B示出根据本发明的一个方面的与客户配置有关的逻辑的一实施例;图3A示出根据本发明的一个方面的存储通道子系统特性命令的请求块的一示例;图3B示出根据本发明的一个方面的存储通道子系统特性命令的响应块的一示例;图4A示出根据本发明的一个方面的存储子通道QDIO数据命令的请求块的一示例;图4B示出根据本发明的一个方面的存储子通道QDIO数据命令的响应块的一示例;
图4C示出根据本发明的一个方面的、图4B的响应块的子通道QDIO描述块的一示例;图5示出根据本发明的一个方面的、QDIO队列的数据结构的一实施例;图6A示出根据本发明的一个方面的QDIO缓冲器信息控制块(QBICB)的一示例;图6B示出根据本发明的一个方面的、图6A的QBICB的队列存储器描述符的一示例;图6C示出根据本发明的一个方面的、光纤通道协议(FCP)操作块(FOB)的一示例;图7A示出根据本发明的一个方面的设定通道子系统特性命令的请求块的一示例;图7B示出根据本发明的一个方面的、图7A的请求块的操作数据区域的一示例;图7C示出根据本发明的一个方面的、设定通道子系统特性命令的响应块的一示例;图8A-8C示出根据本发明的一个方面的、与用于网络协议I/O请求的设定QDIO缓冲器状态指令有关的逻辑的一实施例;图9是根据本发明的一个方面使用的帧描述符的一示例;图10示出根据本发明的一个方面的设定QDIO缓冲器状态命令的格式的一示例;图11A示出根据本发明的一个方面的页状态表项(PGSTE)的一示例;图11B示出根据本发明的一个方面的页表项(PTE)的一示例;图12示出根据本发明的一个方面的与钉住函数有关的逻辑的一实施例;图13A-13B示出根据本发明的一个方面的与解决(resolve)函数有关的逻辑的一实施例;图14A-14C示出根据本发明的一个方面的与用于网络协议I/O请求的提取QDIO缓冲器状态指令有关的逻辑的一实施例;图15示出根据本发明的一个方面的、提取QDIO缓冲器状态指令的格式的一示例;图16示出根据本发明的一个方面的、与由虚拟地址释放主机页函数有关的逻辑的一实施例;图17示出根据本发明的一个方面的与由PTE地址释放主机页函数有关的逻辑的一实施例;图18A-18D示出与用于光纤通道协议I/O请求的设定QDIO缓冲器状态指令有关的逻辑的一实施例;图19A-19E示出与用于光纤通道协议I/O请求的提取QDIO缓冲器状态指令有关的逻辑的一实施例。
具体实施例方式
根据本发明的一个方面,在没有主机干预的情况下解释来自可分页存储器的客户(例如,V=V客户)的I/O操作请求。例如,提供这样一种能力,其使得主机例如z/VM系统管理程序和处理器例如zSeries处理器的硬件/固件以一种受控的合作方式相交互,以便处理V=V客户操作系统QDIO操作而不要求从/向客户操作系统和主机转移控制。
另外,在本发明的另一方面,提供了主机页管理辅助函数,这些函数可在解释可分页存储模式的客户期间被调用。这些函数包括用于动态解决主机页无效状况的解决主机页函数;用于指示主机页的内容被钉住在主机页帧内的钉住主机页函数;和用于指示主机页的内容已不再钉住在一主机页帧内的一由虚拟地址释放主机页函数和/或一由PTE地址释放主机页函数。
参照图1A说明了纳入和使用本发明的一个或多个方面的计算环境的一实施例。计算环境100基于例如纽约Armonk的国际商业机器公司提供的z/体系结构。2003年6月的题为“z/Architecture Principles of Operation”的IBM出版物No.SA22-7832-02中说明了该z/结构,在此将该出版物全文引入本文,作为参考。(IBM是美国纽约Armonk的国际商业机器公司的注册商标。本文中使用的其他名称可能是国际商业机器公司或其他公司的注册商标、商标或产品名称)。在一个例子中,基于z/体系结构的计算环境包括纽约Armonk的国际商业机器公司提供的eServer zSeries。
例如,计算环境100包括提供虚拟机支持的中央处理器复合体(CPC)。CPC 102包括例如一个或多个虚拟机104,一个或多个中央处理器106,至少一个主机108(例如,如系统管理程序的一控制程序)和输入/输出子系统110,下面将对这些中的每个进行说明。
CPC的虚拟机支持提供了操作大量虚拟机的能力,每个虚拟机均可作为一客户操作系统112例如Linux的主机。每个虚拟机104能够用作独立的系统。即,每个虚拟机可独立地被复位、作为客户操作系统的主机以及使用不同的程序进行操作。在虚拟机中运行的操作系统或应用程序看起来可访问全部的和完整的系统,但是实际上仅能使用该系统的一部分。
在此具体示例中,虚拟机的模型是V=V模型,其中虚拟机的存储器由虚拟存储器而不是实际存储器支持。每个虚拟机均具有一虚拟机线性存储器空间。主机108拥有物理资源,并且如果需要则主机将共享的物理资源分派给客户操作系统以满足客户操作系统的处理要求。该V=V虚拟机模型假设客户操作系统和物理的共享的机器资源之间的交互由主机控制,这是因为大量的客户通常阻止了主机简单地进行分区以及将硬件资源分配给配置的客户。2001年10月的题为“z/VMRuing Guest Operating System”的IBM出版物No.SC24-5997-02中进一步说明了V=V模型的一个或多个方面,在此将该出版物全文引入本文,作为参考。
中央处理器106是可分配给虚拟机的物理处理器资源。例如,虚拟机104包括一个或多个逻辑处理器,每个逻辑处理器代表可动态分配给该虚拟机的物理处理器资源106的全部或一部分。虚拟机104由主机108管理。例如该主机可在处理器106上运行的微码中实现,或者是在该机器上执行的主操作系统的一部分。在一个示例中,主机108是VM系统管理程序,例如纽约Armonk的国际商业机器公司提供的z/VM。2001年10月的题为“z/VMGeneral Information Manual”的IBM出版物No.GC24-5991-04中说明了z/VM的一个实施例,在此将该出版物全文引入本文,作为参考。
输入/输出子系统110指引信息在设备和主存储器之间的流动。该子系统与中央处理复合体相连接,其方式为该子系统可以是中央处理复合体的一部分或与该中央处理复合体分开。该I/O子系统解除了中央处理器与连接到CPC的I/O设备直接通信的任务,并且允许数据处理与I/O处理同时进行。在一个实施例中,I/O子系统是基于排队直接I/O(QDIO)体系结构,2003年2月11日授予的,Markos等人的标题为“Method and ApparatusFor Providing Configuration Information Using A Queued DirectInput-Output Device”的美国专利No.6,519,645B2中说明了该QDIO结构的一个示例,在此将该专利全文引入本文,作为参考。下面将参照图1B说明I/O子系统110的进一步细节。
I/O子系统110包括连接到多个I/O设备122的多个适配器120。一个特定的适配器可与一个或多个I/O设备相连接,并且一个I/O设备可与一个或多个适配器相连接。
适配器的一个示例是QDIO适配器。QDIO适配器提供了通常与输入/输出控制部件相关联的功能以及通常与输入/输出通道相关联的功能。QDIO适配器具有直接访问主存储器,以便与可访问同一主存储器的程序交换数据的能力。
QDIO适配器的逻辑表示是QDIO控制部件。可以有一个以上的QDIO控制部件代表同一QDIO适配器。
QDIO适配器通过通道路径与CPC中的其他元件相连接,该通道路径提供了该适配器和主存储器之间的数据传输路径。为了将从附加的I/O设备或设备网络接收到的数据传送给程序,该适配器使用一位于主存储器内的QDIO输入队列。同样,为了将数据传送给QDIO适配器,该适配器转而将数据传递给附加的I/O设备或设备网络,程序使用一QDIO输出队列。
一特定的适配器可使用多个(例如32)输入队列和输出队列。为了指示哪些队列可用于特定的适配器,使用被称为QDIO子通道的逻辑结构。该QDIO子通道包括零个或多个输入队列和零个或多个输出队列,并且一个或多个子通道与一特定的适配器相关联从而使该适配器可访问那些队列。
对于QDIO输入队列和QDIO输出队列两者,都使用主存储器(例如主机存储器)作为借以在程序和适配器之间交换数据的媒介。另外,这些队列可使程序和适配器两者以可预知的和有效的异步方式在彼此之间直接通信,而不需要集中式的控制机制例如操作系统输入/输出管理程序的服务,也不会有这种控制机制所带来的开销。输入和输出队列均由程序在主存储器内构建,并且在QDIO适配器内建立和激活。这些队列用于在I/O操作处理期间的通信。
根据本发明的一个方面,主机(例如z/VM)和处理器(例如zSeries)硬件/固件以一种受控的合作方式相互作用,以便处理V=V客庐操作系统QDIO操作,而不需要从/向客户操作系统和主机转移控制。客户QDIO操作可利用一被称为QDIO增强缓冲器状态管理(QEBSM)的工具,并且在这样做时,操作可经由一被称为QDIO增强缓冲器状态管理解释(QEBSMI)工具的工具直接穿过主机到达QDIO适配器或从QDIO适配器直接穿过主机,而没有主机干预,该QEBSMI工具允许对于可分页存储模式的客户解释执行被选择的指令。1985年9月出版的IBM出版物No.SA22-7095-01“System/370 Extended Architecture/InterpretativeExecution,”中说明了解释执行(例如,启动解释执行(SIE))的一个示例,在此将该出版物全文引入本文,作为参考。
为了配置一系统以使其可使用QEBSM和QEBSMI,执行各种配置任务。如参照图2A-2B所述的,这些任务由程序(例如,客户程序)200、主机(例如z/BM)202和该客户和主机在其上运行的机器(例如处理器)204执行。
在一个实施例中,在步骤206,客户程序200(图2)判定该程序是否可使用QEBSM管理QDIO连接。该判定是通过例如由该程序发送给主机的一通道子系统调用(CHSC)存储通道子系统特性命令进行的。主机继而将一CHSC存储通道子系统特性指令发送给硬件,以获得机器上安装的工具(步骤208)。机器处理该CHSC指令(步骤210),并将信息返回给主机。
存储通道子系统特性命令用于存储关于I/O子系统的特性的信息。存储通道子系统特性命令的执行不会改变I/O子系统中包含的任何信息。存储通道子系统特性命令被同步执行且不是被解释执行。
参照图3A说明了存储通道子系统特性命令的请求块的一实施例。命令请求块300包括,例如(a)长度字段302该字段指示该命令请求块的长度。
(b)命令码304该字段指明存储通道子系统特性命令。
(c)映象标识(IID)308作为一个示例,该IID字段包含零。
(d)格式310该命令请求格式字段包括一无符号的整数,该整数的值指明该命令请求块的布局。
参照图3B说明了存储通道子系统特性命令的响应块的一实施例。在一示例中,响应块320包括以下内容(a)长度字段322该字段指示作为执行该存储通道子系统特性命令的尝试的结果而被存储的命令响应码的长度。
如果在响应码字段内存储的响应码不是成功的指示,则不会存储作为执行该命令的尝试的结果的特性信息,并且该长度字段指定该命令响应块的长度,例如8个字节。
如果在响应码字段内存储指示成功的响应码,则一般特性和CHSC指令特性都存储在命令响应块内。这样,该长度字段指定命令响应块的长度,例如4080个字节。
(b)响应码324该字段包含一无符号的二进制整数,其描述尝试执行该存储通道子系统特性命令的结果。
(c)格式326该命令响应格式字段包括一无符号的整数,其值指示命令响应块的布局。
(d)一般特性328如果响应码字段内存储一指示成功的响应码,则该一般特性字段包括指示I/O子系统提供多种工具中哪些工具的信息。一些工具包括例如CHSC子通道,动态I/O配置工具;信息处理器通道配置工具;QDIO增强缓冲器状态管理工具;QDIO增强缓冲器状态管理解释(QEBSMI)工具,等。尽管这里说明了多种工具,但是还可存在其他的或不同的工具。当该一般特性字段的对应于特定工具的位是l时,说明提供该工具。
(e)CHSC特性330如果在该响应码字段内存储成功的响应码,则CHSC特性字段包含指明I/O子系统是否提供某些CHSC命令的信息。这些命令的示例包括例如,改变通道路径配置,改变控制部件配置,改变I/O设备配置,存储配置元件的列表,存储域配置元件的列表以及设定域属性等。当CHSC特性字段的对应于特定命令的位是1时,说明提供该命令。
返回图2A,响应于主机接收到安装的工具的列表,主机判定机器上是否安装有QDIO增强缓冲器状态管理解释(QEBSMI)工具(步骤212)。如果安装有QEBSMI并且子通道是具有QDIO能力的,则主机设定CHSC响应数据中的QEBSM可用指示符,以指示QEBSM工具可用。从而,该命令以指示QEBSM工具可用而结束(步骤214)。
然后,确定对于给定的子通道号的QDIO特性(步骤216)。在一个示例中,该确定是通过该程序发送给主机的CHSC存储子系统QDIO数据命令进行的。然后,该主机将该命令发送给实际子通道以便获得队列特性(步骤218)。机器执行该命令(步骤220)。
使用存储子通道QDIO数据命令来得到与特定范围的子通道相关联的QDIO适配器的自描述信息。
执行该存储子通道QDIO数据命令不会改变I/O子系统中包含的任何信息。在一个示例中,该指令同步执行。
对存储子通道QDIO数据命令的命令请求块400(图4)包括,例如(a)长度字段402该字段指示该命令请求块的长度。
(b)命令码404该字段指示该存储子通道QDIO数据命令。
(c)映象标识(IID)在此实施例中,该IID字段包括0。
(d)格式(FMT)408该命令请求格式字段包括一无符号的整数,其值指示该命令请求块的布局。
(e)第一子通道号410该字段指定识别为其请求QDIO适配器信息的第一子通道的子通道号。
(f)最后一个子通道号412该字段指定识别为其请求QDIO适配器信息的最后一个通道的子通道号。
参照图4B说明了对存储子通道QDIO数据命令的响应块的一实施例。在一个示例中,响应块420包括例如(a)长度字段422该字段指示该命令响应块的长度。该长度取决于作为尝试执行该存储子通道QDIO数据命令的结果而被存储的响应码。
如果在响应码字段内存储的响应码不是成功的指示,则不会存储作为尝试执行该指令的结果的子通道QDIO描述块,并且该长度字段指定该命令响应块的长度,例如8个字节。
如果在该响应码字段内存储了指示成功的响应码,则在该命令响应块内存储了至少一个子通道QDIO描述块,作为执行该指令的结果,并且该长度指定一命令响应块长度,例如8个字节加上用于每个存储的子通道QDIO描述决的32个字节。
(b)响应码424该字段包含一无符号的二进制整数,其示出尝试执行该存储子通道QDIO数据命令的结果。
(c)压缩(C)426该字段指明该子通道QDIO描述块是否被压缩。
当为1时,该C位指示该描述块被压缩。即,仅存储那些被指定为具有QDIO能力的子通道的描述块。在响应块中不存储那些没有QDIO能力的子通道的描述块。
当为0时,该C位指示该些描述块没有被压缩。即,不管描述块是否描述具有QDIO能力的子通道,这些描述块都将存储在该响应块内。因为存储了请求范围内的子通道的相同数量的描述块,每个可能的子通道号均由一描述块代表。
(d)格式(FMT)428该指令响应格式字段包括一无符号的整数,其值指示命令响应块的布局。该字段的值例如是0。
(e)子通道QDIO描述块430当存储了成功的响应码时,在该命令响应块的响应数据区域内存储最多127个32字节(作为示例)的子通道QDIO描述块。存储的子通道QDIO描述块的数量取决于在命令请求块中指定的范围内的子通道的数量,在执行CHSC时I/O子系统中的情况,以及I/O子系统模型。
存储至少一个子通道QDIO描述块,并且存储的块的实际数量是通过用命令响应块的大小减去8个字节并用余数除以32来确定的。
从由该第一子通道号字段指定的子通道开始,存储一些或全部指定的子通道的子通道QDIO描述块。按照子通道号的升序存储子通道描述块。
参照图4C说明子通道QDIO描述块的一个示例。子通道QDIO描述块430包括,例如(a)标志440该字段包括与子通道QDIO描述块的内容有关的信息。在一个示例中,位0-7的含意如下位 含意0 具有QDIO能力当为1时,位0指示与该指定子通道相关联的I/O设备能够执行QDIO操作。当为0时,位0指示与该指定子通道相关联的I/O设备不能执行QDIO操作。
1 有效性当为1时,位1指示该子通道QDIO描述块有效。
当为0时,位1指示该子通道QDIO描述块无效除了位0,1和2,以及子通道号字段之外,该子通道QDIO描述块的内容没有意义。对于没有被指定具有QDIO能力的子通道(即当位0为1时),位1为0。
2 最后一个QDIO子通道当为1时,位2指示没有标号更高的且具有QDIO能力的子通道。当为0时,位2指示存在标号更高的且具有QDIO能力的子通道。
(b)子通道号442该字段指示此子通道QDIO描述块中的信息应用于哪个子通道。
(c)QDIO队列格式(QFMT)444该字段包括一无符号的二进制整数,其指示可用于该指定子通道上的QDIO队列的格式。
(d)参数446该字段包括与该子通道QDIO描述块代表的子通道或设备有关的参数信息。
(e)QDIO适配器特性1(QDIOAC1)448该字段说明了与该指定子通道相关的QDIO适配器的依赖于模型的特性。在一个示例中,位0-7的含意如下位 含意0未经请求的输入队列中断当为1时,位0指示在缓冲器转换到准备好的(primed)状态同时子通道处于QDIO活动状态时,QDIO适配器可动态地启动将未经请求的输入队列进展报告中断呈现给程序。这些中断的呈现独立于下面将进行说明的、当支持输入队列中断请求时作为程序已在输入队列SBAL中设定输入队列中断请求指示符的结果而呈现的经请求的中断。
当为0时,位0指示该QDIO适配器不启动将未经请求的输入队列进展报告中断呈现给程序。
1SIGA启动输入队列当位1为1以及位7为0时,QDIO适配器要求程序执行SIGNAL ADAPTER-由子通道读取(SIGA-r)。当位1为1而位7为1时,QDIO适配器要求程序执行SIGNAL ADAPTER-由令牌(token)读取(SIGA-rt)。2001年12月18日授予的标题为“Self-Contained Queues With Associated ControlInformation For Receipt And Transfer of Incoming AndOutgoing Data Using A Queued Direct Input-OutputDevice”的美国专利No.6332171;2002年2月5日授予的标题为“Method and Apparatus of Simulation of Datain A Virtual Environment Using A Queued Direct
Input-Output Device”的美国专利No.6519645;以及2003年2月11日授予的标题为“Method And ApparatusFor Providing Configuration Information Using AQueued Direct Input-Output Device”的美国专利No.
6345241中说明了SIGA的一个示例,在此将这些专利全文引入本文,作为参考。
当为0时,位1指示QDIO适配器不要求程序执行SIGA-r或SIGA-rt。
2 SIGA启动或处理输出队列当位2为1和位7为0时,根据在指令描述中提到的原因,QDIO适配器要求程序执行SIGNAL ADAPTER-由子通道写入(SIGA-w)。
当位2为1而位7为1时,QDIO适配器要求程序执行SIGNAL ADAPTER-由令牌写入(SIGA-wt)。
当为0时,位2指示QDIO适配器不要求程序执行SIGA-w或SIGA-wt。
3 SIGA同步当位3为1而位7为0时,QDIO适配器要求程序执行SIGNAL ADAPTER-由子通道同步(SIGA-s)。当位3为1而位7为1时,程序可执行SIGNAL ADAPTER-由令牌注销(SIGA-It)。
当为0时,位3指示QDIO适配器不要求程序执行SIGA-s。
4 适配器中断队列同步辅助活动当位4为1时,适配器中断队列同步辅助是活动的。当该辅助是活动的并且要求SIGA-s(位3为1而位7为0)时,将在中断之前使与该与指定子通道相关的适配器有关的输入和输出队列动态同步。从而,不需要程序在适配器中断工具(AIF)中断之后立即发送SIGA-s指令。
当位4为0时,适配器中断队列同步辅助不是活动的。
5 PCI中断队列同步辅助活动当位5为1时,PCI中断队列同步辅助是活动的。当该辅助是活动的并且要求SIGA-s(位3为1而位7为0)时,将在中断之前使与该指定子通道相关的输出队列动态同步。从而,不需要程序在PCI中断之后立即发送SIGA-s指令。
当位5为0时,PCI中断队列同步辅助不是活动的。
QDIOAC1字段的位4和5是由主机设定的。
6 QEBSM可用当为1时,位6指示对于指定子通道可启动QDIO增强缓冲器状态管理。
当为0时,位6对于指定子通道不能启动QDIO增强缓冲器状态管理。
该字段是由主机根据响应于CHSC存储通道子系统特性命令而存储的一般特性的指定位的设置来设定的。
7 允许QEBSM当为1时,位7指示允许特定子通道进行QDIO增强缓冲器状态管理,结果有以下情况不能在程序存储器中的SLSB内访问与该指定子通道相关联的QDIO缓冲器状态,下文中将说明该SLSB。
相反,程序使用设定QDIO缓冲器状态和提取QDIO缓冲器状态指令。
子通道令牌字段包括一子通道令牌。
当为0时,位7指示不允许特定子通道进行QDIO增强缓冲器状态管理,并且可以在可由程序直接操纵的程序存储器中的SLSB内访问QDIO缓冲器状态。
该字段由主机根据指定的子通道是否被允许进行QDIO增强缓冲器状态管理解释(QEBSMI)设定。在主机完全模拟该适配器时(例如,在客户跟踪期间),位7也可由主机设定。(参照下文中说明的CHSC设定通道子系统特性命令,来查看对如何允许QDIO子通道进行QEBSMI的描述)(f)类别450该字段包括一无符号的二进制整数,其指示与该指定子通道相关的I/O设备的类别。类别的一个示例是通信控制器。
(g)输入队列数(IQCNT)452该字段包括一无符号的二进制整数,其指明由QDIO适配器使用以执行I/O操作的输入QDIO队列的数量。
(h)输出队列数(OQCNT)454该字段包括一无符号的二进制整数,其指明由QDIO适配器使用以执行I/O操作的输出QDIO队列的数量。
(i)最大缓冲链数(MBCCNT)456当该字段不为0时,其包括一无符号的整数计数,指示被该适配器支持的链接的缓冲器(例如下文中将说明的链接SBAL)的最大数量。当该字段为0且QFMT字段指示在该指定子通道上使用格式1的队列(例如FCP)时,最多可链接36个缓冲器。当该字段为0且QFMT字段指示在该指定子通道上没有使用格式1的队列时,适配器不支持缓冲器链接。
(j)QDIO适配器特性2(QDIOAC2)458该字段说明了与指定子通道相关联的QDIO适配器的依赖于模型的特性。在一个示例中,位0-3的含意如下位含意0 支持输入队列中断请求当为1时,位0指示适配器支持下文说明的输入队列SBAL的SBALF0字段中的中断请求位。当位0为1且位3为0时,报告适配器在相关联的输入队列上的进展的中断严格跟随在程序的请求之后。当位0为1且位3为1时,在程序的请求之后会有报告适配器在相关联的输入队列上的进展的中断,并且未经请求的进展报告中断也会出现。
当为0时,位0指示适配器不支持输入队列的SBAL的SBALF0字段中的中断请求位。
1 支持输出队列中断请求当为1时,位1指示适配器支持输出队列SBAL的SBALF0字段中的中断请求位。在程序请求之后立即有报告适配器在相关联的输入队列上的进展的中断。
当为0时,位0指示适配器不支持输出队列的SBAL的SBALF0字段中的中断请求位。
2单个缓冲器预取活动当为1时,位2指示适配器在该适配器正在处理的缓冲器之前最多预取一个缓冲器。当为0时,位2指示适配器可预取一个以上的缓冲器。
3未经请求的输入序列中断不活动当为1时,位3指示该未经请求的输入序列中断对于该适配器不是活动的。当为0时,位3指示该未经请求的输入序列中断对于该适配器是活动的。当位3为0时,QDIOAC1的位0为1。
(k)子通道令牌460当QDIOAC1字段的位7为1时,该字段包括一与指定子通道相关联的令牌。
该子通道令牌字段由主机设定。如果指定的子通道被允许进行QEBSMI,则主机将该子通道令牌字段设定为与该子通道相关的QDIO缓冲器信息控制块(QBICB)的主机实际地址或绝对地址。(如下文所述,当允许QDIO子通道进行QEBSMI时,QBICB通过CHSC设定通道子系统特性命令与子通道相关)。当主机完全模仿适配器时,该子通道令牌也可由主机设定。如果不允许指定子通道进行QEBSMI并且主机没有模仿适配器,则返回0作为该子通道令牌值。
子通道令牌用于为QEBSM操作指定QDIO子通道。当导致QDIO队列与子通道分离的动作或事件发生时,该子通道令牌变陈旧,并且在程序可再次使用QEBSM操作之前将获得一新的子通道令牌。前面分配的令牌变得无效,并且可能随后分配给另一个子通道。
在执行存储子通道QDIO数据命令时,存储在子通道QDIO描述块内的适配器描述信息是最新的。但是,一些适配器描述信息会因为指定适配器成功完成一建立QDIO队列CCW命令而改变,下文中将说明该建立QDIO队列CCW命令。这样,在成功完成一建立QDIO队列CCW命令之后,将重新发送存储子通道QDIO数据命令以获得最新的对以下内容的描述QDIOAC1位1(SIGA启动输入队列)QDIOAC1位2(SIGA启动或处理输出队列)QDIOAC1位3(SIGA同步)QDIOAC1位7(允许QEBSM)QDIOAC2位2(单个缓冲器预取活动)QDIOAC2位3(未经请求的输入队列中断不活动)子通道令牌不管是否成功完成一建立QDIO队列命令,剩余的适配器描述信息是最新的。
返回参照图2A,响应于完成CHSC存储子通道QDIO数据命令(步骤222),主机判定在机器上QEBSMI工具是否可用(步骤224)。如果QEBSMI可用,则该子通道具有QDIO能力,并且主机支持QEBSM用于该连接,然后在返回该程序的CHSC响应数据中生成一个指示以指示QEBSM可用于该子通道。程序接收到一具有子通道QDIO数据的结束操作(步骤226)。
使用在CHSC响应数据中返回的信息,程序在主存储器中创建QDIO队列(步骤228)。QDIO队列包括描述该队列以及用于数据传送的缓冲存储器块的数据结构。在一个示例中,共同描述队列的特性并且提供控制以允许数据在程序和适配器之间交换的多个分离的数据结构(被称为队列组件)包括,例如1.队列信息块(QIB)500(图5)每个QDIO子通道定义一个QIB。QIB提供关于与该子通道相关联的输入和输出队列的集合的信息。这里描述的建立QDIO队列命令将QIB的绝对地址提供给QDIO适配器。QIB具有包括例如以下字段的多个字段,图5中示出其中一些字段(a)队列格式(QFMT)该字段包括一无符号的二进制整数,其指示QDIO队列的格式。
(b)依赖于实现的参数的格式(PFMT)该字段包括一无符号的二进制整数,其指示依赖于实现的参数的内容的格式。
(c)请求标志(RFlag)该字段包括请求标志。一个标志包括QDIO增强缓冲器状态管理(QEBSM)允许。当在发出建立QDIO队列CCW命令时该位为1时,指示请求允许该子通道进行QEBSM。
(d)适配器特性(AC)该字段包括关于适配器相对于与子通道相关联的输入和输出队列组的能力的信息。在该建立QDIO队列CCW命令被发出但是没有被适配器检查之前,程序将该AC字段设定为0。
在执行该建立QDIO队列CCW命令期间该字段由适配器设定,并且被设定为指示在该命令成功完成之前适配器支持的值。在一个示例中,位0-1的含意如下位 含意0支持输入队列中断请求当为0时,位0指示适配器不支持用于输入队列的SBAL的SBALF 0字段(后面将说明)中的中断请求位。
当为1时,位0指示适配器支持SBAL的SBALF0字段中的中断请求位。
1支持输出队列中断请求当为0时,位1指示适配器不支持用于输出队列的SBAL的SBALF0字段中的中断请求位。不存在报告适配器在相关联的输出队列上的过程的中断。
当为1时,位1指示适配器支持SBAL的SBALF0字段的中断请求位。
(e)第一输入存储列表信息块(SLIB)地址502该字段包括用于与该QIB相关联的子通道的最高优先级的输入队列SLIB的逻辑地址。
(f)第一输出SLIB地址504该字段包括用于与该QIB相关联的子通道的最高优先级的输出队列SLIB的逻辑地址。
(g)适配器标识符该字段包括一名称,程序已将该名称分配给用于与该QIB相关联的子通道的QDIO适配器。
(h)依赖于实现的参数该字段包括一个或多个依赖于实现的参数。
2.存储列表信息块(SLIB)506对每个队列定义一个SLIB。该SLIB提供关于该队列和每个可用于保持数据的队列缓冲器的信息。该建立QDIO队列命令直接将SLIB的绝对地址提供给QDIO适配器。
在一个示例中,存储列表信息块包括以下字段,图5中示出其中一些字段(a)下一个存储列表信息块的地址508如果对于相同子通道的相同类型的QDIO队列(输入或输出)还存在另一个优先级较低的SLIB,则该字段指示该SLIB的逻辑地址。
(b)存储列表地址510该字段包括被称为存储列表的控制块的逻辑地址。存储列表包括各存储块地址列表(SBAL)的绝对地址。每个SBAL包括最多例如16个存储块(例如页)的绝对地址。可使用单个SBAL中的地址定位的存储块的集合被称为QDIO缓冲器。
(c)存储列表状态块(SLSB)地址512当QIB RFlag字段中的增强的QDIO缓冲器状态管理允许指示符为0时,该字段包括存储列表状态块(SLSB)的逻辑地址。
3.存储列表(SL)514对于每个队列定义一个SL。该SL包括例如128个项,每个项均对应于与该队列相关联的QDIO I/O缓冲器中的一个。该SL提供关于在主存储器中的I/O缓冲器位置的信息。每个项包括存储块地址列表516的绝对地址,并且每个SBAL包括共同构成与该队列相关联的128个数据缓冲器之一的存储块的绝对地址的列表。
建立QDIO队列命令将该存储列表的绝对地址提供给QDIO适配器。
4.存储列表状态块(SLSB)或存储列表状态注销(SLSL)518当允许QDIO子通道进行增强的QDIO管理操作时,对于每个队列均定义一个SLSL,并且在程序存储器之外对于每个队列均存在一对应的SLSB。SLSL的长度是128个字节,并且包括每当在执行SignalAdapter-由令牌注销(SIGA-It)时或在队列从该适配器分离时进行的SLSB的注销。SLSB包括128个被称为SQBN(队列缓冲器N的状态)的项520,与该队列相关联的128个I/O缓冲器中的每一个都对应于一项。每个项提供与其相关联的I/O缓冲器的信息。在本文中所说明的设定QDIO缓冲器状态和提取QDIO缓冲器状态指令用于访问SLSB中的状态信息。作为示例,该状态指示缓冲器是程序拥有的还是适配器拥有的,以及缓冲器是输出缓冲器还是输入缓冲器。
建立QDIO队列指令将该存储列表状态块的绝对地址提供给QDIO适配器。
5.存储块地址列表(SBAL)522对于与每个队列相关联的128个I/O缓冲器中的每一个均定义一SBAL。该SBAL提供关于用于一I/O缓冲器的存储块(SB)位置的信息。
存储块地址列表包括16个被称为存储块地址列表项(SBALE)524的项。每个SBALE包括一存储块526的绝对存储地址。由单个SBAL的各项所寻址的存储块共同构成一QDIO队列的128个可能的QDIO缓冲器之一。
在一个示例中,一存储块地址列表项包括(a)标志该字段包括关于SBALE内容的信息。
(b)虚拟化标志当安装了QDIO增强缓冲器状态管理解释工具时,该字段包括虚拟化信息。对该字段改变应在QSD锁定字的控制之下被串行化。在一个示例中,该字段的位0代表被钉住的页的指示符。当位0为1时,为了该SBALE钉住与数据地址字段中的数据地址相对应的主机页。当位0为0时,不为了该SBALE钉住与数据地址字段中的数据地址相对应的主机页。
(c)SBAL标志(SBALF)该字段包括关于与包含该SBALE的SBAL相关联的缓冲器的信息,而不只是与该SBALE相关联的存储块的信息。在一个示例中,位0指示当缓冲器正在或即将返回程序拥有的状态时,在对该缓冲器执行下一个SQBS操作之前将对该缓冲器执行EQBS操作。位1指示当缓冲器正在或即将返回程序拥有的状态时,作为针对该缓冲器的下一个EQBS操作的一部分,将使该SBAL和其对应客户SBAL同步。缓冲器同步可包括从对应的主机SBALE更新客户SBALE,还可包括释放主机页。
(d)数据计数该字段包括一无符号的二进制整数,其指示将从在数据地址字段中指定的地址开始读或写的数据的字节数。
(e)数据地址该字段包括包含将被写入的数据的存储块(输出队列)的绝对地址或将被读取的数据(输入队列)的地址。
6.存储块(SB)526定义了1到16个独立的存储块(即页),这些存储块共同定义一单个I/O缓冲器。
2003年2月11日授予Markos等人的标题为“Method and Apparatusfor Providing Configuration Information Using a Queued DirectInput-Output Device”的美国专利No.6519645,和2002年2月5日授予的Brice等人的标题为“Method And Apparatus for Simulation of Data in aVirtual Environment Using a Queued Direct Input-Output Device”的美国专利No.6345241中介绍了QDIO队列的进一步细节,在此将这些专利全文引入本文,作为参考。
返回图2A,在创建队列之后,如果子通道支持QEBSM,则设定QIB中的QEBSM允许位以使用QEBSM管理连接(步骤230)。
此后,在适配器内建立QDIO队列(步骤232)。作为一示例,通过程序发出带有建立QDIO队列通道命令字的启动子通道指令来实现此操作,2001年12月18日授予的标题为“Self-Contained Queues WithAssociated Control Information for Receipt and Transfer of Incoming AndOutgoing Data Using a Queued Direct Input-Output Device”的美国专利No.6332171中描述了此操作的处理的一个示例,在此将该专利全文引入本文,作为参考。
使用建立QDIO队列命令将队列描述符记录(QDR)写入I/O设备。与该I/O设备相关联的控制部件(例如,适配器)使用该队列描述符记录中的信息以定位用于建立优先数据队列的QDIO控制决。然后,使用这些队列将数据直接传送给I/O设备以及从I/O设备直接传送数据。
该建立过程使主机在主机存储器中为由程序建立的队列建立一组影子QDIO队列(步骤234)。即,主机构建一些QDIO控制结构包括例如存储列表和存储块地址列表的影子版本。而且,尽管因为SLSB被定义为用于程序及适配器配合过程的控制机制,而不包含地址,但是,也在该主机存储器中分配SLSB。与该建立QDIO队列命令相关联的队列描述符记录包括程序看到的QDIO队列组件的主存储器地址。主机在构建它自己的队列描述符记录副本和影子SL和SBAL时,转换那些地址以及SL和SBAL中的地址。上述美国专利中公开了与QDR相关联的影子化和处理的其他细节,这些专利已被全文引入本文,作为参考。
在创建影子队列之后,如果在QIB中设定了QEBSM允许位,则主机在主机存储器内创建一个被称为QDIO缓冲器信息控制块(QBICB)的结构,以将客户和主机的影子QDIO队列映射到机器上(步骤236)。该QBICB包括指针和描述客户和主机结构的信息。该QBICB与QDIO子通道相关联,从而当该子通道被确定为SQBS和EQBS(在下文中说明)的操作数时,可定位和使用客户和主机结构。下文中参照图6A-6B说明了QBICB的其他细节。
QDIO缓冲器信息控制块(QBICB)600(图6)包括关于一QDIO数据队列集的缓冲存储器和缓冲器状态的信息,并且用于使缓冲存储器和缓冲器状态与一给定的QDIO子通道相关联。例如,它是主机的实际或绝对存储器中的长度可变的控制块,其开始于双字边界并且最小长度为64个字节。QBICB的大小由其描述的队列的数量确定(即由其包含的队列描述符的数量确定),该队列数量由该QBICB的队列数字段指定。
在一个示例中,QBICB 600包括以下字段(a)队列格式(QFMT)602该字段包括一无符号的二进制整数代码值,其指示队列描述符的格式以及由队列描述符的内容寻址的控制块的格式。例如,格式0指示OSA直接快速队列,格式1指示光纤通道协议(FCP)队列,以及格式2指示内部排队的直接通信队列。
(b)队列计数(QCNT)604该字段包括一无符号的整数,其指示由该QBICB描述的输入队列加上输出队列的总数。
(c)子系统ID 606该字段包括与该QBICB相关联的QDIO子通道的子系统ID。
(d)队列描述符608队列描述符是例如16字节的结构,在一个实施例中QBICB可包括最多64个队列描述符。每个队列描述符均包括队列存储描述符的地址,该队列存储描述符用于描述用于一个QDIO输入或输出队列的缓冲器状态和缓冲数据存储器。
如果有的话,则用于输入队列的队列描述符是连续列出的。如果有的话,则用于输出队列的队列描述符是在输入队列的队列描述符之后连续地列出的。QCNT字段中的值指明了队列描述符的总数。
QBICB队列描述符包括一队列存储描述符源字段,该字段的右边添加7个0以指示用于相应队列的队列存储描述符的64位主机实际或绝对地址。
例如,队列存储描述符是一个128字节的结构,其包括用于相应队列的主机和客户缓冲存储器的信息。在一个示例中,队列存储描述符620(图6B)包括以下字段(a)锁定字622例如,该锁定字字段是一个32位的字段,其是用于队列存储描述符和活动的请求头FOB列表(下文说明)的互锁控制。根据其预先确定的值,锁定字可具有以下含意之一可用与该锁相关联的结构可由机器或主机使用;对机器锁定机器已获得锁以及相关联的结构的所有权;由机器对主机锁定机器已遇到一种要求来自主机的服务的情况,并已将锁的所有权和相关联的结构传递给主机;以及由主机对主机锁定主机已获得锁和相关联结构的所有权。
(b)队列标志(QFlag)624该字段包括例如一个8位的标志字段。标志的示例包括位含意0 队列/缓冲器类型当位0为0时,队列是输入队列。当位0为1时,队列为输出队列。
1 待完成请求组件FOB列表完成当位1为1时,由第一个活动的请求头FOB地址字段确定的FOB是一多缓冲器请求的头FOB,对于该多缓冲器请求,请求组件FOB列表没有完成并且仍在构建。
(c)SLSB地址626该字段包括与相应队列相关联的存储列表状态块(SLSB)的主机实际或绝对地址。
(d)主机SL地址628该字段包括与相应队列相关联的主机存储列表(SL)的主机实际或绝对地址。适配器可看到由该地址指定的SL。
(e)客户SL地址630该字段包括与相应队列相关联的客户存储列表(SL)的客户绝对地址。适配器看不到由该地址指定的SL。
(f)客户SLSL地址632该字段包括与相应队列相关联的存储列表状态注销(SLSL)区域的客户绝对地址。
(g)状态转换计数634该字段包括一无符号的整数计数,其为程序通过提取QDIO缓冲器状态指令观察到的从适配器拥有状态到程序拥有状态的缓冲器状态转换的次数。
(h)字节传递计数636该字段包括一无符号的整数计数,其为适配器传递的字节的数量。对于光纤通道协议(FCP)队列,该字节传递计数不是实际传递字节的计数。相反,其是被指定将要传递的字节的计数。
(i)第一个活动的请求头FCP操作块(FOB)的地址638当QBICB中的QFMT字段指明该队列为格式1的队列(即FCP),并且该字段的预定位(在右边添加8个0)没有形成该字段的第一个字节的主机实际或绝对地址时,作为一个示例,该字段的预定位(在右边添加8个0)形成活动的FCP请求列表中的第一个FCP请求的头FOB的主机实际或绝对地址(即,活动的请求头FOB的列表中的第一个FCP请求的头FOB的地址)。当QBICB中的QFMT字段指明队列为格式1的队列,并且该预定位(在右边添加8个0)形成该字段的第一个字节的主机实际或绝对地址时,作为一个示例,不存在活动的FCP请求,并且该活动的请求头FOB列表是空的。
(j)最后一个活动的请求头FOB地址640当QBICB中的QFMT字段指明该队列为格式1的队列,并且在该字段的预定位(在右边添加8个0)没有形成字段638的第一个字节的主机实际或绝对地址时,作为一个示例,该字段的预定位(在右边添加8个0)形成活动的FCP请求列表中的最后一个FCP请求的头FOB的64位主机实际或绝对地址(即,活动的请求头FOB的列表中的最后一个FCP请求的头FOB的地址)。当QBICB中的QFMT字段指明队列为格式1的队列,并且该字段的预定位(在右边添加8个0)形成字段638的第一个字节的主机实际或绝对地址时,作为一个示例,不存在活动的FCP请求,并且该活动的请求头FOB列表是空的。
一个光纤通道操作块(FOB)描述最多例如16个在一FCP I/O操作持续期间被钉住在主机页帧内的主机页。在一个示例中,FCP操作块(FOB)648(图6C)包括以下字段(a)下一个请求头FOB地址650如果该FOB是一活动请求的头FOB,则该字段(在右侧添加8个0)形成该活动请求头FOB列表中的下一个FCP请求的头FOB的主机实际或绝对地址,或者如果该FOB是该活动请求头FOB列表中的最后一个头FOB,则形成QSD中的第一个活动请求头FOB地址字段的主机实际或绝对地址。如果该FOB在可用FOB列表内并且该字段不为0,则该字段(在右侧添加8个0)形成该可用FOB列表中的下一个FOB的主机实际或绝对地址。如果该FOB在该可用FOB列表内并且该字段为0,则该FOB是可用FOB列表中的最后一个FOB。如果该FOB是一个请求组件FOB而不是头FOB,则该字段的内容无意义。
(b)前一个请求头FOB地址652如果该FOB是一活动请求的头FOB,则该字段(在右侧添加8个0)形成该活动请求头FOB列表中的前一个FCP请求的头FOB的主机实际或绝对地址,或者如果该FOB是该活动请求头FOB列表中的第一个头FOB,则形成QSD中的第一个活动请求头FOB地址字段的主机实际或绝对地址。如果该FOB在可用FOB列表内并且是一请求组件FOB而不是头FOB,则该字段的内容无意义。
(c)下一个请求组件FOB地址654如果FOB是一请求组件FOB并且该字段不为0,则该字段(在右侧添加8个0)形成请求组件FOB列表中的下一个FOB的主机实际或绝对地址。如果FOB是一请求组件FOB并且该字段为0,则FOB是该请求组件FOB列表中的最后一个或唯一一个FOB。
(d)队列存储描述符(QSD)地址656如果该FOB是一头FOB,该字段(在右侧添加7个0)形成这样的输出队列的队列存储描述符的主机实际或绝对地址,从该输出队列将该请求的头FOB排队。
(e)QDIO缓冲器信息控制块(QBICB)地址658如果该FOB是一头FOB,则该字段(在右边添加3个0)形成与这样的子通道相关联的QDIO缓冲器信息控制块的主机实际或绝对地址,对于该子通道该FCP操作是活动的。
(f)客户请求ID 660如果该FOB是一头FOB,则该字段包括客户在其SBAL中指定的FCP请求ID。
(g)标志662当FOB是一头FOB时,该字段包括例如一个8位的标志字段。该些位以及它们的含意的示例包括例如1)位0-请求活动位0指示头FOB位于活动请求头FOB列表内并且代表一活动FCP请求;2)位1-构造完成位1指示已处理包含FCP请求的缓冲器并且该FCP请求的构造已完成;3)位2-请求ID被提交(post)位2指示适配器已提交用于该请求的FCP请求标识符。
4)位3-4-存储块类型位3-4指示由FOB及其对应的SBAL描述的格式1输出缓冲器的存储块类型。位3-4的值和含意与相应的SBAL中的SBAL0字段中的位3-4相同。
(h)页表项(PTE)计数(PTECNT)664该字段包括有意义的PTE地址阵列项的计数。
(i)PTE地址666该字段包括一个0-16个PTE地址字段的阵列。每个PTE地址字段的位(在右边添加3个0)形成这样的一PTE的主机实际或绝对地址,该PTE已针对与该FOB相关的请求被钉住。
各FOB可相互连接以形成多种列表。一个列表是可用FOB列表。当FOB已被主机分配并且没有用于QDIO操作时,该FOB位于可用FOB列表(AFOBL)内。在一个示例中,为每个处理器设置一个单独的可用FOB列表。可用FOB列表中的FOB使用下一个请求头FOB地址字段单向链接。列表中的最后一项由其下一个请求头FOB地址字段中的0值指定。CPU的前置区中的字段指定可用FOB列表的源以及该可用FOB列表中的FOB数。
另一个列表是请求组件FOB列表,其包括一个或多个构成单个活动FCP请求的FOB。请求组件FOB列表中的FOB的数量等于FCP请求中的SBAL的数量。请求组件FOB列表中的第一个FOB是头FOB,并且用于表示在活动请求头FOB列表中存在活动请求。
对于单个SBAL(即单个缓冲器)FCP请求,该请求组件列表由头FOB构成。在构造头FOB之后,它被置于活动请求头FOB列表的开头,并且FOB的标志字段内的构造完成和请求活动指示符均设定为1,以指示完成了整个FCP请求的构造并且该请求是活动的。
对于多SBAL(即多缓冲器)FCP请求,对应于每个构成该请求的SBAL均构造一个FOB。第一个构造的FOB变成头FOB。该头FOB被添加到活动请求头FOB列表的开头,并且在构造该头FOB之后,FOB的标志字段中的请求活动位被设定为1以指示该请求是活动的。剩余请求组件FOB的列表的锚(anchor)位于该头FOB内。
剩余的FOB被添加到请求组件FOB列表内,并且从头FOB开始使用下一个请求组件FOB地址字段单向链接。列表中的最后一个FOB由其下一个请求组件FOB地址字段中的一0值指定。在最后一个FOB被添加到列表内之后,头FOB的标志字段中的构造完成指示符被设定为1,以指示完成了全部FCP请求的构造并且该请求是活动的。
包含头FOB的请求组件FOB列表中的FOB都被认为是请求组件FOB。
另一个列表是活动请求头FOB列表。当FCP请求是活动的时,该请求的头FOB是在该活动请求头FOB列表内。该活动请求头FOB列表是一使用下一个请求头FOB地址字段和前一个请求头FOB地址字段的双向链接列表。活动请求头FOB列表的锚是队列的队列存储描述符中的第一个活动请求头FOB地址字段和最后一个活动请求头FOB地址字段。该列表中的第一项由头FOB的前一个请求头FOB地址字段中的队列存储描述符的第一个活动请求头FOB地址字段的地址的值,以及队列存储描述符的第一个活动请求头FOB地址中的该第一项的头FOB的地址的值指定。该列表中的最后一项由头FOB的下一个请求头FOB地址字段中的队列存储描述符的第一个活动请求头FOB地址字段的地址的值,以及队列存储描述符的最后一个活动请求头FOB地址中的该最后一项的头FOB的地址的值指定。
返回图2A,在创建QBICB之后,主机向机器发送一具有建立QDIO队列通道命令字的启动子通道指令,以通知适配器用于该正建立的连接的影子QDIO队列的位置(步骤238)。机器将该建立QDIO队列命令发送给适配器(步骤240),并且主机等待结束(步骤242)(图2B)。机器发出一I/O结束中断(步骤244),主机接收该中断并反射出一虚拟I/O结束中断(步骤246)。针对该建立QDIO队列命令的I/O结束中断被程序200接收(步骤248)。
此后,程序接收到用于QEBSM连接的子通道令牌和管理该连接所需(所希望)的SIGA的类型(步骤250)。在一个示例中,这是通过发送上述CHSC存储子通道QDIO数据命令来执行的。
主机将QBICB与该子通道相关联(步骤252)。在一示例中,该相关联是通过发送一设定通道子系统特性命令来执行的。CHSC设定通道子系统特性命令根据该的命令请求块的操作码设定所选择的通道子系统控制。
参照图7A说明了命令请求块700的示例。该请求块包括例如(a)长度字段该字段指示该命令请求块的长度。
(b)命令码704该字段指定该设定通道子系统特性命令。
(c)操作码(OC)706该字段包括一个用于确定将被执行的操作的值。例如,OC为0指示一设定适配器设备控制操作。该设定适配器设备控制操作的执行要求允许指定的适配器设备控制,并为该指定子通道设定指定的适配器设备控制,或者为该子通道禁用该特定的适配器设备控制。适配器设备控制是例如设备状态变化指示符的地址;设备状态变化指示符的存储保护键;适配器局部总结指示符的地址;适配器局部总结指示符的存储保护键;中断子类码;客户中断子类码;以及QBICB的源。
(d)格式(FMT)708该命令请求格式块包括一无符号的整数,其值指示该命令请求块的布局。例如该字段的值为0。
(e)操作数据区域710命令请求块的这个区域可被操作使用。
该操作数据区域的数据格式是对于每个操作码特定的。
作为一个示例,设定适配器设备控制操作的操作数据区域包括例如以下参照图7B说明的字段(a)适配器局部总结指示符(ALSI)地址720该字段包括用于指定子通道的在存储器中的适配器局部总结指示符字节的绝对地址。
(b)设备状态变化指示符(DSCI)地址722该字段包括存储器中用于指定子通道的设备状态变化指示符字节的绝对地址。
(c)适配器局部总结指示符键(KS)724该字段包括用于访问指定子通道的适配器局部总结指示符字节的存储器访问键。
(d)设备状态变化指示符键(KC)726该字段包括用于访问指定子通道的设备状态变化指示符字节的存储器访问键。
(e)中断子类码(IS)732该字段包括一无符号的整数,其指示用于控制适配器中断的允许的中断子类码。
(f)子系统标识(SID)734该字段包括一无符号的整数,其指示一子系统ID,该子系统ID标识正为其设定该适配器局部总结指示符和设备状态变化指示符地址的子通道。
(g)QDIO缓冲器信息控制块(QBICB)源736该字段用于形成该QBICB的绝对地址。当该字段指示不为0的有效地址并且QBICB未被规定跨越4K字节的边界时,该指定QBICB与该指定子通道相关联,并且允许该子通道进行QDIO增强缓冲器状态管理解释。当该字段包含一0并且该指定子通道与一QBICB相关联时,该子通道脱离该QBICB,并且禁止该子通道进行QDIO增强缓冲器状态管理解释。当该字段包含一无效地址时,可存储一响应码。当该字段指示一不为0的有效地址并且规定该QBICB跨越4K字节的边界时,该QBICB规定无效并且可存储一响应码。
当在操作数据区域内提供一有效的非零QBICB源时,该设备进一步与该指定QBICB相关联,并且被允许进行QDIO增强缓冲器状态管理解释。当在该操作数据区域内设置一为0的QBICB源时,如果该设备与一QBICB相关联,则将该设备与该QBICB分离。
参照图7C说明了用于该设定通道子系统特性命令的命令响应块740的一个示例。该响应块包括例如(a)长度字段742该字段指示该命令响应块的长度。
(b)响应码744该字段包括一无符号的整数,其说明了尝试执行该设定通道子系统特性命令的结果。
成功的响应码指示该特定通道子系统特性已被如命令请求块中的操作码和操作数据区域确定的那样设定。当存储一成功之外的响应码时,禁止该命令,并且没有设定该特定的通道子系统特性。
(c)格式746该字段包括一无符号整数,其值指示该命令响应块的布局。
返回图2B,机器处理该设定通道子系统特性指令(步骤254),并且将信息返回主机。
此外,主机获取程序请求的最新的QDIO特性(步骤256)。在一示例中,这是使用文中所述的存储子通道QDIO数据命令执行的。机器处理该存储子通道QDIO数据指令(步骤258),并且将信息返回主机。
主机指示允许QEBSM,并且在程序的CHSC响应数据中返回作为子通道令牌的QBICB的主机绝对地址以及所需的SIGA(步骤260)。程序接收该子通道令牌和该连接的特性(步骤262)。
此后,程序使用一具有该返回的子通道令牌的SQBS指令将QDIO缓冲器初始化到合适的启动状态(步骤264)。机器处理该SQBS指令(步骤266),并且将信息返回程序,下文中将说明该SQBS指令。
此外,程序发出一具有激活QDIO队列通道命令字的启动子通道指令以激活队列进行数据传送(步骤268)。2001年12月18日授予Baskey等人的标题为“Self-Contained Queues With Associated ControlInformation For Receipt And Transfer of Incoming And Outgoing DataUsing A Queued Direct Input-Output Device”的美国专利No.6332171说明了与该命令相关的处理的一个示例,在此将该专利全文引入本文,作为参考。主机接收该启动子通道命令,并发出一具有激活QDIO队列通道命令字的启动子通道指令以通知适配器激活队列进行数据传送(步骤270)。然后机器将激活QDIO队列发送给适配器(步骤272)。当开始请求时,QDIO数据传送可开始(步骤274)。
作为QDIO数据传送的一部分,客户程序管理QDIO缓冲器状态。为此,根据本发明的一个方面实现了两条指令。一条指令称为设定QDIO缓冲器状态(SQBS)指令,另一条称为提取QDIO缓冲器状态(EQBS)指令。这些指令可以使V=V虚拟机(客户)QDIO队列与这些队列的主机影子副本动态同步。动态队列同步是由机器在客户执行期间执行的,而没有主机干预。因此,客户使用该设定QDIO缓冲器状态和提取QDIO缓冲器状态指令可消除以前为使客户QDIO队列和主机影子QDIO队列同步而引起的上下文转换开销。
参照图8A-8C说明一使用设定QDIO缓冲器状态指令的实施例。在调用该设定QDIO缓冲器状态指令之前,进行某种初始化。例如,主机执行各种清除任务(步骤800,图8A),包括例如清除和处理在一处理过的帧描述符列表上的帧。
该处理过的帧描述符列表(PFDL)是描述已用于在客户解释期间解决主机页无效状况的帧描述符的列表。PFDL所描述的主机页帧已分配给为客户提供存储器的主机页。PFDL被一PFDL源(PFDLO)指定在指定的主机实际地址上。PFDLO的内容(在右侧添加5个0)指示PFDL上的第一个帧描述符的主机自属空间(home space)的虚拟地址。0值指示该列表是空的。
PFDLO被主机初始化并且可被主机或主机页管理辅助函数(本文中说明)改变。在一个实施例中,使用保持该列表的完整性的双字并行联锁更新操作来改变该PFDLO。
帧描述符描述了主机页帧,并且多个帧描述符可相互链接以形成列表例如PFDL或可用帧描述符列表(AFDL)。帧描述符由主机分配、解除分配以及初始化,并且可被主机页管理辅助函数(本文中说明)更新。在一个示例中,帧描述符900(图9)是例如位于主机自属空间虚拟存储器中在32字节边界上的32字节的块,并且包括以下字段(a)下一个帧描述符地址902在一个示例中,该字段的内容(在右侧添加5个0)指示列表中的下一个帧描述符的主机自属空间虚拟地址。0值指示该帧描述符是列表中的最后一个。
该字段被主机初始化,并且可被主机或主机页管理辅助函数改变。
(b)页帧实际地址或PTE副本904当该帧描述符位于可用帧描述符列表(AFDL)中时,该字段的内容(在右侧添加12个0)指示一可用于分配以提供主机存储器的主机页帧的第一字节(字节0)的主机实际地址。
当该帧描述符位于该处理过的帧描述符列表(PFDL)时,该字段包括在主页被解决之前出现的、被页表项地址字段指定的页表项(PTE)的副本。
该字段被主机初始化,并且可被主机或主机页管理辅助函数改变。
(c)页表项地址906当帧描述符在该处理过的帧描述列表中时,该字段的内容(在右侧添加3个0)指示用于主机虚拟页的页表项的主机实际或主机绝对地址。
该字段被主机初始化,并且可被主机或主机页管理辅助函数改变。
返回图8A,除了进行清除之外,主机还确保该可用帧描述符列表中有足够的帧服务于下面几个对主机存储器的请求(步骤802)。该可用帧描述符列表(AFDL)是描述那些主机使其可用于主机页分配的主机帧的帧描述符的列表。AFDL被一AFDL源(AFDLO)指定在指定的主机实际地址上。
AFDLO的内容(在右侧添加5个0)指示AFDL上的第一个帧描述符的主机自属空间虚拟地址。0值指示该列表是空的。
AFDLO被主机初始化并且可被主机或主机页管理辅助函数改变。AFDLO是通过非联锁的更新操作改变的。
帧描述符存在于以下两个列表之一中处理过的帧描述符列表(PFDL)或可用帧描述符列表(AFDL)。对于每个CPU都提供有单独的一对这些列表。通过CPU的前置区中的字段指定了CPU的AFDL或PFDL的源。
此后,主机可启动程序的解释执行(SIE)(步骤804)。响应于启动解释执行,程序开始执行,并且在执行期间选择下一个将要传送给适配器的QDIO缓冲器(步骤806)。程序把将用于数据传送的存储块的程序绝对地址填充到SBAL中(步骤808)。此外,程序通过发送设定QDIO缓冲器状态指令将缓冲器的所有权转移给适配器,该设定QDIO缓冲器状态指令将QDIO缓冲器的状态从程序拥有改变成适配器拥有(步骤810)。参照图10说明了该设定QDIO缓冲器状态指令的示例。设定QDIO缓冲器状态指令1000包括指定该设定QDIO缓冲器状态指令的操作码1002,该操作码在此示例内是一分离(split)操作码;多个通用寄存器1004,例如R1和R3;和由B2、DL2和DH2标明的第二操作数1006。
使用设定QDIO缓冲器状态指令,可将由R1和R3字段标明的通用寄存器指定的一个或多个QDIO输入队列或输出队列缓冲器的状态设定成该第二操作数指定的状态。操作一直进行,直到设定了指定的缓冲器的状态或设定了数量由CPU确定的缓冲器的状态(不管哪个先发生,操作都将结束)。状态码中显示该结果。
通用寄存器1包括指明被允许进行QDIO增强缓冲器状态管理(QEBSM)的并且将使其一个或多个缓冲器状态被设定的QDIO子通道的子通道令牌。(在该QDIO子通道被允许进行QEBSM之后通过该CHSC存储子通道QDIO数据命令获得该子通道令牌)。
R1字段标明的通用寄存器包括对QDIO队列和状态将被设定的第一缓冲器的指定。当发出该指令之后,R1字段标明的通用寄存器包括以下字段(a)队列索引(QIX)该字段包括一无符号整数的索引值,其指定包含将被设定状态的缓冲器的队列。如果该队列是输入队列,则该队列索引等于该队列的输入队列号。如果该队列是输出队列,则该队列索引等于队列的输出队列号加上建立的输入队列的总数的和。该字段的值将指定存在的队列(即该队列索引值将不超过建立的输入队列的总数与建立的输出队列的总数的和减1);否则在一示例中,设定状态码和状态码限定符。
(b)缓冲器编号(BNUM)该字段包括一无符号整数,其指示状态被设定的第一缓冲器的编号。
R3字段指明的通用寄存器包括状态被设定的缓冲器的数量。该R3寄存器还包括状态码限定符字段,该限定符字段在指令完成时连同状态码的设定一起被设定。当发出该指令时,R3字段指明的通用寄存器包括以下字段(a)状态码限定符(CCQ)当发出该指令时,该字段的内容没有意义。当该指令完成时,该字段包括一状态码限定符(CCQ)代码,该限定符代码在设定该状态码时被设定。可能的CCQ列表如下设定所有被指明的缓冲器的状态。
当前指定的缓冲器处于适配器拥有状态下。该缓冲器的状态没有改变。
提取QDIO缓冲器状态指令没有提取当前指定的缓冲器的状态,因为该状态是最后从适配器拥有变化到程序拥有状态的。该缓冲器的状态没有改变。
用于当前指定的队列的存储列表(SL)的地址是无效的。
用于当前指定的缓冲器的存储缓冲器地址列表(SBAL)的地址是无效的。
用于当前指定的缓冲器的存储块(SB)的地址是无效的。
在指定的缓冲器中存在一SBAL顺序错误。
指明的子通道是不可操作的。
该指定子通道令牌没有指示一被允许进行QEBSM的有效子通道。
没有为该指定子通道建立指定队列。
该指定缓冲器的编号是无效的。
该指定缓冲器的计数是无效的。
该指定缓冲器的状态既不是适配器拥有的也不是程序拥有的状态,或者该指定适配器的状态既是适配器拥有的也是程序拥有的状态。
已设定数量由CPU设定的缓冲器的状态。
(b)计数该字段包括一无符号的整数,其指定状态被设定的缓冲器的数量。在一个示例中,该字段的值将大于0并且小于或等于128;另外,设定一状态码和状态码限定符。
例如,缓冲器编号的空间在0到127的范围内。该计数值连同R1BNUM值一起可在该缓冲器编号的空间内指定回绕。
第二操作数地址不用于寻址数据。相反地,第二操作数地址的最右边的8位以存储列表状态块(SLSB)缓冲器状态指示符的形式指定将设定的QDIO缓冲器状态。如果第二操作数地址指定既不是适配器拥有也不是程序拥有状态的状态,或者第二操作数地址指定既是适配器拥有状态也是程序拥有状态(即,如果指定状态的位0和位1相等)的状态,则设定状态码,并且将R3状态码限定符设定为一预定值。
设定QDIO缓冲器状态的操作单元包括设定一缓冲器状态,使R3寄存器中的计数字段减1,并使R1寄存器中的缓冲器编号字段加1。如果增加缓冲器编号字段会使得缓冲器编号超过最大缓冲器编号127,则在缓冲器编号的空间内会发生回绕并且缓冲器编号重置为0。
当下面任何一种情况发生时,指令操作都将结束当已经设定在R3计数字段中指定的缓冲器状态的计数并且没有遇到错误或异常情况时。在此情况下,设定状态码和R3状态码限定符。
当遇到异常情况并且没有设定、已设定一些或全部指定缓冲器的状态时。在此情况下,设定状态码并将R3状态码限定符设定为一指示该异常的值。R3寄存器中的计数字段减小已被设定的缓冲器状态的数量,并且R1寄存器中的缓冲器编号(BNUM)字段增加同样的数量,如果需要的话可通过0回绕。因此,如果R3寄存器中的计数字段为0,则已设定指定缓冲器的状态。如果该计数字段不为0,则R1队列索引(QIX)和缓冲器编号(BNUM)字段指示当遇到异常情况时正在处理的缓冲器。
当遇到错误情况并且没有设定指定缓冲器状态时。在此情况下,设定状态并将状态码限定符字段设定为一指示该错误的值。
当已设定数量由CPU确定的指定缓冲器状态而没有设定全部指定数量的缓冲器状态时。在此情况下,设定状态码和状态码限定符字段。R3寄存器中的计数字段减小已被设定的缓冲器状态的数量,并且R1寄存器中的缓冲器编号(BNUM)字段增加同样的数量,如果需要的话可通过0回绕。
在设定指定缓冲器状态之前或之后,执行串行化和检查点同步函数。
设定QDIO缓冲器状态指令的执行不改变子通道内包含的任何信息,也不会使I/O子系统向适配器发信号,也不会改变程序存储器中的任何缓冲器状态信息。
参照图8A-8C说明了与执行SQBS指令相关联的处理。除非发生异常情况,否则由机器有利地执行该指令。如果发生这样的异常情况,则由主机完成该处理,其方式为主机执行列在机器下的剩余步骤。
参照图8A,响应于发出SQBS指令,机器执行一主机允许检查以确定主机是否允许客户使用QEBSM工具(步骤812)。如果QEBSMI允许控制(例如,在客户状态中)被设定为0以指示不允许(步骤814),则处理将由主机而不是机器完成(步骤816)。当在设定QDIO缓冲器状态解释期间遇到需要主机的某种动作或服务的情况时,识别出指令截取或部分执行截取(PEI),用设定QDIO缓冲器状态指令文本设定截取参数,并对于PEI,在客户状态中设定QEBSM-PEI参数。
然后,机器执行一子通道判定(步骤818)。在一个示例中,使用SQBS子通道令牌定位包含指定该子通道的SID的QBICB。判定该子通道令牌是否与在由QBICB指定的子通道中存储的令牌相匹配。如果不匹配,则主机完成处理(步骤820)。否则,机器继续该处理。
在进一步的细节中,当执行设定QDIO缓冲器状态指令(以及信号适配器指令或提取QDIO缓冲器状态指令)被执行时,使用通用寄存器1中的子通道令牌指定一子通道。使用该令牌判定是否允许该指定子通道进行QDIO增强缓冲器状态管理解释,以及确定该子通道的子系统标识。在一个示例中,用于进行这些确定的步骤包括以下步骤(1)当允许子通道进行QDIO增强缓冲器状态管理解释时,将寄存器1中的子通道令牌值用作与子通道相关联的QDIO缓冲器信息控制块(QBICB)的主机实际或绝对地址。如果在引用QBICB时存在访问异常情况,则禁止客户指令并且识别指令截取,否则处理继续进行。
(2)QBICB的子系统标识字段指示将使用的子通道。如果该QBICB的子系统标识字段不包括有效的子系统标识,则禁止客户指令并识别指令截取;否则处理继续进行。例如,这允许主机处理对被模拟设备的操作或处理跟踪能力。
(3)如果由QBICB子系统标识字段指定的子通道不被允许进行QEBSMI或者没有与由子通道令牌指定的QBICB相关联,则禁止客户指令并识别指令截取;否则处理继续进行。
然后,机器判定该SQBS操作数是否有效(步骤821)。例如,确认缓冲器编号有效。在一个示例中,如果R1缓冲器编号字段指定一大于127的值,则指令完成,并设定状态码和状态码限定符。另外,确认计数值有效。如果R3缓冲器计数字段指定一为0或大约128的值,则指令再次结束,并设定状态码和状态码限定符。另外,检查该指定缓冲器状态的有效性。如果由第二操作数地址指定的缓冲器状态指明一同时为适配器拥有和程序拥有的状态或一既不是适配器拥有也不是程序拥有的状态,则指令完成,并设定状态码和状态码限定符。此外,定位用于指定队列的队列存储描述符。如果R1队列索引字段大于或等于QBICB队列计数字段中的值,则没有为该子通道建立该指定队列,并且该指令完成,以及设定状态码和状态码限定符。否则,将R1队列索引字段用作QBICB队列描述符地址阵列中的索引,以确定队列描述符的地址。
如果上述任何检测失败,则处理结束,并设定一状态码和状态码限定符(步骤822)。否则,处理继续进行。
将客户状态中的间隔结束指示符设定为1,并执行串行化和检查点同步函数。在机器出故障的情况下,该指示符通知主机该主机控制结构可能处于不可靠的状态。
然后,尝试获得对该指定队列的队列存储描述符锁定(步骤824)。从该指定队列的QBICB队列描述符中的队列存储地址字段中取出地址存储描述符地址。使用一联锁更新操作试图将QSD锁定字的值从可用改变成被机器锁定,如果在试图设定该锁定字时QSD地址为零或存在访问异常情况,则识别一有效性截取并设定一有效性截取理由码。
如果该联锁更新操作失败,则可重试该操作一依赖于模型的次数。如果QSD锁定字不能被设定为被机器锁定的值,则识别部分执行截取,并将返回主机程序的QEBSM-PEI参数字段中的部分执行理由码设定为例如1,并且处理由主机完成(步骤826)。如果联锁更新操作成功,则处理继续进行。
以下逻辑将重复一定次数,该次数等于由SQBS指令中的计数字段指定的QDIO缓冲器的数量。起初,定位将被处理的QDIO缓冲器的SQBN和SBAL(步骤828)。在一个示例中,定位用于该指定队列的主机存储列表。即,从队列存储描述符中的主机存储列表地址字段中获取主机存储列表地址。然后,定位该指定队列存储列表状态块。该地址是从队列存储描述符中的SLSB地址字段中获得的。定位将被设定的第一SLSB项(SQBN)。将R1缓冲器编号(BNUM)字段的值用作SLSB中的索引,以确定将被设定的第一SQBN的地址。如果当访问该SQBN时存在访问异常情况,则识别有效性截取并设定有效性解释理由码。
此后,判定该指定缓冲器当前是否被程序拥有(步骤830)。在一个示例中,通过检查SQBN进行判定。如果不是被程序拥有,则处理完成并设定一状态码和状态码限定符(步骤832)。否则,处理继续进行,机器判定是否需要提取该指定缓冲器的状态(步骤834,图8B)。如果需要经由例如EQBS指令提取状态,则处理完成并设定一状态码和状态码限定符(步骤836)。如果不需要提取该指定缓冲器的状态,则将程序SBAL的内容复制给主机的SBAL(步骤838)。此外,设定主机的SBAL中的需要缓冲器同步和EQBS操作位(步骤840)。
此外,对于每个有意义的具有一有效存储块的主机SBALE,执行以下功能(步骤842)(1)从主机SBALE获取程序绝对(主机虚拟)存储块地址(步骤844);(2)调用HPMA钉住函数以转换和在存储器内钉住页(步骤846)。如果该HPMA钉住函数不成功(步骤848),则由主机完成处理(步骤850)。否则,处理由机器继续进行;(4)将由HPMA钉住函数返回的存储块的主机绝对地址移动到主机的SBALE中(步骤852);以及(5)设定主机的SBAL中的钉住页指示符(步骤854)(图8C)。
此后,将缓冲器的SQBN设定为由SQBS指令指定的适配器拥有状态(步骤856)。在一个示例中,该状态由第二操作数指定。另外,SQBS缓冲器编号(BNUM)增加1(步骤858),并且SQBS计数字段减小1(步骤860)。
判定该SQBS计数是否等于0(步骤862)。如果该SQBS计数不等于0,则处理继续进行,定位将被处理的QDIO缓冲器的SQBN和SBAL(图8A)。但是,如果SQBS计数等于0,则处理继续进行,解锁该QSD锁定(步骤864)(图8C)。如果成功的话,则将成功指示转送给程序(步骤866)。
如果这是此时要传送的最后一个QDIO缓冲器,则发送一适当的SIGA指令函数以用信号通知适配器I/O请求正等待例如用于输出操作的SIGA-wt或当使输入可用于由适配器随后使用时的SIGA-rt(步骤868)。
应指出,如果SQBS处理必须被主机完成,则主机将合适的终端操作呈现给程序而不是机器。
在说明SQBS指令时,参照主机页管理辅助(HPMA)。根据本发明的一个方面,主机页管理辅助包括四个辅助函数,这些辅助函数可在解释可分页存储客户期间被另外的CPU工具调用。这些函数包括一钉住函数,一解决主机页函数,一由虚拟地址释放主机页函数和一由PTE地址释放主机页函数,下面将对每个函数进行说明。
从SQBS指令调用的HPMA钉住函数使CPU能够指示主机页的内容被钉住在主机页帧内。当需要一页在单个指令的执行之外(例如,在一I/O操作进行期间)存在时可钉住该页。当页处于被钉住状态时,这向主机指示该页不适于页无效。当该钉住主机页函数成功钉住一页时,可增加与该页相关联的一钉住页计数器。
在一示例中,一增量(delta)钉住页计数器阵列(DPPCA)是一例如31位的带符号整数的钉住页计数器的阵列,当成功钉住一页时钉住主机页函数可增加该些计数器之一。此外,当页被成功释放时,可使用一虚拟地址释放主机页函数或由PTE地址释放主机页函数减小DPPCA计数器之一。在一个实施方式中,DPPCA中的一个计数器与位于小于给定大小(例如2GB)的主机实际存储器中的页相关联,而另一计数器与位于等于或大于该大小的主机实际存储器中的页相关联。
主机将每个页分类成0类页或1类页,并相应地在该页的页状态表项(PGSTE)中设定一页类别指示符。参照图11A说明页状态表项1100的一示例。页状态表项1100包括例如以下内容(a)Acc 1102访问控制键;(b)FP 1104取保护指示符;(c)页控制联锁(PCL)1106这是联锁控制,其用于使对除了被标记为保留的PGSTE状态区和PGSTE位之外的页表项(PTE)和对应的PGSTE的更新串行化;(d)HR 1108主机引用备份指示符;(e)HC 1110主机变化备用指示符;(f)GR 1112客户引用备份指示符;(g)GC 1114客户变化备用指示符;(h)页内容逻辑上为0指示符(Z)1116当为1时,由该PGSTE和相应的PTE描述的该页的内容被认为是0。该页的任何先前的内容不必保留并且可被0的页代替。
当为0时,由PGSTE和相应的PTE描述的页内容不被认为是0。该页的内容将被保留并且不能被代替。
当相应的PTE页无效(PTE.I)位为1时,该位是有意义的。
1.当该Z位为1并且相应的PTE.I位(稍后将说明)为1时,可通过主机或主机页管理辅助函数替换页内容。
2.当该Z位为1,相应的PTE.I位(稍后将说明)为1并且页内容被替换时,应通过使该页与已被设定为0的帧相关联来替换该页。
(i)页类(PC)1118当为0时,由PGSTE和相应的PTE描述的页是0类页,并且使用用于0类页的增量钉住页计数阵列(DPPCA)对该页的钉住和释放操作进行计数。当为1时,由PGSTE和相应的PTE描述的页是1类页,并且使用用于1类页的DPPCA对该页的钉住和释放操作进行计数。
(j)钉住计数溢出(PCO)1120当为1时,该钉住计数字段处于溢出状态。当为0时,该钉住计数字段没有处于溢出状态。在此情况下,由主机将全部钉住计数保持在另一个不能被机器访问的数据结构内。
(k)帧描述符位于处理过的帧描述符列表上(FPL)1122当为1时,由PGSTE和相应的PTE描述的页的帧描述符位于一处理过的帧描述符列表中。该帧描述符指示被HPMA解决主机页函数使用用于该页的主机页帧。
(l)请求页内容替换(PCR)1124当为1时,当为由PGSTE和相应的PTE代表的页调用HPMA解决主机页函数时,请求替换页内容。
(m)钉住计数1126使用一无符号的二进制整数指示由PGSTE和相应的PTE代表的主机虚拟页的内容是否被钉住在由PTE的页帧实际地址字段指定的实际主机页帧内。当该字段的值大于0或该页计数溢出(PCO)位为1时,认为相应页被钉住。当该字段的值为0并且PCO位为0时,不认为相应页被钉住。
当通过主机或CPU钉住一页时,该字段应加1。当通过主机或CPU释放一页时,该字段应减1。
当该钉住计数字段的值大于0或PCO位为1时,相应的PTE.I(页无效)位将为0。否则,会发生不可预测的结果。
在钉住一页时,主机程序不应该改变PTE页帧实际地址(PRFA)字段的内容、PTE页无效(I)位的设定,或PTE或段表项(STE)中的页保护(P)位的设定。否则会发生不可预测的结果。
一PGSTE对应于一页表项(PTE),参照图11B说明了PTE的示例。页表项1150包括例如(a)页帧实际地址1152该字段提供实际存储地址的最左侧的位。将这些位与右侧的虚拟地址的字节索引字段相连接,可获得实际地址。
(b)页无效指示符1154该字段控制与页表项相关联的页是否可用。当该指示符为0时,使用页表项进行地址转换。当该指示符为1时,不能使用页表项进行转换。
(c)页保护指示符1156该字段控制是否允许对页进行存储访问。
2003年6月的题为“z/Architecture Principles of Operation”的IBM出版物No.SA22-7832-02介绍了关于文中所述的页表项和页表以及段表项的其他细节,在此将该出版物全文引入本文,作为参考。
继续DPPCA的讨论,对于0类钉住页计数的每个虚拟配置均有一个单独的DPPCA与之相关联,并且该DPPCA由每个虚拟配置描述中的0类DPPCA源字段指定。对于1类钉住页计数存在单个DPPCA,并且该DPPCA由前置区中的1类DPPCA源字段指定。
DPPCA不受键控保护,也不受低地址保护。在一个示例中,其是一分配在双字边界上的8字节控制块,并且包括例如一用于小于某一大小(例如2GB)的页帧实际地址的增量钉住页计数,以及一用于大于或等于该大小的页帧实际地址的增量钉住页计数。将使用联锁更新操作来改变该字段,以便保持其内容的准确性。当钉住主机页函数成功钉住一页时,增量钉住页计数器可加1。
当调用该钉住主机页函数时,将以下数据输入该函数将被钉住的主机虚拟地址(页);识别分配给客户的地址空间和将使用的转换表的有效主机地址空间控制元件(ASCE);对是否为提取或存储操作钉住该页的指示;以及一页内容替换指示符。
参照图12说明与钉住主机页函数相关联的逻辑的一实施例。最初,定位页的PTE/PGSTE对(步骤1200)。例如,使用ASCE和将被钉住的虚拟地址(页),确定针对将被钉住的虚拟地址的页表项和页状态表项目在主机存储器中的位置。
例如,使用联锁更新操作将PGSTE中的页控制锁定指示符从0改变为1来锁定该定位的PTE/PGSTE对(步骤1202)。如果不能锁定该对或者页控制联锁(PCL)已经为1(查询1204),则会指示一失败(步骤1206)。否则,处理继续进行,判定下一个钉住是否会使该页的钉住计数溢出(即,是否PGSTE中的钉住计数字段的值为一预定值(例如,255))(查询1208)。如果是这样的话,处理以一失败结束(步骤1206)。否则,提取将被钉住的虚拟页的PTE(步骤1210)。
然后,判定该页是否被保护以及是否被钉住以进行存储操作(查询1212)。即,如果输入指示是用于存储操作并且在该页的段表项或页表项中的页保护位为1,则指示失败(步骤1206)。否则,处理继续进行,判定该页是否无效(查询1214)。如果该页无效,则调用一解决主机页函数,稍后将说明该函数(步骤1216)。如果该解决主机页函数失败(查询1217),则钉住函数失败(步骤1206)。但是,如果解决成功,或者页不是无效,则钉住计数增加(步骤1218)。
随后,判定钉住状态是否从释放改变到钉住状态(查询1220)。如果是这样,则相关联的增量钉住页计数(即,根据页类型和PFRA选择的)加1(步骤1222)。即,如果钉住计数现在为1并且钉住计数没有处于溢出状态(PGSTE.PCL=0),则页状态已从释放状态转变到被钉住状态。在此情况下,增量钉住页计数加1。此后,如果页状态没有从释放状态改变到被钉住状态,则对PTE/PGSTE对解锁(步骤1224)。例如,将PGSTE中的页控制联锁位设定为0,并且处理以成功结束。
当钉住主机页函数退出并指示成功时,钉住该指定页并可能已通过调用解决主机页函数解决该指定页。在此情况下,已由机器增加状态表中的对该页的页计数,并可能已由机器更新主机转换表,并减轻了先前将控制转移给主机以便进行页钉住和解决的需求。
当页主机钉住函数退出并指示失败时,没有对转换和状态表的永久改变,并且当识别出该失败时重置任何由该钉住函数设定的页控联锁位。在此情况下,机器的行为好像是没有调用该函数并且将把控制传递给主机以处理该失败。
如上所述,如果将钉住的页是无效的,则调用一解决主机页函数。当条件允许时,该解决主机页函数利用可被CPU使用的主机提供的可用主机页帧列表,来动态解决一主机页无效状况。该函数还提供这样一种方法,通过该方法告知主机任何已通过被分配给特定主机页而用于解决主机页无效状况的主机页帧。
如果允许主机页管理辅助,则为主机页调用解决主机页函数,并且描述该页的页表项(PTE.I)中的页无效位为1,然后可使用主机已使之可用的主机页帧之一动态解决该主机页无效状况。
解决主机页函数的输入包括可用帧描述符列表,将被解决的虚拟地址(页),指示将使用的地址空间和转换表的有效地址控制键控制元件(ASCE),页内容替换指示符,对是否已由调用器设定一间隔结束指示符的指示,和对是否由调用器锁定对PTE/PTSTE对的访问的指示。
参照图13A-13B说明与解决函数相关的逻辑的实施例。开始,判定是否存在任何可用帧(查询1300)(图13A)。例如,该判定可通过检查可用帧描述符列表是否为空来进行。如果AFDLO指定零地址(即,对于本地处理器没有可用主机页帧),则没有可用帧,并且处理退出并指示失败(步骤1302)。
但是,如果有可用帧,则处理继续进行,定位该页的PTE/PGSTE对(步骤1304)。在一个示例中,使用ASCE和将被解决的虚拟地址(页),来确定对于将被解决的虚拟地址的页表项和页状态表项在主机存储器中的位置。
此后,从可用帧描述列表中的第一帧描述符中提取页帧的实际地址(步骤1306)。另外,如果还没有指示已被调用器建立,则该间隔结束指示符被标记以显示该解决主机页函数已开始,并且还执行串行化和检查点同步函数(步骤1308)。
随后,有条件地锁定该PTE/PGSTE对(步骤1310)。如果该解决主机页函数输入条件指示对对应于该将被解决的主机虚拟地址的PTE和PGSTE的访问还没有被串行化,则使用一联锁更新操作以尝试将PGSTE中的页控制联锁指示符(PGSTE.PCL)从0改变为1。如果该PTE/PGSTE对不能被锁定或者发现PGSTE.PCL已为1(查询1312),则处理失败并退出(步骤1302)。否则,处理继续进行,提取该将被解决的虚拟页的PTE(步骤1314)。在一个示例中,从主机存储器并行地块提取(block-fetch)页表项。
此外,判定是否需要解决该页(查询1316)。在一个示例中,该判定是通过检查PTE中的无效指示符而进行的。如果PTE指示页有效(PTE.I=0),则解决该页,并且处理结束。但是,如果将要解决该页,则进一步判定是否可以解决该页(查询1318)。例如,如果针对该将要解决的虚拟页的PGSTE指示页内容逻辑上不为0(PGSTE.Z=0),并且输入页内容替换指示符指示页不能被替换,则处理失败并且退出(步骤1302)。但是,如果PGSTE中的页内容逻辑上为0指示符为1或者解决主机页函数输入条件指示将被替换的主机虚拟页的内容可被替换,则可尝试解决该页,并且处理继续进行(步骤1320)。
参照图13B说明为解决页而执行的各种步骤。一个步骤包括设定该页的存储键(步骤1330)。例如,由帧描述符的页帧实际地址字段指示的主机帧的存储键是这样设定的,即设定来自PGSTE.ACC的访问控制位;设定来自PGSTE.FP的提取保护位;将引用指示符设定为零;以及将改变指示符设定为零。
另外,从可用帧描述符列表中除去该帧描述符(步骤1332)。例如,使用非联锁更新操作从可用帧描述符列表中除去该帧描述符。该帧描述符的下一个帧描述符地址字段的内容代替AFDLO中的旧值。
然后,记录帧分配(步骤1334)。通过将PTE复制到帧描述符的PTE副本字段保存针对该主机虚拟页的PTE。另外,将针对主机虚拟页的PTE的地址存储到帧描述符的页表项地址字段。
然后,判定是否可替换页内容(查询1338)。例如,该判定可通过检查输入页内容替换指示符进行。如果输入页内容替换指示符指示可替换页内容,则将PGSTE中的页内容替换指示符(PGSTE.PCR)设定为1(步骤1340)。这样,主机可统计允许页内容替换的操作的数量。
此后,或如果页内容不能被替换,则更新主机虚拟页的PTE以消除页无效状况。例如,并行存储操作使用帧描述符的页帧实际地址字段的内容替换页表项的页帧实际地址字段的内容,并将页表项中的页无效位设定为0(步骤1342)。PTE中的其他位保持不变。此外,将帧描述符添加到处理过的列表内(步骤1344)。这是通过联锁更新操作进行的。这样,解决处理完成。
返回图13A,在解决页之后,有条件地解锁PTE/PGSTE对(步骤1322)。例如,如果此函数将页控联锁指示符设定为1,则将指示符设定为0。
此外,如果此函数设定间隔结束指示符,则执行串行化和检查点同步函数,并重置间隔结束指示符(步骤1324)。这样,解决函数的处理完成。
当解决函数退出并指示成功时,已解决了指定页。在此情况下,机器已更新主机转换表,并减轻了以前对将控制转移给主机以便进行页解决的需求。
当解决函数退出并指示失败时,转换表没有改变。在此情况下,机器的行为好像没有调用该函数并且将控制传递给主机以处理该失败。
除了SQBS指令之外,根据本发明的一个方面还实现了EQBS指令。例如,客户在接收到适配器的通知时或者在缓冲器状态将被提取时主动地发出一提取QDIO缓冲器状态指令。参照图14A-14C说明与该提取QDIO缓冲器状态指令相关的逻辑的实施例。
在运行程序之前,进行某种初始化。例如,主机执行各种清除任务(步骤1400,图14A),包括例如去除和处理在处理过的帧描述符列表上的帧。另外,主机确保可用帧描述符列表上有足够的帧(步骤1402)。此后,主机开始该程序的解释执行(步骤1404)。
在执行期间,程序选择程序等待适配器结束处理的下一个未完成的QDIO缓冲器(步骤1406)。然后,程序发送EQBS指令以获取所选择的缓冲器的当前状态(步骤1408)。
参照图15说明EQBS指令的格式的一个示例。提取QDIO缓冲器状态指令1500包括标明该EQBS指令的操作码1502;通用寄存器R1字段1504;通用寄存器R3字段1506;和通用寄存器R2字段1508,下面说明它们中的每一个。
通过该提取QDIO缓冲器状态指令,提取被由字段R1和R3指示的通用寄存器指定的一个或多个状态相同的QDIO输入队列或输出队列缓冲器的状态,并将该些状态以QDIO缓冲器状态指示符的形式装载到由R2字段指示的通用寄存器中。可选地,可将位于输入缓冲器准备好状态下的指定缓冲器改变到输入缓冲器确认状态。该操作一直进行,直到已提取指定缓冲器的共同状态,或者提取至少一些指定缓冲器的共同状态并且下面将要提取的缓冲器状态与前面提取的那些状态不同,或者直到已提取数量由CPU确定的缓冲器的共同状态,不管先满足哪个条件,该操作都将结束。结果保存在状态码内。
通用寄存器1包括指示被允许进行QDIO增强缓冲器状态管理(QEBSM)、并且将使一个或多个其缓冲器状态被提取的QDIO子通道的子通道令牌。
由R1字段指定的通用寄存器包括对QDIO队列和状态将被提取的第一缓冲器的规定。当发出该指令时,由R1字段指定的通用寄存器包括以下字段(a)队列索引(QIX)该字段包括一无符号整数的索引值,其指定包含状态将被提取的缓冲器的队列。如果该队列是输入队列,则该队列索引等于该队列的输入队列编号。如果该队列是输出队列,则该队列索引等于队列的输出队列编号加上建立的输入队列的总计数的和。该字段将指定存在的队列(即该队列索引值将不超过建立的输入队列的总计数与建立的输出队列的总计数的和减1)。
(b)缓冲器编号(BNUM)该字段包括一无符号整数,其指示状态将被提取的第一缓冲器的编号。在一个示例中该字段的值小于128。
R3字段指示的通用寄存器包括状态将被提取的缓冲器的数量。该R3寄存器还包括状态码限定符字段,该限定符字段在指令完成时连同状态码的设定一起被设定。在一个示例中,当发出该指令时,R3字段指明的通用寄存器包括以下字段(a)状态码限定符(CCQ)当发出该指令时,该字段的内容没有意义。当该指令完成时,该字段包括一无符号整数状态码限定符(CCQ)代码,该限定符代码在设定该状态码时被设定。状态码限定符的示例如下提取所有被指明的缓冲器的状态。
当前指定的缓冲器的状态不同于在执行此指令期间以前提取的那些状态。没有提取此缓冲器的状态。
用于当前指定缓冲器的存储列表(SL)的地址是无效的。
用于当前指定缓冲器的存储缓冲器地址列表(SBAL)的地址是无效的。
用于当前指定缓冲器的存储块(SB)的地址是无效的。
该指定的子通道是不可操作的。
该指定子通道令牌没有指示一被允许进行QEBSM的有效子通道。
没有为该指定子通道建立该指定队列。
该指定缓冲器的编号是无效的。
该指定缓冲器的计数是无效的。
已提取数量由CPU设定的缓冲器状态。
已处理数量由CPU确定的缓冲器存储块,但是没有处理完整的缓冲器并且没有提取缓冲器状态。
(b)计数该字段包括一无符号的整数,其指定状态被提取的缓冲器的数量。该字段的值将大于0并且小于等于128;否则,设定一状态码和R3状态码限定符。缓冲器编号的空间在0到127的范围内。
该计数值连同R1BNUM值一起可在该缓冲器编号的空间内指定回绕。
在发出该指令之前,由R2字段指定的通用寄存器包括这样的指示,即在提取缓冲器状态之后,是否应该将状态将被提取的并且发现处于输入缓冲器准备好状态的指定缓冲器改变到输入缓冲器确认状态。当该指令完成时,得到的状态码和状态码限定符指示例如由R2字段指定的通用寄存器是否包含一个或多个缓冲器的状态。当发出该指令时,可通过R1的QIX和BNUM字段的值指示此状态将应用于其上的第一缓冲器。被依次编号的此状态将应用于其上的缓冲器的计数是在发出该指令时的R3计数字段和在该指令完成时的减小的R3计数字段之间的差。
由R2字段指定的通用寄存器包括例如以下字段(a)确认输入缓冲器控制(I)当发出该指令并且此字段为1时,在提取缓冲器状态之后,被发现处于输入缓冲器准备好状态的指定缓冲器将被改变到输入缓冲器确认状态。当发出该指令并且此字段为0时,不改变输入缓冲器的状态。
(b)缓冲器状态(BSTATE)当发出该指令时,该字段没有意义。当该指令结束并且R3计数字段已减小时,该字段包括从存储列表状态块(SLSB)缓冲器状态指示符中提取的值。当该指令结束并且R3计数字段没有减小时,该字段的内容保持不变并且没有意义。
提取QDIO缓冲器状态的操作单元包括提取一个缓冲器的状态,将该状态加载到R2BSTATE字段内,可选地改变该缓冲器的状态,使R3寄存器中的计数字段减1,并使R1寄存器中的缓冲器编号字段加1。如果增加该缓冲器编号字段使得该缓冲器编号超过最大缓冲器编号例如127,则在缓冲器编号空间内发生回绕,并且缓冲器编号被重置到例如0。
当发生以下情况的任何一种时指令操作结束当已将R3计数字段中指定的缓冲器计数的共同状态提取到R2缓冲器状态(BSTATE)字段内并且没有遇到错误或异常情况时。在此情况下,设定状态码和R3状态码限定符。
当遇到异常情况并且没有提取或提取一些指定缓冲器的共同状态时。在此情况下,设定状态码和将R3状态码限定符设定为一指示该异常的值。R3寄存器中的计数字段减小已被提取的缓冲器状态的数量,并且R1寄存器中的缓冲器编号(BNUM)字段增加同样的数量,如果需要的话可通过0回绕。提定的缓冲器状态已被提取。如果该计数字段不为0,则R1队列索引(QIX)和缓冲器编号(BNUM)字段指示当在遇到异常情况时正在处理的缓冲器。
当遇到错误情况并且没有提取指定缓冲器状态时。在此情况下,设定状态码和将R3状态码限定符字段设定为一指示该错误的值。
当提取数量由CPU确定的缓冲器的共同状态而没有提取全部指定数量的缓冲器的状态时。在此情况下,设定状态码和R3状态码限定符字段。R3寄存器中的计数字段减小已被提取的缓冲器状态的数量,并且R1寄存器中的缓冲器编号(BNUM)字段增加同样的数量,如果需要的话可通过0回绕。
当CPU确定在完成单个操作单元之前结束该指令时。在此情况下,设定状态码和状态码限定符。R3寄存器中的计数字段和R1寄存器中的缓冲器编号(BNUM)字段不变,并且不将状态信息放置到R2寄存器的缓冲器状态(BSTATE)字段内。
在提取指定缓冲器状态之前和之后,执行串行化和检查点同步函数。
提取QDIO缓冲器状态指令的执行不改变子通道内包含的任何信息,也不会使I/O子系统查询适配器或向适配器发信号。
参照图14A-14B说明了与执行EQBS指令相关联的处理。除非发生异常情况,否则由机器有利地执行该指令。如果发生这样的异常情况,则由主机完成该指令处理。
参照图14A,响应于发出EQBS指令,机器执行一主机允许检查以确定主机是否允许客户使用QEBSM工具(步骤1410)。如果客户不是可分页存储模式客户或者QEBSMI工具允许控制为0,则处理将由主机完成(步骤1412)。否则,处理继续由机器执行。
然后,机器执行一子通道判定(步骤1414)。在一个示例中,使用通用寄存器1中的子通道令牌定位包含指定该子通道的SID的QBICB。判定该子通道令牌是否与在由QBICB指定的子通道中存储的令牌相匹配。如果不匹配,则处理由主机完成。否则,机器继续该处理。
判定EQBS操作数是否有效(步骤1416)。在一个示例中,确认缓冲器编号有效。在一个示例中,如果R1缓冲器编号(BNUM)字段指定一大于例如127的值,则指令完成,并设定状态码和状态码限定符(步骤1418)。另外确认计数值有效。如果R3计数字段指定一为0或大约例如128的值,则指令结束,并设定状态码和状态码限定符。另外,定位用于指定队列的指令存储描述符。如果R1队列索引字段大于或等于QBICB队列计数字段中的值,则没有为该予通道建立该指定队列,并且指令完成,以及设定状态码和状态码限定符。否则,将R1队列索引字段用作QBICB队列描述符地址阵列中的索引,以确定队列描述符的地址。
然后,尝试由机器获得对该指定队列的队列存储描述符锁定(步骤1420)。从该指定队列的QBICB队列描述符中的队列存储地址字段中取出QSD地址。使用一联锁更新操作尝试将QSD锁定字的值从可用改变成被机器锁定,如果QSD地址为0或在试图设定锁定字时存在访问异常情况,则识别出异常。如果该联锁更新操作失败,则可重试该操作依赖于模型的次数。如果QSD锁定字不能被设定为预定值,则识别部分执行截取,并且该处理由主机继续进行(步骤1422)。但是,如果联锁更新操作成功,则处理由机器继续进行。
然后,定位第一QDIO缓冲器的SQBN(步骤1424)(图14B)。此缓冲器的状态是在指令完成时将在STATE中返回的状态。具体地,通过从队列存储描述符中的主机存储列表地址字段中获取主机存储列表地址,定位特定队列的主机存储列表。然后通过从队列存储描述符中的SLSB地址字段中获取SLSB地址,定位特定队列的存储列表状态块。此外,定位将被提取的第一SLSB项(SQBN)。将R1缓冲器编号字段的值用作SLSB中的索引,以确定将被提取的第一SQBN的地址。
以下逻辑将重复一定次数,该次数等于由SQBS指令中的计数字段指定的QDIO缓冲器的数量。起初,定位将被处理的QDIO缓冲器的SQBN和SBAL(步骤1426)。然后,判定此SQBN是否与将被返回的STATE相匹配(步骤1428)。即,如果至少一个缓冲器状态已被提取并且当前缓冲器的SQBN包括对一与以前提取的状态不同的状态的指定,则禁止该操作单元,EQBS指令完成,并且设定状态码和状态码限定符(步骤1430)。否则,处理继续进行。
如果该指定缓冲器目前被程序拥有并且需要被提取(主机SBAL中的缓冲器同步=1)(步骤1431),则对于SBAL中的所有SBALE(例如,16个)执行以下操作(1)将主机SBALE中的除SBALF2之外的SBALF字段复制到程序SBALE中的对应字段中(步骤1432)。
(2)如果在主机SBAL中有页钉住指示符,则a)使用主机虚拟地址(来自程序SBALE)和主机实际地址(来自主机SBALE)调用HPMA释放函数(步骤1434)。
b)判定该释放函数是否成功(步骤1436)。如果该释放函数不成功,则处理由主机完成(步骤1438)。否则,处理继续由机器进行。
c)在主机SBALE中将页钉住指示符设为0(步骤1438)。
d)如果队列是输入队列,则将主机SBALE计数复制到程序SBALE中(步骤1440)(图14C)。
e)如果是格式2输入队列,则将主机SBALE的缓冲器数据偏移(即,数据在缓冲器页中的偏移)复制到客户SBALE中,并且保持剩余的缓冲器地址不变(步骤1442)。
(3)然后,在主机SBAL中关断需要缓冲器同步和需要EQBS操作指示符,并使QSD中的状态转换计数加1(步骤1444)。
如果确认的输入缓冲器控制开通并且SQBN中的值指示准备好输入缓冲器,则将SQBN设定为输入缓冲器确认状态(步骤1446)。EQBS缓冲器编号也加1(步骤1448),并且EQBS计数字段减1(步骤1450)。
下面,判定EQBS计数是否等于0(步骤1452)。如果不等0,则处理继续进行,定位将被处理的QDIO缓冲器的SQBN和SBAL(步骤1426)(图14B)。如果EQBS计数等于0,则处理结束并指示成功。然后,程序可处理已从适配器拥有状态转变到程序拥有状态的缓冲器(步骤1454)。例如,程序可处理已到达的输入或处理输出请求的完成(例如回收缓冲器)。
如果EQBS处理必须由主机完成,则主机向程序而不是机器提交合适的状态码和状态码限定符。
如上所述,EQBS指令可调用由虚拟地址进行HPMA释放函数。该函数使CPU能够为了I/O请求指示主机页的内容不再需要被钉住在主机页帧中。将被释放的页由主机虚拟地址指定。当成功释放一页时,与页相关联的一个或多个钉住页计数器会减小。
在一个示例中,该函数的输入包括将被释放的虚拟地址(页);指示分配给客户的地址空间和将使用的转换表的有效地址空间控制元件(ASCE);以及将被释放的页的主机实际地址。
为了便于主机数据结构有效性判定,由虚拟地址释放主机页函数的调用者负责确保在该函数被调用的整个检查点间隔中设定间隔结束指示符。该由虚拟地址释放主机页函数不检查或修改该间隔结束指示符。
参照图16说明与该由虚拟地址释放主机页函数相关联的逻辑的一实施例。最初,定位该页的PTE/PGSTE对(步骤1600)。使用将被释放的主机虚拟地址和主机地址空间控制元件(ASCE),确定对应的页表项和页状态表项的主机实际地址。一旦PTE/PGSTE对被定位,就使用例如联锁更新操作锁定该PTE/PGSTE对,该联锁更新操作将页控制联锁指示符从0改变为1(步骤1602)。如果不能锁定该PTE/PGSTE对或者如果PGSTE.PCL已经为1(查询1604),则处理以失败结束(步骤1606);否则,处理继续进行。
判定该页的钉住计数是否随着下一个释放而下溢(即PGSTE中的钉住计数字段的值是否为0)(查询1608)。如果是这样,则处理再次以失败结束(步骤1606);否则,处理继续进行,获取将被释放的虚拟页的PTE(步骤1610)。在一个示例中,从主机存储器并行地块获取页表项。
如果该页无效或者页无效位为1(查询1612),则处理再次以失败结束(步骤1606)。否则,判定是否已定位一不正确的PTE(查询1614)。即,如果PTE中的页帧实际地址字段未指定与将被释放的页的输入主机实际地址相同的页,则已定位一不正确的PTE,并且处理结束(步骤1606)。否则,处理继续进行。PGSTE中的钉住计数字段减1(步骤1616),并且判定页状态是否从钉住状态改变到释放状态(查询1618)。如果该页状态从钉住状态改变到释放状态,则相关联的增量钉住页计数减1(步骤1620)。即,如果钉住计数现在为0并且钉住计数没有处于溢出状态(PGSTE.PCO=0),则页状态已从钉住状态转变到释放状态,并且增量钉住页计数减1。
此后,或如果该页状态没有从钉住状态改变到释放状态,则通过例如将页控联锁指示符设定为0将PTE/PGSTE对解锁(步骤1622)。这样,该由虚拟地址释放函数的处理结束。
当该释放函数退出并指示失败时,没有改变状态表。在此情况下,机器的行为好像是没有调用该函数并且将控制传递给主机以处理该失败。当该函数退出并指示成功时,已释放指定页。在此情况下,已由机器更新主机状态表,并且减轻了以前将控制传递给主机以便进行页钉住的需求。
另一个可被调用的函数是一由PTE地址释放主机页函数。该函数使CPU能够指示主机页的内容不再被钉住在该主页帧内。将被释放的页由主机页表项的主机实际或绝对地址指定。当页被成功释放时,与页表相关联的一个或多个钉住页计数器会增加。
在一个示例中,该由PTE地址释放主机页函数的输入包括该将被释放页的主机实际地址或主机页表项。
参照图17说明与由PTE地址释放主机页函数相关联的逻辑的一实施例。一开始,定位对应于该输入页表项的页状态表项的位置(步骤1700)。然后锁定PTE/PGSTE对(步骤1702)。在一个示例中,使用一联锁更新操作以尝试将PGSTE中的页控制联锁指示符从0改变到1。如果不能锁定PTE/PGSTE对,或者PGSTE.PCL已经为1(查询1704),则处理以失败退出(步骤1706)。
另一方面,如果锁定成功,则进一步判定该页的钉住计数是否将随下一个释放而下溢(即PGSTE中的钉住计数字段的值是否为0)(查询1708)。如果是这样,则处理再次以失败退出(步骤1706);否则,获取将被释放的虚拟页的PTE(步骤1710)。在一个示例中,从主机存储器并行地块获取它。
然后,判定该页是否是无效的(查询1712)。具体地,检查页无效指示符。如果是1,则页无效,并且处理以失败退出(步骤1706)。如果页有效,则PGSTE中的钉住计数字段减1(步骤1714)。
然后,判定页状态是否从钉住状态改变到释放状态(查询1716)。如果钉住计数现在为0并且钉住计数没有处于溢出状态,则页状态已从钉住状态转变到释放状态。因而,增量钉住页计数减1(步骤1718)。此后,或如果该页状态没有从钉住状态改变到释放状态,则将PTE/PGSTE对解锁(步骤1720)。在一个示例中,这包括将页控制联锁指示符设定为0。这样,该由PTE地址释放页函数的处理结束。
当该释放函数退出并指示失败时,没有改变状态表。在此情况下,机器的行为好像是没有调用该函数并且将控制传递给主机以处理该失败。当该函数退出并指示成功时,已释放指定页。在此情况下,已由机器更新主机状态表,并且减轻了以前将控制传递给主机以便进行页钉住的需求。
上面详细说明了没有主机干预的与解释来自可分页存储客户的I/O操作请求相关联的处理。该请求可以是根据网络协议经由QDIO适配器或类似适配器对网络协议(例如,网际协议)或网络设备的请求。作为另一个示例,该请求是根据光纤通道协议(FCP)对光纤通道附属设备的请求。
类似于非FCP适配器例如QDIO适配器,FCP适配器通过该适配器和主存储器之间的通道路径与CPC中的其他元件相连接。但是,与FCP适配器相关联的处理在某些方面不同于与非FCP适配器相关联的处理。例如,通过QDIO输出队列进行数据输入和输出,而QDIO输入队列仅用于由该适配器发送(指示)I/O操作完成的信号。此外,当FCP适配器使输出队列缓冲器处于程序拥有状态时,包括数据传送的I/O操作可能不会全部完成(这与用于非FCP适配器的QDIO体系结构不同)。即使缓冲器处于程序拥有状态,该程序也不会在缓冲器页上执行任何操作,直到适配器通过输入队列发送指示I/O操作完成的信号。但是,只要缓冲器保持不变,程序可在与该缓冲器相关联的QDIO数据结构上执行操作。
当启动一FCP操作时,从程序向适配器发送一唯一的请求标识。该请求标识在请求队列中被返回,来以信号告知该操作全部结束并且该程序可与缓冲器页相交互。
因此,对于FCP,能够使缓冲器页与QDIO数据结构分离。换句话说,在等待来自适配器的表明已在缓冲器页的初始集合(其地址被复制)上完成操作的请求标识时,可将在QDIO数据结构中的缓冲器页地址的副本放置在另外一个位置,并可分配新的缓冲器页,该些缓冲器页的地址被放置在该QDIO数据结构内,具体放置在希望的SBALE内,并且启动一新的I/O操作。
为了便于保持对分离的缓冲器页的描述,设计了FCP操作块(FOB)。该FOB是在指定FCP请求的客户发出SQBS时构建的结构,并且当机器解决并钉住页时,机器在FOB内记录缓冲器页的主机页表项地址。该机器还在FOB内记录客户的请求标识,并使用一等于该FOB的地址的请求标识代替该客户的请求标识。然后,在随后适配器在输入队列返回请求标识并且客户发送EQBS以查询输入队列的状态之后,机器可定位FOB,释放页,并使用以前记录的原始客户的值替换该请求标识。
参照图18A-18D和19A-19E进一步说明对FCP的处理的细节。具体地,参照图18A-18D说明与用于FCP协议的SQBS指令相关联的处理的示例,并参照19A-19E说明与用于FCP协议的EQBS指令相关联的处理的示例。
首先参照图18A,在调用针对FCP的设定QDIO缓冲器状态指令之前,进行某种初始化。例如,主机执行各种清除任务(步骤1800)(图18A)包括例如除去或处理在处理过的帧描述列表上的帧。除了执行清除之外,主机确保在可用帧描述符列表和可用FOB列表上有足够的帧(步骤1802)。
在执行清除和/或确保在相关列表上有足够的帧之后,主机可启动程序的解释执行(步骤1804)。程序开始执行,并且在执行期间选择下一个将要传送给适配器的QDIO缓冲器(步骤1806)。程序把将用于数据传送的存储块的程序绝对地址填充到SBAL中(步骤1808)。此外,程序通过发送一设定QDIO缓冲器状态指令将缓冲器的所有权转移给适配器,该设定QDIO缓冲器状态指令将QDIO缓冲器的状态从程序拥有改变成适配器拥有(步骤1810)。
响应于发出SQBS指令,机器执行一主机允许检查以判定主机是否允许客户使用QEBSM工具(步骤1812)。如果QEBSMI允许控制(例如,在客户状态中)被设定为指示不允许的0(步骤1814),则处理将由主机而不是机器完成(步骤1816)。当在设定QDIO缓冲器状态解释期间遇到需要主机进行某种操作或服务的情况时,识别指令截取或部分执行截取(PEI),并使用设定QDIO缓冲器状态指令文本设定一截取参数,并且对于PEI,在客户状态下设定QEBSM-PEI参数。
下面,机器进行子通道判定(步骤1818),其中判定该子通道令牌是否与在由QBICB指定的子通道中存储的令牌相匹配。如果不匹配,则由主机完成处理(步骤1820)。否则,机器继续该处理。
此外,机器判定该SQBS操作数是否有效(步骤1822)。如果任何一个操作数无效,则处理结束,并设定状态码和状态码限定符(步骤1824)。否则,处理继续进行。
下面,尝试获得对该指定队列的队列存储描述符锁定(步骤1826)。如果没有获得QSD锁定,则处理由主机完成(步骤1828)。否则,处理由机器继续执行。
以下逻辑将重复一定次数,该次数等于由SQBS指令中的计数字段指定的QDIO缓冲器的数量。起初,定位将被处理的QDIO缓冲器的SQBN、程序SBAL和相应的主机SBAL(步骤1830)。然后,确定该指定缓冲器目前是否被程序拥有(步骤1832)。如果该缓冲器不是被程序拥有,则处理结束,并有一状态码和状态码限定符(步骤1834)。否则,处理继续执行,判定是否将通过EQBS指令提取该指定缓冲器的状态(步骤1836)(图18B)。如果是这样,则处理再次结束,并有一状态码和状态码限定符(步骤1838)。否则,处理继续进行,将客户SBAL的内容复制到主机SBAL中(步骤1840)。此外,设定主机的SBAL中的需要缓冲器同步和EQBS操作位。
此外,如果SBAL缓冲器顺序位指示这是一个新的FCP请求(与跨越多个SBAL的请示的持续相反),则如果存在以前的ECP的话,就将以前的FCP请求标记为完成(步骤1844)。例如,检查主机SBALE0项是否指示新请求如果该客户SBALE0中的SBA-Flags(SBALF)字段中的缓冲器顺序类型指示指定一命令,QSD地址的队列标志字段中的待完成请求组件FOB列表完成位为1,并且在活动请求头FOB列表中存在FOB,则将该列表中的第一个头FOB的标志字段中的构造完成位设定为1,并将QSD地址的队列标志字段中的待完成请求组件FOB列表完成位设定为0。
下面,判定可用FOB列表中是否存在FOB(步骤1846)。如果不存在,则该处理由主机结束(步骤1848)。否则,处理由机器继续执行。例如,从可用FOB列表中去除该列表中的第一个可用FOB,并使可用FOB的计数减1(步骤1850)。然后,根据SBAL中的缓冲器顺序位将新的FOB添加到合适的列表中(步骤1852)。例如,例如,如果这是第一个SBAL或唯一的SBAL,则这是一个新的FCP请求。在此情况下,该FOB是一头FOB并且被插入到活动请求FOB列表上,并且该请求在该FOB中被标记为活动的。但是,如果这是中间的或最后的SBAL,则这是一多SBALFCP请求的持续或最后一个SBAL。因此,此FOB是一非头组件FOB,并且被添加到锚定于队列存储器描述符中的活动请求FOB列表上的第一个头FOB的请求组件FOB列表中。
对于一头FOB,进行以下处理(步骤1854)1)设定QSD标志位中的待完成请求组件完成指示符(步骤1856);2)将SBALE0中的由程序指定的请求标识符保存在客户请求标识字段内(步骤1858);3)在FOB中的队列存储描述符地址字段中存储QSD的地址,以指示与该请求相关联的特定队列(步骤1860)(图18C);4)在QDIO缓冲器信息控制块地址字段中存储该QBICB的地址,以使该子通道与此请求相关联(步骤1862);5)将头FOB的地址设定为主机SBAL的SBALE0中的请求标识字段(步骤1864);以及6)将来自SBALF0的FCP存储块类型存储在FOB的存储块类型内,以定义将被执行的存储操作的类型(步骤1866)。
此外,对于每个具有有效存储块地址的有意义的主机SBALE,执行以下功能(步骤1868)1)从主机SBALE提取程序绝对(主机虚拟)存储块地址(步骤1870);2)调用一HPAM钉住函数以在存储器内转换和锁定页(步骤1872)。在一个示例中,调用HPMA函数并向其传递以下输入数据项将被钉住的主机虚拟地址来自主机SBALE的客户存储块数据地址是将被钉住的虚拟地址。
该页将被钉住于其中的地址空间的有效主机地址空间控制元件(ASCE)主地址空间控制元件(PASCE)被指定为有效ASCE。
提取或存储访问指示如果该指定队列是输入队列,则指示一存储访问操作。如果该指定队列是输出队列并且QBICB队列格式(QFMT)字段指示该队列不是格式1输出队列,则指示一提取访问操作。如果该指定队列是输出队列并且QBICB队列格式(QFMT)字段指示该队列是格式1输出队列,则如果主机SBALE指定一写缓冲器存储块,则指示一提取访问操作;否则,指示一存储访问操作。
对该页的内容可否被替换的指示如果该指定队列是输入队列,则指示页内容替换。如果该指定队列是输出队列并且QBICB队列格式(QFMT)字段指示该队列不是格式1输出队列,则不指示页内容替换。如果该指定队列是输出队列并且QBICB队列格式(QFMT)字段指示该队列是格式1输出队列,则如果主机SBALE指定一状态读取缓冲器或者读缓冲器存储块,并且该SBALE中的数据计数为例如4K字节,则指示页替换。
3)如果HPMA钉住函数不成功(步骤1874),则处理由主机完成(步骤1876)。否则,处理由机器完成。例如,如果HPMA钉住主机页函数完成并指示成功,则将由该钉住主机页函数返回的页帧实际地址复制到主机SBALE的数据地址字段中,并将当前SBALE的虚拟化标志(VFlag)字段中的钉住页指示位设定为1。如果该HPMA钉住主机页函数结束并指示应识别一有效性截取,则识别该指示的有效性截取。如果HPMA钉住主机页函数结束并指示失败,则识别部分执行截取,并根据HPMA钉住主机页函数失败原因设定客户状态下的QEBSM-PEI参数字段中的部分执行截取原因码;否则,处理继续进行。
4)将HPMA返回的PTE地址移动到FOB PTE地址阵列中的下一个可用项内,并且使PTE计数字段加1(步骤1878)(图18d)。以及5)将主机SBALE的数据计数字段添加到QSD中的字节传送计数(步骤1880)。
如果这是多个SBAL的最后一个SBAL或FCP请求中的唯一的SBAL,则在FOB中将该请求标记为完成,并且将待完成请求FOB列表完成指示符设定为0。
此后,将缓冲器的SQBN设定为由SQBS指令指定的适配器拥有状态(步骤1884)。另外,SQBS缓冲器编号加1(步骤1886),并且SQBS计数字段减1(步骤1888)。
判定该SQBS计数是否等于1(步骤1890)。如果SQBS计数不等于0,则处理继续进行,定位将被处理的QDIO缓冲器的SQBN、程序SBAL或主机SBAL(步骤1830)(图18A)。但是,如果SQNS计数等于0,则处理继续进行,解锁该QSD锁定(步骤1892)。如果成功的话,则将对成功的指示传递给程序(步骤1894)。如果这是此时将被传递的最后一个QDIO缓冲器,则发出一SIGA-wt指令(步骤1896)。
除了上述与处理针对FCP协议的SQBS指令相关联的改变之外,还存在与EQBS指令相关联的改变。参照图19A-19E说明与针对FCP请求的EQBS指令相关联的逻辑的一示例。
在运行该程序之前,进行某种初始化。例如,主机执行各种清除任务(步骤1900),包括例如除去或处理在处理过的帧描述符列表上的帧。此外,主机确保在可用帧描述符列表和可用FOB列表上有足够的帧(步骤1902)。此后,主机开始程序的解释执行(步骤1904)。
在执行期间,程序选择程序等待适配器完成处理的下一个或多个未完成的QDIO缓冲器(1906)。然后,程序发出EQBS指令以获取所选择的缓冲器的当前状态(步骤1908)。
响应于EQBS指令被发送,机器执行主机允许检查以判定主机是否允许客户使用QEBSM工具(步骤1910)。如果客户不是一可分页存储模式客户或该QEBSMI工具允许控制为0(查询1912),则处理将由主机完成(步骤1914)。否则,处理由机器继续进行。
然后,机器执行一子通道判定(步骤1916)。如果该子通道令牌与在由QBICB指定的子通道中存储的令牌不匹配,则处理由主机结束(步骤1914)。否则,处理由机器继续执行。
此外,判定该EQBS操作数是否有效(步骤1918)。如果一个或多个操作数无效,则处理结束,并设定状态码和状态码限定符(步骤1920)。否则,处理继续进行。
机器尝试获得对该指定队列的队列存储描述符锁定(步骤1922)。如果没有获得该QSD锁定,则识别部分执行截取,并且处理由主机继续执行(步骤1924)。但是,如果获得该锁定(例如,联锁更新操作成功),则处理由机器继续执行。
下面,定位该第一QDIO缓冲器的SQBN的位置(步骤1926)。此缓冲器的状态是将在指令完成时在STATE中返回的状态。
以下逻辑将重复一定次数,该次数等于由EQBS指令上的计数字段指定的QDIO缓冲器的数量。起初,定位将被处理的QDIO缓冲器的SQBN、程序SBAL和相应的主机SBAL(步骤1928)。然后,判定该SQBN是否与将返回的STATE相匹配(步骤1930)(图19B)。如果不匹配,则处理结束,并设定状态码和状态码限定符(步骤1932)。否则,处理继续进行。
如果该队列是一FCP(例如格式1)输出队列并且SQBN指示一程序拥有的状态,则关断主机SBAL中的需要缓冲器同步和需要EQBS操作指示符(步骤1934)。此外,将除SBALF2之外的SBALF字段复制到程序SBALE中的相应字段中(步骤1936)。
如果该指定缓冲器当前被程序拥有并且是格式1输入队列,则对于有意义的SBALE执行以下步骤,对于该些有意义的SBALE,主机SBAL中的SBALE请求标识符字段不为0(步骤1938)1)代表完成的FCP请求的头FOB的绝对地址是在主机SBALE中返回的请求标识符。判定该请求指示符是否指示一有效FOB(步骤1940)。例如,检查在该请求标识指示的FOB中指定的QBICB中的子通道令牌是否与SQBS指令中指定的令牌相匹配。如果不匹配,则处理由主机完成(步骤1942);否则,处理由机器继续执行。
2)通过验证FOB中指定的QBICB中的子通道令牌与SQBS指令中指定的令牌相匹配,确认适配器返回的头FOB对于此用户有效。如果FOB不是针对此用户的(步骤1944),则处理由主机完成(步骤1946);否则,处理由机器继续执行。
3)尝试获得对在启动该FCP请求时被建立的FOB中指定的输出队列的QSD锁定。如果在合理的时间量内不能获得该锁定(步骤1948)(图19C),则处理由主机完成(步骤1950);否则,处理由机器继续执行。在此步骤和随后的步骤中,在该些随后的步骤中在机器已获得一个或多个锁定之后处理将由主机完成,这些锁定的状态首先改变为“由机器为该主机锁定”。
4)验证FOB目前位于活动请求列表上并且是完成的。如果在FOB标记中,请求活动和构造完成指示符为开并且请求标识被提交指示符是关(步骤1952),则处理由主机完成(步骤1954);否则,处理由机器继续执行。
5)将头FOB标志字段中的请求标识被提交指示符设定为开(步骤1956)。
6)对于这样的头FOB发生以下逻辑,该头FOB代表该请求和可通过该头FOB关联和链接的各组件FOB,该头FOB是被最后处理的(步骤1958)a)对于位于由POB PTE计数指定的范围内的FOB中的每个非零PTE地址阵列项,调用HPMA由PTE地址释放主机页函数(步骤1960)。如果该释放函数不成功,则处理由主机完成(步骤1962);否则,处理由机器继续执行。
b)如果这是一个组件FOB,则从由该头FOB锚定的请求组件FOB列表中除去该组件FOB(步骤1964)(图19D)。
c)如果这是一头FOB,由将客户请求标识从头FOB复制到程序SBALE的请求标识字段中,使主机SBALE中的请求标识为0,以指示该请求标识被处理并且从由输出队列QSD锚定的活动请求FOB列表除去头FOB(步骤1966)。
d)清除FOB的预定字,并将其插入可用FOB列表的开端,并使可用FOB计数加1(步骤1968)。
7)释放输出队列QSD锁定(步骤1970)。
8)在主机SBAL中关断需要缓冲器同步和需要EQBS操作指示符,并使状态转变计数加1(步骤1972)。
如果该确认的输入缓冲器控制为1并且SQBN中的值指示为输入缓冲器准备好状态,则将SQBN设定为输入缓冲器确认状态(步骤1974)。
此后,使EQBS缓冲器编号加1(步骤1976),而EQBS计数字段减1(步骤1978)。如果EQBS计数字段不等于0(步骤1980)(图19C),则处理继续进行,定位将被处理的QDIO缓冲器的SQBN、程序SBAL和对应的主机SBAL(步骤1928)(图19A)。否则,处理结束(步骤1982)。然后,程序可处理已从适配器拥有状态转变到程序拥有状态的缓冲器(步骤1984)。
如上所述,扩充QDIO体系结构,从而可分页存储模式客户可体验到接近本机QDIO的性能。该V=V QDIO穿过(passthrough)能力可接近与在没有虚拟机操作环境的情况下本机得到的处理器效率水平相同的处理器效率水平。这是通过以下操作实现的,即将QDIO缓冲器状态信息从可分页存储模式客户执行地址空间重新安置到主机(例如,VM主机)存储器内,并执行指令以允许客户操纵缓冲器状态和相应地管理主机转换和影子结构。引入两条指令,这两条指令使得程序能够通过指定队列编号/缓冲器编号指定而不是在程序存储器内对缓冲器状态直接寻址来管理QDIO缓冲器状态。这种抽象形式的缓冲器状态指定允许以提高可分页模式虚拟机QDIO操作的性能的方式执行这些指令的解释版本。它还可以降低SIGA开销(更少的SIGA)。此外,子通道令牌表示允许对分配到该程序中的子通道的SIGA进行解释,从而消除了大多数情况中的主机参与SIGA处理的情况。
当一指示对QDIO增强缓冲器状态管理允许的请求的建立QDIO缓冲器CCW命令成功完成时,允许QDIO子通道进行QDIO增强缓冲器状态管理。
当一没有指示对QDIO增强缓冲器状态管理允许的请求的建立QDIO缓冲器CCW命令成功执行,或者发生使队列脱离子通道的操作或事件时,禁止QDIO子通道进行QDIO增强缓冲器状态管理。
子通道QDIO数据块中的QDIO适配器特性1(QDIOAC1)字段的位7指示对于特定子通道是否允许QDIO增强缓冲器状态管理,该子通道QDIO数据块是CHSC存储子通道QDIO数据命令响应块的一部分。
当允许QDIO子通道进行QDIO增强缓冲器状态管理时,该子通道由用于以下指令的通用寄存器1中的其子通道令牌指定Signal Adapter(SIGA)-具体地,SIGA-rt(由令牌读取)和SIGA-wt(由令牌写入),它们是SIGA-r和SIGA-w的替代物。该SIGA-rt和SIGA-wt指令分别实现与SIGA-r和SIGA-w相同的功能;但是,使用令牌而不是子系统标识来指定该子通道。2001年12月18日授予Baskey等人的标题为“Self-Contained Queues With AssociatedControl Information For Receipt And Transfer of Incoming AndOutgoing Data Using A Queued Direct Input-Output Device”的美国专利No.6332171中说明了SIGA-r和SIGA-w的示例,在此将该专利全文引入本文,作为参考。
设定QDIO缓冲器状态(SQBS);以及提取QDIO缓冲器状态(EQBS)。
该子通道令牌是从子通道QDIO数据块的子通道令牌字段获得的,该子通道QDIO数据块是对一在已允许该子通道进行QEBSM之后执行的CHSC存储子通道QDIO数据命令的响应的一部分。因此,为了实现QEBSM允许以及得到特定子通道的子通道令牌,程序执行以下序列1.执行CHSC存储子通道QDIO数据以验证QEBSM可用于该子通道。
2.执行建立QDIO队列CCW命令以允许子通道利用QEBSM。
3.执行CHSC存储子通道QDIO数据以便验证允许QEBSM,获得该子通道令牌,并检查适配器的特性,其中一些特性可能因为建立QDIO队列CCW指令的成功执行而已经改变。
在已允许一QDIO子通道使用QEBSM之后,使用该设定QDIO缓冲器状态(SQBS)指令改变子通道上活动的队列缓冲器的状态。及时使用该提取QDIO缓冲器状态(EQBS)指令查询子通道上活动的队列缓冲器的状态,使得主机页以一种不过分着重于与管理大量可分页存储模式客户相关联的存储器过分使用的方式被释放。或者,如果程序行为不良或者对主机存储器的要求较高,则主机可释放任何处于程序拥有状态下的钉住缓冲器页,而不必等待客户发出EQBS。
一旦已通过设定QDIO缓冲器状态使缓冲器的状态从程序拥有状态改变到适配器拥有状态,则在再次针对该缓冲器使用下一个设定QDIO缓冲器状态之前,将由提取QDIO缓冲器状态查询该状态,并发现其已返回到程序拥有状态。总之,客户准备数据缓冲器并执行该设定QDIO缓冲器状态(SQBS)指令。该SQBS指令试图确保所有指定的缓冲器页都存在。如果还没有引用一缓冲器页,则使用主机页管理辅助函数在页表内动态分配一新的页帧,钉住该页并更新主机影子QDIO SBAL项。但是,如果一缓冲器页存在,当前被出页,并且是一输入队列缓冲器页,则使用主机页管理辅助函数在该页表内动态分配一新的页帧,钉住该页,并更新该主机影子QDIO SBAL项。
客户经由提取QDIO缓冲器状态(EQBS)指令可直接观察到适配器启动的从适配器拥有状态到程序拥有状态的状态变化,该指令指示缓冲器程序先前置于适配器拥有状态下的缓冲器,并且返回当前的缓冲器状态。
除了上述内容之外,在解释一可分页存储模式客户期间,主机页管理辅助工具(HPMA)可被其他CPU工具调用。可在存在或不存在QDIO体系结构的情况下使用HPMA工具的一个或多个方面。HPMA包括例如4个HPMA辅助函数,例如一解决主机页函数,一钉住主机页函数,一由虚拟地址释放主机页函数和一由PTE地址释放主机页的函数。
如果在取指令或访问指令操作数时存在主机页无效状况,并且允许主机页管理辅助,则可调用解决主机页函数。可在转换过程中使用该解决主机页函数来动态解决一主机页无效状况,并且防止识别页转换异常。在一个例子中,如果该解决主机页函数成功完成,则使存在主机页无效状态的操作单元无效并重试。如果该解决主机页函数不成功地完成,则好像不允许主机页管理辅助似的,处理初始主机页无效状况。
QEBSM连同HPMA一起提供了以下优点和性能提高较少的SIE进入/退出开销和较少的用于主机上下文转换和路由的开销(更多用于生产性工作的周期);消除了QDIO缓冲器状态的主机影子副本以及相关联的同步开销;动态更新页状态表和转换表;动态防止主机页缺页;改进QDIO影子化;以及在解释执行模式内由CPU动态维护主机影子结构而没有主机干预。
尽管这里说明了多种示例和实施例,但是它们仅是示例,而在本发明的范围内还包含多种变型。例如,这里所述的计算环境仅是示例。许多其他环境包括其他类型的通信环境可包含本发明的一个或多个方面。例如,可使用不同类型的处理器、客户和/或主机。此外,其他类型的体系结构也可使用本发明的一个或多个方面。
此外,在这里所述的数据结构和数据流示例中,不同字段的创建和/或使用可包括许多变型,例如数量不同的位;顺序不同的位;多于、少于或不同于这里所述的位的位;较多的、较少的或不同的字段;顺序不同的字段;不同的字段大小;等。同样,这些字段仅是示例,并且可包含许多变型。此外,这里所述的指示符和/或控制可具有多种不同形式。例如,可用不同于位的方式表示这些指示符和/或控制。另外,尽管本文中使用术语“地址”,但是可使用任何名称。
此外,尽管根据网际协议和光纤通道协议说明了本发明的方面,但是它们仅是示例。包括但不局限于其他网络协议的其他协议可受益于本发明的一个或多个方面。
同样,尽管参照QDIO和文中所述示例说明了HPMA,但是HPMA的一个或多个方面自身是可用的。与QDIO一起的使用仅是一个示例。
如文中所用的,术语“页”用于指具有固定大小或预定大小的存储区。尽管在文中的示例中页的大小为4K,但是页的大小可变。类似的,缓冲器是一种保持数据的结构,并且该结构可具有许多类型和大小。类似的,存储块是一块存储区,并且在本文的使用中其等同于存储页。但是,在其他示例中,存储块和/或页的大小可不同。还存在许多其他的选择。此外,尽管文中使用术语队列、列表、表等,但是可以使用任何类型的数据结构。同样,文中所述的那些仅是示例。
本发明可被包含到具有例如计算机可用介质的制造物品(例如,一个或多个计算机程序产品)中。该介质在其中具有例如计算机可读程序代码装置或逻辑(例如,指令、代码、命令等)以提供和便利本发明的能力。该制造物品可以是计算机系统的一部分或者被单独销售。
另外,可提供至少一个可被机器读取的程序存储设备,该程序存储设备包含可被该机器执行以实现本发明的能力的至少一个指令程序。
这里所述的流程图仅是示例。在不偏离本发明的精神的情况下,可对这些图以及其中所述的步骤(或操作)进行许多改变。例如,步骤可以不同顺序执行,或者可添加、删除或修改步骤。所有这些变型均是被要求保护的发明的一部分。
尽管文中详细描述和说明了优选实施例,但是对于本技术领域内的技术人员很明显,可在不偏离本发明的精神的情况下进行各种变型、添加、替换等,并且这些均可被认为位于由以下的权利要求限定的本发明的范围内。
权利要求
1.一种便利管理可分页模式虚拟环境的存储器的方法,所述方法包括管理可分页模式虚拟环境的存储器,该管理操作是在没有该可分页模式虚拟环境的主机的干预的情况下由该可分页模式虚拟环境的处理器执行的。
2.根据权利要求1的方法,其中,该管理操作包括在没有该主机的干预的情况下由该处理器解决存储故障。
3.根据权利要求2的方法,其中,该解决操作包括使用可用描述符列表的描述符定位将被用于解决该存储故障的可用页帧,所述页帧是具有预定大小的物理存储块。
4.根据权利要求3的方法,其中,该可用页帧被预清除。
5.根据权利要求3的方法,其中,该解决该存储故障的操作使可分页模式虚拟环境的客户程序能够访问被该可用页帧支持的页。
6.根据权利要求3的方法,其中,该描述符包括用于定位该可用页帧的页帧指示。
7.根据权利要求3的方法,其中,该解决操作包括使用至少一个转换数据结构项的指示更新该描述符;以及将该更新的描述符添加到处理过的描述符的列表中以提供存储故障解决历史记录。
8.根据权利要求7的方法,其中,主机可访问该历史记录。
9.根据权利要求2的方法,其中,该解决操作包括使该主机可获得对已使用一个或多个页帧解决一个或多个存储故障的指示。
10.根据权利要求2的方法,其中,该解决操作包括动态更新至少一个转换数据结构。
11.根据权利要求2的方法,其中,该存储故障是该可分页模式虚拟环境的客户引用不被物理存储器支持的页的结果。
12.根据权利要求2的方法,其中,该解决操作包括提供页帧来解决该存储故障,并且该方法还包括将被该页帧支持的页钉住在物理存储器内。
13.根据权利要求12的方法,其中,该方法还包括释放该页。
14.根据权利要求13的方法,其中,该方法还包括跟踪对一个或多个页的钉住和释放操作中的至少一个。
15.根据权利要求14的方法,其中,该跟踪操作基于页类别。
16.根据权利要求1的方法,其中,该管理操作包括由处理器将页钉住在物理存储器内。
17.根据权利要求1的方法,其中,页被钉住在物理存储器内,并且该管理操作包括由该处理器释放该页。
18.根据权利要求1的方法,其中,该管理操作是在没有一个或多个主机干预的情况下由一个或多个处理器执行的。
19.一种便利管理可分页模式虚拟环境的存储器的系统,所述系统包括该可分页模式虚拟环境的处理器;以及用于管理该可分页模式虚拟环境的存储器的装置,该管理操作是在没有该可分页模式虚拟环境的主机的干预的情况下由该处理器执行的。
20.根据权利要求19的系统,其中,该用于管理的装置包括用于在没有该主机的干预的情况下由该处理器解决存储故障的装置。
21.根据权利要求20的系统,其中,该用于解决的装置包括用于使用可用描述符列表的描述符定位将被用于解决该存储故障的可用页帧的装置,所述页帧是具有预定大小的物理存储块。
22.根据权利要求21的系统,其中,该用于解决的装置包括用于使用至少一个转换数据结构项的指示更新该描述符的装置;以及用于将该更新的描述符添加到处理过的描述符的列表中以提供存储故障解决历史记录的装置。
23.根据权利要求20的系统,其中,该用于解决的装置包括用于使该主机可获得对已使用一个或多个页帧解决一个或多个存储故障的指示的装置。
24.根据权利要求20的系统,其中,该用于解决的装置包括用于动态更新至少一个转换数据结构的装置。
25.根据权利要求20的系统,其中,该存储故障是该可分页模式虚拟环境的客户引用不被物理存储器支持的页的结果。
26.根据权利要求20的系统,其中,该用于解决的装置包括用于提供页帧来解决该存储故障的装置,并且该系统还包括用于将被该页帧支持的页钉住在物理存储器内的装置。
27.根据权利要求26的系统,其中,该系统还包括用于释放该页的装置。
28.根据权利要求27的系统,其中,该系统还包括用于跟踪对一个或多个页的钉住和释放操作中的至少一个的装置。
29.根据权利要求28的系统,其中,该跟踪基于页类别。
30.根据权利要求19的系统,其中,该用于管理的装置包括用于由处理器将页钉住在物理存储器内的装置。
31.根据权利要求19的系统,其中,页被钉住在物理存储器内,并且该用于管理的装置包括用于由该处理器释放该页的装置。
32.一种便利管理可分页模式虚拟环境的存储器的系统,所述系统包括该可分页模式虚拟环境的处理器,该处理器在没有该可分页模式虚拟环境的主机干预的情况下管理该可分页模式虚拟环境的存储器。
33.一种制造物品,该制造物品包括至少一个具有计算机可读程序代码逻辑以管理可分页模式虚拟环境的存储器的计算机可用介质,该计算机可读程序代码逻辑包括管理可分页模式虚拟环境的存储器的管理逻辑,该管理操作是在没有该可分页模式虚拟环境的主机的干预的情况下由该可分页模式虚拟环境的处理器进行的。
34.根据权利要求33的制造物品,其中,该管理逻辑包括在没有该主机干预的情况下由该处理器解决存储故障的解决逻辑。
35.根据权利要求34的制造物品,其中,该解决逻辑包括使用可用描述符列表的描述符定位将被用于解决该存储故障的可用页帧的使用逻辑,所述页帧是具有预定大小的物理存储块。
36.根据权利要求35的制造物品,其中,该解决逻辑包括使用至少一个转换数据结构项的指示更新该描述符的更新逻辑;以及将该更新的描述符添加到处理过的描述符的列表中以提供存储故障解决历史记录的添加逻辑。
37.根据权利要求34的制造物品,其中,该解决逻辑包括使该主机可获得对已使用一个或多个页帧解决一个或多个存储故障的指示的逻辑。
38.根据权利要求34的制造物品,其中,该解决逻辑包括动态更新至少一个转换数据结构的更新逻辑。
39.根据权利要求34的制造物品,其中,该存储故障是该可分页模式虚拟环境的客户引用不被物理存储器支持的页的结果。
40.根据权利要求34的制造物品,其中,该解决逻辑包括提供页帧来解决该存储故障的提供逻辑,并且该解决逻辑 还包括将被该页帧支持的页钉住在物理存储器内的钉住逻辑。
41.根据权利要求40的制造物品,其中,该制造物品还包括释放该页的释放逻辑。
42.根据权利要求41的制造物品,其中,该制造物品还包括跟踪对一个或多个页的钉住和释放操作中的至少一个的跟踪逻辑。
43.根据权利要求42的制造物品,其中,该跟踪操作基于页类别。
44.根据权利要求33的制造物品,其中,该管理逻辑包括由处理器将页钉住在物理存储器内的钉住逻辑。
45.根据权利要求33的制造物品,其中,页被钉住在物理存储器内,并且该管理逻辑包括由该处理器释放该页的释放逻辑。
全文摘要
使用主机页管理辅助函数管理可分页模式虚拟环境的存储器。这些函数使存储器能够在没有该环境的主机干预的情况下由该环境的处理器管理。这些函数包括一解决主机页函数、一钉住函数和一释放函数。
文档编号G06F12/08GK1702634SQ200510072319
公开日2005年11月30日 申请日期2005年5月26日 优先权日2004年5月27日
发明者G·O·布兰迪, J·R·伊斯顿, L·C·赫勒, W·A·霍尔德, D·L·奥西赛克, G·E·西特曼, R·P·陶尔曹, L·W·怀曼 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1