首页> 中国专利> 将消息信号中断转换为对客户操作系统的I/O适配器事件通知

将消息信号中断转换为对客户操作系统的I/O适配器事件通知

摘要

来自一个或多个输入/输出(I/O)适配器的一个或多个消息信号中断请求被转换为I/O适配器事件通知,同时保持消息向量指示。I/O适配器事件通知可被路由或呈现给主机或主机执行的客户。为了将通知呈现给正确的主机或正确的客户,使用主机和/或客户存储器中的多种数据结构。

著录项

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2016-02-24

    授权

    授权

  • 2013-03-13

    实质审查的生效 IPC(主分类):G06F9/48 申请日:20101108

    实质审查的生效

  • 2013-01-30

    公开

    公开

说明书

技术领域

本发明一般涉及计算环境中的中断处理,且更具体而言,涉及处理由 计算环境中的适配器产生的中断。

背景技术

消息信号中断(MSI)是适配器功能例如外围组件互连(PCI)功能 用来产生中央处理器(CPU)中断、以通知操作系统发生了事件或存在某 种状态的一种方法。MSI是对每个设备上具有专用中断引脚的一种替代。 当适配器功能被配置为使用MSI时,该功能通过执行将指定字节数的数据 写入到特殊地址的MSI写操作来请求中断。该特殊地址和唯一数据值的组 合被称为MSI向量。

某些适配器功能仅支持一个MSI向量;其他适配器功能支持多个MSI 向量。对于支持多个MSI向量的功能,同一特殊地址被使用而具有不同的 数据值。

在很多计算平台上,设备驱动器将其自己配置为与MSI向量关联的中 断处理器。这有效地将MSI向量与CPU中断向量中的项相关联。因此, 当适配器功能支持多个MSI向量并被配置为使用多个MSI向量时,它消 耗了CPU中断向量中相应数量的项。

Easton等的在2007年11月22日公开的题为“Virtualization of Infiniband Host Channel Adapter Interruptions”(无限带宽主机通道适配 器中断的虚拟化)的美国公开号2007/0271559A1描述了一种方法、系统、 程序产品和计算机数据结构,其用于提供两层的服务器虚拟化。第一管理 程序(hypervisor)使得多个逻辑分区能共享一组资源并提供第一层虚拟 化。第二管理程序使得多个独立的虚拟机能共享被分配被单个逻辑分区的 资源并提供第二层虚拟化。用于所述单个逻辑分区内的所有虚拟机的所有 事件被分组(group)为单个分区拥有的事件队列,以用于从该单个逻辑 分区的共享资源接收事件通知。中断请求被信号通知以用于来自分区拥有 的事件队列的分组事件,以便由机器将分组事件从分区拥有的事件队列多 路分解到在每台虚拟机上分配的单独的虚拟化事件队列。

Nelson等的1996年10月1日公开的题为“PCT to ISA Interrupt Protocol Converter and Selecti0on Mechanism”(PCI到ISA中断协议转 换器和选择机制)的公开号WO 96/00940A1描述了一种中断处理机制, 其用于转换符合次级总线标准中断协议的PCI代理中断(36-38)。PCI 代理中断(36-38)被可编程逻辑(50)处理,以将符合PCI的中断转换 为例如符合ISA总线标准的中断(40),以便由实现PCI总线(30)和 ISA总线(40)两者的计算机系统来处理。可编程寄存器(48)提供了响 应于PCI代理中断(36-38),选择将由可编程逻辑(50)生成哪个ISA 中断。

Dayan等的2004年8月3日发布的题为“Enabling a Docking Station for ISA Adapters”(启用用于ISA适配器的扩展坞(docking station)) 的美国专利号6,772,264描述了和计算机系统一起使用的扩展坞系统,该计 算机系统包括外部可访问的PC卡接口,该PC卡接口用于将符合PC卡标 准的信号传输到扩展坞外壳(enclosure)。扩展坞外壳包括PC卡连接器, 该PC卡连接器连接到计算机系统的PC卡接口并在计算机系统的PC卡接 口和扩展坞外壳之间传递接口信号。扩展坞外壳还包括符合ISA总线标准 的ISA总线结构。此外,扩展坞外壳包含转换逻辑,该转换逻辑被连接, 以通过PC卡连接器从计算机系统接收信号,并将这些接收到的信号转换 为用于操作ISA总线结构的信号。计算机系统包括转换逻辑,该转换逻辑 被连接,以通过PC卡连接器从扩展坞外壳接收信号,并将这些信号转换 为系统中断请求。通过这种方式,一个或多个ISA适配器可在扩展坞外壳 中被使用以仿真(emulate)PC卡接口上的一个或多个PC卡功能。

发明内容

根据本发明的方面,提供了促进对来自适配器的中断请求进行管理的 能力。

通过提供如权利要求1所述的方法以及用于为计算机环境的客户 (guest)提供中断的计算机程序产品,克服了现有技术的缺陷并提供了优 势。

附图说明

作为本说明书的结尾处的权利要求的例子,本发明的一个或多个方面 被特别指出和明确要求。根据下列详细描述并结合附图,本发明的上述和 其他目标、特征和优势将变得明显,在附图中:

图1A示出了包含并使用本发明的一个或多个方面的计算环境的一个 实施例;

图1B示出了根据本发明的方面的中央处理复合体(complex)的一个 实施例,其中主机执行一个或多个客户;

图2A描述了根据本发明的方面的图1中的系统存储器和I/O集线器 的更多细节的一个实施例;

图2B示出了根据本发明的方面的图1中的系统存储器和I/O集线器 的更多细节的另一实施例;

图2C示出了根据本发明的方面使用的客户适配器中断表(GAIT)中 的项的一个实施例;

图2D示出了根据本发明的方面使用的适配器中断转发表(AIFT)中 的项的一个实施例;

图3A-3B示出了根据本发明的方面的适配器中断位向量的分配的例 子;

图3C-3D示出了根据本发明的方面的适配器中断概要位的分配的例 子;

图4示出了根据本发明的方面的将在初始化时被执行、来配置适配器 功能以用于I/O适配器事件通知的逻辑的概览的一个实施例;

图5示出了根据本发明的方面的执行注册使得消息信号中断(MSI) 能转换为I/O适配器事件通知的逻辑的一个实施例;

图6A示出了根据本发明的方面的将MSI请求转换为I/O适配器事件 通知的逻辑的一个实施例;

图6B示出了根据本发明的方面的将I/O适配器事件通知呈现给操作 系统的逻辑的一个实施例;

图7A示出了根据本发明的方面在主机执行客户的环境中执行主机初 始化的逻辑的一个实施例;

图7B示出了根据本发明的方面执行客户初始化的逻辑的一个实施例;

图7C示出了根据本发明的方面使用的设置中断控制指令的一个实施 例;

图7D-7F示出了根据本发明的方面的图7C中的设置中断控制指令所 使用的字段的内容的例子;

图7G示出了根据本发明的方面使用的适配器中断参数块(AIPB)的 一个例子;

图8示出了根据本发明的方面在主机执行客户的计算环境中执行注册 的逻辑的一个实施例;

图9A示出了根据本发明的方面将MSI请求转换为将被呈现给客户的 I/O适配器事件通知的逻辑的一个实施例;

图9B示出了根据本发明的方面响应于适配器中断请求执行的逻辑的 一个实施例;

图9C示出了根据本发明的方面处理适配器中断指示器(indicator) 的逻辑的一个实施例;

图10A示出了根据本发明的方面使用的修改PCI功能控制指令的一个 实施例;

图10B示出了根据本发明的方面由图10A中的修改PCI功能控制指 令所使用的字段的一个实施例;

图10C示出了根据本发明的方面由图10A中的修改PCI功能控制指 令所使用的另一字段的一个实施例;

图10D示出了根据本发明的方面使用的功能信息块(FIB)的内容的 一个实施例;

图11示出了根据本发明的一方面的修改PCI功能控制的逻辑的概况 的一个实施例;

图12示出了根据本发明的一方面,与由修改PCI功能控制指令指定 的注册适配器中断操作有关的逻辑的一个实施例;

图13示出了根据本发明的一方面,与由修改PCI功能控制指令指定 的注销适配器中断操作有关的逻辑的一个实施例;

图14A示出了根据本发明的方面使用的调用逻辑处理器指令的一个实 施例;

图14B示出了根据本发明的方面的由图14A的调用逻辑处理器指令用 于列表操作的请求块的一个实施例;

图14C示出了根据本发明的方面的用于图14B中的列表操作的响应块 的一个实施例;

图14D示出了根据本发明的方面使用的功能列表项的一个实施例;

图15A示出了根据本发明的方面的由图14A的调用逻辑处理器指令用 于查询功能操作的请求块的一个实施例;

图15B示出了根据本发明的方面的用于图15A中的查询功能操作的响 应块的一个实施例;

图16A示出了根据本发明的方面的由图14A中的调用逻辑处理器指令 用于查询组操作的请求块的一个实施例;

图16B示出了根据本发明的方面的用于图16A中的查询组操作的响应 块的一个实施例;

图17示出了包含本发明的一个或多个方面的计算机程序产品的一个 实施例;

图18示出了包含并使用本发明的一个或多个方面的主计算机系统的 一个实施例;

图19示出了包含并使用本发明的一个或多个方面的计算机系统的另 一实施例;

图20示出了包括包含并使用本发明的一个或多个方面的计算机网络 的计算机系统的另一例子;

图21示出了包含并使用本发明的一个或多个方面的计算机系统的多 个元件的一个实施例;

图22A示出了包含并使用本发明的一个或多个方面的图21中的计算 机系统的执行单元的一个实施例;

图22B示出了包含并使用本发明的一个或多个方面的图21中的计算 机系统的分支单元的一个实施例;

图22C示出了包含并使用本发明的一个或多个方面的图21中的计算 机系统的加载/存储单元的一个实施例;

图23示出了包含并使用根据本发明的一个或多个方面的仿真 (emulated)主计算机系统的一个实施例。

具体实施方式

根据本发明的方面,提供了将消息信号中断(MSI)请求转换为输入/ 输出(I/O)适配器事件通知的能力。MSI被适配器请求并被转换为适配 器消息通知,其中一个或多个特定指示器(indicator)被设置,并生成向 操作系统(或其他软件例如其他程序等。如这里所使用的,术语操作系统 包括操作系统设备驱动器)呈现中断的请求。在一个特殊的例子中,每个 MSI请求不会引起到操作系统的中断请求,而是一个中断请求包含多个 MSI请求。在一个特定的例子中,操作系统是在主机下执行的客户,例如 客户操作系统。在一个例子中,客户是可调页(pageable)存储模式客户。

在一个例子中,在中,可调页客户是由开始解释执行 (SIE)指令在解释级别2解释执行的。例如,逻辑分区(LPAR)管理程 序(hypervisor)执行SIE指令,以开始物理固定存储器中的逻辑分区。 如果是该逻辑分区中的操作系统,它发起SIE指令,以在其V=V (虚拟)存储器中执行客户(虚拟)机。因此,LPAR管理程序使用级别 -1SIE,且管理程序使用级别-2SIE。

如这里所使用的,术语“适配器”包括任意类型的适配器(例如存储 适配器、处理适配器、网络适配器、加密适配器、PCI适配器、其他类型 的输入/输出适配器等)。在一个实施例中,一适配器包括一个适配器功能。 但是,在其他实施例中,一适配器可包括多个适配器功能。本发明的一个 或多个方面可以应用,不管一适配器包含一个适配器功能或多个适配器功 能。此外,在这里展示的例子中,适配器是与适配器功能(例如PCI功能) 可互换地使用的,除非另外说明。

参考图1描述包含并使用本发明的一个或多个方面的计算环境的一个 实施例。在一个例子中,计算环境100是由国际商业机器公司提供的System 服务器。System服务器是基于由国际商业机器公司提供的 关于的细节在IBM出版中描述,该 出版物的标题是“z/Architecture Principles of Operation”(z/Architecture 操作原理),IBM出版号SA22-7832-07,2009年2月。和是位于纽约州阿蒙克的国际商业机器公司的注册商标。 在此使用的其他名字可以是国际商业机器公司或其他公司的注册商标、商 标或产品名称。

在一个例子中,计算环境100包括经由存储控制器106耦合到系统存 储器104(也称为主存储器)的一个或多个中央处理单元(CPU)102。为 了访问系统存储器104,中央处理单元102发出包括被用于访问系统存储 器的地址的读或写请求。包括在请求中的地址典型地不能直接用于访问系 统存储器,且因此,其被转换为可直接用于访问系统存储器的地址。所述 地址经由转换机制(XLATE)108而被转换。例如,使用例如动态地址转 换(DAT),将地址从虚拟地址转换为真实或绝对的地址。

包括(必要时转换的)地址的请求被存储控制器106接收。在一个例 子中,存储控制器106包含硬件且被用于仲裁对系统存储器的访问并维持 存储器的一致性。该仲裁针对从CPU 102接收的请求以及从一个或多个适 配器110接收的请求而执行。与中央处理单元类似,适配器向系统存储器 104发出请求以获得对系统存储器的访问。

在一个例子中,适配器110是外围组件互连(PCI)或PCI Express (PCIe)适配器,其包括一个或多个PCI功能。PCI功能发出请求,该请 求经由一个或多个交换器(例如,PCIe交换器)114被路由到输入/输出集 线器112(例如,PCI集线器)。在一个例子中,输入/输出集线器包括含 有一个或多个状态机的硬件。

输入/输出集线器包括例如根复合体(root complex)116,其从交换机 接收请求。该请求包括输入/输出地址,该输入/输出地址被用来例如执行 直接存储器访问(DMA)或请求消息信号中断(MSI)。该地址被提供给 地址转换和保护单元118,该地址转换和保护单元访问用于DMA或MSI 请求的信息。

