首页 / 专利库 / 电脑零配件 / 计算机系统 / 管理与硬件事件关联的处理

管理与硬件事件关联的处理

阅读:475发布:2023-03-26

专利汇可以提供管理与硬件事件关联的处理专利检索,专利查询,专利分析的服务。并且促进对事件(诸如与适配器关联的错误)的检测、通知和/或处理。 硬件 检测错误,将一个或多个适配器置于错误状态以避免到/从适配器的 访问 ,并向 操作系统 通知该事件。,下面是管理与硬件事件关联的处理专利的具体信息内容。

1.一种管理计算环境中的事件的方法,包括下列步骤:
检测与适配器关联的事件;
响应于检测到所述事件,阻止指令访问所述适配器;
固件访问错误日志项并解码来自日志的错误类型从而确定所述事件的错误类型;
由固件创建关于错误类型的合适的PCI功能错误事件;
操作系统通知被检测的事件;以及
响应于执行由操作系统发布的存储事件信息命令,从所述PCI功能错误事件中获得关于错误的事件信息,从而获得识别所述适配器的功能句柄和描述所述事件的PCI事件代码。
2.如权利要求1所述的方法,其中,所述事件与多个适配器关联,每个适配器具有独立的错误日志。
3.如权利要求1所述的方法,其中,所述通知包括采用信道报告字(CRW)。
4.如权利要求1所述的方法,其中,所述阻止包括在与所述适配器关联的设备表项中设置一个或多个指示器。
5.如权利要求1所述的方法,其中,所述方法进一步包括:
在错误向量中设置错误向量指示器以指示错误;以及
向执行操作系统的处理单元的固件提供注意中断。
6.如权利要求5所述的方法,其中,所述方法进一步包括:
确定是否要记录关于所述错误的数据;以及
响应于指示要记录数据的确定,记录所述数据。
7.如权利要求5所述的方法,其中,所述方法进一步包括响应于所述注意中断,由所述固件在与所述适配器关联的功能表项中设置一个或多个功能指示器以阻止到所述适配器的访问。
8.如权利要求7所述的方法,其中,所述方法进一步包括:
确定是否要由计算环境中除了操作系统的组件执行恢复;以及
响应于指示要执行恢复的确定,执行恢复。
9.如权利要求8所述的方法,其中,所述方法进一步包括:
响应于至少尝试执行恢复,生成错误事件;
将所述错误事件呈现给管理所述操作系统的管理程序;
基于所述错误事件确定恢复是否成功;以及
响应于确定恢复成功,重新使能所述适配器的一个或多个操作。
10.如权利要求1所述的方法,其中,所述方法进一步包括:
响应于检测到所述事件,确定所述事件不是关于所述适配器的;
响应于所述事件不是关于所述适配器的,确定提供所述事件的硬件组件;以及基于所述硬件组件,识别要置于错误状态的适配器。
11.如权利要求10所述的方法,其中,所述方法进一步包括:
基于所述硬件组件,识别要被置于错误状态的多个适配器;以及
将所述多个适配器置于错误状态。
12.一种用于管理计算环境中的事件的计算机系统,所述计算机系统包括:
存储器;以及
与所述存储器通信的处理器;
用于检测与适配器关联的事件的检测器;
响应于检测到所述事件,用于阻止指令访问所述适配器的阻止器;
用于由固件访问错误日志项并解码来自日志的错误类型从而确定所述事件的错误类型的装置;
用于由固件创建关于错误类型的合适的PCI功能错误事件的装置;
用于向操作系统通知被检测的事件的通知器;以及
响应于执行由操作系统发布的存储事件信息命令,从所述PCI功能错误事件中获得关于错误的事件信息,从而获得识别所述适配器的功能句柄和描述所述事件的PCI事件代码的功能句柄获得器。
13.一种用于管理计算环境中的事件的计算机系统,所述计算机系统包括:
存储器;以及
与所述存储器通信的处理器,其中所述计算机系统被配置成执行方法,所述方法包括:
检测与适配器关联的事件;
响应于检测到所述事件,阻止指令访问所述适配器;
由固件访问错误日志项并解码来自日志的错误类型从而确定所述事件的错误类型;
由固件创建关于错误类型的合适的PCI功能错误事件;
向操作系统通知被检测的事件;以及
响应于执行由操作系统发布的存储事件信息命令,从所述PCI功能错误事件中获得关于错误的事件信息,从而获得识别所述适配器的功能句柄和描述所述事件的PCI事件代码。
14.如权利要求13所述的计算机系统,其中,所述事件与多个适配器关联,每个适配器具有独立的错误日志。
15.如权利要求13所述的计算机系统,其中,所述通知包括采用信道报告字(CRW)。
16.如权利要求13所述的计算机系统,其中,所述方法进一步包括:
在错误向量中设置错误向量指示器以指示错误;以及
向执行操作系统的处理单元的固件提供注意中断。
17.如权利要求16所述的计算机系统,其中,所述方法进一步包括响应于所述注意中断,由所述固件在与所述适配器关联的功能表项中设置功能错误指示器以阻止到所述适配器的访问。
18.如权利要求17所述的计算机系统,其中,所述方法进一步包括:
确定是否要由计算环境中除了操作系统的组件执行恢复;以及
响应于指示要执行恢复的确定,执行恢复。
19.如权利要求18所述的计算机系统,其中,所述方法进一步包括:
响应于至少尝试执行恢复,生成错误事件;
将所述错误事件呈现给管理所述操作系统的管理程序;
基于所述错误事件确定恢复是否成功;以及
响应于确定恢复成功,重新使能所述适配器的一个或多个操作。
20.如权利要求13所述的计算机系统,其中,所述方法进一步包括:
响应于检测到所述事件,确定所述事件不是关于所述适配器的;
响应于所述事件不是关于所述适配器的,确定提供所述事件的硬件组件;以及基于所述硬件组件,识别要被置于错误状态的适配器。

说明书全文

管理与硬件事件关联的处理

背景技术

[0001] 本发明一般涉及管理与计算环境中的硬件组件的事件关联的处理,且更具体而言,涉及促进适配器错误事件的通知和处理。
[0002] 在包括诸如适配器的外部硬件的计算环境中,从适配器产生的错误被报告给操作系统。该错误报告是设备特定的,并且范围从基本报告到复杂报告。直到错误被报告并由操作系统处理,到和/或从适配器的访问是可行的。这可能影响数据完整性。
[0003] 响应于接收与错误相关的报告,操作系统将适配器置于错误状态,并处理该错误。这种对错误的处理也是设备特定的。
[0004] Austen等人在2003年3月20日公开的题为“Method and Apparatusfor Filtering Error Logs in a Logically Partitioned Data ProcessingSystem”(用于过滤逻辑分区的数据处理系统中的错误日志的方法和装置)的美国公开No.2003/0056155A1描述了一种方法、装置和计算机实现的指令,其用于将错误报告给多个分区。响应于检测到错误日志,识别错误日志的错误类型。如果错误日志被识别为区域性错误日志,则做出接收错误日志的每个分区的标识。然后,错误日志被报告给已识别为接收错误日志的每个分区。
[0005] Marisetty等人在2009年6月9日发布的题为“OS and FirmwareCoordinated Error Handling Using Transparent Firmware Intercept andFirmware Services”(使用透明固件拦截和固件检修(service)的OS和固件协调的错误处理)的美国专利No.7,546,487描述了使用协调的操作系统(OS)和固件检修执行硬件错误处理的方法和架构。在一个方面,提供固件接口以使得OS能够访问固件错误处理服务。这样的服务使得OS能够访问可能不能经由平台处理器或者通过其它传统的方法直接访问的关于平台硬件错误的数据。
[0006] 还公开了用于拦截对硬件错误事件的处理以及在尝试使用基于OS的服务来检修错误之前引导对固件错误处理服务的控制的技术。固件检修可使用带外通信信道校正硬件错误和/或日志错误数据,其可在随后被OS访问或提供给远程管理服务器。根据另一方面,可以以对OS透明的方式执行固件拦截和检修。

发明内容

[0007] 根据本发明的方面,在操作系统接收错误通知之前,将具有与其关联的错误的适配器置于错误状态中。此外,因为使用公共基础设施来报告错误,该通知是独立于设备的。
[0008] 通过提供用于管理计算环境中的事件的计算机程序产品,克服了现有技术缺陷并提供了优势。计算机程序产品包括处理电路可读并存储由处理电路执行以执行方法的指令的计算机可读存储介质。该方法包括,例如,检测与适配器关联的事件;响应于检测到事件,阻止指令访问适配器;向操作系统通知检测到的事件;以及响应于执行由操作系统发布的存储事件信息命令,获得识别适配器的功能句柄和描述事件的PCI事件代码。
[0009] 此处还描述和要求保护涉及本发明的一个或多个方面的方法和系统。
[0010] 通过本发明的技术实现了附加的特征和优势。此处详细描述了本发明的其它实施例和方面,并将其考虑作为要求保护的本发明的一部分。附图说明
[0011] 仅作为示例,现在将参考附图描述本发明的优选实施例,在附图中:
[0012] 图1示出了包含并使用本发明的一个或多个方面的计算环境的一个实施例;
[0013] 图2A示出了根据本发明的方面的关于图1中的计算环境的输入/输出(I/O)集线器的更多细节;
[0014] 图2B示出了根据本发明的方面使用的错误向量的一个示例;
[0015] 图2C示出了根据本发明的方面使用的功能表项的一个示例;
[0016] 图2D示出了根据本发明的方面使用的错误日志的一个示例;
[0017] 图3A-3D示出了根据本发明的方面的执行错误检测、通知和处理的逻辑的一个实施例;
[0018] 图4A示出了根据本发明的方面使用的修改PCI功能控制指令的一个实施例;
[0019] 图4B示出了根据本发明的方面的由图4A中的修改PCI功能控制指令所使用的字段的一个实施例;
[0020] 图4C示出了根据本发明的方面的由图4A的修改PCI功能控制指令使用的另一个字段的一个实施例;
[0021] 图4D示出了根据本发明的方面而使用的功能信息(FIB)的内容的一个实施例;
[0022] 图5示出了根据本发明的方面,与修改PCI功能控制指令关联的逻辑的一个实施例;
[0023] 图6示出了根据本发明的方面,与可由修改PCI功能控制指令指定的重置错误状态指示操作有关的逻辑的一个实施例;
[0024] 图7示出了根据本发明的方面,与可由修改PCI功能控制指令指定的重置加载/存储阻止指示操作有关的逻辑的一个实施例;
[0025] 图8示出了包含本发明的一个或多个方面的计算机程序产品的一个实施例;
[0026] 图9示出了包含并使用本发明的一个或多个方面的主机计算机系统的一个实施例;
[0027] 图10示出了包含并使用本发明的一个或多个方面的计算机系统的其它示例;
[0028] 图11示出了包括包含并使用本发明的一个或多个方面的计算机网络的计算机系统的另一示例;
[0029] 图12示出了包含并使用本发明的一个或多个方面的计算机系统的各个元件的一个实施例;
[0030] 图13A示出了包含并使用本发明的一个或多个方面的图12中的计算机系统的执行单元的一个实施例;
[0031] 图13B示出了包含并使用本发明的一个或多个方面的图12中的计算机系统的分支单元的一个实施例;
[0032] 图13C示出了包含并使用本发明的一个或多个方面的图12中的计算机系统的加载/存储单元的一个实施例;
[0033] 图14示出了包含并使用本发明的一个或多个方面的仿真(emulated)主机计算机系统的一个实施例。