对于DMA操作,地址转换和保护单元118可将地址转换为可用于访 问系统存储器的地址。然后,从适配器发起的请求,包括转换的地址,例 如通过I/O到存储器总线120被提供给存储器控制器106。存储器控制器 执行其仲裁并在合适的时间将具有已转换地址的请求转发到系统存储器。

对于MSI请求,获取地址转换和保护单元118中的信息,以便于将 MSI请求转换为I/O适配器事件通知。

在另一实施例中,在一个或多个中央处理器单元102之外或替代一个 或多个中央处理器单元102,例如图1B中所示的中央处理复合体耦合到存 储控制器106。在该特定的例子中,中央处理复合体150提供虚拟机支持。 中央处理复合体150包括例如一个或多个虚拟机152、一个或多个中央处 理器(CP)154、以及至少一个管理程序156,在下面将描述其中每一个。

中央处理复合体的虚拟机支持提供了操作大量虚拟机的能力,每个虚 拟机能够执行客户操作系统158例如z/Linux。每个虚拟机152能够作为 单独的系统工作。即,每个虚拟机可被独立地复位、执行客户操作系统、 并运行不同的程序。在虚拟机上运行的操作系统或应用程序看起来能访问 完全和全部的系统,但实际上,仅有一部分是可用的。

在该特定的例子中,虚拟机的模型为V=V模型,其中,虚拟机的存 储器由虚拟存储器而不是真实存储器来支持。每个虚拟机具有虚拟线性存 储器空间。物理资源由管理程序156例如VM管理程序拥有,且共享的物 理资源根据需要被管理程序分派给客户操作系统,以满足其处理需要。该 V=V虚拟机模型假设客户操作系统和物理共享机器资源之间的交互是由 VM管理程序来控制的,因为大量的客户典型地排除了管理程序将硬件资 源简单地分区和分配给配置的客户。V=V模型的一个或多个方面在IBM 于2001年10月公开的题为“z/VM:Running Guest Operating Systems” (z/VM:运行客户操作系统)的IBM公开号SC24-5997-02中进一步描述。

中央处理器154是可分配给虚拟机的物理处理器资源。例如,虚拟机 152包括一个或多个逻辑处理器,每个逻辑处理器表示可被动态分配给虚 拟机的物理处理器资源154中的全部或部分。虚拟机152由管理程序156 来管理。作为例子,管理程序可在处理器154上运行的固件中实现,或者 可以是在机器上运行的主机操作系统的一部分。在一个例子中,管理程序 156是VM管理程序,例如位于纽约阿蒙克市的国际商业机器公司提供的 的一个实施例在IBM于2003年5月公开的题为“z/M: General Information Mannual”(z/VM:一般信息指南)的IBM公开号 GC24-5991-05中描述。

如这里所使用的,固件包括例如处理器的微代码、毫代码(millicode) 和或宏代码。它包括例如用于实现高级机器码的硬件级的指令和/或数据结 构。在一个实施例中,它包括例如专有(proprietary)代码,其典型地作 为包含可信软件的微代码或特定于底层硬件的微代码被交付,并控制操作 系统访问系统硬件。

根据本发明的方面,适配器(例如适配器功能)发出的消息信号中断 请求被转换为将呈现给客户(例如可调页存储模式客户;即V=V客户) 的输入/输出适配器事件通知。尽管在该实施例中,I/O适配器事件通知用 于客户,为了有助于对本发明的一个或多个方面的理解,这里首先讨论将 I/O适配器事件通知呈现给不是客户的操作系统(或其他实体,例如处理 器、逻辑分区等),然后讨论向客户呈现通知。

将参考图2A和2B来描述在I/O集线器和系统存储器涉及中断处理时 关于它们的更多细节。在这些附图中,存储器控制器未被示出,但可以被 使用。I/O集线器可直接或通过存储器控制器被耦合到系统存储器104和/ 或处理器254。图2A示出了用来向不是客户的操作系统呈现适配器事件通 知的结构的一个实施例,且图2B示出了用来向客户呈现适配器事件通知 的结构的一个实施例。

参考图2A,在一个例子中,系统存储器104包括一个或多个数据结构, 所述数据结构可用于促进中断处理。在该例子中,系统存储器104包括与 特定适配器关联的适配器中断位向量(AIBV)200和可选的适配器中断概 要位(AISB)202。对于每个适配器,可以有AIBV和相应的AISB。

在一个例子中,适配器中断位向量200是与适配器(例如PCI功能) 关联的主存储器中的一个或多个指示器(例如,位)的一维数组。适配器 中断位向量中的位表示MSI向量号(vector number)。AIBV中被设置为 1的位指示用于相关适配器的事件条件或类型。在PCI功能的例子中,相 关AIBV中的每个位对应于一MSI向量。因此,如果一PCI功能仅支持 一个MSI向量,其AIBV包括单个位;如果一PCI功能支持多个MSI向 量,其AIBV包括每个MSI向量一个位。在图2A示出的例子中,PCI功 能支持多个MSI向量(例如3个),且因此,AIBV 200中有多个位(例 如3个)。每个位对应于一特定的事件,例如,当AIBV的位0被设置为 1时,指示完成的操作。当AIBV的位1被设置为1时,对应于错误事件 等。如图所示,位1在该例子中被设置。

在一个特定的例子中,命令(例如修改PCI功能控制命令)被用来为 PCI功能指定AIBV。特别地,该命令由操作系统发出,并指定了PCI功 能的身份(identity)、包含AIBV的区域的主存储位置、从该位置到AIBV 的第一个位的偏移以及构成AIBV的位数。

在一个例子中,PCI功能的身份是功能句柄(function handle)。功 能句柄包括例如使能指示器,其指示PCI功能句柄是否被使能;PCI功能 号,其标识该功能(这是静态标识符,且可被用作到功能表的索引来定位 特定的项);以及实例号,其指示该功能句柄的特定实例。例如,功能句 柄每次被使能时,实例号被递增以提供新的实例号。功能句柄被用来定位 包含一个或多个项的功能表中的功能表项。例如,功能句柄的一个或多个 位被用作功能表中的索引,以定位特定的功能表项。功能表项包括关于其 相关PCI功能的信息。例如,它可以包括关于其相关适配器功能的状态的 各种指示器,且它可以包括一个或多个设备表项索引,所述设备表项索引 被用来定位用于该适配器功能的设备表项。(对于操作系统来说,在一个 实施例中,句柄仅仅是适配器的不透明(opaque)标识符)。

AIBV可位于任意字节边界(boundary)和任意位边界。这允许操作 系统灵活地将多个适配器的AIBV压缩(pack)到连续的位和字节范围。 例如,如图3A所示,在一个例子中,操作系统指定了在位置X处的共同 存储区域来包含5个连续的AIBV。与每个AIBV关联的适配器由字母A-E 来标识。每个AIBV位为适配器代表的事件进一步由数字0-n来标识。未 分配的位由小写字母“u”来标识。

图3B中示出了另一例子。在该例子中,操作系统指定了位于X、Y、 Z的三个唯一的存储区域,以包含用于五个I/O适配器的AIBV。位于位 置X的存储区包含用于适配器A和B的AIBV,位于位置Y的存储区包 含仅用于适配器C的AIBV,且位于位置Z的存储区包含用于D和E的 AIBV。每个AIBV位为I/O适配器代表的事件可进一步由数字0-n来标识。 未分配的位由字母“u”标识。

回到图2A,在该例子中,在AIBV之外,还有用于适配器的AISB 202, 其包含与该适配器关联的单个指示器(例如,位)。值为1的AISB表示 与AISB关联的AIBV中的一个或多个位已被设置为1。AISB是可选的, 且可以是每个适配器有一个,每个选择的适配器有一个,或者一组适配器 有一个。

在PCI功能的一个特定实现中,命令(例如修改PCI功能控制命令) 被用来为PCI功能指定AISB。特别地,该命令由操作系统发出,并指定 PCI功能的身份(例如句柄)、包含AISB的区域的主存储位置、从该位 置到AISB的偏移、以及指示存在概要位的适配器中断概要通知使能控制。

AISB可在任意字节边界和任意位边界上分配。这允许操作系统灵活 地将多个适配器的AISB压缩到位和字节的连续范围。在一个例子中,如 图3所示,操作系统指定了位于位置X的共同存储区域,以包含九个连续 的AISB。与每个AISB关联的适配器由字母A-I来标识。未分配的位由小 写字母“u”来标识。

图3D中示出了另一分配例子,其中,操作系统指定了位于位置X、Y 和Z的三个唯一AISB存储位置,以包含三个适配器中的每个的AISB。 与每个AISB关联的适配器由字母A-C来标识。未分配的位由小写字母“u” 来标识。

此外,操作系统还可给多个PCI功能分配单个AISB。这将多个AIBV 与单个概要位相关联。因此,值为1的这种AISB旨示操作系统应扫描多 个AIBV。

回到图2A,在一个例子中,位于I/O集线器112中的设备表208的设 备表项206中的地址指向AIBV和AISB。在一个例子中,设备表208位 于I/O集线器的地址转换保护单元内。

设备表208包括一个或多个项206,每个项被分配给一特定的适配器 功能210。设备表项206包括若干字段,所述字段例如可使用上述命令来 填充(populate)。一个或多个字段的值基于策略和/或配置。字段的例子 包括:

中断子类(ISC)214:指示用于中断的中断子类。ISC标识了适配器 中断的可屏蔽类,其可与操作系统用来处理该中断的优先级关联;

AIBV地址()216:提供例如存储位置的起始的绝对地址,该存储 位置包含用于被分配给该设备表项的特定适配器功能的AIBV;

AIBV偏移218:主存储位置中到AIBV的起始的偏移;

AISB地址()220:提供存储位置的起始的绝对地址,该存储位置 包含用于该PCI功能的AISB,如果操作系统已指定了AISB的话;

AISB偏移222:主存储位置中到AISB的偏移;

适配器概要通知使能控制(使能)224:该控制指示是否存在AISB;

中断数(NOI)226:表示为该PCI功能允许的MSI向量的最大数量, 0表示不允许任何MSI向量。

在其他的实施例中,DTE(设备表项)可包括更多、更少或不同的信 息。

在一个实施例中,使用例如位于由适配器(例如,PCI功能210)发 出的请求中的请求者标识符(RID)(及/或地址的一部分)来定位将用于 由适配器请求的特定中断的设备表项。该请求者ID(例如,16位值,其 指定例如总线号、设备号和功能号)以及将用于该中断的地址包括在请求 中。包括RID和地址的该请求经由例如交换器被提供给例如内容可寻址存 储器(CAM 230),且该内容可寻址存储器用来提供索引值。例如,所述 CAM包括多个项,每个项对应于到设备表(DT)中的索引。每个CAM 项包括RID的值。如果例如接收到的RID与CAM中的项中包含的值匹 配,对应的设备表索引被用于定位设备表项。即,CAM的输出被用于索 引到设备表208。如果没有匹配,接收到的包被丢弃(在其他实施例中, 不需要CAM或其他查找,且RID被用作索引)。如本文中所描述的,所 定位的DTE被用于处理中断请求。

在一个特定的例子中,如果中断请求用于在特定区域或逻辑分区中执 行的客户,则设备表项还包括区域字段228,如图2B所示。该字段指示客 户所属的区域。在另一实施例中,该字段没有被使用,或者甚至可以在没 有提供客户的情形下被使用(例如,来指定操作系统在其中运行的区域或 逻辑分区)。

为了促进用于客户的中断处理,使用其他数据结构,其中某些被存储 在主机存储器270中,且另一些在客户存储器271中。这些结构的例子被 如下描述。

在一个例子中,主机存储器270包括例如转发AISB数组272和客户 适配器中断表(GAIT)274。转发AISB数组272是AISB的数组,其和 客户适配器中断表一起用来确定MSI请求的目标是客户还是其主机。转发 AISB数组包括主机已分配给客户的每个PCI功能的AISB,且主机代表客 户来为该PCI功能请求适配器事件通知中断。这样的数组由客户的主机(例 如)在主机存储器中分配。

客户适配器中断表274和转发AISB数组一起被用于确定MSI的目标 是主机还是它的一个客户,且如果是客户,是哪个客户。在转发AISB数 组和GAIT项中的指示器(例如位)之间存在一对一的对应关系。这意味 着当转发AISB数组中的位被设置为1且相应的GAIT信息包含转发信息 时,针对用于和AISB指示器(例如位)及相应GAIT项关联的客户的适 配器,使得适配器事件通知待处理(pending)。

当GAIT项被使用并包含定义的值(例如,全零)时,MSI请求的目 标是主机。当GAIT项被使用且不包含定义的值时,MSI请求的目标是客 户。此外,当MSI请求的目标是客户时,GAIT项包括下列信息,如图2C 所示:用于PCI功能290的客户AISB的主机地址和客户偏移;客户中断 状态区域(GISA)的主机地址291;以及用于将为客户生成的适配器中断 的客户中断子类(GISC)292。

回到图2B,提供了关于客户中断状态区域(GISA)的更多细节。在 一个例子中,GISA 276是控制块,其中使得客户适配器中断待处理。它的 原点(origin)是在GAIT 274中以及在状态描述280(例如,由主机维护 的、将用于客户的虚拟CPU定义到解释硬件/固件的控制块)中指定的。 它包括例如中断待处理掩码(IPM),该中断待处理掩码是与客户关联的 掩码,其包括用于多个中断子类(ISC)的指示器;以及中断报警掩码 (IAM),其是对应于客户的另一掩码。在一个例子中,该掩码中的每个 位与ISC启用指示器一一对应。

除了上述之外,在客户存储器(其在主机存储器中被钉往(pin),即 被固定,变得不可调页(non-pageable)),存在客户AISB数组282和 客户AIBV数组284。客户AISB数组282包括多个指示器202’(例如 AISB),每个指示器可与一I/O适配器关联。用于I/O适配器的AISB当 是1时,指示在与I/O适配器关联的适配器中断位向量中一个或多个位已 被设置为1。

AIBV数组284包括一个或多个AIBV 200’(例如,在该例子中是3 个),且如以上参考AIBV 200所述,每个AIBV 200’是与一I/O适配器关 联的一个或多个指示器(例如位)的一维数组。AIBV中的每个位当为1 时,指示用于相关I/O适配器的事件的条件和类型。

除了主机和客户存储器中的数据结构之外,在不能被主机也不能被客 户访问的安全存储器286中维护了一个被称为适配器中断转发表(AIFT) 285的数据结构。适配器中断转发表被系统固件用来确定MSI请求的目标 是否是主机和客户正在其中运行的逻辑分区。AIFT由区域号来索引,该 区域号标识了PCI功能所分配给的逻辑分区。当AIFT项被使用且该项包 含定义的值(例如全零)时,适配器事件通知的目标是在指定逻辑分区中 运行的操作系统。当AIFT项被使用且该项不包含定义的值时,固件使用 转发AISB数组和GAIT来确定适配器事件通知的目标是在该逻辑分区中 运行的主机还是客户。在一个例子中,如图2D所示,AIFT 285的AIFT 项包括例如分区的(主机)存储器中的转发AISB数组的地址294;转发 AISB数组的以位为单位的长度以及GAIT的以GAIT项为单位的长度 295;分区的存储器中的GAIT的地址296;以及与MSI请求关联的主机 中断子类(ISC)297,所述MSI请求将被转发到用于该分区的客户。

回到图2A和/或图2B,为了请求中断,适配器功能210向I/O集线器 发送包。该包具有MSI地址232和相关数据234。I/O集线器将接收到的 地址的至少一部分与MSI比较寄存器250中的值进行比较。如果存在匹配, 则中断(例如MSI)正被请求,而不是DMA操作。相关数据234中指示 了该请求的原因(即所发生的事件类型)。例如,该数据的低阶位中一个 或多个被用来指定指示原因(事件)的特定中断向量(即MSI向量)。

根据本发明的方面,从适配器接收到的中断请求被转换为I/O适配器 事件通知。即,设置一个或多个指示器(例如,一个或多个AIBV以及可 选地AISB),且请求到操作系统(主机或客户)的中断,如果没有中断 已经待处理(pending)的话。在一个实施例中,来自一个或多个适配器的 多个中断请求(例如MSI)被结合为到操作系统的单个中断,但具有各自 的AIBV和AISB指示器。例如,如果I/O集线器已接收到MSI请求,转 而已向处理器提供中断请求,且该中断请求仍在待处理(例如,由于一种 或另一种原因,中断还没有被呈现给操作系统(例如中断被禁止)),则 如果集线器收到一个或多个其他MSI,它不会请求额外的中断。一个中断 替换并代表多个MSI请求。但是,一个或多个AIBV以及可选地一个或多 个AISB被设置。

下面将参考这些附图来描述关于将MSI(或其他适配器中断请求)转 换为I/O适配器事件通知的更多细节。特别地,参考图4-6B来描述有关在 不包括客户或不向客户呈现通知的那些系统中转换MSI并呈现适配器事 件通知的细节,并参考图7A-9C来描述有关转换MSI并向客户呈现适配 器事件通知的细节。

起初参考图4,在一个例子中,为了将MSI请求转换为I/O适配器事 件通知,某种初始化被执行。在初始化期间,操作系统执行若干步骤来配 置适配器,以用于经MSI请求的适配器事件通知。在该例子中,被配置的 是PCI功能;但是在其他实施例中,可以是其他适配器,包括其他类型的 适配器功能。

开始,在一个实施例中,在步骤400,确定配置中的PCI功能。在一 个例子中,操作系统发出的命令(例如查询列表命令)被用来获取分配给 请求配置(例如分配给特定操作系统)的PCI功能的列表。该信息是从维 护该信息的配置数据结构获取的。

接下来,在步骤402,选择列表中的PCI功能中的一个,且在步骤406, 确定用于PCI功能的MSI地址以及PCI功能支持的MSI向量的数量。 MSI地址是基于I/O集线器和其所安装在的系统的特性来确定的。所支持 的MSI向量的数量基于策略且可以配置。

此外,在步骤410,分配AIBV,以及AISB(如果有的话)。在一个 例子中,操作系统典型地基于适配器的类别来确定AIBV的位置,以允许 一个或多个适配器的高效处理。例如,用于存储适配器的AIBV可互相邻 近。AIBV和AISB被分配并清零,且注册适配器中断操作被注册。在步 骤412,该操作注册AIBV、AISB、ISC、中断(MSI向量)的数量以及 适配器中断概要通知使能控制,如下将更详细地描述的。在一个例子中, 修改PCI功能控制指令被用来执行注册操作以及这里的其他操作,如以下 将更详细地描述的。

此后,在步骤414,PCI功能的配置空间被写入。特别地,将MSI地 址和MSI向量计数写入与先前的注册一致的适配器功能的配置地址空间 中。(在一个例子中,PCI功能包括多个地址空间,包括例如配置空间、 I/O空间以及一个或多个存储器空间)。

此后,在查询416,确定列表中是否存在另外的功能。如果是,处理 继续步骤402。否则,初始化处理完成。

参考图5来描述关于各种参数的注册的更多细节。开始,选择对应于 正为其执行初始化的PCI功能的设备表项(DTE)。该选择例如是通过管 理固件来执行的,该管理固件从设备表中选择可用的DTE。此后,在步骤 502,将各种参数存储在设备表项中。例如,ISC、AIBV地址、AIBV偏 移、AISB地址、AISB偏移、使能控制以及中断数(NOI)被设置为通过 配置功能而获得的值。这完成了注册过程。

在操作期间,当PCI功能想要生成MSI时,它典型的使描述条件的 某些信息对操作系统可用。这引起一个或多个步骤发生,以将PCI功能的 MSI请求转换为对操作系统的I/O适配器事件通知。这将参考图6A来描 述。

参考图6A,开始,在步骤600,记录为其请求中断的事件的描述。例 如,PCI功能在例如系统存储器中存储的一个或多个适配器特定的事件描 述记录结构中记录事件的描述。这可包括记录事件类型并记录其他信息。 另外,在步骤601,由PCI功能发起请求,其指定了MSI地址和MSI向 量号,以及请求者ID。在步骤602,该请求被I/O集线器接收,且响应于 接收到请求,请求中的请求者ID被用来定位用于PCI功能的设备表项。 在查询603,I/O集线器将请求中的地址的至少一部分与MSI比较寄存器 中的值进行比较。如果它们不相等,MSI没有被请求。但是,如果它们相 等,则MSI地址已被指定,且由此,MSI已被请求,而不是直接存储器 访问操作。

此后,在查询604,确定请求中指定的MSI向量号是否小于或等于为 该功能允许的中断数(NOI)。如果MSI向量号大于NOI,则指示错误。 否则,I/O集线器发出设置位功能,以在存储器中设置合适的AIBV位。 在步骤605,通过将MSI向量号加到设备表项中指定的AIBV偏移并从设 备表项中指定的AIBV地址移位该数量的位,来确定所述合适的位。此外, 如果AISB已被指定,则在步骤606,通过使用设备表项中的AISB地址和 AISB偏移,I/O集线器使用设置位功能来设置AISB。

接下来,在一个实施例中,(例如由CPU或I/O集线器)确定一中断 请求是否已经待处理。为了做出该确定,使用待处理指示器。例如,在查 询608,检查在处理器254的存储器中存储的待处理指示器252(图2A和 图2B),该待处理指示器可以由可处理中断的计算环境中的处理器(例如 图1中的CPU 102)访问。如果它没有被设置,在步骤610,将它设置(例 如设置为1)。如果它已经被设置,处理完成,且另一中断请求不会被请 求。因此,后续的中断请求由已经待处理的一个请求包含。

在一个特定的例子中,每个中断子类可以有一个待处理指示器,且因 此,分配给请求功能的中断子类的待处理指示器是被检查的指示器。

异步地,如图6B所示,在查询640,一个或多个处理器检查待处理指 示器。特别地,在例如为处理器(即为其操作系统)使能中断的时候,为 ISC(以及另一实施例中的区域(zone))使能的每个处理器对指示器进 行轮询(poll)。如果处理器中的一个确定指示器被设置,在步骤642,它 和为同一ISC(以及另一实施例中的区域)使能的其他处理器一起进行仲 裁,以呈现该中断。回到查询640,如果待处理指示器没有被设置,为ISC 使能的处理器继续对设置的指示器进行轮询。

响应于向操作系统呈现中断,在查询644,操作系统确定AISB是否 被注册。如果不是,在步骤648,操作系统处理设置的AIBV,如下所述。 否则,在步骤646、648,操作系统处理任何设置的AISB和AIBV。例如, 它检查是否有任何AISB被设置。如果是,它使用AISB来确定一个或多 个AIBV的位置。例如,操作系统记住AISB和AIBV的位置。此外,它 记住每个AISB和AIBV代表哪个适配器。因此,它可以维持某种形式的 控制块和其他数据结构,该控制块和其他数据结构包括AISB和AIBV的 位置以及AISB、AIBV和适配器ID(句柄)之间的关联。它使用该控制 块,以促进基于相关AISB来定位AIBV。在另一实施例中,AISB没有被 使用。在该情形下,控制块被用来定位特定的AIBV。

响应于定位一个或多个AIBV,操作系统扫描AIBV并处理任何设置 的AIBV。它以和所呈现的事件一致的方式来处理中断(例如提供状态)。 例如,使用存储适配器,事件可以指示操作已完成。这导致操作系统检查 由适配器存储的状态,以查看操作是否已成功完成以及操作的细节。在存 储器读的情况下,这指示从适配器读取的数据现在在系统存储器中可用并 可被处理。

在一个实施例中,如果在转换的操作期间检测到错误,向系统固件产 生注意(attention),而不是将MSI请求转换为适配器事件通知,且DTE 被置于错误状态。

如上所述,除了将MSI转换为对不是客户(例如可调页客户)的操作 系统的适配器事件通知,在另一实施例中,适配器事件可被呈现给客户。 参考图7A-9C来描述关于将MSI请求转换为适配器事件通知并将适配器 通知提供给客户的更多细节。为了转换MSI并提供适配器事件通知,由主 机和客户执行多种任务,如下所述。

首先参考图7A,在主机初始化期间(或者当第一个PCI功能被分配 给客户时),在步骤700,主机分配转发AISB数组和GAIT。在步骤702, 主机然后在例如适配器中断转发表(AIFT)中注册转发AISB数组和GAIT 的位置和长度。在一个例子中,指令例如设置中断控制指令被用来注册转 发AISB的位置和长度。

此外,在步骤704,主机指定将被分配给PCI适配器的主机中断子类 (ISC),该PCI适配器被分配给客户。再一次地,在一个例子中,指令 例如设置中断控制指令被用来指定该信息。在步骤706,该信息还被保留 在用于分区的AIFT项中,主机在该分区中运行。这完成了主机初始化。

参考图7B,在客户初始化期间,客户执行若干任务,来配置其PCI 功能以用于通过MSI请求的适配器事件通知。在一个例子中,调用这些功 能的一个或多个指令引起到主机的拦截,且由此,主机针对每个拦截采取 动作,如下所述。

开始,在步骤720,客户确定它能访问的配置中的PCI功能。在一个 例子中,客户发起命令(例如查询列表命令)来获取PCI功能的列表,且 该命令被主机拦截。由于在主机初始化期间,主机已经确定了哪些PCI功 能被分配给主机,因此响应于对PCI功能的客户请求的拦截,主机构造并 返回对客户的命令响应,该命令响应仅包括被分配给客户的那些PCI功能。

此后,在步骤722,选择客户配置的PCI功能,且执行某种处理。例 如,在步骤724,确定将用于PCI功能的MSI地址以及PCI功能所支持 的MSI向量的数量。MSI地址是基于I/O集线器以及该I/O集线器安装所 在的系统的特性来确定的。该功能支持的MSI向量的数量基于适配器的能 力。在一个例子中,为了确定MSI地址,客户使用命令例如查询组命令, 来从与适配器关联的功能表项或另一位置取回一组适配器的公共特性,包 括MSI地址。

此外,在步骤726,分配AIBV以及AISB(如果存在的话)。AIBV 和AISB被分配并被初始化为零,且注册适配器中断操作被指定。在如下 所述的步骤728,响应于所请求的注册适配器中断操作,主机拦截该操作 并执行注册。在执行注册之后,在步骤730,写入PCI功能的配置空间。 特别地,将MSI地址和MSI向量计数写入到与先前的注册一致的PCI功 能的配置地址空间中。此后,在查询732,确定列表中是否有另外的功能。 如果是,处理继续步骤722。否则,客户初始化处理完成。

如上所述,在初始化期间,使用了设置中断控制指令。参考图7C-7G 来描述该指令的一个实施例。如图7C所示,在一个例子中,设置中断控 制指令750包括操作码752,该操作码指定了这是设置中断控制指令;包 含位置(例如寄存器)的第一字段(字段1)754,该位置指定了用于该指 令的操作控制760(图7D);指定位置(例如寄存器)的第二字段(字段 2)756,该位置包含用于字段1所指定的操作控制的中断子类770(图7E); 以及第三字段(字段3)758,如图7F所示,该字段包含适配器中断参数 块(AIPB)780的逻辑地址,如下所述。

在一个例子中,操作控制760可被编码如下:

0-设置所有中断模式:适配器中断抑制工具(facility)被设置为 允许呈现针对指定ISC请求的所有适配器中断。

1-设置单个中断模式:适配器中断抑制工具被设置为允许呈现针 对指定ISC的单个适配器中断请求。针对指定ISC的后续适配器中 断请求被抑制。