具体实施方式

[0034] 根据本发明的方面,促进了事件(诸如适配器错误事件)的检测、通知和/或处理。硬件检测事件,并将该事件通知给操作系统,操作系统关于该事件采取行动。在一个特定示例中,耦合到一个或多个适配器和处理单元的I/O集线器检测与适配器关联的错误,并将错误报告给处理单元的固件。I/O集线器和/或固件阻止到/从与错误关联的适配器的访问。此外,固件将错误报告给在处理单元上执行的操作系统,其可以处理关于错误的一个或多个方面。如这里所使用的,固件包括例如处理器的微代码、毫代码(millicode)和/或宏代码。
它包括例如用于实现更高级的机器码的硬件级的指令和/或数据结构。在一个实施例中,它包括例如专有(proprietary)代码,该专有代码典型地作为包括可信软件的微代码或特定于底层硬件的微代码而被交付,并控制操作系统访问系统硬件。
[0035] 进一步地,如这里所使用的,术语“适配器”包括任意类型的适配器(例如存储适配器、网络适配器、处理适配器、加密适配器、PCI适配器、其他类型的输入/输出适配器等)。在一个实施例中,适配器包括一个适配器功能。但是,在其他实施例中,适配器可包括多个适配器功能。本发明的一个或多个方面可以应用,不管适配器包含一个适配器功能或多个适配器功能。此外,在这里展示的例子中,适配器是与适配器功能(例如PCI功能)可互换地使用的,除非另外说明。
[0036] 在一个实施例中,到操作系统的报告是标准化的,即使对于适配器特定的错误。到操作系统的适配器特定的错误报告的标准化导致跨越适配器类型的适配器错误处理的简化。
[0037] 参考图1描述包含并使用本发明的一个或多个方面的计算环境的一个实施例。在一个例子中,计算环境100是由国际商业机器公司提供的System 服务器。System 服务器是基于由国际商业机器公司提供的 关于 的细节在 出版物中描述,该出版物的标题是“z/Architecture Principles of 
Operation”(z/Architecture操作原理),IBM出版号SA22-7832-07,2009年2月。
System 和 是位于纽约州阿蒙克的国际商业机器公司的注册商标。在
此使用的其他名字可以是国际商业机器公司或其他公司的注册商标、商标或产品名称。
[0038] 在一个示例中,计算环境100包括经由存储控制器106耦合到系统存储器104(也称为主存储器)的处理单元,诸如中央处理综合体102。存储控制器106从中央处理综合体接收读或写请求,并为中央处理综合体访问系统存储器。存储控制器106包括例如硬件,并用于仲裁到系统存储器的访问,以及保持存储器的一致性。该仲裁针对从中央处理综合体接收的请求执行,以及针对从一个或多个适配器110接收的请求执行。与中央处理单元类似,适配器向系统存储器104发布请求以获得到系统存储器的访问权限。
[0039] 适配器110是外围组件互连(PCI)或PCI Express(PCIe)适配器,其包括一个或多个PCI功能。PCI功能发出请求,该请求要求到系统存储器的访问。该请求经由一个或多个交换器(例如,PCIe交换器)114被路由到输入/输出集线器112(例如,PCI集线器)。在一个例子中,输入/输出集线器包括含有一个或多个状态机的硬件。输入/输出集线器经由I/O到存储器总线118耦合到存储控制器106。
[0040] 中央处理综合体102包括例如一个或多个分区或区段130(例如,逻辑分区LP1-LPn)、一个或多个中央处理器132(例如,CP1-CPm)以及管理程序(例如,逻辑分区管理器),下面对每一个进行介绍。
[0041] 每个逻辑分区130能够作为独立系统。即,如果需要,每个逻辑分区可以被独立地重置,最初加载操作系统或管理程序(诸如由位于纽约州阿蒙克的国际商业机器公司提供的 ),并以不同的程序操作。在逻辑分区中运行的操作系统、管理程序或者应用程序似乎具有对全部和完整系统的访问权限,但只有其一部分可用。硬件和许可内部码(也称为微代码或毫代码)的组合避免逻辑分区中的程序干扰不同的逻辑分区中的程序。这允许多个不同的逻辑分区以时间片方式在单个或多个物理处理器中操作。在该特定的示例中,每个逻辑分区具有可对于一个或多个逻辑分区不同的常驻操作系统136。在一个实施例中,操作系统136是由位于纽约州阿蒙克的国际商业机器公司提供的 或zLinux操作系统。 和 是位于纽约州阿蒙克的国际商业机器公司的注册商标。
[0042] 中央处理器132是分配给逻辑分区的物理处理器资源。例如,逻辑分区130包括一个或多个逻辑处理器,每个表示分配给分区的全部或一份(ashare of)物理处理器资源132。底层处理器资源可专用于该分区或者与另一分区共享。
[0043] 逻辑分区130由管理程序134管理,管理程序134由运行在处理器132上的固件实现。逻辑分区130和管理程序134每个包括一个或多个存在于与中央处理器关联的中央存储的各个部分中的程序。管理程序134的一个示例是由位于纽约州阿蒙克的国际商业机器公司提供的处理器资源/系统管理器(PR/SM)。
[0044] 尽管,在该示例中,描述了具有逻辑分区的中央处理综合体,但本发明的一个或多个方面可并入并由其他处理单元使用,包括没有被分区的单个或多个处理单元等。此处描述的中央处理综合体只是一个示例。
[0045] 参考图2A描述关于I/O集线器112的进一步细节。在一个示例中,I/O集线器112包括具有一个或多个设备表项202的设备表200。每个适配器或者适配器功能有一个设备表项(DTE)。即,在一个特定示例中,每个适配器有一个适配器功能,因此,每个适配器或适配器功能一个DTE。在其它实施例中,取决于需求和实现,可以每个适配器一个DTE,而不管适配器功能的数量,或者每个适配器功能一个DTE。此外,适配器可具有分派给其的多个系统存储器地址空间,因此,可以每个适配器的地址空间一个DTE。
[0046] 例如,使用到表的索引定位特定适配器的设备表项。该索引基于例如,与适配器关联的请求者标识符(RID)。每个设备表项202包括一个或多个字段204,每个字段包括与分派给DTE的适配器关联或者由分派给DTE的适配器使用的信息。在一个示例中,字段之一包括指定适配器是否在错误状态的错误指示器206,因此,作为示例,到系统存储器的直接存储器访问和适配器中断将被阻止;另一字段包括指示加载/存储响应是否要被阻止的加载/存储阻止指示器208。在进一步的示例中,可使用一个指示器阻止所有请求或者可使用其它指示器。取决于为适配器设置的操作参数(例如,用于地址转换、拦截、设置错误、设置加载/存储等的参数),DTE可包括更多、更少或不同的信息。
[0047] 在一个实施例中,与设备表项关联的是错误向量220,图2B中示出了其一个示例。错误向量220例如存储在安全存储器(例如,由固件管理的存储器)中,并包括多个指示器
222,每个指示器与适配器关联并指示其关联的适配器是否有问题。例如,每个适配器有一个指示器(例如,比特),当指示器开启时(例如,设置为1),指示诸如错误的问题。在一个示例中,错误向量的基地址存储在I/O集线器中,并使用该基地址加上用于定位DTE的索引来定位特定的指示器。
[0048] 与错误向量中的每个指示器关联的是用于避免本机PCI指令成功地访问在错误向量中指示的适配器的功能表项。在一个示例中,功能表项是存储在安全存储器中的功能表的项。使用例如与功能表项关联的功能句柄(下面描述的)的一部分来定位每个功能表项。句柄部分用作到功能表的索引,以定位功能表项。
[0049] 如图2C所示,每个功能表项240包括例如:
[0050] 识别与错误向量指示器关联的适配器的实例的功能句柄242。在一个示例中,功能句柄包括使能指示器,其指示句柄是否被使能;功能号,其识别适配器功能(这是静态标识符,并可用于索引到功能表以定位包括适配器功能的操作参数的项);以及实例号,其指定该句柄的特定实例;
[0051] 与DTE中的用于阻止中断(例如,消息信号中断(MSI))和直接存储器访问(DMA)的错误指示器关联的错误指示器244;以及
[0052] 用于阻止加载/存储(例如,PCI加载/存储)的加载/存储指示器246。
[0053] 下面进一步详细描述这些指示器的使用。
[0054] 此外,参考图2D,提供了也存储在安全存储器中的错误日志270。如图所示,安全存储器272包括错误向量222、一个或多个功能表项240、以及错误日志270。如下面所述,错误日志用于提供关于错误的进一步细节。在一个示例中,每个DTE有一个日志项。日志的基地址存储在I/O集线器中,使用基地址定位项,并使用索引定位DTE。
[0055] 参考图3A-3D描述检测错误、提供错误通知并使其被处理的逻辑的一个实施例。参考图3A,最初,作为示例,诸如I/O集线器的硬件检测错误,诸如PCI适配器错误或者PCI交换器错误,步骤300。例如,I/O集线器接收指示错误的事件或状态更新。作为示例,I/O集线器可检测在I/O集线器将从适配器接收的地址转换成可由系统存储器使用的地址期间发生的地址转换错误。
[0056] 然后做出该错误是否能被隔离到特定的DTE的确定,查询302。基于I/O集线器能否确定与错误关联的设备表项来做出该确定。即,I/O集线器是否具有可用于访问合适的设备表项的请求者id(RID)。如果I/O集线器可访问设备表项,则该错误可被隔离到特定适配器或者交换器内的总线。
[0057] 如果错误能被隔离到特定的设备表项,则将设备表项置于错误状态中。这包括使I/O集线器在设备表项中设置一个或多个指示器(例如,比特),步骤303。例如,可设置错误指示器206和/或加载/存储阻止指示器208。这使得来自与设置指示器关联的适配器的请求被阻止。
[0058] 此外,I/O集线器可以或者不能生成失败的错误日志。如果生成了错误日志,则在日志270中存储项,步骤304。该日志包括关于错误的信息。例如,如果这是地址转换错误,则指示该错误;提供该错误的细节,诸如其在执行第二级转换表获取时发生;以及其包括更新失效PCI地址等。
[0059] 此外,I/O集线器开启错误向量中与设备表项对应的的错误指示器,步骤306。这同样指示日志被存储。
[0060] 随后,或者如果错误不能被隔离到DTE,则I/O集线器向中央处理综合体的固件发送注意(attention)中断,步骤308。响应于接收该注意中断,固件分析中断信息,步骤310。做出错误能否被隔离到特定适配器(即,该DTE与适配器或交换器关联)的确定,查询312。在这种情况下,例如通过检查RID做出该确定。如由固件在其学习配置的总线行走(bus walk)期间创建的表或其它数据结构确定的,如果RID是关于适配器的(与交换器相对),则错误可被隔离到适配器。如下面描述的,适配器被处理,步骤313。然而,如果错误不能被隔离到特定的适配器,则固件分析附加的I/O集线器信息(例如,其它硬件注册)以确定问题的范围,步骤314。即,检查信息以确定问题的源,其可能不是适配器,例如,耦合到一个或多个适配器的交换器或者其它硬件组件。
[0061] 然后,做出是否找到被该问题影响的任何适配器的确定,查询316。例如,如果其是交换器,有耦合到其的任何适配器吗。如果没有可被固件隔离的任何适配器,则处理完成,步骤318。然而,对于找到的被影响的每个适配器,由固件将该适配器的设备表项置于错误状态中(例如,设置错误指示器和/或加载/存储阻止指示器;例如=1),步骤319,并且处理该适配器,步骤320,如下面将描述的。做出这是否是找到的被该问题影响的最后一个适配器的确定,查询322。如果是,则处理完成,步骤324。否则,处理继续步骤319“将DTE置于错误状态中”。
[0062] 参考图3B描述处理单个适配器的逻辑的一个实施例。在一个示例中,该逻辑由固件执行。最初,将与适配器关联的功能表项置于错误状态中,步骤350。例如,设置功能表项中与适配器关联的一个或多个指示器来阻止访问。例如,可设置错误指示器来阻止中断(例如,MSI)和直接存储器访问,和/或可设置加载/存储指示器来阻止PCI加载/存储。这避免了本机PCI指令成功地访问与失效设备表项关联的适配器。
[0063] 此后,做出是否存储了日志的确定,查询352。这个确定通过检查错误向量中与DTE对应的日志指示器做出。如果存储了错误日志,则固件访问与错误中的适配器关联的错误日志项(例如,使用DTE索引指向错误日志以找到适当的项)并解码来自日志的错误类型,步骤354。做出是否需要通过硬件(例如,固件、适配器)恢复的确定,查询356。例如,如果日志指示错误是由软件(例如,操作系统)引起的,则不需要通过硬件恢复,单个适配器处理完成,步骤358。在这种情况中,操作系统将执行恢复,但是不需要采取将适配器置于错误状态中的明确行动。恢复将取决于错误。
[0064] 回到查询356,如果恢复将由硬件/固件执行,则执行恢复,步骤360。例如,适配器被重置、或者去配置(deconfigured)和重配置等。
[0065] 此外,固件创建关于错误类型的合适的PCI功能错误事件,步骤362。在一个示例中,这是由固件保持在安全存储器中待处理的架构信道子系统事件。作为一个示例,错误事件包括下列信息:自身分区(即,访问适配器的逻辑分区);功能句柄;适配器的物理标识符;描述事件的PCI事件代码;恢复是否成功的指示;以及可能的错误细节。错误细节取决于错误的类型。例如,对于直接存储器访问错误,作为示例,错误细节包括失效地址、读/写指示器、转换错误细节以及受影响的DMA地址空间;对于中断错误,错误细节包括例如失效地址和转换错误细节;对于总线错误,例如,错误细节包括在DMA/中断操作期间的键/无法校正的错误以及可用的失效地址;对于PCI相关的分区存储访问,作为示例,错误细节包括失效地址和访问错误的类型;对于PCI错误,在该示例中没有报告错误细节。该类别覆盖其中本地错误信息仅存储在错误日志中的硬件事件。
[0066] 回到查询352,如果没有存储日志,则分析其它I/O集线器硬件信息(例如,其它寄存器),步骤370。基于该分析做出是否需要通过硬件恢复的确定,步骤372。如果不需要,则单个适配器处理完成,步骤374。否则,例如由硬件执行恢复,步骤376。
[0067] 此外,创建PCI功能错误事件,指示恢复的成功,步骤378。在一个实施例中,固件在安全存储器中保持该事件待处理。
[0068] 在生成成功的或不成功的PCI错误事件(步骤378)或基于错误类型生成PCI事件(步骤362)之后,处理继续将该事件呈现给LPAR管理程序(或者非LPAR环境中的操作系统),步骤380。例如,向管理程序通知错误的信道报告字(CRW)被呈现给管理程序。
[0069] 在将事件CRW呈现给LPAR管理程序之后,下面将更全面地讨论,做出恢复是否成功的确定,查询382。该确定基于固件在恢复过程期间从I/O集线器和适配器硬件获得的信息。如果恢复成功,则处理完成。然而,如果恢复不成功,则固件发起描述事件的日志的创建,步骤384。例如,固件向服务处理器发送请求以在系统日志中创建项。包括在日志中的是描述事件的服务参考代码(SRC)。
[0070] 服务处理器接收服务请求并分析该请求以确定是否需要call home,查询386。在该示例中,“call home”指代向诸如 的特定的实体提供错误报告,并请求采取修复或保持行动。即,即使固件可能已经基于错误采取行动,诸如,重置、去配置等,但指示适配器需要检修(例如,物理修复)的修复行动被请求。是否需要“call home”的该确定取决于在服务请求中提供的服务代码的值。如果需要call home,则发布“call home”服务请求,步骤388。此后,或者如果不需要call home,则处理完成。
[0071] 在恢复失败并且已发布“call home”的一个示例中,调度检修行动,步骤375(图3C)。在执行可能包括替换适配器的检修行动的过程中,在硬件和固件上发生一系列行动,如下所述。
[0072] 从诸如服务处理器的实体开始修复序列,服务处理器具有用户接口,可通过该用户接口管理修复。固件确定正被替换的适配器当前对其所有者是否在线,查询377。如果在线,则由固件创建请求适配器被去配置的架构事件并将其保持在安全存储器中待处理,步骤379。固件将事件CRW呈现给功能的LPAR管理程序,LPAR管理程序发布存储事件信息命令(例如,信道子系统呼叫指令的)以获得信息。LPAR解码架构事件中的自身分区信息,并将事件CRW呈现给合适的分区。然后操作系统去配置适配器。
[0073] 固件等一会儿(步骤381),然后确定适配器是否仍然在线(查询383)。如果是,则固件将强制地去配置适配器,步骤385。固件生成以所有者为目标的架构事件,指示适配器在备用(离线)状态,并在安全存储器中将这保持为待处理。固件将事件CRW呈现给功能的LPAR管理程序,LPAR管理程序发布存储事件信息命令以获得信息。LPAR管理程序解码架构事件中的自身分区信息,并将事件CRW呈现给合适的分区。
[0074] 当适配器从其所有者去配置时,固件创建架构事件,指示适配器现在对其所有者离线,并在安全存储器中将其保持为待处理。固件将事件CRW呈现给功能的LPAR管理程序,LPAR管理程序发布存储事件信息命令以获得信息。LPAR管理程序解码架构事件中的自身分区信息,并将事件呈现给合适的分区。
[0075] 此后,当适配器离线时(查询377,查询383),到适配器的电被关闭并且适配器被物理上移除,步骤387。更新内部固件控制结构以指示该适配器不再被安装。
[0076] 接下来,安装新适配器。响应于此,更新内部固件控制结构以指示现在安装了适配器。恢复到适配器的电力。固件在安全存储器中创建架构事件,指示适配器现在可用于被配置给分区。该事件包括一列分区,其具有为I/O配置数据集(IOCDS)中的该适配器定义的权限。固件将事件CRW呈现给功能的LPAR管理程序,LPAR管理程序发布存储事件信息命令以获得信息。LPAR解码来自架构事件的自身分区,并将该事件给有权访问IOCDS中定义的适配器的所有分区。
[0077] 回到图3B,特别地,在步骤380,进一步描述管理程序对事件CRW的处理。响应于接收事件CRW,LPAR管理程序从事件获取信息,步骤390。在一个示例中,其发布存储事件信息命令(例如,信道子系统呼叫指令的)以获得信息。存储事件信息命令包括请求所存储的信息的请求块,以及将包括所获取的信息的响应块。
[0078] 此外,LPAR管理程序将事件放在对分区的待处理事件队列上,步骤392。LPAR管理程序解码自身分区信息,并将事件CRW呈现给合适的分区,步骤394。
[0079] 操作系统处理事件CRW机器检查,步骤395。此外,其发布存储事件信息命令以获得关于错误(或行动)的事件信息,步骤396。
[0080] 特别是,在一个示例中,存储事件信息命令由固件执行,并返回响应块,响应块包括例如指定与该事件关联的适配器的功能句柄;识别适配器的功能标识符;描述适配器错误事件通知的原因的事件代码;以及基于事件代码的可能的其它信息。
[0081] 示例事件代码包括:
[0082] 地址转换保护异常。当转换表项中的存储保护位为一时,尝试直接存储器访问(DMA)写操作。在该实例中,提供指示错误条件与处理转换表项关联的事件限定符。此外,返回下列信息:指示失效转换表项的预期表类型的预期表类型;包括与PCI功能错误条件关联的地址的失效地址;识别与失效的DMA操作关联的DMA地址空间的DMA地址空间;以及指示PCI功能错误条件是否与DMA读或写操作关联的读/写指示器。
[0083] 当从PCI功能接收到消息信号中断(MSI)请求时,不为适配器中断注册PCI功能。在这种实例中,设置返回的事件限定符以指示PCI功能错误条件与失效的MSI关联。此外,返回下列信息:指定与PCI功能的失效的MSI关联的MSI向量号(vector number)(MSI向量号是被请求设置为一的适配器中断位向量中的位的偏移);指示PCI功能错误条件是否与DMA读或写操作关联的读/写指示器;以及指示与PCI功能错误条件关联的地址的失效地址。
[0084] PCI功能恢复成功。PCI功能在错误状态。PCI功能遇见错误,但已成功地恢复。
[0085] PCI功能恢复不成功。PCI功能保持被配置,但处在持久错误状态中。为该事件存储的使能的PCI功能句柄识别错误中的PCI功能,但不再可用。
[0086] 可提供许多其它事件代码,并且此处提供的那些仅作为示例提供。此外,取决于提供的事件代码和/或取决于实现,可返回更多、更少或不同的信息。
[0087] 响应于获得错误信息,操作系统基于事件类型采取适当的行动。此外,操作系统发布修改PCI功能控制指令以解(unblock)指令访问(例如,PCI加载和存储)并重新使能DMA和MSI(中断)。
[0088] 这里介绍有关修改PCI功能控制指令的进一步细节。参照图4A,修改PCI功能控制指令400包括例如指示修改PCI功能控制指令的操作码402;指定所包括的各种信息所在位置的第一字段404,所述信息是关于操作参数正为其建立的适配器功能的信息;以及指明从其获取PCI功能信息块(FIB)的位置的第二字段406。以下将进一步描述由字段1和2指定的位置的内容。
[0089] 在一个实施例中,字段1指定包括各种信息的通用寄存器。如图4B所示,寄存器的内容包括例如功能句柄(handle)410,其标识适配器功能的句柄,修改指令是代表该功能执行的;地址空间412,其指定与由功能句柄指定的适配器功能有关的系统存储器中的地址空间;操作控制414,其指定将针对适配器功能而执行的操作;以及状态416,其以预定码提供当完成指令时关于指令的状态。
[0090] 在一个实施例中,功能句柄包括例如指示句柄是否被使能的使能指示符,标识适配器功能的功能号(这是静态标识符,且可被用于索引到功能表中);以及实例号,其指定该功能句柄的特定实例。存在用于每个适配器功能的功能句柄,且其用于定位功能表中的功能表项(FTE)。每个功能表项包括操作参数和/与其适配器功能有关的其他信息。作为例子,功能表项包括:
[0091] 实例号:该字段指示与功能表项有关的适配器功能句柄的特定实例;
[0092] 设备表项(DTE)索引1…n:存在一个或多个设备表索引,且每个索引是到一个设备表中的索引,用于定位设备表项(DTE)。每个适配器功能有一个或多个设备表项,且每个项包括与其适配器功能有关的信息,包括用于处理适配器功能的请求(例如,DMA请求、MSI请求)的信息以及涉及与适配器功能有关的请求(例如,PCI指令)的信息。每个设备表项与分配给适配器功能的系统存储器内的一个地址空间有关。适配器功能可具有分配给适配器功能的系统存储器内的一个或多个地址空间。
[0093] 示忙器:该字段指示适配器功能是否忙;
[0094] 持久错误状态指示器:该字段指示适配器功能是否处于持久错误状态;
[0095] 恢复启动指示器:该字段指示是否已启动对于适配器功能的恢复;
[0096] 许可指示器:该字段指示尝试控制适配器功能的操作系统是否有权限这么做;
[0097] 使能指示器:该字段指示适配器功能是否被使能(例如1=使能,0=禁止);
[0098] 请求者标识符(RID):这是适配器功能的标识符,且包括例如总线号、设备号和功能号。
[0099] 在一个例子中,该字段用于访问适配器功能的配置空间。(适配器的存储器可被定义为地址空间,包括例如配置空间、I/O空间和/或一个或多个存储器空间。)在一个例子中,可通过在由操作系统(或其他配置)发出到适配器功能的指令中指定配置空间来访问配置空间。在该指令中指定的是到配置空间中的偏移,以及用于定位包括RID的恰当的功能表项的功能句柄。固件接收指令并确定其用于配置空间。因此,它使用RID来生成对I/O集线器的请求,且I/O集线器创建访问适配器的请求。适配器功能的定位是基于RID,且该偏移指定到适配器功能的配置空间中的偏移。
[0100] 基地址寄存器(BAR)(1到n):该字段包括多个无符号整数,被指定为BAR0-BARn,其与原始指定的适配器功能有关,且其值也被存储在与适配器功能有关的基地址寄存器中。每个BAR指示适配器功能内的存储器空间或I/O空间的开始地址,并也指示地址空间的类型,即,它是例如64或32位的存储空间,或是32位的I/O空间;
[0101] 在一个例子中,它被用于访问适配器功能的存储空间和/或I/O空间。例如,在访问适配器功能的指令中提供的偏移被添加到与在指令中指定的地址空间有关的基地址寄存器中的值,以获得用于访问适配器功能的地址。在指令中提供的地址空间标识符标识将被访问的适配器功能内的地址空间,以及将被使用的对应的BAR;
[0102] 大小(Size)1…n:该字段包括多个无符号整数,被指定为SIZE0-SIZEn;大小字段的值,当不是零时,表示每个地址空间的大小,且每个项对应于先前描述的BAR。
[0103] 以下将描述关于BAR和Size的进一步细节。
[0104] 1.当BAR没有针对适配器功能而实现时,BAR字段及其对应的大小字段都被存储为零。
[0105] 2.当BAR字段表示I/O地址空间或者32位存储器地址空间时,对应的大小字段是非零的并表示地址空间的大小。
[0106] 3.当BAR字段表示64位存储器地址空间时,
[0107] a.BARn字段表示最低有效(least significant)的地址位。
[0108] b.下一个连续BARn+1字段表示最高有效(most significant)的地址位。
[0109] c.对应的SIZEn字段是非零的,并表示地址空间的大小。
[0110] d.对应的SIZEn+1字段不是有意义的,且被存储为零。
[0111] 内部路由信息:该信息被用于执行到适配器的特定路由。作为例子,它包括例如节点、处理器芯片和集线器寻址信息。
[0112] 状态指示:这提供了关于例如加载/存储操作是否被阻止或适配器是否处于错误状态的指示,以及其他指示。
[0113] 在一个例子中,示忙器、持久错误状态指示器以及恢复启动指示器基于由固件执行的监督而被设置。而且,许可指示器基于例如策略而被设置;且BAR信息基于在处理器(例如,处理器的固件)的总线行走(bus walk)期间发现的配置信息而被设置。其他字段可基于配置、初始化和/或事件而被设置。在其他实施例中,功能表项可包括更多、更少或不同的信息。包括的信息可取决于由适配器功能支持或使能的操作。
[0114] 参考图4C,在一个例子中,字段2指示PCI功能信息块(FIB)的逻辑地址420,该PCT功能信息块包括关于有关适配器功能的信息。功能信息块被用于更新设备表项和/或与适配器功能有关的功能表项(或其他位置)。该信息在适配器的初始化和/或配置期间,以及/或者响应于特定事件而被存储在FIB中。
[0115] 参考图4D描述关于功能信息块(FIB)的进一步细节。在一个实施例中,功能信息块450包括以下字段:
[0116] 格式451:该字段指定FIB的格式。
[0117] 拦截控制452:该字段被用来指示特定指令由可调页模式客户(pageable mode guest)进行的客户执行是否导致指令拦截;
[0118] 错误指示454:该字段包括用于直接存储器访问和适配器中断的错误状态指示。当该位被设置(例如1)时,在执行用于适配器功能的直接存储器访问或适配器拦截时,检测到一个或多个错误;
[0119] 加载/存储阻止456:该字段指示加载/存储操作是否被阻止;
[0120] PCI功能有效458:该字段包括用于适配器功能的使能控制。当该位被设置(例如1)时,适配器功能被认为对于I/O操作而被使能;
[0121] 地址空间注册460:该字段包括用于适配器功能的直接存储器访问使能控制。当该字段被设置(例如1)时,直接存储访问被使能;
[0122] 页大小461:该字段指示将被DMA存储器访问所访问的页或其他存储单元的大小;
[0123] PCI基地址(PBA)462:该字段是用于分配给适配器功能的系统存储器中的地址空间的基地址。它表示适配器功能被允许使用以直接存储器访问指定的DMA地址空间的最低虚拟地址;
[0124] PCI地址界限(PAL)464:该字段表示适配器功能被允许在指定的DMA地址空间内访问的最高虚拟地址;
[0125] 输入/输出地址转换指针(IOAT)466:输入/输出地址转换指针指定由PCI虚拟地址转换使用的任何转换表中的第一个,或者它可直接指定作为转换结果的存储的绝对地址;
[0126] 中断子类(ISC)468:该字段包括用于针对适配器功能给出适配器中断的中断子类;
[0127] 中断数(NOI)470:该字段指定针对适配器功能接受的不同的中断代码的数量。该字段也以位定义了由适配器中断位向量地址和适配器中断位向量偏置字段指定的适配器中断位向量的大小;
[0128] 适配器中断位向量地址(AIBV)472:该字段指定用于适配器功能的适配器中断位向量的地址。该向量在中断处理中使用;
[0129] 适配器中断位向量偏移474:该字段指定用于适配器功能的第一适配器中断位向量位的偏移;
[0130] 适配器中断概要位地址(AISB)476:该字段提供指定可选地在中断处理中使用的适配器中断概要位的地址;
[0131] 适配器中断概要位偏移478:该字段提供到适配器中断概要位向量中的偏移;
[0132] 功能测量块(FMB)地址480:该字段提供用于收集关于适配器功能的测量的功能测量块的地址;
[0133] 功能测量块键(key)482:该字段包括访问功能测量块的访问键;
[0134] 概要位通知控制484:该字段指示是否存在正使用的概要位向量;
[0135] 指令授权令牌486:该字段用于确定可调页存储模式客户是否被授权执行PCI指令而没有主机干预。
[0136] 在一个例子中,在 中,可调页客户经由开始解释执行(SIE)指令以解释等级2被解释性地执行。例如,逻辑分区(LPAR)管理程序(hypervisor)执行SIE指令以开始物理的、固定的存储器中的逻辑分区。如果 是该逻辑分区中的操作系统,它发出SIE指令以在其V=V(虚拟)存储中执行其客户(虚拟)机。因此,LPAR管理程序使用等级1SIE,且 管理程序使用等级2SIE;以及
[0137] 地址转换格式487:该字段指示用于将在转换中使用的最高级转换表的地址转换的所选择的格式(例如,最高级表(例如,段表、区域(region)第三等)的指示,以及所选格式(例如,CPU DAT兼容、I/O扩展地址转换格式、旁路格式、非获取格式)的指示)。其还可指示格式。
[0138] 在修改PCI功能控制指令中指定的功能信息块被用于修改选择的设备表项、功能表项和/或与在指令中指定的适配器功能有关的其他固件控制。通过修改设备表项、功能表项和/或其他固件控制,为适配器提供某些服务。这些服务包括,例如,适配器中断;地址转换;重置错误状态;重置加载/存储阻止;设置功能测量参数;以及设置拦截控制。
[0139] 参考图5描述与修改PCI功能控制指令有关的逻辑的一个实施例。在一个例子中,指令由操作系统(或其他配置)发出并由执行操作系统的处理器(例如,固件)执行。在此处的例子中,指令和适配器功能是基于PCI的。但是,在其他实施例中,可使用不同的适配器结构和相应的指令。
[0140] 在一个例子中,操作系统向指令提供以下操作数(例如,在由指令指定的一个或多个寄存器中);PCI功能句柄;DMA地址空间标识符;操作控制;以及功能信息块的地址。
[0141] 参考图5,初始地,确定是否安装了允许修改PCI功能控制指令的工具(facility),查询500。该确定通过例如检查存储在例如控制块中的指示器而做出。如果工具未安装,提供异常条件,步骤502。否则,确定指令是否由可调页存储模式客户(或其他客户)发出,查询504。如果是,主机操作系统将仿真用于该客户机的操作,步骤506。
[0142] 否则,确定一个或多个操作数是否被对准,查询508。例如,确定功能信息块的地址是否是在双字边界。在一个例子中,这是可选的。如果操作数未被对准,则提供异常条件,步骤510。否则,确定功能信息块是否可访问,查询512。如果否,则提供异常条件,步骤514。否则,确定在修改PCI功能控制指令的操作数中提供的句柄是否被使能,查询516。在一个例子中,该确定通过检查句柄中的使能指示器而做出。如果句柄没有被使能,则提供异常条件,步骤518。
[0143] 如果句柄被使能,则句柄被用于定位功能表项,步骤520。即,至少一部分句柄被用于索引到功能表中以定位对应于适配器功能的功能表项,操作参数将为该适配器功能建立。
[0144] 确定功能表项是否被发现,查询522。如果否,则提供异常条件,步骤524。否则,如果发出指令的配置是客户,查询526,则提供异常条件(例如拦截到主机),步骤528。如果配置不是客户,则该查询可被忽略,或者如果指定的话,可检查其他授权。
[0145] 随后确定该功能是否被使能,查询530。在一个例子中,该确定是通过检查功能表项中的使能指示器而做出的。如果它未被使能,则提供异常条件,步骤532。
[0146] 如果功能被使能,则确定恢复是否是活动的,查询534。如果由功能表项中的恢复指示器确定恢复是活动的,则提供异常条件,步骤536。但是,如果恢复不是活动的,则进一步确定功能是否忙,查询538。该确定是通过查询功能表项中的示忙器而做出的。如果功能忙,则提供忙条件,步骤540。利用该忙条件,可重试该指令,而不是放弃它。
[0147] 如果功能不忙,则进一步确定功能信息块格式是否有效,查询542。例如,检查FIB的格式字段以确定该格式是否由系统支持。如果它是无效的,则提供异常条件,步骤544。如果功能信息块格式是有效的,则进一步确定在指令的操作数中指定的操作控制是否是有效的,查询546。即,该操作控制是否是用于该指令的指定操作控制中的一个。如果它是无效的,则提供异常条件,步骤548。但是,如果该操作控制是有效的,则继续处理指定的特定操作控制。
[0148] 可执行的一个操作是用于重置错误条件的重置错误状态指示操作,参考图6描述其示例。利用该操作,错误状态和加载/存储阻止指示被设置为零,从而允许I/O集线器处理随后从适配器接收的DMA和MSI。在一个实施例中,做出如该参数的值所指示的,适配器功能是否在错误状态的确定,查询600。如果不在,则提供异常条件,步骤602。否则,将功能表项和对应的设备表项中的错误状态和加载/存储阻止指示重置为零,步骤604。
[0149] 可以指定的另一操作控制是重置加载/存储阻止指示操作。使用该操作,加载/存储阻止指示被设置为零。参考图7描述与该操作关联的逻辑的一个实施例。最初,做出如该参数的值所指示的,功能是否在加载/存储阻止状态的确定,查询700。如果不在,则提供异常条件,步骤702。否则,将功能表项和对应的设备表项中的加载/存储阻止指示重置为零,步骤704。
[0150] 上述详细描述了用于将适配器错误报告给软件(例如,操作系统)的独立于设备的基础设施。这消除了在不通知软件的情况下丢失分组的险。独立于设备的基础设施是在不需要设备特定的实现的情况下,允许错误的报告和恢复的公共基础设施,其中错误是跨越适配器类型公共的错误。独立于设备的基础设施避免对硬件已检测到错误的PCI功能的访问。
[0151] 当检测到可被隔离到特定的设备表项的PCI错误时,硬件为合适的设备表项创建错误日志,如果可能的话,并且发送中断到固件。固件确定与设备表项关联的功能表项,并且在功能表项中设置指示器。当做出访问该PCI功能的任何指令时,由毫代码和固件检查那些指令。当他们被设置时,访问被阻止。
[0152] 固件访问错误日志项并解码来自日志的错误类型。创建称为PCI功能错误的架构事件,并由固件在安全存储器中将其保持为待处理。对于每个受影响的功能表项,固件将事件呈现给LPAR管理程序,LPAR管理程序发布存储事件信息信道子系统呼叫以获得信息。LPAR解码架构事件中的自身分区信息,并将事件呈现给合适的分区。
[0153] 在一个方面,固件获取(take)由硬件检测和记录的事件,并管理该事件以阻止操作系统发布进一步的架构指令给适配器。同样,管理在I/O基础设施(例如,PCIe)交换器中检测的错误,受影响的适配器被置于错误状态中,并通知自身操作系统这已经发生。为了最小化对固件和操作系统的影响,和特定于PCI适配器的架构事件信息一起使用CRW和存储事件信息。
[0154] 在此描述的实施例中,适配器是PCI适配器。如在此使用的,PCI指根据由外围组件互连特别兴趣组(PCI-SIG)定义的基于PCI的规范而实现的任何适配器,包括但不限于PCI或PCIe。在一个特定例子中,快速外围组件互连(PCIe)是组件级互连标准,其定义了用于I/O适配器和主机系统之间的事务的双向通信协议。根据用于PCIe总线上的传输的PCIe标准,PCIe通信被封装在包中。源于I/O适配器且止于主机系统的事务被称为上行事务。源于主机系统且止于I/O适配器的事务被称为下行事务。PCIe拓扑基于成对(例如,一个上行链路,一个下行链路)以形成PCIe总线的点对点单向链路。PCIe标准由PCI-SIG维护并公布。PCI规范可从万维网www.pcisig.com/home获得。
[0155] 所属技术领域的技术人员知道,本发明可以实现为系统、方法或计算机程序产品。因此,本公开可以具体实现为以下形式,即:可以是完全的硬件、也可以是完全的软件(包括固件、驻留软件、微代码等),还可以是硬件和软件结合的形式,本文一般称为“电路”、“模块”或“系统”。此外,在一些实施例中,本发明还可以实现为在一个或多个计算机可读介质中的计算机程序产品的形式,该计算机可读介质中包含计算机可读的程序代码。
[0156] 可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
[0157] 现在参考图8,在一个例子中,计算机程序产品800包括,例如,一个或多个计算机可读存储介质802,在其上存储有计算机可读的程序代码装置或逻辑804,以提供并方便本发明的一个或多个方面。
[0158] 体现在计算机可读介质上的程序代码可以用任何适当的介质传输,所述介质包括但不限于:无线、有线、光缆、RF等,或上述的任意合适的组合。
[0159] 可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如”C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
[0160] 本文中将参照本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述本发明。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机程序指令实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,这些计算机程序指令通过计算机或其它可编程数据处理装置执行,产生了实现流程图和/或框图中的方框中规定的功能/操作的装置。
[0161] 也可以把这些计算机程序指令存储在能使得计算机或其它可编程数据处理装置以特定方式工作的计算机可读介质中,这样,存储在计算机可读介质中的指令就产生出一个包括实现流程图和/或框图中的方框中规定的功能/操作的指令装置(instruction means)的制造品(manufacture)。
[0162] 也可以把计算机程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机或其它可编程装置上执行的指令能够提供实现流程图和/或框图中的方框中规定的功能/操作的过程。
[0163] 附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
[0164] 除了上述,本发明的一个或多个方面可由服务提供商提供、许诺(offer)、部署、管理、服务等,该服务提供商提供用户环境的管理。例如,服务提供商可创建、维持、支持等计算机代码和/或计算机基础设施,其为一个或多个用户执行本发明的一个或多个方面。反过来,服务提供商可例如根据预订和/或费用协议从用户接受付费。额外地或可替换地,服务提供商可从向一个或多个第三方销售广告内容接受付费。
[0165] 在本发明的一个方面,可部署用于执行本发明的一个或多个方面的应用。作为一个例子,部署应用包括提供计算机基础设施,其可操作以执行本发明的一个或多个方面。
[0166] 作为本发明的又一个方面,可部署计算基础设施,其包括将计算机可读代码集成到计算机系统,其中与计算系统结合的代码能够执行本发明的一个或多个方面。
[0167] 作为本发明的再一个方面,可提供用于集成计算基础设施包括将计算机可读码集成到计算机系统的过程。计算机系统包括计算机可读介质,其中计算机介质包括本发明的一个或多个方面。与计算机系统结合的代码能够执行本发明的一个或多个方面。
[0168] 尽管以上描述了各种实施例,这些仅是例子。例如,其他体系结构的计算环境可包含并使用本发明的一个或多个方面。作为例子,除了System 服务器之外的服务器,诸如由国际商业机器公司提供的Power Systems服务器或其他服务器,或其他公司的服务器,可包括、使用和/或受益于本发明的一个或多个方面。而且,尽管在此示出的例子中,适配器和I/O集线器(例如,PCI集线器)被认为是服务器的一部分,在其他实施例中,它们不是必须被认为是服务器的一部分,而是可被简单地认为是耦合到计算环境的系统存储器和/或其他组件。计算环境不需要是服务器。而且,尽管适配器是基于PCI的,可与其他适配器或其他I/O组件一起使用本发明的一个或多个方面。适配器和PCI适配器仅仅是例子。进一步地,SCCB可包括更多、更少或不同的信息。在一些实施例中,其包括数据,其取决于行为限定器。许多其他变化是可能的。
[0169] 而且,其他类型的计算环境可受益于本发明的一个或多个方面。作为例子,可使用适于存储和/或执行程序代码的数据处理系统,其包括至少两个通过系统总线直接或间接耦合到存储元件的处理器。存储器元件包括,例如,在程序代码的实际执行期间使用的本地存储器、大容量存储器以及高速缓冲存储器,其提供至少一些程序代码的临时存储,以便减少在执行期间必须从大容量存储器取回代码的次数。
[0170] 输入/输出或I/O设备(包括但不限于键盘、显示器、指点设备、DASD、磁带、CD、DVD、拇指驱动器(thumb drive)以及其他的存储介质等)可直接或通过介于其间的I/O控制器被耦合到系统。网络适配器也可被耦合到系统以使得数据处理系统能够通过介于其间的私有或公共网络而耦合到其他的数据处理系统或远程打印机或存储设备。调制解调器电缆调制解调器和以太网卡仅是一些可获得的网络适配器类型。
[0171] 参考图9,其描述了实施本发明的一个或多个方面的主机计算机系统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典型地在被执行的指令的控制下处理该访问。指令可在硬件电路或内部微代码(固件)中或其组合中被执行。
[0172] 需注意的是,计算机系统包括本地(或主)存储器中的信息,以及寻址、保护以及引用和改变记录。寻址的一些方面包括地址格式、地址空间的概念、地址的各种类型和其中一种类型的地址被转换为另一种类型的地址的方式。一些主存储器包括持久分配地存储位置。主存储器向系统提供直接可被寻址的快速访问的数据存储。数据和程序在可被处理之前都将(从输入设备)被加载到主存储器。
[0173] 主存储器可包括一个或多个更小、更快速访问的缓冲存储器,有时候被称为高速缓存。高速缓存典型地与CPU或I/O处理器物理地关联。物理结构以及不同存储介质的使用的效果,除了在性能上,通常不会被程序观察到。
[0174] 可维护用于指令和数据操作数的单独的高速缓存。高速缓存中的信息可被维护为相邻的字节,所述字节位于被称为高速缓存块或高速缓存线(或简称为线)的整数界限上。模型可提供EXTRACT CACHE ATTRIBUTE(提取高速缓存属性)指令,其返回高速缓存线的字节大小。模型也可提供PREFETCH DATA(预取数据)和PREFETCH DATA RELATIVELONG(预取较长数据)指令,其实现存储到数据或指令高速缓存中的预取,或数据从高速缓存的释放。
[0175] 存储器被视为位的长平串。对于大部分操作来说,以从左到右的顺序进行对存储器的访问。位串被细分为八个位的单位。八位单位被称为字节,其是所有信息格式的基本构件。存储器中的每个字节位置由唯一的非负整数标识,该非负整数是该字节位置的地址,或简称为字节地址。相邻的字节位置具有连续的地址,在左边从0开始且以从左到右的顺序进行。地址是无符号二进制整数,且是24、31或64位。
[0176] 信息一次一个字节或一组字节地在存储器和CPU或通道子系统之间传递。除非另有指定,例如在 中,存储器中的一组字节由该组的最左边的字节寻址。组中的字节的数量可由将被执行的操作暗示或显式地指定。当在CPU操作中使用时,一组字节被称为字段。在字节的每个组内,例如在 中,位以从左到右的顺序被
编号。在 中,最左边的位有时候被称为“高阶”位且最右边的位被称为
“低阶”位。但是,位数不是存储器地址。仅字节可被寻址。为了操作存储器中的字节的单个位,访问整个字节。字节上的位从左到右被编号为0到7(例如在 中)。地
址中的位被编号为对于24位地址的8-31或40-63,或者对于31位地址的1-31或33-63;它们被编号为对于64位地址的0-63。在多个字节的任何其他的固定长度的格式中,构成格式的位从0开始被连续编号。为了错误检测,且优选地为了校正,一个或多个校验位可与每一个字节或一组字节一起被传递。这样的校验位由机器自动生成且不能被程序直接控制。存储容量以字节的数量来表示。当存储器操作数字段的长度由指令的操作码暗示时,字段被称为具有固定长度,其可以是一个、两个、四个、八个或十六个字节。可为某些指令暗示更大的字段。当存储器操作数字段的长度没有被暗示,而是被显式地表示时,该字段被称为具有可变长度。可变长度的操作数可以一个字节的增量(或者对于一些指令,以两个字节倍数或其他倍数)在长度上可变。当信息被放在存储器中时,仅替换被包括在指定的字段中的哪些字节位置的内容,即使到存储器的物理路径的宽度可能大于正被存储的字段的长度。
[0177] 某些信息单元位于存储器中的整数界限上。对于信息单元,当其存储器地址是以字节表示的单元长度的倍数时,界限被称为是整数的。特殊的名称被给予整数界限上的2、4、6、8和16字节的字段。半字是两字节边界上的一组两个连续的字节,且是指令的基本构件。字是四字节边界上的一组四个连续的字节。双字是八字节边界上一组八个连续的字节。
四倍长字(quadword)是16字节边界上的一组16个连续的字节。当存储器地址指定半字、字、双字和四倍长字时,地址的二进制表示分别包括一个、两个、三个或四个最右边的零位。指令将位于二字节整数边界上。大多数指令的存储器操作数不具有界限对准要求。
[0178] 在为指令和数据操作数实现单独的高速缓存的设备上,如果程序在高速缓存线中存储且指令被随后从该高速缓存线获取,可经历显著的延迟,不管该存储是否改变随后被获取的指令。
[0179] 在一个实施例中,本发明可被软件(有时候被称为许可的内部代码、固件、微代码、毫代码、微微代码(pico-code)等,其任何一个都将符合本发明)实施。参考图9,体现本发明的软件程序代码可典型地由主系统5000的处理器从长期存储介质设备5011(诸如CD-ROM驱动器、磁带驱动或硬盘驱动器)访问。软件程序代码可体现在与数据处理系统一起使用的各种已知介质(诸如软磁盘、硬盘驱动或CD-ROM)中的任何一个上。代码可在这样的介质上被分发,或可从一个计算机系统的计算机存储器5002或存储设备通过网络5010被分发给其他计算机系统的用户,以由这样的其他系统的用户使用。
[0180] 软件程序代码包括操作系统,其控制各种计算机组件和一个或多个应用程序的功能和交互。程序代码通常可从存储介质设备5011调页到相对更高速的计算机存储器5002,在此它对于处理器5001是可用的。用于在存储器中、物理介质上和/或体现软件程序代码或经由网络分发软件代码的技术和方法是熟知的,且不会在此被进一步讨论。当程序代码被创建并存储在有形介质(包括但不限于电子存储模块(RAM)、闪存、光盘(CD)、DVD、磁带等)上时,其经常被称为“计算机程序产品”。计算机程序产品介质典型地可由优选地位于计算机系统中的处理电路读取以由处理电路执行。
[0181] 图6示出了可在其中实施本发明的代表性工作站或服务器硬件系统。图10的系统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。
[0182] 系统5021可通过能与网络5029通信5028的网络适配器与其他计算机或计算机网络通信。示例性网络适配器是通信通道、令牌环网、以太网或调制解调器。或者,系统5021可使用诸如CDPD(蜂窝数字分组数据)卡的无线接口来通信。系统5021可与局域网(LAN)或广域网(WAN)中的这样的其他计算机关联,或系统5021可以是与另一个计算机的客户机/服务器安排中的客户机等。所有这些配置以及合适的通信硬件和软件在本领域中是已知的。
[0183] 图11示出了其中可实施本发明的数据处理网络5040。数据处理网络5040可包括多个单独的网络,诸如无线网和有线网,其每个可包括多个单独的工作站5041、5042、5043、5044。此外,本领域技术人员将理解,可包括一个或多个LAN,其中LAN可包括多个耦合到主处理机的智能工作站。
[0184] 仍然参考图11,网络也可包括大型计算机或服务器,诸如网关计算机(客户机服务器5046)或应用服务器(远程服务器5048,其可访问数据储存库,且也可直接从工作站5045被访问)。网关计算机5046用作到每个单独网络的进入点。当将一个连网协议连接到另一个时,需要网关。网关5046可通过通信链路优选地耦合到另一个网络(例如因特网5047)。也可使用通信链路将网关5046直接耦合到一个或多个工作站5041、5042、5043、5044。可以利用可从国际商业机器公司获得的IBM eServerTMSystem 服务器来实现网关计算机。
[0185] 同时参考图10和11,可体现本发明的软件编程代码可被系统5020的处理器5026从诸如CD-ROM驱动器或硬盘驱动器的长期存储介质5027访问。软件编程代码可被体现在与数据处理系统一起使用的各种已知介质(诸如软盘、硬盘驱动器或CD-ROM)中的任一个上。代码可在这样的介质上被分发,或从一个计算机系统的存储器或存储设备通过网络被分发到其他计算机系统的用户5050、5051,以供这样的其他系统的用户使用。
[0186] 或者,编程代码可体现在存储器5025中,且由处理器5026使用处理器总线访问。这样的编程代码包括操作系统,其控制各种计算机组件和一个或多个应用程序5032的功能和交互。程序代码通常从存储介质5027调页到高速存储器5025,在此它可用于由处理器5026进行处理。用于在存储器中、在物理介质上体现软件编程代码和/或经由网络分发软件代码的技术和方法是公知的,且不会在此进一步讨论。程序代码,当其被创建且在有形介质(包括但不限于电子存储模块(RAM)、闪存、光盘(CD)、DVD、磁带等)上存储时,通常被称为“计算机程序产品”。计算机程序产品介质典型地可以被优选地位于计算机系统中的处理电路读取以由处理电路执行。
[0187] 最容易被处理器使用的高速缓存(通常比处理器的其他高速缓存更快更小)是最低级(L1或级别1)高速缓存,且主存储(主存储器)是最高级高速缓存(如果有三个级别的话是L3)。最低级高速缓存经常被分为保持将被执行的机器指令的指令缓存(I-高速缓存),和保持数据操作数的数据高速缓存(D-高速缓存)。
[0188] 参考图12,为处理器5026示出了示例性处理器实施例。典型地,使用一个或多个级别的高速缓存5053来缓冲存储器块,以便改善处理器性能。高速缓存5053是高速缓冲器,其保持很可能被使用的存储器数据的高速缓存线。典型的高速缓存线是64、128或256字节的存储器数据。通常使用单独的高速缓存以用于缓存指令而不是缓存数据。高速缓存一致性(存储器和高速缓存中的线的副本的同步)通常由本领域中熟知的各种“窥探”算法提供。处理器系统的主存储器5025通常被称为高速缓存。在具有4个级别的高速缓存5053的处理器系统中,主存储器5025有时候被称为级别5(L5)高速缓存,因为它典型地更快,且仅保持可被计算机系统使用的非易失性存储器(DASD、磁带等)的一部分。主存储器5025可“高速缓存”由操作系统向主存储器5025调页入或从其调页出的数据页。
[0189] 程序计数器(指令计数器)5061保持跟踪将被执行的当前指令的地址。处理器中的程序计数器是64位的,且可被截短为31或24位以支持先前
的寻址界限。程序计数器典型地体现在计算机的PSW(程序状态字)中,这样它可在上下文转换中持续。因此,具有程序计数器值的进行中的程序可被例如操作系统中断(从程序环境到操作系统环境的上下文转换)。当程序不活动时,程序的PSW维持程序计数器值,且在操作系统执行时,操作系统的(PSW中的)程序计数器被使用。典型地,程序计数器以等于当前指令的字节数的量增量。RISC(精简指令集计算)指令典型地是固定长度,而CISC(复杂指令集计算)指令典型地是可变长度。 的指令是具有长度为2、4或6字节的
CISC指令。程序计数器5061被例如上下文转换操作或分支指令的分支采取操作修改。在上下文转换操作中,当前的程序计数器值与关于正被执行的程序的其他状态信息(诸如条件码)一起被保存在程序状态字中,且新程序计数器值被载入并指向将被执行的新程序模块的指令。执行分支采取操作,以通过将分支指令的结果加载到程序计数器5061中而允许程序进行决定或在程序内循环。
[0190] 典型地,使用指令获取单元5055代表处理器5026获取指令。获取单元可获取“下一序列指令”、分支采取指令的目标指令或上下文转换后的程序的第一指令。现在的指令获取单元通常使用预取技术基于被预取的指令将被使用的可能性来推测性地预取指令。例如,获取单元可获取16字节的指令,其包括下一顺序指令以及进一步的顺序指令的额外字节。
[0191] 获取的指令随后被处理器5026执行。在一实施例中,获取的指令被传递给获取单元的分派单元5056。分派单元解码指令并将关于解码的指令的信息转送给合适的单元5057、5058、5060。执行单元5057将典型地从指令获取单元5055接收关于解码的算术指令的信息,并将根据指令的操作码对操作数执行算术操作。优选地从存储器5025、架构寄存器
5059或从正被执行的指令的立即字段(immediate field)向执行单元5057提供操作数。执行的结果,当被存储时,被存储在存储器5025、寄存器5059或其他机器硬件(诸如控制寄存器、PSW寄存器等)中。
[0192] 处理器5026典型地具有一个或多个用于执行指令的功能的单元5057、5058、5060。参考图13A,执行单元5057可通过接口逻辑5071与架构通用寄存器5059、解码/分派单元
5056、加载存储单元5060和其他5065处理器单元通信。执行单元5057可使用几个寄存器电路5067、5068、5069来保持算术逻辑单元(ALU)5066将操作的信息。ALU执行诸如加减乘除的算术操作,以及诸如和、或以及异或(XOR)、旋转和移位的逻辑运算。优选地,ALU支持依赖于设计的专操作。其他电路可提供其他架构工具5072,例如包括条件码和恢复支持逻辑。典型地,ALU操作的结果被保持在输出寄存电路5070中,该输出寄存器电路可将结果转送到多种其他处理功能。有许多处理器单元安排,本说明书仅旨在提供对一个实施例的代表性理解。
[0193] 例如,ADD指令将在具有算术和逻辑功能的执行单元5057中被执行,而例如浮点指令将在具有专用浮点能力的浮点执行中被执行。优选地,执行单元通过在操作数上执行操作码定义的功能在由指令标识的操作数上操作。例如,ADD指令可被执行单元5057在由指令的寄存器字段标识的两个寄存器5059中发现的操作数上执行。
[0194] 执行单元5057对两个操作数执行算术加法,并在第三操作数中存储结果,其中第三操作数可以是第三寄存器或两个源寄存器中的一个。执行单元优选地利用算术逻辑单元(ALU)5066,其能执行多种逻辑功能,诸如移位、旋转、和、或以及异或,以及多种代数函数,包括加减乘除中的任何一个。一些ALU5056被设计为用于标量运算,且有些用于浮点。根据架构,数据可以是大端(big endien)(其中最低有效字节位于最高字节地址)或小端(little endien)(其中最低有效字节位于最低字节地址)。 是大端。根据架构,带符号字段可以是符号和幅度、1的补码或2的补码。2的补码数是有利的,其在于ALU不需要设计减法能力,因为不管是2的补码中的负值还是正值,都仅要求ALU中的加法。数字通常以速记描述,其中12位的字段定义了4096字节块的地址,且通常被描述为例如
4Kbyte(千字节)块。
[0195] 参考图13B,用于执行分支指令的分支指令信息典型地被发送到分支单元5058,该分支单元经常使用诸如分支历史表5082的分支预测算法,在其他条件运算完成前预测分支结果。在条件运算完成前,当前分支指令的目标将被获取并推测性地执行。当条件运算完成时,基于条件运算的条件和推测的结果,推测性执行的分支指令或被完成或被丢弃。典型的分支指令可测试条件码,以及如果条件码满足分支指令的分支要求,分支到目标地址,分支地址可基于若干数被计算,所述数包括例如在寄存器字段或是指令的立即字段中找到的数。分支单元5058可利用具有多个输入寄存器电路5075、5076、5077和一个输出寄存器电路5080的ALU 5074。分支单元5058可与例如通用寄存器5059、解码分派单元5056或其他电路
5073通信。
[0196] 一组指令的执行可由于多个原因中断,所述原因包括例如由操作系统发起的上下文转换、引起上下文转换的程序异常或错误、引起上下文转换的I/O中断信号或多个程序(在多线程环境中)的多线程活动。优选地,上下文转换动作保存关于当前执行的程序的状态信息,且随后加载关于正被调用的另一个程序的状态信息。状态信息可被存储在例如硬件寄存器或存储器中。状态信息优选地包括指向将被执行的下一个指令的程序计数器值、条件码、存储器转换信息和架构寄存器内容。上下文转换活动可被硬件电路、应用程序、操作系统程序或固件代码(微代码、微微代码或许可内部码(LIC))单独地或其组合实现。
[0197] 处理器根据指令定义的方法而访问操作数。指令可使用指令的一部分的值提供立即操作数,可提供一个或多个寄存器字段,其显式地指向通用寄存器或专用寄存器(例如浮点寄存器)。指令可利用由操作码字段确定的暗示的寄存器作为操作数。指令可利用用于操作数的存储器位置。可由寄存器、立即字段或寄存器和立即字段的组合提供操作数的存储器位置,如由 长位移工具(facility)所例示的,其中该指令定义了基寄存器、索引寄存器和立即字段(位移字段),它们加到一起,以提供例如存储器中的操作数的地址。此处的位置典型地意味着主存储器(主存储设备)中的位置,除非另外指明。
[0198] 参考图13C,处理器使用加载/存储单元5060访问存储器。加载/存储单元5060可以通过获取存储器5053中的目标操作数的地址并将操作数加载到寄存器5059或其他存储器5053位置中,来执行加载操作,或可以通过获取存储器5053中的目标操作数的地址并将从寄存器5059或另一个存储器5053位置获得的数据存储在存储器5053中的目标操作数位置,来执行存储操作。加载/存储单元5060可以是推测性的,且可以相对于指令顺序来说无序的顺序访问存储器,但是加载/存储单元5060将向程序维持指令按顺序执行的外观。加载/存储单元5060可与通用寄存器5059、解密/分派单元5056、高速缓存/存储器接口5053或其他元件5083通信,且包括各种寄存器电路、ALU 5085和控制逻辑5090以计算存储器地址并提供流水线顺序以使操作保持次序。一些操作可不按顺序,但加载/存储单元提供功能以使不按顺序执行的操作对程序看起来如已按顺序执行一样,如本领域所熟知的。
[0199] 优选地,应用程序“看到的”地址通常被称为虚拟地址。虚拟地址有时候被称为“逻辑地址”和“有效地址”。这些虚拟地址之所以虚拟,在于它们由多种动态地址转换(DAT)技术中的一种重定向到物理存储器位置,所述动态地址转换技术包括但不限于简单地给用偏移值给虚拟地址加前缀、经由一个或多个转换表转换虚拟地址,所述转换表优选地包括至少一个段表和页表(单独地或组合地),优选地,段表具有指向页表的项。在中,提供转换分级结构,包括区域第一表、区域第二表、区域第三表、段
表和可选的页表。转换表的性能通常通过利用转换后备缓冲器(TLB)被改善,该转换后备缓冲器包括将虚拟地址映射到相关的物理存储位置的项。当DAT使用转换表转换虚拟地址时,创建项。于是,虚拟地址的随后使用可利用快的TLB的项,而不是慢的顺序转换表访问。TLB内容可由包括LRU(最少最近使用的)多个替换算法来管理。
[0200] 在处理器是多处理器系统的处理器的情况下,每个处理器具有保持共享资源的责任,所述共享资源诸如I/O、高速缓存、TLB和存储器,它们互锁以实现一致性。典型地,“窥探”技术将被用于维持高速缓存一致性。在窥探环境中,每个高速缓存线可被标记为正处于共享状态、独占状态、改变状态、无效状态等中的一个,以便有助于共享。
[0201] I/O单元5054(图12)向处理器提供用于附加到例如包括磁带、盘、打印机、显示器和网络的外围设备的装置。I/O单元通常由软件驱动器向计算机程序呈现。在诸如来自的System 的大型计算机中,通道适配器和开放系统适配器是提供操作系统和外围设备之间的通信的大型计算机的I/O单元。
[0202] 而且,其他类型的计算环境可受益于本发明的一个或多个方面。作为例子,环境可包括仿真器(例如,软件或其他仿真机制),其中特定架构(包括例如指令执行、诸如地址转换的架构功能、以及架构寄存器)或其子集被仿真(例如,在具有处理器和存储器的本机计算机系统中)。在这样的环境中,仿真器的一个或多个仿真功能可实施本发明的一个或多个方面,即使执行仿真器的计算机可具有与正被仿真的能力不同的架构。作为一个例子,在仿真模式中,解码正被仿真的特定指令或操作,且建立合适的仿真功能以实施单个指令或操作。
[0203] 在仿真环境中,主计算机包括例如存储器以存储指令和数据;指令获取单元以从存储器获取指令,且可选地,提供用于获取的指令的本地缓冲;指令解码单元以接收获取的指令并确定已被获取的指令的类型;以及指令执行单元以执行该指令。执行可包括将数据从存储器加载到寄存器;从寄存器将数据存储回存储器;或执行如由解码单元确定的某些类型的算术或逻辑运算。在一个例子中,每个单元在软件中实现。例如,被所述单元执行的操作被实现为仿真器软件中的一个或多个子例程。
[0204] 更具体地,在大型计算机中,程序员(通常是如今的“C”程序员)一般通过编译器应用使用架构机器指令。存储在存储介质中的这些指令可以在 服务器中本机地执行,或在执行其他架构的机器中执行。它们可在现有的和未来的 大型计算机服务器以及 的其他机器(例如,Power Systems服务器和System 服务器)中被仿真。它们可在使用由 AMDTM等制造的硬件的各种机器上运行Linux
的机器中被执行。除了在 下的该硬件上执行,Linux也可被用于这样的
机器,其使用由Hercules或FSI(Fundamental Software,Inc)提供的仿真,其中,一般来说执行是在仿真模式中。在仿真模式中,仿真软件由本机处理器执行以仿真被仿真处理器的架构。关于上述参考的仿真产品的信息可在万维网www.hercules-390.org和
www.funsoft.com处找到。
[0205] 本机处理器典型地执行仿真软件,其包括固件或本机操作系统,以执行被仿真处理器的仿真程序。仿真软件负责获取并执行被仿真处理器架构的指令。仿真软件维护仿真的程序计数器以保持跟踪指令界限。仿真软件可一次获取一个或多个仿真的机器指令,并将所述一个或多个仿真的机器指令转换为对应的本机机器指令组,以由本机处理器执行。这些转换的指令可被高速缓存,这样可完成更快的转换。尽管,仿真软件将维持被仿真的处理器架构的架构规则以保证为被仿真处理器编写的操作系统和应用正确操作。而且,仿真软件将提供由被仿真的处理器架构确定的资源,包括但不限于控制寄存器、通用寄存器、浮点寄存器、例如包括段表和页表的动态地址转换功能、中断机制、上下文转换机制、日中时间(TOD)时钟和到I/O子系统的架构接口,这样被设计为在被仿真处理器上运行的操作系统或应用程序可在具有仿真软件的本机处理器上运行。
[0206] 解码正被仿真的特定指令,且调用子例程以执行该单个指令的功能。仿真被仿真处理器的功能的仿真软件功能例如在“C”子例程或驱动器中实现,或由提供用于特定硬件的驱动器的其他方法实现,如本领域技术人员在理解优选实施例的描述后将理解的。包括但不限于Beausoleil等人的标题为“Multiprocessor for Hardware Emulation”的美国专利证书号5,551,013;以及Scalzi等人的标题为“Preprocessing of Stored TargetRoutines for Emulating Incompatible Instructions on a Target Processor”的美国专利证书号6,009,261;以及Davidian等人的标题为“Decoding GuestInstruction to Directly Access Emulation Routines that Emulate the GuestInstructions”的美国专利证书号,5,574,873;以及Gorishek等人的标题为“Symmetrical Multiprocessing Bus and Chipset Used for CoprocessorSupport Allowing Non-Native Code to Run in a System”的美国专利证书号6,308,255;以及Lethin等人的标题为“Dynamic Optimizing Object CodeTranslator for Architecture Emulation and Dynamic Optimizing ObjectCode Translation Method”的美国专利证书号6,463,582,;以及Eric Traut的标题为“Method for Emulating Guest Instructions on a Host 
ComputerThrough Dynamic Recompilation of Host Instructions”的美国专利证书号5,
790,825;以及许多其他专利的各种软件和硬件仿真专利示出各种已知的方式来实现针对可为本领域技术人员获得的目标机器对为不同机器进行架构设计的指令格式的仿真。
[0207] 在图14中,提供了仿真主计算机系统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’的功能。
[0208] 在此使用的术语仅是为了描述特定实施例,且不旨在限制本发明。如在此使用的,单数形式“一”、“一个”和“该”也旨在包括复数形式,除非上下文另外清楚地指明。还将理解,当在说明书中使用时,术语“包括”和/或“包含”指明存在所述的特征、整体、步骤、操作、元件和/或组件,但不排除存在或附加一个或多个其他特征、整体、步骤、操作、元件和/或组件。
[0209] 所附权利要求书中的所有装置或步骤加功能元件的相应结构、材料、操作以及等价物,如有的话,旨在包括用于结合如特别要求保护的其他所要求保护的元件来执行所述功能的任何结构、材料或操作。呈现本发明的说明是为了示出和描述的作用,但不是穷尽性的或将本发明限制于所公开的形式。许多修改和变化对本领域普通技术人员来说是明显的,且不脱离本发明的范围。选择和描述实施例是为了最佳地解释本发明的原理和实际应用,并使得本领域普通技术人员能针对适于考虑的特定用途的具有各种修改的各种实施例理解本发明。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