2-设置适配器事件通知中断控制:由字段3所指定的适配器中断 参数块中所包含的适配器事件通知解释控制被设置。

参考图7G来描述AIPB 780的一个例子。如图所示,AIPB 780 包括例如:

转发AISB数组地址782:该字段指定了与客户适配器中断表 (GAIT)以及指定的适配器事件通知转发中断子类(AFI)结合使 用、以确定I/O适配器信号通知的适配器中断请求的目标是否是可 调页存储模式客户的转发AISB数组。

当转发AISB数组地址为零时,中断请求的目标是主机。当AISB 数组地址不是零时,进一步从AFI和GAIT来确定中断请求的目标。

客户适配器中断表(GAIT)地址784:该字段提供了GAIT的 地址,其将被用来确定由I/O适配器信号通知的适配器中断请求的 目标是否是可调页存储模式客户,且如果目标是这样的客户,GAIT 还被用于设置客户AISB,并用于将适配器中断请求传递到客户。

适配器事件通知转发中断子类(AFI)786:该字段指示ISC值。 该ISC上的待处理且可呈现的中断发起适配器事件通知转发过程, 由此转发AISB数组和GAIT的内容被用来进一步确定来自用于相 应ISC的适用I/O适配器的中断请求的目标(主机或客户)。在中 断请求是从用于AFI字段所指定的ISC的适用适配器做出时,中断 的目标可以是可调页存储模式客户,且转发AISB数组和GAIT被 用来确定转发AISB数组中指示的任何适配器事件通知的实际目标 (主机或客户)。在中断请求是从用于不同于AFI字段所指定的ISC 的其他ISC的适用适配器做出时,转发AISB数组地址和GAIT地 址不适用,且用于相应ISC的中断请求的目标为主机。

转发AISB数组长度(FAAL)788:该字段指示以位为单位的转 发AISB数组的长度,或者以GAIT项为单位的GAIT的长度。

响应于执行设置中断控制指令,基于字段1中指定的操作控制,设置 一个或多个中断控制。当操作控制的值指示设置所有中断模式或设置单个 中断模式时,字段2包含的值指定了中断控制将被设置的中断子类。

当操作控制的值指示设置适配器事件通知解释控制时,第二操作数地 址(字段3)是适配器中断参数块(AIPB)的逻辑地址,该适配器中断参 数块包括要被设置的控制。适配器中断参数块被主机用来促进源自I/O适 配器的适配器中断的解释(即转发),该I/O适配器与用于调页存储模式 客户的适配器事件通知工具关联。

在一个例子中,操作控制的设置值被存储在可被固件和操作系统访问 的位置(例如控制块)。

参考图8来描述关于各个参数的注册的更多细节。在一个例子中,在 步骤800,主机将客户AIBV钉住在主机存储器中(即将客户页固定在主 机存储器中,从而使其不可调页)。此外,如果客户指定了AISB,主机 还可将客户AISB钉住在主机存储器中。在步骤802,主机将来自转发AISB 数组的AISB并隐式地将相应的GAIT项分配给PCI功能。或者,如果客 户指定的AISB和ISC是客户先前(为另一PCI功能)注册的同一AISB 和ISC,主机可使用为该先前的请求分配的同一转发AISB和GAIT项。 这降低了开销。

在步骤804,主机将客户中断子类(ISC)复制到GAIT项中。如果客 户指定了AISB,在步骤806,主机将客户AISB的主机地址及其偏移复制 到GAIT项中。在步骤808,主机将GISA指定(designation)从其状态 描述复制到GAIT项中。

主机代表客户来执行命令,例如修改PCI功能控制命令,以指定注册 适配器中断操作并指定下列信息:客户AIBV的主机地址和客户偏移;在 分配给适配器的转发AISB数组中的主机AISB的主机地址和偏移;用于 适配器的主机中断子类(ISC)(这是当主机在初始化时发起设置中断控 制指令时,由主机在AIFT中所注册的同一ISC);以及客户所指定的MSI 的数量。

响应于执行修改PCI功能控制命令,在步骤810,选择对应于正被执 行初始化的PCI功能的设备表项,且在步骤812,将多种参数存储在设备 表项中。例如,客户AIBV;主机选择的转发AISB;主机ISC;以及中断 的数量被设置为通过配置该功能而获得的值。这完成了注册过程。

在操作期间,当PCI功能想要生成MSI时,它典型的使某些用于描 述条件的信息对操作系统可用。这引起一个或多个步骤的发生,以将PCI 功能的MSI请求转换为对客户操作系统的I/O适配器事件通知。这将参考 图9A来描述。

参考图9A,开始,在步骤900,记录为其请求中断的事件的描述。例 如,PCI功能在例如系统存储器中存储的一个或多个适配器特定的事件描 述记录结构中记录事件的描述。此外,在步骤901,由PCI功能发起请求, 该请求指定了MSI地址和MSI向量号,以及请求者ID。在步骤902,该 请求被I/O集线器接收,且响应于接收到请求,请求中的请求者ID被用 来定位用于PCI功能的设备表项。在查询903,I/O集线器将请求中的地 址的至少一部分与MSI比较寄存器中的值进行比较。如果它们不相等, MSI没有被请求。但是,如果它们相等,则MSI地址已被指定,而不是 直接存储器访问操作。

此后,在查询904,确定请求中指定的MSI向量号是否小于或等于该 功能允许的中断数量(NOI)。如果MSI向量号大于NOI,则指示错误。 否则,在步骤905,I/O集线器发出设置位功能,以在存储器中设置合适的 AIBV位。通过将MSI向量号加到设备表项中指定的AIBV偏移并从设备 表项中指定的AIBV地址移位该数量的位,来确定所述合适的位。基于主 机设置其中断信息注册的方式,被设置的位是已被钉住在主机存储器中的 客户AIBV。

此外,如果AISB已被指定,则在步骤906,如上针对AIBV所述, 通过使用设备表项中的AISB地址和AISB偏移,I/O集线器使用设置位功 能来设置AISB。再次地,基于主机设置其中断信息注册的方式,被设置 的位是主机存储器中的转发AISB数组中的主机AISB。注意到如果系统不 支持单个位的设置,多个位(例如字节)可被设置,以指示适配器事件或 概要指示。

接下来,在一个实施例中,由I/O集线器确定是否一中断请求已经待 处理。为了做出该确定,使用待处理指示器。例如,在查询908,检查在 处理器254的存储器中存储的待处理指示器252(图2A、图2B),该待 处理指示器可以由可处理中断的计算环境中的处理器访问。如果它没有被 设置,则在步骤910,将它设置(例如为1),并且处理完成。如果它已经 被设置,则处理完成,且另一中断请求不会被请求。因此,后续的中断请 求被已经待处理的一个请求包含。

在一个特定的例子中,为了设置指示器,使用设备表项中的ISC和区 域号(作为中断区域)来确定哪个待处理指示器将被设置。基于主机设置 其中断信息注册的方式,被使用的ISC是主机分配的用于将MSI请求转 换为客户适配器事件通知的ISC(即主机在AIFT中注册的同一ISC)。

异步地,如图9B所示,在查询920,一个或多个处理器检查待处理指 示器。特别地,在例如为处理器(即为其操作系统)启用中断时,为ISC 和区域启用的每个处理器对指示器进行轮询。如果处理器中的一个确定指 示器被设置,它和其他处理器一起进行仲裁,以处理中断。例如,在步骤 924,固件使用为适配器中断请求指定的区域号来定位用于逻辑分区(区域) 的AIFT项。

响应于定位AIFT项,在查询926,固件检查AIFT项是否包括定义 的值(例如全零)。如果AIFT项包括定义的值,则没有主机在逻辑分区 中运行客户,且在步骤928,针对区域号所标识的逻辑分区(或者,如果 没有配置逻辑分区,针对操作系统),使得适配器中断待处理。然后如以 上参考图6B所述处理中断。

回到查询926,如果AIFT项不包括定义的值,意味着存在主机运行 客户,则在查询930,处理继续检查作为适配器中断请求的部分来指定的 ISC是否等于AIFT项中的ISC。如果作为适配器中断请求的部分来指定 的ISC不等于AIFT项中的ISC,则适配器中断请求的目标不是客户,且 在步骤928,针对区域号所标识的逻辑分区(即主机),使得该适配器中 断请求待处理。然后如上参考图6B所述进行处理。

否则,如果作为适配器中断请求的部分来指定的ISC确实等于AIFT 项中的ISC,意味着适配器中断请求的目标是客户,则在步骤932,固件 使用AIFT项中的转发AISB数组地址和长度来扫描主机所指定的转发 AISB数组,以查找被设置为1的指示器(例如位)。在步骤934,对于被 设置为1的每个位,固件使用相应GAIT项中的信息来处理该指示器。参 考图9C来描述关于处理指示器的更多细节。

参考图9C,开始,在查询950,确定GAIT项是否包含定义的值(例 如全零),这意味着适配器中断的目标不是客户。如果GAIT项确实包含 定义的值,则在步骤952,针对I/O中断代码中的主机适配器事件通知转 发指示器被设置为1的主机,使得适配器中断待处理。处理完成。

但是,如果GAIT项不包含定义的值,意味着适配器中断的目标是相 应的客户,则在步骤954,执行若干步骤,以完成将适配器事件通知转发 到客户。例如,如果GAIT项中的客户AISB地址不包含定义的值(例如 全零),则在步骤956,使用客户AISB地址和客户AISB偏移来将客户 AISB设置为1。此外,在步骤958,使用GAIT项中的客户中断子类和 GISA指定来使得中断在用于客户的GISA中待处理。例如,GISA中的中 断待处理掩码(IPM)中的与GISC相对应的位被设置为1。此外,如果 针对GISC请求主机报警(alerting)(例如,GISA的中断报警掩码(IAM) 中的与GISC相对应的位被设置为1),则在步骤960,使得主机报警适配 器中断待处理。例如,在IPM位被设置为1的时候,指定适配器中断针对 PCI功能待处理的位在对应于GISC的适配器中断源掩码中被设置。IPM 位的设置等价于CPU的待处理指示器,因为当客户CPU针对ISC启用时, 中断被呈现给该客户CPU,而没有主机干预。这完成了向客户转发适配器 事件通知。

响应于通知,客户处理任何设置AISB和/或AIBV指示器,如上针对 操作系统所述的。

此后,在步骤962,将触发了该动作的转发AISB数组中的指示器(例 如位)设置为0,以表明该适配器事件通知已被转发。在另一实现中,该 位可在该处理之前被设置为0,然后在这里被检查。

在一个实施例中,尽管系统固件处理主机转发AISB数组,可以决定 提早结束处理,并将完成处理转发AISB数组的责任传递给主机。对于该 情形,系统固件使适配器中断针对该主机待处理,其中I/O中断代码中的 主机AEN转发位被设置为1。该机制避免了密集填充的转发AISB数组的 处理对系统固件性能产生负面影响。

这里介绍有关用于注册适配器中断的修改PCI功能控制指令的进一步 细节。参照图10A,修改PCI功能控制指令1000包括例如指示修改PCI 功能控制指令的操作码1002;指定所包括的各种信息所在位置的第一字段 1004,所述信息是关于操作参数正为其建立的适配器功能的信息;以及指 明从其获取PCI功能信息块(FIB)的位置的第二字段1006。以下将进一 步描述由字段1和2指定的位置的内容。

在一个实施例中,字段1指定包括各种信息的通用寄存器。如图10B 所示,寄存器的内容包括例如功能句柄(handle)1010,其标识适配器功 能的句柄,修改指令是代表该功能执行的;地址空间1012,其指定与由功 能句柄指定的适配器功能有关的系统存储器中的地址空间;操作控制 1014,其指定将针对适配器功能而执行的操作;以及状态1016,其以预定 码提供当完成指令时关于指令的状态。

在一个实施例中,功能句柄包括例如指示句柄是否被使能的使能指示 符,标识适配器功能的功能号(这是静态标识符,且可被用于索引到功能 表中);以及实例号,其指定该功能句柄的特定实例。存在用于每个适配 器功能的功能句柄,且其用于定位功能表中的功能表项(FTE)。每个功 能表项包括操作参数和/与其适配器功能有关的其他信息。作为例子,功能 表项包括:

实例号:该字段指示与功能表项有关的适配器功能句柄的特定实例;

设备表项(DTE)索引1...n:存在一个或多个设备表索引,且每个索 引是到一个设备表中的索引,用于定位设备表项(DTE)。每个适配器功 能有一个或多个设备表项,且每个项包括与其适配器功能有关的信息,包 括用于处理适配器功能的请求(例如,DMA请求、MSI请求)的信息以 及涉及与适配器功能有关的请求(例如,PCI指令)的信息。每个设备表 项与分配给适配器功能的系统存储器内的一个地址空间有关。适配器功能 可具有分配给适配器功能的系统存储器内的一个或多个地址空间。

示忙器:该字段指示适配器功能是否忙;

持久错误状态指示器:该字段指示适配器功能是否处于持久错误状态;

恢复启动指示器:该字段指示是否已启动对于适配器功能的恢复;

许可指示器:该字段指示尝试控制适配器功能的操作系统是否有权限 这么做;

使能指示器:该字段指示适配器功能是否被使能(例如1=使能,0= 禁止);

请求者标识符(RID):这是适配器功能的标识符,且包括例如总线 号、设备号和功能号。

在一个例子中,该字段用于访问适配器功能的配置空间。(适配器的 存储器可被定义为地址空间,包括例如配置空间、I/O空间和/或一个或多 个存储器空间。)在一个例子中,可通过在由操作系统(或其他配置)发 出到适配器功能的指令中指定配置空间来访问配置空间。在该指令中指定 的是到配置空间中的偏移,以及用于定位包括RID的恰当的功能表项的功 能句柄。固件接收指令并确定其用于配置空间。因此,它使用RID来生成 对I/O集线器的请求,且I/O集线器创建访问适配器的请求。适配器功能 的定位是基于RID,且该偏移指定到适配器功能的配置空间中的偏移。

基地址寄存器(BAR)(1到n):该字段包括多个无符号整数,被 指定为BAR0-BARn,其与原始指定的适配器功能有关,且其值也被存储在 与适配器功能有关的基地址寄存器中。每个BAR指示适配器功能内的存 储器空间或I/O空间的开始地址,并也指示地址空间的类型,即,它是例 如64或32位的存储空间,或是32位的I/O空间;

在一个例子中,它被用于访问适配器功能的存储空间和/或I/O空间。 例如,在访问适配器功能的指令中提供的偏移被添加到与在指令中指定的 地址空间有关的基地址寄存器中的值,以获得用于访问适配器功能的地址。 在指令中提供的地址空间标识符标识将被访问的适配器功能内的地址空 间,以及将被使用的对应的BAR;

大小(Size)1...n:该字段包括多个无符号整数,被指定为 SIZE0-SIZEN;大小字段的值,当不是零时,表示每个地址空间的大小, 且每个项对应于先前描述的BAR。

以下将描述关于BAR和Size的进一步细节。

1.当BAR没有针对适配器功能而实现时,BAR字段及其对应的大小 字段都被存储为零。

2.当BAR字段表示I/O地址空间或者32位存储器地址空间时,对应 的大小字段是非零的并表示地址空间的大小。

3.当BAR字段表示64位存储器地址空间时,

a.BARn字段表示最低有效(least significant)的地址位。

b.下一个连续BARn+1字段表示最高有效(most significant)的地 址位。

c.对应的SIZEn字段是非零的,并表示地址空间的大小。

d.对应的SIZEn+1字段不是有意义的,且被存储为零。

内部路由信息:该信息被用于执行到适配器的特定路由。作为例子, 它包括例如节点、处理器芯片和集线器寻址信息。

状态指示:这提供了关于例如加载/存储操作是否被阻止或适配器是否 处于错误状态的指示,以及其他指示。

在一个例子中,示忙器、持久错误状态指示器以及恢复启动指示器基 于由固件执行的监督而被设置。而且,许可指示器基于例如策略而被设置; 且BAR信息基于在处理器(例如,处理器的固件)的总线行走(bus walk) 期间发现的配置信息而被设置。其他字段可基于配置、初始化和/或事件而 被设置。在其他实施例中,功能表项可包括更多、更少或不同的信息。包 括的信息可取决于由适配器功能支持或使能的操作。

参考图10C,在一个例子中,字段2指示PCI功能信息块(FIB)的 逻辑地址1020,该PCT功能信息块包括关于有关适配器功能的信息。功 能信息块被用于更新设备表项和/或与适配器功能有关的功能表项(或其他 位置)。该信息在适配器的初始化和/或配置期间,以及/或者响应于特定 事件而被存储在FIB中。

参考图10D描述关于功能信息块(FIB)的进一步细节。在一个实施 例中,功能信息块1050包括以下字段:

格式1051:该字段指定FIB的格式。

拦截控制1052:该字段被用来指示特定指令由可调页模式客户 (pageable mode guest)进行的客户执行是否导致指令拦截;

错误指示1054:该字段包括用于直接存储器访问和适配器中断的错误 状态指示。当该位被设置(例如1)时,在执行用于适配器功能的直接存 储器访问或适配器拦截时,检测到一个或多个错误;

加载/存储阻止1056:该字段指示加载/存储操作是否被阻止;

PCI功能有效1058:该字段包括用于适配器功能的使能控制。当该位 被设置(例如1)时,适配器功能被认为对于I/O操作而被使能;

地址空间注册1060:该字段包括用于适配器功能的直接存储器访问使 能控制。当该字段被设置(例如1)时,直接存储访问被使能;

页大小1061:该字段指示将被DMA存储器访问所访问的页或其他存 储单元的大小;

PCI基地址(PBA)1062:该字段是用于分配给适配器功能的系统存 储器中的地址空间的基地址。它表示适配器功能被允许使用以直接存储器 访问指定的DMA地址空间的最低虚拟地址;

PCI地址界限(PAL)1064:该字段表示适配器功能被允许在指定的 DMA地址空间内访问的最高虚拟地址;

输入/输出地址转换指针(IOAT)1066:输入/输出地址转换指针指定 由PCI虚拟地址转换使用的任何转换表中的第一个,或者它可直接指定作 为转换结果的存储帧的绝对地址;

中断子类(ISC)1068:该字段包括用于针对适配器功能给出适配器 中断的中断子类;

中断数(NOI)1070:该字段指定针对适配器功能接受的不同的中断 代码的数量。该字段也以位定义了由适配器中断位向量地址和适配器中断 位向量偏置字段指定的适配器中断位向量的大小;

适配器中断位向量地址(AIBV)1072:该字段指定用于适配器功能的 适配器中断位向量的地址。该向量在中断处理中使用;

适配器中断位向量偏移1074:该字段指定用于适配器功能的第一适配 器中断位向量位的偏移;

适配器中断概要位地址(AISB)1076:该字段提供指定可选地在中断 处理中使用的适配器中断概要位的地址;

适配器中断概要位偏移1078:该字段提供到适配器中断概要位向量中 的偏移;

功能测量块(FMB)地址1080:该字段提供用于收集关于适配器功能 的测量的功能测量块的地址;

功能测量块键(key)1082:该字段包括访问功能测量块的访问键;

概要位通知控制1084:该字段指示是否存在正使用的概要位向量;

指令授权令牌1086:该字段用于确定可调页存储模式客户是否被授权 执行PCI指令而没有主机干预;以及

地址转换格式1087:该字段指示用于将在转换中使用的最高级转换表 的地址转换的所选择的格式(例如,段表、区域(region)第三等的指示)。

在修改PCI功能控制指令中指定的功能信息块被用于修改选择的设备 表项、功能表项和/或与在指令中指定的适配器功能有关的其他固件控制。 通过修改设备表项、功能表项和/或其他固件控制,为适配器提供某些服务。 这些服务包括,例如,适配器中断;地址转换;重置错误状态;重置加载/ 存储阻止;设置功能测量参数;以及设置拦截控制。

参考图11描述与修改PCI功能控制指令有关的逻辑的一个实施例。 在一个例子中,指令由操作系统(或其他配置)发出并由执行操作系统的 处理器(例如,固件)执行。在此处的例子中,指令和适配器功能是基于 PCI的。但是,在其他实施例中,可使用不同的适配器结构和相应的指令。

在一个例子中,操作系统向指令提供以下操作数(例如,在由指令指 定的一个或多个寄存器中);PCI功能句柄;DMA地址空间标识符;操 作控制;以及功能信息块的地址。

参考图11,初始地,确定是否安装了允许修改PCI功能控制指令的工 具(facility),查询1100。该确定通过例如检查存储在例如控制块中的指 示器而做出。如果工具未安装,提供异常条件,步骤1102。否则,确定指 令是否由可调页存储模式客户(或其他客户)发出,查询1104。如果是, 主机操作系统将仿真用于该客户的操作,步骤1106,如以上所描述的。

否则,确定一个或多个操作数是否被对准,查询1108。例如,确定功 能信息块的地址是否是在双字边界。在一个例子中,这是可选的。如果操 作数未被对准,则提供异常条件,步骤1110。否则,确定功能信息块是否 可访问,查询1112。如果否,则提供异常条件,步骤1114。否则,确定在 修改PCI功能控制指令的操作数中提供的句柄是否被使能,查询1116。在 一个例子中,该确定通过检查句柄中的使能指示器而做出。如果句柄没有 被使能,则提供异常条件,步骤1118。

如果句柄被使能,则句柄被用于定位功能表项,步骤1120。即,至少 一部分句柄被用于索引到功能表中以定位对应于适配器功能的功能表项, 操作参数将为该适配器功能建立。

确定功能表项是否被发现,查询1122。如果否,则提供异常条件,步 骤1124。否则,如果发出指令的配置是客户,查询1126,则提供异常条件 (例如拦截到主机),步骤1128。如果配置不是客户,则该查询可被忽略, 或者如果指定的话,可检查其他授权。

随后确定该功能是否被使能,查询1130。在一个例子中,该确定是通 过检查功能表项中的使能指示器而做出的。如果它未被使能,则提供异常 条件,步骤1132。

如果功能被使能,则确定恢复是否是活动的,查询1134。如果由功能 表项中的恢复指示器确定恢复是活动的,则提供异常条件,步骤1136。 但是,如果恢复不是活动的,则进一步确定功能是否忙,查询1138。该确 定是通过查询功能表项中的示忙器而做出的。如果功能忙,则提供忙条件, 步骤1140。利用该忙条件,可重试该指令,而不是放弃它。

如果功能不忙,则进一步确定功能信息块格式是否有效,查询1142。 例如,检查FIB的格式字段以确定该格式是否由系统支持。如果它是无效 的,则提供异常条件,步骤1144。如果功能信息块格式是有效的,则进一 步确定在指令的操作数中指定的操作控制是否是有效的,查询1146。即, 该操作控制是否是用于该指令的指定操作控制中的一个。如果它是无效的, 则提供异常条件,步骤1148。但是,如果该操作控制是有效的,则继续处 理指定的特定操作控制。

在一个例子中,操作控制是注册适配器中断操作,其被用于控制适配 器中断。响应于该操作控制,基于功能信息块的合适内容,与适配器中断 相关的适配器功能参数在设备表项中被设置。

参考图12来描述与该操作相关的逻辑的一个实施例。作为一个例子, 从功能信息块获取的用于该操作的操作数包括例如:中断子类(ISC); 允许的中断数(NOI);适配器中断位向量偏移(AIBVO);概要通知(S); 适配器中断概要位向量偏移(ABVSO);适配器中断位向量(AIBV)地 址;以及适配器中断概要位向量(AISB)地址。

参考图12,开始,在查询1200,确定在FIB中指定的中断数(NOI) 是否大于依赖于模型的最大值。如果是,则在步骤1202,提供异常条件。 但是,如果中断数不大于依赖于模型的最大值,则在查询1204,进一步确 定中断数加上适配器中断位向量偏移(NOI+AIBVO)是否大于依赖于模 型的最大值。如果是,则在步骤1206,提供异常条件。如果NOI加上AIBVO 不大于依赖于模型的最大值,则在查询1208,进一步确定AIBV地址加上 NOI是否跨越4k边界。如果它确实跨越4k边界,则在步骤1210,提供异 常条件。否则,在步骤1212,确定对于任何所需的资源是否有足够的资源 可用。如果没有足够的资源,则在步骤1214,提供异常条件。

否则,在步骤1216,确定是否已经为该功能注册适配器中断。在一个 实施例中,这可以通过检查(例如DTE/FTE中的)一个或多个参数来确 定。特别地,与中断相关的参数例如NOI被检查。如果字段被填充,则为 中断注册适配器。如果适配器已经被注册,则在步骤1218,提供异常条件。 否则,从FIB获取中断参数,并将其放置于功能表项(或其他指定的位置) 以及相应的设备表项(DTE)中。此外,在步骤1220,在DTE中设置 MSI使能指示器。即,基于从功能信息块取回的信息,在DTE中且可选 地在FTE中设置与适配器中断相关的PCI功能参数。这些参数包括例如 ISC、NOI、AIBVO、S、AIBVSO、AIBV地址和AISB地址。

除了上述之外,可被指定的另一操作控制是注销存储器中断操作,其 例子将参考图10来描述。使用该操作,与适配器中断相关的适配器功能参 数被重置。

参考图13,开始,在查询1300,确定是否为中断注册了功能句柄所指 定的适配器。如果不是,则在步骤1302,提供异常条件。否则,在步骤1304, 将功能表项(或其他位置)和相应设备表项中的中断参数设置为0。在一 个例子中,这些参数包括ISC、NOI、AIBVO、S、AIBSO、AIBV地址和 AISB地址。

如上所述,在一个实施例中,为了获取关于适配器功能的信息,使用 调用逻辑处理器指令。图14中示出了该指令的一个实施例。如图所示,在 一个例子中,调用逻辑处理器(CLP)指令1400包括操作码1402,其指 示这是调用逻辑处理器指令;以及命令指示1404。在一个例子,该指示是 描述要被执行的命令的请求块的地址,且请求块中的信息依赖于该命令。 参考图14B-16B来描述用于各个命令的请求块和对应的响应块的例子。

首先参考图14B,提供了用于列表PCI功能命令的请求块。列表PCI 功能命令被用于获取被分配给请求配置(例如请求的操作系统)的PCI功 能的列表。请求块1420包括若干参数,例如:

长度字段1422:该字段指示请求块的长度;

命令码1424:该字段指示列表PCI功能命令;以及

恢复令牌(token)1426:该字段是整数,被用来开始新的列表PCI 功能命令或恢复先前的列表PCI功能命令,如以下将更详细地描述的。

当命令请求块中的恢复令牌字段包括例如为零的值时,则请求新的 PCI功能列表。当恢复令牌字段包括例如从先前的列表PCI功能命令返回 的非零的值时,则请求继续先前的PCI功能列表。

响应于发出和处理用于列表PCI功能命令的调用逻辑处理指令,返回 响应块。图14C中示出了响应块的一个实施例。在一个例子中,用于列表 PCI功能命令的响应块1450包括:

长度字段1452:该字段指示响应块的长度;

响应码1454:该字段指示命令的状态;

PCI功能列表1456:该字段指示可用于请求的操作系统的一个或多个 PCI功能的列表;

恢复令牌1458:该字段指示是否请求继续先前的PCI功能列表。在一 个例子中,当请求块中的恢复令牌和响应块中的恢复令牌为零时,分配给 请求配置的所有PCI功能被表示在PCI功能列表中;如果请求块中的恢复 令牌是零而响应块中的恢复令牌不是零,可以存在被分配给请求配置的额 外PCI功能,其没有被表示在列表中;如果请求块中的恢复令牌不是零而 响应块中的恢复令牌是零,从恢复点开始,分配给请求配置的剩余PCI功 能被表示在列表中;当请求和响应块中的恢复令牌从恢复点开始都不是零 时,可以存在被分配给请求配置的额外的PCI功能,其没有被表示在任何 相关的PCI功能列表中。在被返回后,恢复令牌在不确定的一段时间中保 持有效,但是它可以由于依赖于模型的各种原因(包括系统负载流逝时间), 而是无效的。

依赖于模型的数据1460:该字段包括依赖于系统的数据;

PCI功能的数量1462:该字段指示该工具(facility)所支持的PCI 功能的最大数量;以及

项大小1464:该字段指示PCI功能列表中的每个项的大小。

参考图14D来描述关于PCI功能列表的更多细节。在一个例子中, PCI功能列表包括多个项且每个项1456包括作为例子的下列信息:

设备ID 1470:该字段指示与相应PCI功能关联的I/O适配器;

厂商ID 1472:该字段标识与相应PCI功能关联的I/O适配器的制造 者;

功能标识符1474:该字段包括PCI功能的持久标识符;

功能句柄1476:该字段标识PCI功能。存储的PCI功能句柄当句柄 的指定位为零时是一般句柄,而当该位是1时,它是使能的句柄。如果PCI 功能被禁止,存储一般PCI功能句柄。如果PCI功能被使能,存储使能的 PCI功能句柄。在一个例子中,PCI功能句柄不会在IPL以外持续,这不 同于PCI功能ID,PCI功能ID是持久的,并被设置用于I/O配置定义的 生命期;以及

配置状态1478:该字段指示PCI功能的状态。当该指示器例如是零时, 状态为等待(standby),且当指示器例如是1时,状态为已配置。当等待 时,PCI功能句柄是一般PCI功能句柄,而当已配置时,它是一般或使能 的PCI功能句柄,这取决于PCI功能是否被使能。

在获取适配器功能列表之后,可以获取关于被选择功能的属性的信息, 该被选择功能是由指定PCI功能句柄所指定的。该信息可通过发出具有查 询功能命令的CLP指令来获取。

参考图15A来描述用于查询PCI功能命令的请求块的一个实施例。在 一个例子中,请求块1500包括例如:

长度字段1502:该字段指示请求块的长度;

命令码1504:该字段指示查询PCI功能命令;以及

功能句柄1506:该字段包括(例如一般或使能的)PCI功能句柄,其 指定了要被查询的PCI功能。

响应于发出用于查询PCI功能命令的调用逻辑处理器指令,返回响应 块。图15B中示出了响应块的一个实施例。在一个例子中,响应块1550 包括下列各项:

长度1552:该字段指示响应块的长度;

响应码1554:该字段指示命令的状态;

功能组ID 1556:该字段指示PCI功能组标识符。PCI功能组标识符 被用来将一组PCI功能与属性集(在这里也被称为特性)相关联。具有同 一PCI功能组标识符的每个PCI功能具有相同的属性集;

功能ID 1558:PCI功能id是PCI功能的持久标识符,其最初由PCI 功能句柄指定,且被设置用于I/O配置定义的生命期;

物理通道适配器1560:该值表示对应于PCI功能的物理I/O适配器的 位置的依赖于模型的标识;

基址寄存器(BAR)1...n 1562:该字段包括多个无符号整数,其被指 定为BAR0–BARn,其与初始指定的PCI功能关联,且其值也被存储在与 PCI功能关联的基址寄存器中。每个BAR指定了适配器中的存储器空间 或I/O空间的起始地址,还指示了地址空间的类型,即它例如是64位还是 32位的存储器空间,或者32位的I/O空间;

大小1...n 1564:该字段包括多个无符号整数,其被指定为SIZE0– SIZEn。当大小字段的值为非零时,它表示每个地址空间的大小,其每个 项对应于先前描述的BAR。

起始可用DMA 1566:该字段包括地址,该地址指示可用于DMA操 作的PCI地址范围的起始;

终止可用DMA 1568:该字段包括值,该值指示可用于DMA操作的 PCI地址范围的终止。

除了获取关于特定适配器功能的属性,还可获取关于包含该功能的组 的属性。这些共同属性可通过发出具有查询PCI功能组命令的CLP指令 来获取。该命令被用来获取被支持的一组特性,该组特性用于由指定PCI 功能组标识符所指定的一个或更多个PCI功能的组。PCI功能组标识符被 用来将一组PCI功能与同一组特性相关联。参考图16A来描述用于请求 PCI功能组命令的请求块的一个实施例。在一个例子中,请求块1600包括 下列各项:

长度字段1602:该字段指示请求块的长度;

命令码1604:该字段指示查询PCI功能组命令;以及

功能组ID 1606:该字段指定为其获取属性的PCI功能组标识符。

响应于发出并处理具有查询PCI功能组命令的调用逻辑处理指令,响 应块被返回。图16B示出了响应块的一个实施例。在一个实施例中,响应 块1650包括:

长度字段1652:该字段指示响应块的长度;

响应码1654:该字段指示命令的状态;

中断数1656:该字段指示针对指定的PCI功能组中的每个PCI功能, PCI工具所支持的连续MSI向量号(即中断事件指示器)的最大数量。在 一个例子中,中断数的可能的有效值的范围为0到2,048;

版本1658:该字段指示PCI工具所支持的PCI规范的版本,由指定 的PCI组标识符所指定的PCI功能组被附加到该PCI工具;

帧1662:该字段指示支持的用于I/O地址转换的帧(或页)大小;

测量块更新间隔1664:这是一个值,指示PCI功能测量块更新的近似 时间间隔(例如以毫秒为单位)

DMA地址空间掩码1666:这是一个值,用于指示PCI地址中的哪些 位被用来标识DMA地址空间;以及

MSI地址1668:这是一个值,被用于消息信号中断请求。

如上所述的请求列表和功能命令例如从功能表中取回信息。在初始化 时,或者在适配器的热插拔(hot plug)之后,固件执行总线行走(bus walk), 以确定适配器的位置并确定其基本特性。该信息被固件存储到用于每个适 配器的功能表项(FTE)中。基于由系统管理员设置并且也由固件设置到 FTE中的策略,确定适配器的可访问性。查询列表和功能命令然后可以取 回该信息并将它存储在其各自的、操作系统可访问的响应块中。

此外,组信息基于给定的系统I/O体系基础设备以及固件和I/O集线 器的能力。这可以被存储在FTE中或任何其他方便的位置,以用于以后在 查询处理时取回。特别地,查询组命令取回该信息,并将它存储在操作系 统可访问的响应块中。在一个例子中,当客户发出查询命令时,主机操作 系统可重新发出查询来确定系统能力并随后在将响应块返回到客户之前可 基于主机的能力修改响应块。

上面详细描述了用于将PCI消息信号中断转换为到客户(例如客户操 作系统)的I/O适配器事件通知的能力。这提供了低延迟中断请求;从相 对大量的PCI功能向操作系统传递MSI;以及保持使MSI适应于适配器 事件通知架构的MSI向量指定的风格(flavor)。它适应于允许I/O集线 器连接到相对大量的PCI功能,并消除每次写入MSI向量产生唯一中断 的问题。

根据本发明的方面,由适配器功能发出并转换为I/O适配器事件通知 的MSI被传递给客户(例如,可调页存储模式客户),而在传递期间没有 主机干预。

在此描述的实施例中,适配器是PCI适配器。如在此使用的,PCI指 根据由外围组件互连特别兴趣组(PCI-SIG)(www.pcisig.com/home)定 义的基于PCI的规范而实现的任何适配器,包括但不限于PCI或PCIe。 在一个特定例子中,快速外围组件互连(PCIe)是组件级互连标准,其定 义了用于I/O适配器和主机系统之间的事务的双向通信协议。根据用于 PCIe总线上的传输的PCIe标准,PCIe通信被封装在包中。源于I/O适配 器且止于主机系统的事务被称为上行事务。源于主机系统且止于I/O适配 器的事务被称为下行事务。PCIe拓扑基于成对(例如,一个上行链路,一 个下行链路)以形成PCIe总线的点对点单向链路。PCIe标准由PCI-SIG 维护并公布。

所属技术领域的技术人员知道,本发明可以实现为系统、方法或计算 机程序产品。因此,本公开可以具体实现为以下形式,即:可以是完全的 硬件、也可以是完全的软件(包括固件、驻留软件、微代码等),还可以 是硬件和软件结合的形式,本文一般称为“电路”、“模块”或“系统”。 此外,在一些实施例中,本发明还可以实现为在一个或多个计算机可读介 质中的计算机程序产品的形式,该计算机可读介质中包含计算机可读的程 序代码。

可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质 可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介 质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的 系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体 的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计 算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式 可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器 (CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在 本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质, 该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。

现在参考图17,在一个例子中,计算机程序产品1700包括,例如, 一个或多个计算机可读存储介质1702,在其上存储有计算机可读的程序代 码装置或逻辑1704,以提供并方便本发明的一个或多个方面。

体现在计算机可读介质上的程序代码可以用任何适当的介质传输,所 述介质包括但不限于:无线、有线、光缆、RF等,或上述的任意合适的 组合。

可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作 的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸 如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如”C” 语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、 部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计 算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。 在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包 括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到 外部计算机(例如利用因特网服务提供商来通过因特网连接)。

本文中将参照本发明实施例的方法、装置(系统)和计算机程序产品 的流程图和/或框图描述本发明。应当理解,流程图和/或框图的每个方框 以及流程图和/或框图中各方框的组合,都可以由计算机程序指令实现。这 些计算机程序指令可以提供给通用计算机、专用计算机或其它可编程数据 处理装置的处理器,从而生产出一种机器,这些计算机程序指令通过计算 机或其它可编程数据处理装置执行,产生了实现流程图和/或框图中的方框 中规定的功能/操作的装置。

也可以把这些计算机程序指令存储在能使得计算机或其它可编程数据 处理装置以特定方式工作的计算机可读介质中,这样,存储在计算机可读 介质中的指令就产生出一个包括实现流程图和/或框图中的方框中规定的 功能/操作的指令装置(instruction means)的制造品(manufacture)。

也可以把计算机程序指令加载到计算机、其它可编程数据处理装置、 或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执 行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机或其它 可编程装置上执行的指令能够提供实现流程图和/或框图中的方框中规定 的功能/操作的过程。

附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法 和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程 图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述 模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的 可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功 能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际 上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及 的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和 /或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬 件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

除了上述,本发明的一个或多个方面可由服务提供商提供、许诺 (offer)、部署、管理、服务等,该服务提供商提供用户环境的管理。例 如,服务提供商可创建、维持、支持等计算机代码和/或计算机基础设施, 其为一个或多个用户执行本发明的一个或多个方面。反过来,服务提供商 可例如根据预订和/或费用协议从用户接受付费。额外地或可替换地,服务 提供商可从向一个或多个第三方销售广告内容接受付费。

在本发明的一个方面,可部署用于执行本发明的一个或多个方面的应 用。作为一个例子,部署应用包括提供计算机基础设施,其可操作以执行 本发明的一个或多个方面。

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

作为本发明的再一个方面,可提供用于集成计算基础设施包括将计算 机可读码集成到计算机系统的过程。计算机系统包括计算机可读介质,其 中计算机介质包括本发明的一个或多个方面。与计算机系统结合的代码能 够执行本发明的一个或多个方面。

尽管以上描述了各种实施例,这些仅是例子。例如,其他体系结构的 计算环境可包含并使用本发明的一个或多个方面。作为例子,除了System 服务器之外的服务器,诸如由国际商业机器公司提供的Power Systems 服务器或其他服务器,或其他公司的服务器,可包括、使用和/或受益于本 发明的一个或多个方面。而且,尽管在此示出的例子中,适配器和PCI集 线器被认为是服务器的一部分,在其他实施例中,它们不是必须被认为是 服务器的一部分,而是可被简单地认为是耦合到计算环境的系统存储器和/ 或其他组件。计算环境不需要是服务器。而且,尽管适配器是基于PCI的, 可与其他适配器或其他I/O组件一起使用本发明的一个或多个方面。适配 器和PCI适配器仅仅是例子。进一步地,本发明的一个或多个方面可适用 于PCI MSI之外的中断方案。更进一步地,尽管在描述的例子中设置了位, 在其他实施例中,可设置字节或其他类型的指示器。而且,DTE和其他结 构可包括更多、更少或不同的信息。许多其他变化是可能的。

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

输入/输出或I/O设备(包括但不限于键盘、显示器、指点设备、DASD、 磁带、CD、DVD、拇指驱动器(thumb drive)以及其他的存储介质等) 可直接或通过介于其间的I/O控制器被耦合到系统。网络适配器也可被耦 合到系统以使得数据处理系统能够通过介于其间的私有或公共网络而耦合 到其他的数据处理系统或远程打印机或存储设备。调制解调器、电缆调制 解调器和以太网卡仅是一些可获得的网络适配器类型。

参考图18,其描述了实施本发明的一个或多个方面的主机计算机系统 5000的代表性组件。代表性主机计算机5000包括与计算机存储器(即, 中央存储器)5002通信的一个或多个CPU,以及到存储介质设备5011和 网络5010的I/O接口,以用于与其他计算机或SAN等通信。CPU 5001 符合具有架构指令集和架构功能的架构。CPU 5001可具有动态地址转换 (DAT)5003,其用于将程序地址(虚拟地址)转变为存储器的真实地址。 DAT典型地包括用于高速缓存转换的转换后备缓冲器(TLB)5007,这样 稍后对计算机存储器5002块的访问不需要地址转换的延迟。典型地,高速 缓存5009被使用在计算机存储器5002和处理器5001之间。高速缓存5009 可以是分层的,具有可被多于一个的CPU获得的大高速缓存,以及大高 速缓存和每个CPU之间的较小、较快(较低级)的高速缓存。在一些实 施方式中,较低级的高速缓存被拆分以为指令获取和数据访问提供单独的 低级高速缓存。在一个实施例中,由指令获取单元5004经由高速缓存5009 从存储器5002获取指令。指令在指令解码单元5006中被解码,且(在一 些实施例中与其他指令一起)被发送到一个或多个指令执行单元5008。典 型地,使用若干执行单元5008,例如算术执行单元、浮点执行单元和分支 指令执行单元。指定被执行单元执行,如需要,从指令指定的寄存器或存 储器访问操作数。如果将从存储器5002访问(加载或存储)操作数,加载 /存储单元5005典型地在被执行的指令的控制下处理该访问。指令可在硬 件电路或内部微代码(固件)中或其组合中被执行。

需注意的是,计算机系统包括本地(或主)存储器中的信息,以及寻 址、保护以及引用和改变记录。寻址的一些方面包括地址格式、地址空间 的概念、地址的各种类型和其中一种类型的地址被转换为另一种类型的地 址的方式。一些主存储器包括持久分配地存储位置。主存储器向系统提供 直接可被寻址的快速访问的数据存储。数据和程序在可被处理之前都将(从 输入设备)被加载到主存储器。

主存储器可包括一个或多个更小、更快速访问的缓冲存储器,有时候 被称为高速缓存。高速缓存典型地与CPU或I/O处理器物理地关联。物理 结构以及不同存储介质的使用的效果,除了在性能上,通常不会被程序观 察到。

可维护用于指令和数据操作数的单独的高速缓存。高速缓存中的信息 可被维护为相邻的字节,所述字节位于被称为高速缓存块或高速缓存线(或 简称为线)的整数界限上。模型可提供EXTRACT CACHE ATTRIBUTE (提取高速缓存属性)指令,其返回高速缓存线的字节大小。模型也可提 供PREFETCH DATA(预取数据)和PREFETCH DATA RELATIVE LONG(预取较长数据)指令,其实现存储到数据或指令高速缓存中的预 取,或数据从高速缓存的释放。

存储器被视为位的长水平串。对于大部分操作来说,以从左到右的顺 序进行对存储器的访问。位串被细分为八个位的单位。八位单位被称为字 节,其是所有信息格式的基本构件。存储器中的每个字节位置由唯一的非 负整数标识,该非负整数是该字节位置的地址,或简称为字节地址。相邻 的字节位置具有连续的地址,在左边从0开始且以从左到右的顺序进行。 地址是无符号二进制整数,且是24、31或64位。

信息一次一个字节或一组字节地在存储器和CPU或通道子系统之间 传递。除非另有指定,例如在中,存储器中的一组字节由 该组的最左边的字节寻址。组中的字节的数量可由将被执行的操作暗示或 显式地指定。当在CPU操作中使用时,一组字节被称为字段。在字节的 每个组内,例如在中,位以从左到右的顺序被编号。在 中,最左边的位有时候被称为“高阶”位且最右边的位被 称为“低阶”位。但是,位数不是存储器地址。仅字节可被寻址。为了操 作存储器中的字节的单个位,访问整个字节。字节上的位从左到右被编号 为0到7(例如在中)。地址中的位被编号为对于24位地 址的8-31或40-63,或者对于31位地址的1-31或33-63;它们被编号为对 于64位地址的0-63。在多个字节的任何其他的固定长度的格式中,构成 格式的位从0开始被连续编号。为了错误检测,且优选地为了校正,一个 或多个校验位可与每一个字节或一组字节一起被传递。这样的校验位由机 器自动生成且不能被程序直接控制。存储容量以字节的数量来表示。当存 储器操作数字段的长度由指令的操作码暗示时,字段被称为具有固定长度, 其可以是一个、两个、四个、八个或十六个字节。可为某些指令暗示更大 的字段。当存储器操作数字段的长度没有被暗示,而是被显式地表示时, 该字段被称为具有可变长度。可变长度的操作数可以一个字节的增量(或 者对于一些指令,以两个字节倍数或其他倍数)在长度上可变。当信息被 放在存储器中时,仅替换被包括在指定的字段中的哪些字节位置的内容, 即使到存储器的物理路径的宽度可能大于正被存储的字段的长度。

某些信息单元位于存储器中的整数界限上。对于信息单元,当其存储 器地址是以字节表示的单元长度的倍数时,界限被称为是整数的。特殊的 名称被给予整数界限上的2、4、6、8和16字节的字段。半字是两字节边 界上的一组两个连续的字节,且是指令的基本构件。字是四字节边界上的 一组四个连续的字节。双字是八字节边界上一组八个连续的字节。四倍长 字(quadword)是16字节边界上的一组16个连续的字节。当存储器地址 指定半字、字、双字和四倍长字时,地址的二进制表示分别包括一个、两 个、三个或四个最右边的零位。指令将位于二字节整数边界上。大多数指 令的存储器操作数不具有界限对准要求。

在为指令和数据操作数实现单独的高速缓存的设备上,如果程序在高 速缓存线中存储且指令被随后从该高速缓存线获取,可经历显著的延迟, 不管该存储是否改变随后被获取的指令。

在一个实施例中,本发明可被软件(有时候被称为许可的内部代码、 固件、微代码、毫代码、微微代码(pico-code)等,其任何一个都将符合 本发明)实施。参考图18,体现本发明的软件程序代码可典型地由主系统 5000的处理器从长期存储介质设备5011(诸如CD-ROM驱动器、磁带驱 动或硬盘驱动器)访问。软件程序代码可体现在与数据处理系统一起使用 的各种已知介质(诸如软磁盘、硬盘驱动或CD-ROM)中的任何一个上。 代码可在这样的介质上被分发,或可从一个计算机系统的计算机存储器 5002或存储设备通过网络5010被分发给其他计算机系统的用户,以由这 样的其他系统的用户使用。

软件程序代码包括操作系统,其控制各种计算机组件和一个或多个应 用程序的功能和交互。程序代码通常可从存储介质设备5011调页到相对更 高速的计算机存储器5002,在此它对于处理器5001是可用的。用于在存 储器中、物理介质上和/或体现软件程序代码或经由网络分发软件代码的技 术和方法是熟知的,且不会在此被进一步讨论。当程序代码被创建并存储 在有形介质(包括但不限于电子存储模块(RAM)、闪存、光盘(CD)、 DVD、磁带等)上时,其经常被称为“计算机程序产品”。计算机程序产 品介质典型地可由优选地位于计算机系统中的处理电路读取以由处理电路 执行。

图19示出了可在其中实施本发明的代表性工作站或服务器硬件系统。 图19的系统5020包括代表性基本计算机系统(base computer system) 5021,诸如个人计算机、工作站或服务器,包括可选的外围设备。根据已 知技术,基本计算机系统5021包括一个或多个处理器5026以及被用于连 接并使能处理器5026和系统5021的其他组件之间的通信的总线。总线将 处理器5026连接到存储器5025以及可包括例如硬盘驱动器(例如,包括 磁介质、CD、DVD和闪存中的任何一个)或磁带驱动器的长期存储器5027。 系统5021也可包括用户接口适配器,其经由总线将微处理器5026连接到 一个或多个接口设备,诸如键盘5024、鼠标5023、打印机/扫描仪5030和 /或其他接口设备,其可以是任何用户接口设备,诸如触摸敏感屏、数字化 输入垫(digitized entry pad)等。总线也可经由显示适配器将诸如LCD 屏幕或监视器的显示设备5022连接到微处理器5026。

系统5021可通过能与网络5029通信5028的网络适配器与其他计算机 或计算机网络通信。示例性网络适配器是通信通道、令牌环网、以太网或 调制解调器。或者,系统5021可使用诸如CDPD(蜂窝数字分组数据) 卡的无线接口来通信。系统5021可与局域网(LAN)或广域网(WAN) 中的这样的其他计算机关联,或系统5021可以是与另一个计算机的客户机 /服务器安排中的客户机等。所有这些配置以及合适的通信硬件和软件在本 领域中是已知的。

图20示出了其中可实施本发明的数据处理网络5040。数据处理网络 5040可包括多个单独的网络,诸如无线网和有线网,其每个可包括多个单 独的工作站5041、5042、5043、5044。此外,本领域技术人员将理解,可 包括一个或多个LAN,其中LAN可包括多个耦合到主处理机的智能工作 站。

仍然参考图20,网络也可包括大型计算机或服务器,诸如网关计算机 (客户机服务器5046)或应用服务器(远程服务器5048,其可访问数据储 存库,且也可直接从工作站5045被访问)。网关计算机5046用作到每个 单独网络的进入点。当将一个连网协议连接到另一个时,需要网关。网关 5046可通过通信链路优选地耦合到另一个网络(例如因特网5047)。也可 使用通信链路将网关5046直接耦合到一个或多个工作站5041、5042、5043、 5044。可以利用可从国际商业机器公司获得的IBM eServerTMSystem服 务器来实现网关计算机。

同时参考图19和20,可体现本发明的软件编程代码可被系统5020的 处理器5026从诸如CD-ROM驱动器或硬盘驱动器的长期存储介质5027 访问。软件编程代码可被体现在与数据处理系统一起使用的各种已知介质 (诸如软盘、硬盘驱动器或CD-ROM)中的任一个上。代码可在这样的介 质上被分发,或从一个计算机系统的存储器或存储设备通过网络被分发到 其他计算机系统的用户5050、5051,以供这样的其他系统的用户使用。

或者,编程代码可体现在存储器5025中,且由处理器5026使用处理 器总线访问。这样的编程代码包括操作系统,其控制各种计算机组件和一 个或多个应用程序5032的功能和交互。程序代码通常从存储介质5027调 页到高速存储器5025,在此它可用于由处理器5026进行处理。用于在存 储器中、在物理介质上体现软件编程代码和/或经由网络分发软件代码的技 术和方法是公知的,且不会在此进一步讨论。程序代码,当其被创建且在 有形介质(包括但不限于电子存储模块(RAM)、闪存、光盘(CD)、 DVD、磁带等)上存储时,通常被称为“计算机程序产品”。计算机程序 产品介质典型地可以被优选地位于计算机系统中的处理电路读取以由处理 电路执行。

最容易被处理器使用的高速缓存(通常比处理器的其他高速缓存更快 更小)是最低级(L1或级别1)高速缓存,且主存储(主存储器)是最高 级高速缓存(如果有三个级别的话是L3)。最低级高速缓存经常被分为保 持将被执行的机器指令的指令缓存(I-高速缓存),和保持数据操作数的 数据高速缓存(D-高速缓存)。

参考图21,为处理器5026示出了示例性处理器实施例。典型地,使 用一个或多个级别的高速缓存5053来缓冲存储器块,以便改善处理器性 能。高速缓存5053是高速缓冲器,其保持很可能被使用的存储器数据的高 速缓存线。典型的高速缓存线是64、128或256字节的存储器数据。通常 使用单独的高速缓存以用于缓存指令而不是缓存数据。高速缓存一致性(存 储器和高速缓存中的线的副本的同步)通常由本领域中熟知的各种“窥探” 算法提供。处理器系统的主存储器5025通常被称为高速缓存。在具有4 个级别的高速缓存5053的处理器系统中,主存储器5025有时候被称为级 别5(L5)高速缓存,因为它典型地更快,且仅保持可被计算机系统使用 的非易失性存储器(DASD、磁带等)的一部分。主存储器5025可“高速 缓存”由操作系统向主存储器5025调页入或从其调页出的数据页。

程序计数器(指令计数器)5061保持跟踪将被执行的当前指令的地址。 处理器中的程序计数器是64位的,且可被截短为31或24 位以支持先前的寻址界限。程序计数器典型地体现在计算机的PSW(程序 状态字)中,这样它可在上下文转换中持续。因此,具有程序计数器值的 进行中的程序可被例如操作系统中断(从程序环境到操作系统环境的上下 文转换)。当程序不活动时,程序的PSW维持程序计数器值,且在操作 系统执行时,操作系统的(PSW中的)程序计数器被使用。典型地,程序 计数器以等于当前指令的字节数的量增量。RISC(精简指令集计算)指令 典型地是固定长度,而CISC(复杂指令集计算)指令典型地是可变长度。 的指令是具有长度为2、4或6字节的CISC指令。程 序计数器5061被例如上下文转换操作或分支指令的分支采取操作修改。在 上下文转换操作中,当前的程序计数器值与关于正被执行的程序的其他状 态信息(诸如条件码)一起被保存在程序状态字中,且新程序计数器值被 载入并指向将被执行的新程序模块的指令。执行分支采取操作,以通过将 分支指令的结果加载到程序计数器5061中而允许程序进行决定或在程序 内循环。

典型地,使用指令获取单元5055代表处理器5026获取指令。获取单 元可获取“下一序列指令”、分支采取指令的目标指令或上下文转换后的 程序的第一指令。现在的指令获取单元通常使用预取技术基于被预取的指 令将被使用的可能性来推测性地预取指令。例如,获取单元可获取16字节 的指令,其包括下一顺序指令以及进一步的顺序指令的额外字节。

获取的指令随后被处理器5026执行。在一实施例中,获取的指令被传 递给获取单元的分派单元5056。分派单元解码指令并将关于解码的指令的 信息转送给合适的单元5057、5058、5060。执行单元5057将典型地从指 令获取单元5055接收关于解码的算术指令的信息,并将根据指令的操作码 对操作数执行算术操作。优选地从存储器5025、架构寄存器5059或从正 被执行的指令的立即字段(immediate field)向执行单元5057提供操作数。 执行的结果,当被存储时,被存储在存储器5025、寄存器5059或其他机 器硬件(诸如控制寄存器、PSW寄存器等)中。

处理器5026典型地具有一个或多个用于执行指令的功能的单元5057、 5058、5060。参考图22A,执行单元5057可通过接口逻辑5071与架构通 用寄存器5059、解码/分派单元5056、加载存储单元5060和其他5065处 理器单元通信。执行单元5057可使用几个寄存器电路5067、5068、5069 来保持算术逻辑单元(ALU)5066将操作的信息。ALU执行诸如加减乘 除的算术操作,以及诸如和、或以及异或(XOR)、旋转和移位的逻辑运 算。优选地,ALU支持依赖于设计的专门操作。其他电路可提供其他架构 工具5072,例如包括条件码和恢复支持逻辑。典型地,ALU操作的结果 被保持在输出寄存电路5070中,该输出寄存器电路可将结果转送到多种其 他处理功能。有许多处理器单元安排,本说明书仅旨在提供对一个实施例 的代表性理解。

例如,ADD指令将在具有算术和逻辑功能的执行单元5057中被执行, 而例如浮点指令将在具有专用浮点能力的浮点执行中被执行。优选地,执 行单元通过在操作数上执行操作码定义的功能在由指令标识的操作数上操 作。例如,ADD指令可被执行单元5057在由指令的寄存器字段标识的两 个寄存器5059中发现的操作数上执行。

执行单元5057对两个操作数执行算术加法,并在第三操作数中存储结 果,其中第三操作数可以是第三寄存器或两个源寄存器中的一个。执行单 元优选地利用算术逻辑单元(ALU)5066,其能执行多种逻辑功能,诸如 移位、旋转、和、或以及异或,以及多种代数函数,包括加减乘除中的任 何一个。一些ALU5056被设计为用于标量运算,且有些用于浮点。根据 架构,数据可以是大端(big endien)(其中最低有效字节位于最高字节地 址)或小端(little endien)(其中最低有效字节位于最低字节地址)。IBM 是大端。根据架构,带符号字段可以是符号和幅度、1的 补码或2的补码。2的补码数是有利的,其在于ALU不需要设计减法能力, 因为不管是2的补码中的负值还是正值,都仅要求ALU中的加法。数字 通常以速记描述,其中12位的字段定义了4096字节块的地址,且通常被 描述为例如4Kbyte(千字节)块。

参考图22B,用于执行分支指令的分支指令信息典型地被发送到分支 单元5058,该分支单元经常使用诸如分支历史表5082的分支预测算法, 在其他条件运算完成前预测分支结果。在条件运算完成前,当前分支指令 的目标将被获取并推测性地执行。当条件运算完成时,基于条件运算的条 件和推测的结果,推测性执行的分支指令或被完成或被丢弃。典型的分支 指令可测试条件码,以及如果条件码满足分支指令的分支要求,分支到目 标地址,分支地址可基于若干数被计算,所述数包括例如在寄存器字段或 是指令的立即字段中找到的数。分支单元5058可利用具有多个输入寄存器 电路5075、5076、5077和一个输出寄存器电路5080的ALU 5074。分支 单元5058可与例如通用寄存器5059、解码分派单元5056或其他电路5073 通信。

一组指令的执行可由于多个原因中断,所述原因包括例如由操作系统 发起的上下文转换、引起上下文转换的程序异常或错误、引起上下文转换 的I/O中断信号或多个程序(在多线程环境中)的多线程活动。优选地, 上下文转换动作保存关于当前执行的程序的状态信息,且随后加载关于正 被调用的另一个程序的状态信息。状态信息可被存储在例如硬件寄存器或 存储器中。状态信息优选地包括指向将被执行的下一个指令的程序计数器 值、条件码、存储器转换信息和架构寄存器内容。上下文转换活动可被硬 件电路、应用程序、操作系统程序或固件代码(微代码、微微代码或许可 内部码(LIC))单独地或其组合实现。

处理器根据指令定义的方法而访问操作数。指令可使用指令的一部分 的值提供立即操作数,可提供一个或多个寄存器字段,其显式地指向通用 寄存器或专用寄存器(例如浮点寄存器)。指令可利用由操作码字段确定 的暗示的寄存器作为操作数。指令可利用用于操作数的存储器位置。可由 寄存器、立即字段或寄存器和立即字段的组合提供操作数的存储器位置, 如由长位移工具(facility)所例示的,其中该指令定义了 基寄存器、索引寄存器和立即字段(位移字段),它们加到一起,以提供 例如存储器中的操作数的地址。此处的位置典型地意味着主存储器(主存 储设备)中的位置,除非另外指明。

参考图22C,处理器使用加载/存储单元5060访问存储器。加载/存储 单元5060可以通过获取存储器5053中的目标操作数的地址并将操作数加 载到寄存器5059或其他存储器5053位置中,来执行加载操作,或可以通 过获取存储器5053中的目标操作数的地址并将从寄存器5059或另一个存 储器5053位置获得的数据存储在存储器5053中的目标操作数位置,来执 行存储操作。加载/存储单元5060可以是推测性的,且可以相对于指令顺 序来说无序的顺序访问存储器,但是加载/存储单元5060将向程序维持指 令按顺序执行的外观。加载/存储单元5060可与通用寄存器5059、解密/ 分派单元5056、高速缓存/存储器接口5053或其他元件5083通信,且包 括各种寄存器电路、ALU 5085和控制逻辑5090以计算存储器地址并提供 流水线顺序以使操作保持次序。一些操作可不按顺序,但加载/存储单元提 供功能以使不按顺序执行的操作对程序看起来如已按顺序执行一样,如本 领域所熟知的。

优选地,应用程序“看到的”地址通常被称为虚拟地址。虚拟地址有 时候被称为“逻辑地址”和“有效地址”。这些虚拟地址之所以虚拟,在 于它们由多种动态地址转换(DAT)技术中的一种重定向到物理存储器位 置,所述动态地址转换技术包括但不限于简单地给用偏移值给虚拟地址加 前缀、经由一个或多个转换表转换虚拟地址,所述转换表优选地包括至少 一个段表和页表(单独地或组合地),优选地,段表具有指向页表的项。 在中,提供转换分级结构,包括区域第一表、区域第二表、 区域第三表、段表和可选的页表。转换表的性能通常通过利用转换后备缓 冲器(TLB)被改善,该转换后备缓冲器包括将虚拟地址映射到相关的物 理存储位置的项。当DAT使用转换表转换虚拟地址时,创建项。于是, 虚拟地址的随后使用可利用快的TLB的项,而不是慢的顺序转换表访问。 TLB内容可由包括LRU(最少最近使用的)多个替换算法来管理。

在处理器是多处理器系统的处理器的情况下,每个处理器具有保持共 享资源的责任,所述共享资源诸如I/O、高速缓存、TLB和存储器,它们 互锁以实现一致性。典型地,“窥探”技术将被用于维持高速缓存一致性。 在窥探环境中,每个高速缓存线可被标记为正处于共享状态、独占状态、 改变状态、无效状态等中的一个,以便有助于共享。

I/O单元5054(图21)向处理器提供用于附加到例如包括磁带、盘、 打印机、显示器和网络的外围设备的装置。I/O单元通常由软件驱动器向 计算机程序呈现。在诸如来自的的大型计算机中,通道适 配器和开放系统适配器是提供操作系统和外围设备之间的通信的大型计算 机的I/O单元。

而且,其他类型的计算环境可受益于本发明的一个或多个方面。作为 例子,环境可包括仿真器(例如,软件或其他仿真机制),其中特定架构 (包括例如指令执行、诸如地址转换的架构功能、以及架构寄存器)或其 子集被仿真(例如,在具有处理器和存储器的本机计算机系统中)。在这 样的环境中,仿真器的一个或多个仿真功能可实施本发明的一个或多个方 面,即使执行仿真器的计算机可具有与正被仿真的能力不同的架构。作为 一个例子,在仿真模式中,解码正被仿真的特定指令或操作,且建立合适 的仿真功能以实施单个指令或操作。

在仿真环境中,主计算机包括例如存储器以存储指令和数据;指令获 取单元以从存储器获取指令,且可选地,提供用于获取的指令的本地缓冲; 指令解码单元以接收获取的指令并确定已被获取的指令的类型;以及指令 执行单元以执行该指令。执行可包括将数据从存储器加载到寄存器;从寄 存器将数据存储回存储器;或执行如由解码单元确定的某些类型的算术或 逻辑运算。在一个例子中,每个单元在软件中实现。例如,被所述单元执 行的操作被实现为仿真器软件中的一个或多个子例程。

更具体地,在大型计算机中,程序员(通常是如今的“C”程序员) 一般通过编译器应用使用架构机器指令。存储在存储介质中的这些指令可 以在服务器中本机地执行,或在执行其他架构的机 器中执行。它们可在现有的和未来的大型计算机服务器以及的 其他机器(例如,Power Systems服务器和System服务器)中被仿真。 它们可在使用由AMDTM等制造的硬件的各种机器上运行 Linux的机器中被执行。除了在下的该硬件上执行,Linux 也可被用于这样的机器,其使用由Hercules(见www.hercules-390.org/) 或FSI(Fundamental Software,Inc)(见www.funsoft.com/)提供的仿真, 其中,一般来说执行是在仿真模式中。在仿真模式中,仿真软件由本机处 理器执行以仿真被仿真处理器的架构。

本机处理器典型地执行仿真软件,其包括固件或本机操作系统,以执 行被仿真处理器的仿真程序。仿真软件负责获取并执行被仿真处理器架构 的指令。仿真软件维护仿真的程序计数器以保持跟踪指令界限。仿真软件 可一次获取一个或多个仿真的机器指令,并将所述一个或多个仿真的机器 指令转换为对应的本机机器指令组,以由本机处理器执行。这些转换的指 令可被高速缓存,这样可完成更快的转换。尽管,仿真软件将维持被仿真 的处理器架构的架构规则以保证为被仿真处理器编写的操作系统和应用正 确操作。而且,仿真软件将提供由被仿真的处理器架构确定的资源,包括 但不限于控制寄存器、通用寄存器、浮点寄存器、例如包括段表和页表的 动态地址转换功能、中断机制、上下文转换机制、日中时间(TOD)时钟 和到I/O子系统的架构接口,这样被设计为在被仿真处理器上运行的操作 系统或应用程序可在具有仿真软件的本机处理器上运行。

解码正被仿真的特定指令,且调用子例程以执行该单个指令的功能。 仿真被仿真处理器的功能的仿真软件功能例如在“C”子例程或驱动器中 实现,或由提供用于特定硬件的驱动器的其他方法实现,如本领域技术人 员在理解优选实施例的描述后将理解的。包括但不限于Beausoleil等人的 标题为“Multiprocessor for Hardware Emulation”的美国专利证书号 5,551,013;以及Scalzi等人的标题为“Preprocessing of Stored Target Routines for Emulating Incompatible Instructions on a Target Processor” 的美国专利证书号6,009,261;以及Davidian等人的标题为“Decoding Guest Instruction to Directly Access Emulation Routines that Emulate the Guest Instructions”的美国专利证书号,5,574,873;以及Gorishek等人的标题 为“Symmetrical Multiprocessing Bus and Chipset Used for Coprocessor Support Allowing Non-Native Code to Run in a System”的美国专利证书号 6,308,255;以及Lethin等人的标题为“Dynamic Optimizing Object Code Translator for Architecture Emulation and Dynamic Optimizing Object Code Translation Method”的美国专利证书号6,463,582,;以及Eric Traut 的标题为“Method for Emulating Guest Instructions on a Host Computer Through Dynamic Recompilation of Host Instructions”的美国专利证书号 5,790,825;以及许多其他专利的各种软件和硬件仿真专利示出各种已知的 方式来实现针对可为本领域技术人员获得的目标机器对为不同机器进行架 构设计的指令格式的仿真。

在图23中,提供了仿真主计算机系统5092的例子,其仿真主架构的 主计算机系统5000’。在仿真主计算机系统5092中,主处理器(CPU) 5091是仿真主处理器(或虚拟主处理器),并包括具有与主计算机5000’ 的处理器5091不同的本机指令集架构的仿真处理器5093。仿真主计算机 系统5092具有可被仿真处理器5093访问的存储器5094。在示例性实施例 中,存储器5094被分区为主计算机存储器5096部分和仿真例程5097部分。 根据主计算机架构,主计算机存储器5096对于仿真主计算机5092的程序 来说是可用的。仿真处理器5093执行与被仿真处理器5091不同架构的架 构指令集的本机指令(即来自仿真程序处理器5097的本机指令),且可通 过使用从顺序和访问/解码例程获得的一个或多个指令从主计算机存储器 5096中的程序访问用于执行的主机指令,所述顺序和访问/解码例程可解 码访问的主机指令,以确定用于仿真被访问的主机指令的功能的本机指令 执行例程。被定义用于主计算机系统5000’架构的其他工具可被架构工具 例程仿真,所述架构工具例程包括诸如通用寄存器、控制寄存器、动态地 址转换和I/O子系统支持和处理器高速缓存等工具。仿真例程也可利用在 仿真处理器5093中可获得功能(诸如通用寄存器和虚拟地址的动态转换) 以改善仿真例程的性能。也可提供专用硬件和卸载引擎以辅助处理器5093 来仿真主计算机5000’的功能。

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

所附权利要求书中的所有装置或步骤加功能元件的相应结构、材料、 操作以及等价物,如有的话,旨在包括用于结合如特别要求保护的其他所 要求保护的元件来执行所述功能的任何结构、材料或操作。呈现本发明的 说明是为了示出和描述的作用,但不是穷尽性的或将本发明限制于所公开 的形式。许多修改和变化对本领域普通技术人员来说是明显的,且不脱离 本发明的范围和精神。选择和描述实施例是为了最佳地解释本发明的原理 和实际应用,并使得本领域普通技术人员能针对适于考虑的特定用途的具 有各种修改的各种实施例理解本发明。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号