在操作系统实例中共享输入/输出适配器的方法和系统的制作方法

文档序号:6563307阅读:138来源:国知局

专利名称::在操作系统实例中共享输入/输出适配器的方法和系统的制作方法
技术领域
:本发明总的来说涉及在主机计算机和输入/输出(I/O)适配器之间的通信协议。更具体地说,本发明提供了一种用于可视化(virtualize)有关物理输入/输出适配器的存储器注册和窗口资源的实现。特别地,本发明提供了一种机制,通过它,诸如通用操作系统(例如Linux、Unix或Windows)或专用操作系统(例如网络文件系统服务器)之类的系统映像,可以直接地向外设组件互连(PCI)适配器暴露(expose)实际存储器地址,诸如由主机处理器或主机存储器控制器使用来访问存储器的存储器地址,所述PCI适配器诸如支持存储器注册(registration)或窗口的PCI、PCI-X或PCI-E适配器,例如InfiniBand主机通道适配器、iWarp远程直接存储器存取使能的网络接口控制器(iWarpRemoteDirectMemoryAccessenabledNetworkInterfaceController,RNIC)、TCP/IP卸载引擎(TCP/IPOffloadEngine,TOE)、以太网网络接口控制器(NIC)、光纤通道(FC)主机总线适配器(HBA)、并行SCSI(pSCSI)HBA、iSCSI适配器、用于RDMA的iSCSI扩展(iSER)适配器、和支持存储器映射的输入/输出接口的其他类型的适配器。
背景技术
:虚拟化(virtualization)是创建用于实际资源的替代。所述替代具有与它们的实际对应物相同的功能和外部接口,但是在诸如尺寸、性能和成本之类的属性方面不同。这些替代是虚拟资源,并且它们的用户通常意识不到替代的存在。服务器已经使用两种基本的方案来虚拟化系统资源分区和管理程序(hypervisor)。分区通常以粗略(例如物理的)的分配单元(例如整个处理器及其相关联的存储器和输入/输出适配器)建立多个虚拟服务器,作为物理服务器资源的各部分。管理程序是可以以精细的粒度(例如以单个物理资源的小部分)来虚拟化所有的服务器资源的软件或固件组件。支持虚拟化的服务器当前具有用于处理输入/输出的两个选项。第一选项是不允许在虚拟服务器之间共享单个物理输入/输出适配器。第二选项是增加功能给所述管理程序或另一个中介(intermediary),其用于提供允许多个操作系统共享单个物理适配器所需要的隔离。所述第一选项具有几个问题。一个重要的问题是不能在虚拟服务器之间共享昂贵的适配器。如果虚拟服务器只需要使用昂贵适配器的一部分,则整个适配器将为该服务器专用。当在物理服务器上的虚拟服务器的数量增加时,这导致适配器的利用不足,更重要的是导致更昂贵的解决方案,因为每个虚拟服务器将需要一个为其专用的物理适配器。对于支持许多虚拟服务器的物理服务器,利用该选项的另一个重要问题是它需要许多适配器插槽,并且需要所有的附随硬件(例如芯片、连接器、电缆)将那些适配器附接到物理服务器。虽然第二选项提供了用于在虚拟服务器之间共享适配器的机制,但是该机制必须在每个输入/输出交易(transaction)上被调用和执行。在每个输入/输出交易上由管理程序或其他中介调用和执行所述共享机制降低了性能。它也导致更昂贵的解决方案,因为客户必须购买更多的硬件,从而要么补充(makeupfor)用于执行所述共享机制的周期,要么,如果向中介卸载所述共享机制,则补充所述中介硬件。因此,具有这样的机制会是有益的,该机制使得在多个系统映像虚拟服务器内的系统映像可以直接地向共享的PCI适配器暴露其相关联的系统存储器的一部分或全部,而不必通过诸如管理程序之类的受托组件,并且在主机上不需要任何另外的地址翻译和保护硬件。益处还会在于,所述系统映像在不常使用的操作(如由管理程序向系统映像分配存储器)期间,或当系统映像借助于所述管理程序而钉住其存储器时,向共享适配器暴露存储器。益处还会在于,使得所述机制应用到以太网网络接口控制器(NIC)、光纤通道(FC)主机总线适配器(HBA)、并行SCSI(pSCSI)HBA、InfiniBand主机通道适配器(HCA)、TCP/IP卸载引擎、远程直接存储器存取(RDMA)使能的NIC、iSCSI适配器、用于RDMA的iSCSI扩展(iSER)适配器、和支持存储器映射的输入/输出接口的任何其他类型的适配器。
发明内容本发明提供了一种方法、系统和计算机程序产品,用于使得在多个系统映像虚拟服务器内的系统映像,直接地向共享的PCI适配器暴露其相关联的系统存储器的一部分或全部,而不必通过诸如管理程序之类的受托组件,并且在主机上不需要任何地址翻译和保护硬件。具体地说,本发明致力于一种机制,用于共享传统PCI输入/输出适配器、PCI-X输入/输出适配器、PCI-Express(快速)输入/输出适配器和一般而言的使用用于通信的存储器映射输入/输出接口的任何输入/输出适配器。提供了一种机制,其使得提供地址翻译和保护硬件的主机,可以与在适配器中的地址翻译和保护表相结合地使用该硬件。也提供了一种机制,其使得不提供地址翻译和保护表的主机,可以通过使用在所述适配器中的地址翻译和保护表以及范围表来严格地保护其地址。在权利要求中提出了被认为具有本发明的特性的新颖特征。但是,当结合附图阅读时,通过参照下面说明性实施例的详细描述,可以更好地理解本发明本身以及优选使用方式、其进一步的目的及优点,在附图中图1是按照本发明的一个说明性实施例图示的分布式计算机系统的图;图2是按照本发明的一个说明性实施例的小的主机处理器节点的功能方框图;图3是按照本发明的一个说明性实施例的小的集成主机处理器节点的功能方框图;图4是按照本发明的一个说明性实施例的大的主处理器节点的功能方框图;图5是图示按照本发明的一个说明性实施例的并行外设计算机接口(PCI)总线协议的关键元件的图;图6是图示按照本发明的一个说明性实施例的串行PCI总线协议(PCI-Express,又称为PCI-E)的关键元件的图;图7是图示按照本发明的一个说明性实施例、建立用于管理支持输入/输出虚拟化的PCI系列适配器的三个访问控制级的图;图8是图示按照本发明的一个说明性实施例的、用于识别虚拟适配器或系统映像的、在PCI总线交易中使用的控制字段的图;图9是图示按照本发明的一个说明性实施例的用于虚拟化适配器的虚拟适配器管理方案的图;图10是图示按照本发明的一个说明性实施例的用于虚拟化适配器资源的虚拟资源管理方案的图;图11是图示按照本发明的一个说明性实施例的存储器地址翻译和保护机制的图、该机制用于将PCI总线地址翻译为支持虚拟适配器或虚拟资源管理方案的PCI适配器的实际存储器地址;图12是图示按照本发明的一个说明性实施例的、由支持虚拟适配器或虚拟资源管理方案的PCI适配器使用的存储器地址翻译和保护表(ATPT)的图;图13是按照本发明的一个说明性实施例概述如下功能的流程图,该功能由LPAR管理器地址在主机方在运行时执行,以便注册一个或多个存储器地址,系统映像希望向支持虚拟适配器或虚拟资源管理方案的PCI适配器暴露该一个或多个存储器地址;图14是按照本发明的一个说明性实施例概述如下功能的流程图,该功能由系统映像在主机方在运行时执行,以便向支持虚拟适配器或虚拟资源管理方案的PCI适配器执行InfiniBand或iWAP(RDMA使能的NIC)存储器注册操作;图15是图示按照本发明的一个说明性实施例的、用于先前注册的存储器的存储器去钉住(unpin)操作的流程图;图16是图示按照本发明的一个说明性实施例的、适配器存储器地址翻译和保护机制的图,该机制用于将PCI总线地址翻译为PCI适配器的实际存储器地址,所述PCI适配器支持虚拟适配器或虚拟资源管理方案,并且不要求任何主机方地址翻译和保护表以提供IO虚拟化;图17是按照本发明的一个说明性实施例图示在PCI适配器上的PCI适配器的存储器地址翻译和保护表的细节的图,所述PCI适配器支持虚拟适配器或虚拟资源管理方案,并且不要求任何主机方地址翻译和保护表以提供IO虚拟化;图18是按照本发明的一个说明性实施例概述的如下功能的流程图,该功能由LPAR管理器在系统映像引导或重新配置时间执行,以便在支持虚拟适配器或虚拟资源管理方案的PCI适配器上向系统映像分配存储器范围相关的资源;图19是按照本发明的一个说明性实施例概述如下功能的流程图,所述功能在一组存储器地址与一个系统映像相关联时,或当系统映像钉住与它相关联的一组存储器地址时,由LPAR管理器执行,以便向支持虚拟适配器或虚拟资源管理方案的PCI适配器,注册与系统映像相关联的一个或多个存储器范围;图20是按照本发明的一个说明性实施例概述如下功能的流程图,所述功能在运行时由LPAR管理器在主机方执行,以便执行有关一个或多个先前注册的存储器范围的InfiniBand或iWAP(RDMA使能的NIC)去钉住和取消;图21是按照本发明的一个说明性实施例概述如下功能,所述功能由支持虚拟适配器或虚拟资源管理方案的PCI适配器在运行时执行,以确认对于系统存储器的存取;以及图22是图示按照本发明的一个说明性实施例将LMB与系统映像解除关联的流程图。具体实施例方式本发明适用于任何通用或专用主机,所述主机使用PCI系列的输入/输出适配器,直接地附接存储体或附接到网络,其中,所述网络包括终端节点(endnode)、交换机、路由器和互连这些组件的链路组成。所述网络链路可以是光纤通道、以太网、InfiniBand、高级交换互连或使用专有(proprietary)或标准协议的专有链路。现在参照附图,具体来说参照图1,按照本发明的一个优选实施例图示了分布式计算机系统的图。在图1中所示的分布式计算机系统采取网络的形式,诸如网络120,并且仅仅被提供用于说明性目的,并且下述的本发明的实施例可以在多种其他类型和配置的计算机系统上被实现。在网络120内部示出了两个交换机(或路由器)——交换机116和交换机140。交换机116通过端口112连接到小主机节点100。小主机节点100也包含第二类型的端口104,其连接到直接附接的存储子系统,如直接附接的存储体108。网络120还可以通过附接到交换机140的端口136附接大主机节点124。大主机节点124还可以包含第二类型的端口128,该端口128连接到直接附接的存储子系统,诸如直接附接的存储体132。网络120还可以通过附接到交换机140的端口148,附接连接到网络120的小集成主机节点144。小集成主机节点144还可以包含第二类型的端口152,其连接到直接附接的存储子系统,诸如直接附接的存储体156。接着转向图2,按照本发明的一个优选实施例,描述了小主机节点的功能方框图。小主机节点202是主机处理器节点的一个示例,诸如在图1中所示的小主机节点100。在这个示例中,小主机节点202包括两个处理器输入/输出分层,诸如处理器输入/输出分层200和203,它们通过链路201互连。在图2的说明性示例中,处理器输入/输出分层200包括处理器芯片207,处理器芯片207包括一个或多个处理器和它们的相关联的高速缓冲存储器。处理器芯片207通过链路208连接到存储器212。在所述处理器芯片上的链路216、220和224之一(诸如链路220)连接到PCI系列输入/输出桥228。PCI系列输入/输出桥228具有一个或多个PCI系列(例如PCI、PCI-X、PCI-Express或任何未来代(futuregeneration)的PCI)链路,其用于通过PCI链路(诸如链路232、236和240)连接其他的PCI系列输入/输出桥或PCI系列输入/输出适配器,如PCI系列适配器244和PCI系列适配器245。PCI系列适配器245还可以用于经由交换机或路由器(诸如交换机或路由器260)通过链路256而连接诸如网络264的网络。PCI系列适配器244可以用于通过链路248连接直接附接的存储体,诸如直接附接的存储体252。可以以其方式类似于参照处理器输入/输出分层200所示和所述的方式,配置处理器输入/输出分层203。现在参照图3,按照本发明的一个优选实施例,描述小集成主机节点的功能方框图。小集成主机节点302是主机处理器节点的示例,诸如在图1中所示的小集成主机节点144。在该示例中,小集成主机节点302包括两个处理器输入/输出分层300和303,它们通过链路301互连。在所述说明性示例中,处理器输入/输出分层300包括处理器芯片304,它表示一个或多个处理器和相关联的高速缓冲存储器。处理器芯片304通过链路308连接到存储器312。在所述处理器芯片上的链路之一(诸如链路330)连接到PCI系列适配器,诸如PCI系列适配器345。处理器芯片304具有一个或多个PCI系列(例如PCI、PCI-X、PCI-Express或任何未来代的PCI)链路,用于通过诸如链路316、330和324的PCI链路连接PCI系列输入/输出桥或PCI系列输入/输出适配器,诸如PCI系列适配器344和PCI系列适配器345。PCI系列适配器345还可以用于经由诸如交换机或路由器360的交换机或路由器,通过链路356与诸如网络364之类的网络连接。可以使用PCI系列适配器344,通过链路348与直接附接的存储体352连接。现在转向图4,按照本发明的一个优选实施例,描述了大主机节点的功能方框图。大主机节点402是主机处理器节点的一个示例,诸如在图1中所示的大主机节点124。在这个示例中,大主机节点402包括两个处理器输入/输出分层400和403,它们通过链路401互连。在图4的说明性示例中,处理器输入/输出分层400包括处理器芯片404,它表示是一个或多个处理器和相关联的高速缓冲存储器。处理器芯片404通过链路408连接到存储器412。在所述处理器芯片上的链路之一(诸如链路440)连接到PCI系列输入/输出集线器,诸如PCI系列输入/输出集线器441。所述PCI系列输入/输出集线器使用网络442附接到PCI系列输入/输出桥448。即,PCI系列输入/输出桥448通过链路432连接到交换机或路由器436,并且交换机或路由器436也通过链路443附接到PCI系列输入/输出集线器441。网络442允许PCI系列输入/输出集线器和PCI系列输入/输出桥位于不同的封装(package)中。PCI系列输入/输出桥448具有一个或多个PCI系列(例如PCI、PCI-X、PCI-Express或任何未来代的PCI)链路,用于通过诸如链路444、446和452的PCI链路连接其他的PCI系列输入/输出桥或PCI系列输入/输出适配器,诸如PCI系列适配器456和PCI系列适配器457。PCI系列适配器456可以用于通过链路460连接直接附接的存储体476。PCI系列适配器457还可以用于经由例如交换机或路由器472通过链路468与网络464连接。处理器输入/输出分层403包括处理器芯片405,它是一个或多个处理器和相关联的高速缓冲存储器的代表。处理器芯片405通过链路409连接到存储器413。在所述处理器芯片上的链路415和418之一(诸如链路418)连接到非PCI输入/输出集线器,诸如非PCI输入/输出集线器419。非PCI输入/输出集线器使用网络492,附接到非PCI输入/输出桥488。即,非PCI输入/输出桥488通过链路490,连接到交换机或路由器494,并且交换机或路由器494还通过链路496附接到非PCI输入/输出集线器419。网络492允许非PCI输入/输出集线器和非PCI输入/输出桥位于不同封装内。非PCI输入/输出桥488具有一个或多个链路,用于通过诸如链路482、484和486之类的PCI链路连接到其他非PCI输入/输出桥或PCI系列输入/输出适配器,诸如PCI系列适配器480和PCI系列适配器474。PCI系列适配器480可以用于通过链路478连接直接附接的存储器476。PCI系列适配器474还可以用于经由例如交换机或路由器472通过链路473连接到网络464。接着转向图5,按照本发明的优选实施例,描述了在PCI总线交易500和PCI-X总线交易520中包含的阶段(phase)。PCI总线交易500描述了传统的PCI总线交易,其形成通过传统PCI的PCI结构所传送的信息的单元。PCI-X总线交易520描述了PCI-X总线交易,其形成通过PCI-X的PCI结构所传送的信息的单元。PCI总线交易500示出了3个阶段地址阶段508;数据阶段512;以及周转周期(turnaroundcycle)156。还描述了下一个传送504的仲裁,它可以与地址、数据和周转周期阶段同时发生。对于PCI,在地址阶段中包含的地址用于将总线交易从适配器路由到主机和从主机路由到适配器。PCI-X交易520示出了5个阶段地址阶段528、属性阶段532;响应阶段560;数据阶段564;以及周转周期566。还描述了下一个传送524的仲裁,它可以与地址、属性、响应、数据和周转周期阶段同时发生。与传统的PCI类似,PCI-X使用在地址阶段中包含的地址,将总线交易从适配器路由到主机和从主机路由到适配器。但是,PCI-X增加了属性阶段532,它包含用于定义总线交易请求方的三个字段,即请求方总线编号544、请求方设备编号548和请求方功能编号552(在此统称为BDF)。所述总线交易还包含杂项(miscellaneous)字段536、标签字段540和字节计数字段556。标签540唯一地标识与在请求方和响应方之间未完成(outstanding)的其他总线交易相关的特定总线交易。字节计数556包含被发送的字节的数量的计数。现在转向图6,按照本发明的一个优选实施例,描述在PCI-Express总线交易中包含的阶段的说明。PCI-E总线交易600形成通过PCI-E的PCI结构所传送的信息的单元。PCI-E总线交易600示出了6个阶段帧阶段608;序号612;报头664;数据阶段668;循环冗余校验(CRC)672;以及帧阶段680。PCI-E报头664包含在PCI-Express规范中定义的一组字段,包括格式620、类型624、请求方ID628、预留632、业务类636、地址/路由640、长度644、属性648、标签652、预留656、字节使能660。具体地说,所述请求方标识符(ID)字段628包含用于定义总线交易请求方的三个字段,即请求方总线编号684、请求方设备编号688和请求方功能编号692。PCI-E报头也包含标签652,它唯一地标识与在请求方和响应方之间的未完成的其他总线交易相关的特定总线交易。长度字段644包含被发送的字节的数量的计数。现在参照图7,按照本发明的一个优选实施例,描述了在PCI系列适配器上的访问控制级的功能方框图。三个访问级是超级特权(super-privilege)物理资源分配级700、特权虚拟资源分配级708和非特权级716。在超级特权物理资源分配级700执行的功能包括但是不限于PCI系列适配器查询;虚拟适配器的建立、修改和删除;工作的递交和检索;物理适配器的复位和恢复;以及物理资源向虚拟适配器实例的分配。PCI系列适配器查询用于确定例如物理适配器类型(例如光纤通道、以太网、iSCSI、并行SCSI)、在物理适配器上支持的功能和由PCI系列适配器支持的虚拟适配器的数量。LPAR管理器执行与超级特权物理资源分配级700相关联的物理适配器资源管理704功能。但是,所述LPAR管理器可以使用系统映像(例如输入/输出主管(hosting)分区),以执行物理适配器资源管理704功能。注意,在本文件中的术语系统映像指的是操作系统的实例。通常多个操作系统示例运行在主机服务器上,并且共享诸如存储器和输入/输出适配器之类的资源。在特权虚拟资源分配级708执行的功能,包括例如,虚拟适配器查询;虚拟适配器资源的分配和初始化;虚拟适配器资源的复位和恢复;通过虚拟适配器资源提交和检索工作;以及对于支持卸载服务的虚拟适配器,向中间件进程或线程实例的虚拟适配器资源的分配和指定。所述虚拟适配器查询用于确定虚拟适配器类型(例如光纤通道、以太网、iSCSI、并行SCSI)和在虚拟适配器上支持的功能。系统映像执行与虚拟资源分配级708相关联的特权虚拟适配器资源管理712功能。最后,在非特权级716执行的功能,包括例如,已经被分配到在非特权级716运行的软件的虚拟适配器资源的查询;通过已经被分配到在非特权级716运行的软件的虚拟适配器资源提交和检索工作。应用执行与非特权级716相关联的虚拟适配器访问(access)库720功能。现在参照图8,示出了按照本发明的一个优选实施例的、对于在主机节点(诸如在图1中所示的小主机节点100、大主机节点124或小集成主机节点144)内的组件(诸如处理器、输入/输出集线器或输入/输出桥800)的描述,所述组件通过PCI-X或PCI-E链路(诸如PCI-X或PCI-E链路808)而附接PCI系列适配器(诸如PCI系列适配器804)。图8示出了当系统映像执行PCI-X或PCI-E总线交易(诸如主机到适配器PCI-X或PCI-E总线交易812)时,所述处理器、输入/输出集线器或输入/输出桥800填入(fillin)在PCI-X或PCI-E总线交易中的总线编号、设备编号和功能编号字段,其中,所述处理器、输入/输出集线器或输入/输出桥800连接到发布所述主机到适配器PCI-X或PCI-E总线交易812的PCI-X或PCI-E链路808。所述处理器、输入/输出集线器或输入/输出桥800具有用于如何填入这三个字段的两个选项它可以或者对于使用处理器、输入/输出集线器或输入/输出桥800的所有软件组件使用相同的总线编号、设备编号和功能编号;或者,它可以对于使用处理器、输入/输出集线器或输入/输出桥800的每个软件组件使用不同的总线编号、设备编号和功能编号。所述交易的始发者或启动者可以是软件组件,诸如系统映像、在系统映像上运行的应用或LPAR管理器。如果处理器、输入/输出集线器或输入/输出桥800对于所有的交易启动者使用相同的总线编号、设备编号和功能编号,则当软件组件启动PCI-X或PCI-E总线交易(诸如主机到适配器PCI-X或PCI-E总线交易812)时,处理器、输入/输出集线器或输入/输出桥800将所述处理器、输入/输出集线器或输入/输出桥800的总线编号置于所述PCI-X或PCI-E总线交易的请求方总线编号字段820(诸如在图5中所示的PCI-X交易的请求方总线编号544字段,或在图6中所示的PCI-E交易的请求方总线编号684字段)内。类似地,处理器、输入/输出集线器或输入/输出桥800将所述处理器、输入/输出集线器或输入/输出桥的设备编号,置于PCI-X和PCI-E总线交易的请求方设备编号824字段(诸如在图5中所示的请求方设备编号548字段,或在图6中所示的请求方设备编号688)内。最后,处理器、输入/输出集线器或输入/输出桥800将所述处理器、输入/输出集线器或输入/输出桥的功能编号,置于PCI-X或PCI-E总线交易的请求方功能编号828字段中,诸如在图5中所示的请求方功能编号552字段,或在图6中所示的请求方功能编号692。处理器、输入/输出集线器或输入/输出桥800还在所述PCI-X或PCI-E总线交易中,置入作为所述交易目标的(如在图8中的适配器资源或地址816所示的)物理或虚拟适配器存储器地址。如果处理器、输入/输出集线器或输入/输出桥800对于每个交易启动者使用不同的总线编号、设备编号和功能编号,则处理器、输入/输出集线器或输入/输出桥800向交易启动者分配,总线编号、设备编号和功能编号。当软件组件启动PCI-X或PCI-E总线交易(诸如主机到适配器PCI-X或PCI-E总线交易812)时,所述处理器、输入/输出集线器或输入/输出桥800将所述软件组件的总线编号置于所述PCI-X或PCI-E总线交易的请求方总线编号820字段,诸如在图5中所示的请求方总线编号544字段,或在图6中所示的请求方总线编号684字段。类似地,处理器、输入/输出集线器或输入/输出桥800将所述软件组件的设备编号,置于所述PCI-X或PCI-E总线交易的请求方设备编号824字段中,诸如在图5中所示的请求方设备编号548字段,或在图6中所示的请求方设备编号688字段。最后,处理器、输入/输出集线器或输入/输出桥800将所述软件组件的功能编号置于PCI-X或PCI-E总线交易的请求方功能编号828字段,诸如在图5中所示的请求方功能编号552字段,或在图6中所示的请求方功能编号692字段。处理器、输入/输出集线器或输入/输出桥800还在PCI-X或PCI-E总线交易中置入作为所述交易目标的物理或虚拟适配器存储器地址,如在图8中的适配器资源或地址字段816所示。图8还示出了当物理或虚拟适配器806执行PCI-X或PCI-E总线交易(诸如适配器到主机PCI-X或PCI-E总线交易832)时,诸如PCI物理序列适配器804之类的PCI系列适配器(其连接到发布适配器到主机PCI-X或PCI-E总线交易832的PCI-X或PCI-E链路808),将与启动所述总线交易的物理或虚拟适配器相关联的总线编号、设备编号和功能编号,置于请求方总线编号、设备编号和功能编号836、840和844字段中。注意,为了支持多于一个的总线或设备编号,PCI系列适配器804必须支持一个或多个内部总线(对于PCI-X适配器,参照关于PCI本地总线规范修订版1.0或1.0a的PCI-X附录;对于PCI-E适配器,参照PCI-Express基本规范修订版1.0或1.0a,其细节通过引用而被在此并入)。为了执行该功能,LPAR管理器708通过向所述物理或虚拟适配器分配总线编号、设备编号和功能编号,将每个物理或虚拟适配器与运行的软件组件相关联。当所述物理或虚拟适配器启动适配器到主机PCI-X或PCI-E总线交易时,PCI系列适配器804将所述物理或虚拟适配器的总线编号置于所述PCI-X或PCI-E总线交易的请求方总线编号836字段,诸如在图5中所示的请求方总线编号544字段,或在图6中所示的请求方总线编号684字段(在图8中被示出为适配器总线编号836)。类似地,PCI系列适配器804将所述物理或虚拟适配器的设备编号,置于所述PCI-X或PCI-E总线交易的请求方设备编号840字段,诸如在图5中所示的请求方设备编号548字段,和在图6中所示的请求方设备编号688字段(在图8中被示出为适配器设备编号840)。PCI系列适配器804将所述物理或虚拟适配器的功能编号,置于PCI-X或PCI-E总线交易的请求方功能编号844字段,诸如在图5中所示的请求方功能编号552字段,或在图6中所示的请求方功能编号692字段(在图8中被示出为适配器功能编号844)。最后,PCI系列适配器804还在PCI-X或PCI-E总线交易中置入与在主机资源或者地址848字段中的物理或虚拟适配器相关联的、并被该物理或虚拟适配器作为目标的软件组件的存储器地址。接着转向图9,描述了虚拟适配器级管理方案。在这种方案下,物理或虚拟主机建立一个或多个虚拟适配器,诸如虚拟适配器1914和虚拟适配器2964,每个包含在诸如PCI适配器932之类的物理适配器的范围内的一组资源;以及与虚拟适配器相关联的一组资源。例如,在虚拟适配器1914中,所述相关联的资源组可以包括处理队列和相关联的资源,诸如904;用于每个PCI物理端口的PCI端口,诸如928;与在所述PCI物理端口上的可能地址之一相关联的PCI虚拟端口,诸如906;用于每个下游物理端口的一个或多个下游物理端口,诸如918和922;与在所述物理端口上的可能地址之一相关联的下游虚拟端口,诸如908和910;以及一个或多个存储器翻译和保护表(TPT),诸如912。接着转向图10,将描述虚拟资源级管理方案。当建立资源时,它与下游相关联,并且可能是上游虚拟端口。在这种情况下,不存在虚拟适配器的概念。在这种方案下,物理或虚拟主机建立一个或多个虚拟资源,诸如虚拟资源1094,它表示处理队列;1092,它表示虚拟PCI端口;1088和1090,表示虚拟下游端口;以及1076,它表示存储器翻译和保护表。本发明使得在多系统映像虚拟服务器内的系统映像能直接地向共享输入/输出适配器暴露所述系统映像的系统存储器的一部分或全部,而不必通过受托的组件,诸如LPAR管理器或管理程序。为了说明,在此描述两个代表性实施例。在图11-15中所述的一个代表性实施例中,翻译和保护表位于所述系统映像或主机服务器中,并且所述系统映像或主机服务器提供地址翻译和存储器保护。在图16-21中所述的一个替代的代表性实施例中,所述翻译和保护表以及范围表位于所述输入/输出适配器上,并且所述输入/输出适配器提供地址翻译和存储器保护。本发明允许在多系统映像虚拟服务器中的系统映像可以直接地向共享I/O适配器暴露所述系统映像的系统存储器的一部分或全部,而不必通过受托的组件,诸如LPAR管理器或管理程序。为了说明,在此说明两个代表性实施例。在图11-15中所述的一个代表性实施例中,翻译和保护表位于所述系统映像或主机服务器上,并且所述系统映像或主机服务器提供地址翻译和存储器保护。在图16-21中所述的一个替代的代表性实施例中,所述翻译和保护表以及范围表位于输入/输出适配器上,并且所述输入/输出适配器提供地址翻译和存储器保护。接着参照图11,描述了用于图示适配器虚拟化方案的图,所述适配器虚拟化方案允许在多系统映像虚拟服务器中的系统映像可以直接地向共享PCI适配器暴露其相关联的系统存储器的一部分或全部,而不必通过受托的组件,诸如LPAR管理器。使用在本文件中描述的机制,系统映像负责注册它要使用LPAR管理器暴露给虚拟适配器或虚拟资源的物理存储器地址。所述LPAR管理器负责将由系统映像暴露的物理存储器地址翻译为用来访问存储器的实际存储器地址,并且翻译成在PCI总线上使用的PCI总线地址。所述LPAR管理器负责使用这些翻译和访问控制来建立主机ASIC,并且向所述系统映像发送与系统映像注册相关联的PCI总线地址。所述系统映像负责向适配器注册虚拟或物理存储器地址以及它们的PCI总线地址。按照本发明的一个优选实施例,主机ASIC负责对于存储器映射的输入/输出操作和进入的DMA和中断操作执行访问控制。所述主机ASIC可以使用来自PCI-X或PCI-E的总线编号、设备编号和功能编号,来帮助执行DMA和中断访问控制。按照本发明的一个优选实施例,所述适配器负责将资源与一个或多个PCI虚拟端口和与一个或多个虚拟下游端口相关联;执行系统映像所请求的注册;并且执行由系统映像请求的输入/输出交易。图11描述了虚拟系统映像,诸如系统映像A1196,它运行在诸如主机存储器1198之类的主机存储器中,并且在其上运行各应用。每个应用具有其本身的虚拟地址空间,诸如App(应用)1VA空间1192和1194以及App2VA空间1190。所述VA空间被操作系统映射为一组物理上连续的物理存储器地址。所述LPAR管理器将物理存储器地址映射到实际存储器地址和PCI总线地址。在图11中,应用1VA空间1194映射为逻辑存储器块(LMB)11186和21184的一部分。类似地,应用1VA空间1192映射为逻辑存储器块(LMB)31182和41180的一部分。最后,应用2VA空间1190映射为逻辑存储器块(LMB)41180和N1178的一部分。系统映像(诸如在图11中描述的系统映像A1196)不直接向诸如PCI适配器1131和1134之类的PCI适配器暴露实际存储器地址,诸如由诸如输入/输出ASIC1168之类的输入/输出ASIC使用来引用主机存储器1198的地址。相反,在图11中描述的主机向系统映像和向下述之一分配地址翻译和保护表(ATPT)虚拟适配器或虚拟资源,一组虚拟适配器和虚拟资源;或向所有的虚拟适配器和虚拟资源分配地址翻译和保护表(ATPT)。例如,被定义为LPARATCE表1188的地址翻译和保护表包含与系统映像A1196和虚拟适配器11114相关联的主机实际存储器地址的列表。在图11中所述的主机也包含间接ATPT索引表,其中,每个项目通过进入的PCI总线、设备、功能编号而被引用,并且包含指向一个地址翻译和保护表的指针。例如,被定义为TVT1160的间接ATPT索引表包含项目列表,其中,每个项目通过进入的PCI总线、设备和功能编号被引用,并且指向ATPT之一,诸如TCE表1188和1170。当输入/输出ASIC1168从虚拟适配器或虚拟资源接收到进入的DMA或中断操作时,它使用与所述虚拟适配器或虚拟资源相关联的PCI总线、设备、功能编号,在诸如TVT1160的间接ATPT索引表中查找项目。输入/输出ASIC1168然后确认在进入的DMA或中断操作中引用的地址或中断,分别位于在由所述间接ATPT索引表项目指向的ATPT中列出的地址或中断的列表中。例如,在图11中,虚拟适配器1131具有虚拟端口1106,它与在PCI端口1128上的总线、设备、功能编号BDF1相关联。当虚拟适配器1131从PCI端口1128发布PCIDMA操作时,所述PCI操作包含与虚拟适配器1131相关联的总线、设备、功能编号BDF1。当在输入/输出ASIC1168上的PCI端口1150接收到PCIDMA操作时,它使用所述操作的总线、设备、功能编号BDF1,在TVT1160中查找与该虚拟适配器或虚拟资源相关联的ATPT。在这个示例中,所述查找产生指向LPARATCE表1188的指针。系统输入/输出ASIC1168然后检查在DMA操作内的地址,以保证它是在LPARATCE表1188内包含的地址。如果是这样,则DMA操作继续,否则DMA操作因为错误而结束。使用在图11中所述的机制,诸如输入/输出ASIC1168之类的主机方输入/输出ASIC还将存储器映射的输入/输出(MMIO)操作隔离至虚拟适配器或虚拟资源的粒度。主机通过下述方式做到这一点使得LPAR管理器或诸如管理程序1167之类的中介,将通过系统映像MMIO操作可访问的PCI总线地址与系统映像相关联,所述系统映像与通过那些PCI总线地址可访问的虚拟适配器或虚拟资源相关联;然后,使得主机处理器或输入/输出ASIC检查每个系统映像MMIO操作引用已经与那个系统映像相关联的PCI总线地址。图11还描述了两个PCI适配器使用虚拟适配器级管理方案的PCI适配器,诸如PCI适配器1131;以及使用虚拟资源级管理方案的PCI适配器,诸如PCI适配器1134。PCI适配器1131将下述内容与主机方系统映像相关联一组处理队列,诸如处理队列1104;动词(verb)存储器地址翻译和保护表或一组动词存储器地址翻译和保护表项目,诸如动词存储器TPT1112;一个下游虚拟端口,诸如虚拟PCI端口1106;以及一个上游虚拟适配器(PCI)ID(VAID),诸如总线、设备、功能编号(BDF)。如果所述适配器支持用户空间外访问(outofuserspaceaccess),诸如将对于InfiniBand主机通道适配器或RDMA使能的NIC的情况,则可以通过下述方式来确认在工作请求中引用的每个数据段通过检查与所述工作请求相关联的队列对具有与由所述数据段引用的存储器区域相同的保护域。但是,这仅仅确认了所述数据段,而不是用于启动所述工作请求的所述存储器映射的输入/输出(MMIO)操作。主机负责确认所述MMIO。图12是图示按照本发明的一个说明性实施例的由PCI适配器使用的存储器地址翻译和保护表的图。通常,PCI适配器可以支持虚拟适配器或虚拟资源管理方案。在图12中的保护表1200可以以下述方式实现完全在主机中的方式,在这种情况下,所述适配器将维护指向所述保护表的一组指针;完全在适配器中的方式;或在主机中,但是有一些项目缓存在所述适配器中的方式。使用键1204(诸如用于InifiniBand适配器的本地键(L_KEY))或用于iWarp适配器的操纵标签(STag),访问在保护表1200中的特定记录。保护表1200包括至少一个记录,其中,每个记录包括访问控制1208、保护域1212、键实例1216、窗口引用计数1220、物理地址翻译(PAT)大小1224、页面大小1228、第一字节偏移(FBO)1232、虚拟地址1236、长度1240和PAT指针1244。PAT指针1244指向物理地址表1248。访问控制1208通常包含关于物理地址表的访问信息,诸如由所述物理地址表引用的存储器是否是有效的,是否可以读取或写入所述存储器,并且如果是,则是否允许本地或远程访问;以及存储器的类型(即共享、非共享或存储器窗口)。保护域1212将存储器区域与队列相关联。即,用于维护队列状态的环境和用于维护存储器区域的状态的地址保护表项目,必须都具有相同的保护域编号。键实例1216提供了关于所述键的当前实例的信息,窗口引用计数1220提供了关于多少窗口当前在引用所述存储器的信息。PAT大小1224提供了关于物理地址表1248的大小的信息。页面大小1228提供了关于存储器页面的大小的信息。FBO1232提供了有关存储器内的第一字节偏移的信息,其被iWarp或InfiniBand适配器使用来引用存储器的第一字节,其使用iWarp或InfiniBand(分别地)块模式输入/输出物理缓冲器类型注册。长度1240提供了关于存储器的长度的信息,因为通常使用开始地址和长度指定存储器区域。图13是按照本发明的一个说明性实施例概述当系统映像执行存储器钉住(pin)操作时执行的功能的流程图。图13概述的功能由LPAR管理器在主机方在运行时执行,以便注册系统映像希望向支持虚拟适配器或虚拟资源管理的PCI适配器暴露的一个或多个存储器地址。当系统映像在步骤1302执行主机存储器钉住操作时,在图13中所述的处理开始。所述系统映像执行钉住操作,以便使得存储器不可分页。通常,在1304,诸如LPAR管理器之类的受托中介截取或接收系统映像的存储器钉住请求,并且首先确定是否所述系统映像实际上拥有所述系统映像要钉住的所述存储器。如果所述系统映像拥有所述存储器,则在1306,LPAR管理器接着确定是否所述ATPT具有用于项目的空间。如果ATPT具有用于项目的空间,则LPAR管理器在1308钉住由系统映像提供的存储器地址。LPAR管理器接着在1310将可以是虚拟或物理地址的存储器地址翻译为实际地址和PCI总线地址,在1312中在ATPT中增加项目,并且在1314向所述系统映像提供存储器地址翻译。即,对于由系统映像提供的虚拟地址,它向PCI总线地址提供虚拟地址。对于由系统映像提供的物理地址,它向PCI总线地址提供物理地址。在步骤1314完成后,所述操作结束。在错误的情况下,诸如当LPAR管理器在1304确定所述系统映像不拥有它要钉住的存储器时,或在1306确定所述ATPT不具有可用的项目时,则LPAR管理器在1316创建错误记录,除去(bringdown)所述系统映像,而所述操作结束。图14是按照本发明的一个说明性实施例概述如下功能的流程图,该功能在系统映像对支持虚拟适配器或虚拟资源管理方案的输入/输出适配器执行存储器注册存储器操作时执行。通常,对于支持InfiniBand或iWAP(RDMA使能的NIC)的输入/输出适配器进行所述存储器注册操作。所述输入/输出适配器可以使用PCI、PCI-E、PCI-X或类似的总线。当系统映像在1402执行注册存储器操作时,所述操作开始。在1404,所述适配器检查是否所述适配器的ATPT具有可用项目。如果在所述适配器的ATPT中项目可用,则在1406,所述适配器执行注册存储器操作,并且所述操作结束。如果在适配器的ATPT中的项目不可用,则在1408创建错误记录。所述操作然后结束。图15是图示按照本发明的一个说明性实施例用于先前注册的存储器的存储器去钉住操作的流程图。图15适用于在图11-14中公开的机制。通常,一个或多个逻辑存储器块(LMB)在配置事件期间与系统映像相关联或脱离关联。配置事件通常不经常发生。相比之下,在LMB中的存储器通常经常地被钉住或去钉住,以便通常在高端服务器上每秒发生几百万次存储器钉住或去钉住。当系统映像在1502执行去钉住操作时,所述操作开始。LPAR管理器在1504去钉住在所述去钉住操作中引用的存储器地址,并且所述操作结束。图16是按照本发明的一个说明性实施例图示适配器存储器地址翻译和保护机制的图,所述适配器存储器地址翻译和保护机制用于将PCI总线地址翻译为PCI适配器的实际存储器地址,所述PCI适配器支持虚拟适配器或虚拟资源管理方案,并且不需要任何主机方地址翻译和保护表来提供输入/输出虚拟化。与在图11-15中所述的机制相比较,在图16-22中描述的本发明的机制提供增强的性能。所述性能增强源自允许系统映像执行存储器注册操作,而不由LPAR管理器截取或接收和处理所述操作。通常,可以通过四种地址访问存储器页面虚拟地址、物理地址、实际地址和PCI总线地址。虚拟地址是在系统映像中运行的用户应用使用来访问存储器的地址。通常,由所述虚拟地址引用的存储器被保护,以便其他的用户应用不能访问所述存储器。物理地址指的是所述系统映像用来访问存储器的地址。实际地址是系统处理器或存储器控制器用来访问存储器的地址。PCI总线地址是输入/输出适配器用来访问存储器的地址。通常,在不支持LPAR管理器(或管理程序)的系统上,当输入/输出适配器访问存储器时,系统映像将虚拟地址翻译为物理地址,将物理地址翻译为实际地址,并且最后将实际地址翻译为PCI总线地址。通常,在支持LPAR管理器(或管理程序)的系统上,当输入/输出适配器访问存储器时,系统映像将虚拟地址翻译为物理地址,然后LPAR管理器(或管理程序)将物理地址翻译为实际地址,然后翻译为PCI总线地址。提供输入/输出访问保护的服务器使用输入/输出地址翻译和保护机制来确定是否输入/输出适配器与PCI总线地址相关联。如果所述适配器与PCI总线地址相关联,则所述输入/输出地址翻译和保护机制用于将PCI总线地址翻译为实际地址。否则发生错误。本讨论的剩余部分图16-21涉及一种机制,借此,LPAR管理器(或管理程序)可以设置等于实际存储器地址的PCI总线地址,并且使用包含每个系统映像可以访问的PCI总线地址组的项目来建立范围表。这允许LPAR管理器(或管理程序)向特定系统映像提供等于对应的PCI总线地址的实际地址,以便所述实际地址不需要进一步的翻译。然后系统映像可以直接地向所述输入/输出适配器暴露所述实际地址,以便所述输入/输出适配器可以使用所述ISID(系统映像标识符)和范围表,确认对于由所述对应的实际地址引用的存储器的访问。在图16中,所述LPAR管理器分配所述系统映像的一个或多个LMB,将所分配的LMB映射到所述系统映像的存储器空间,并且通过本发明公开的机制,向所述适配器暴露作为PCI总线地址的、与所述系统映像相关联的实际存储器地址。换句话说,本发明提供了一种机制,用于系统映像向适配器暴露实际地址而不涉及LPAR管理器,并且用于所述适配器保证所述系统映像与它试图暴露或访问的所述实际地址相关联。如果所述系统映像与它试图暴露的实际地址相关联,则本发明允许所述适配器通过使用实际地址作为PCI总线地址,可直接地访问系统存储器,而不必通过地址翻译和保护机制。除了LPAR管理器(或管理程序)防止系统映像访问的所述范围表之外,所述系统映像可以使用在所有内部适配器结构中的实际地址,所述所有内部适配器结构诸如,例如,保护表、翻译表、工作队列和工作队列元件。另外,所述系统映像可以使用在快速存储器注册操作中提供的页面列表中的实际地址。因此使得所述适配器意识到LMB结构以及特定LMB与系统映像的关联性。使用系统映像ID和范围表,所述适配器可以确认系统映像试图暴露或访问的实际地址实际上与那个系统映像是否相关联。因此,所述适配器被托付来执行存储器访问确认,以防止对系统存储器的未经授权的访问。因此,让适配器确认存储器访问比让LPAR管理器确认存储器访问更快和更有效。诸如虚拟适配器1614之类的适配器负责当执行由系统映像请求的输入/输出操作时的访问控制。所述访问控制可以包括确认对于给定的系统映像对于实际地址的访问被授权;并且确认访问基于系统映像ID和在范围表中的信息被授权。按照本发明的各说明性实施例,所述适配器还负责将资源与一个或多个PCI虚拟端口和一个或多个虚拟下游端口相关联;执行由系统映像请求的存储器注册;并且执行与系统映像相关联的输入/输出交易。像在图11中所述的适配器虚拟化方案那样,诸如系统映像A1696之类的虚拟系统映像,被示出运行在诸如主机存储器1698的主机存储器中。在系统映像上运行的每个应用具有它自己的虚拟地址空间,诸如App1VA空间1692和1694以及App2VA空间1690。操作系统将所述VA空间映射为一组物理上连续的物理存储器地址。例如,应用1VA空间1694映射为逻辑存储器块(LMB)11686和21684的一部分。PCI适配器1631将主机方系统映像与下述内容相关联一组处理队列,诸如处理队列1604;动词存储器地址翻译和保护表或一组动词存储器地址翻译和保护表项目,诸如动词存储器翻译和保护表(TPT)1612;一个下游虚拟端口,诸如虚拟PCI端口1606;以及一个上游虚拟适配器(PCI)ID(VAID),诸如总线、设备、功能编号(BDF1626)。如果所述适配器支持用户空间外访问,诸如将会对于InfiniBand主机通道适配器或RDMA使能的NIC的情况,则通过检查与所述工作请求相关联的队列对具有与由所述数据段引用的存储器区域相同的保护域,可以确认用于启动工作请求的输入/输出操作。动词MemTPT1612是可以在能够支持存储器注册的适配器(诸如InfiniBand和iWarp式适配器)中实现的存储器翻译和保护表。动词MemTPT1612由所述适配器使用来确认对于在主机上的存储器的访问。例如,当所述系统映像要适配器访问所述系统映像的存储器区域时,所述系统映像传送去往所述适配器的PCI总线地址、诸如用于Infiniband适配器的L_key和用于iWarp适配器的Stag之类的长度和键。所述键用于访问在动词MemTPT1612中的项目。动词MemTPT1612通过使用一组变量来控制对于在主机上的存储器区域的访问,所述变量诸如例如本地读取、本地写入、远程读取、远程写入。动词MemTPT1612还包括保护域字段,它用于将在所述表中的项目与队列相关联。如在图17中进一步所述,所述适配器使用这种关联来确定可以使用在动词MemTPT1612中的项目的所述队列组,因为使用动词MemTPT1612项目的所有队列必须都具有相同的保护域。系统映像ID指针还被包括在动词MemTPT1612中。所述系统映像ID指针用于指向对应于特定系统映像(诸如系统映像IDA1696)的范围表项目。以这种方式,使用SIID指针来将动词MemTPT1612项目与关联于所述系统映像的所述逻辑存储器块组相关联。在这个说明性实施例中,虚拟适配器1614也被示出包含范围表1611。范围表1611用于确定系统映像1696可以使用的LMB地址。例如,如在图16中所示,如果在范围表1611中描述了系统映像A1696,则所述范围表可以包括对于LMB11686到LMBN1678的引用,其中,LMB1的项目=PCI总线地址1+LMB1的长度,LMB2的项目=PCI总线地址2+LMB2的长度等等。可以以各种方式来实现范围表1611,所述方式例如包括使用CAM,所述CAM用于在范围表中检查,是否从动词MemTPT1612项目产生的PCI总线地址在由PCI总线地址+长度构成的各范围之一内;使用处理器和代码来执行相同检查;以及使用散列表(hashtable),所述功能基于实际地址或其一部分,作为对于散列函数的输入。由所述CAM、处理器和代码算法以及散列方案的每个使用的所述范围表1611,可以位于内部适配器存储器中、位于主机存储器中或被高速缓存在内部适配器存储器中。LPAR管理器或中介设置等于实际地址的PCI总线地址,并且提供该PCI总线地址至与所分配的LMB相关联的系统映像。所述LPAR管理器负责更新内部适配器的逻辑存储器块结构或范围表1612,以及一起用于存储器访问确认的、在动词MemTPT1612中的系统映像ID字段。所述系统映像负责更新所有其他的内部适配器结构。图17是按照本发明的一个说明性实施例图示输入/输出适配器的存储器地址翻译和保护表的图。通常,所述输入/输出适配器支持虚拟适配器或虚拟资源管理方案,并且不要求任何主机方地址翻译和保护表提供输入/输出虚拟化。在图17中的保护表1700可以被实现为在图16中的动词MemTPT1612。使用键1704访问在保护表1700中的特定记录,所述键1704诸如InfiniBand适配器的本地键(L_KEY)或用于iWap适配器的操纵标签(STag)。保护表1700包括一个或多个记录,其中,每个记录包括访问控制1716、保护域1720、系统映像标识符(SIID1)1724、键实例1728、窗口引用计数1732、PAT大小1736、页面大小1740、虚拟地址1744、FBO1748、长度1752和PAT指针1756。在诸如保护表1700之类的保护表记录中的所有字段可以被所述系统映像写入和读取,除了诸如SIID11724之类的系统映像标识符字段。诸如SIID11724之类的系统映像标识符字段,可以仅仅通过LPAR管理器或通过PCI适配器来被读取或写入。PAT指针1756指向物理地址表1708,它在本实例中是PCI总线地址表。SIID11724指向与特定系统映像相关联的逻辑存储器块(LMB)表或范围表1712。访问控制1716通常包含关于物理地址表的信息,诸如是否由物理地址表引用的存储器是有效的,是否可以读取或读取并且写入存储器,并且如果是这样,则是否允许本地或远程访问;以及存储器类型,即共享的、非共享的或存储器窗口。保护域1720将存储器区域与队列保护域编号相关联。与先前的实现相比较,本发明向在保护表1700中的每个记录添加了诸如SIID11724的系统映像标识符,并且使用SIID11724来引用范围表,诸如与SIID1相关联的范围表1712。键实例1728提供关于所述键的当前实例的信息。窗口引用计数1732提供关于多少窗口当前在引用所述存储器的信息。PAT大小1736提供关于物理地址表1708的大小的信息。页面大小1740提供关于存储器页面的大小的信息。虚拟地址1744提供虚拟地址。FBO1748提供在存储器区域中的第一字节偏移。长度1752提供关于存储器长度的信息。通常使用开始地址和长度来指定存储器区域。PCI总线地址表1708包含与存储器区域(诸如存储器区(iWarp)或存储器窗口(InfiniBand))相关联的地址,它可以直接地被与PCI总线地址表相关联的系统映像访问。PCI总线地址表1708包含一个或多个物理输入/输出缓冲器,并且通过PCI总线地址1758和长度1762来引用每个物理输入/输出缓冲器,或者如果所有的物理缓冲器是相同的大小,则仅仅通过物理地址1758来引用每个物理输入/输出缓冲器。PCI总线地址1758通常包含适配器将使用来访问系统存储器的PCI总线地址。在本发明中,LPAR管理器将设置PCI总线地址,其等于系统存储器控制器可以使用来直接地访问系统存储器的实际地址。如果支持多倍大小(multi-sized)的页面,则长度1762包含被分配的LMB的长度。逻辑存储器块(LMB)表1712包含一个或多个记录,每个记录包括PCI总线地址1766和长度1770。在本发明中,LPAR管理器设置PCI总线地址1766,其等于由系统存储器控制器使用来访问存储器的实际存储器地址,因此不要求在主机上的任何进一步的翻译。长度1770包含LMB的长度。图18是按照本发明的一个说明性实施例图示为系统映像分配存储器的流程图。通常,当(a)初始引导或(b)使用附加资源来重新配置系统映像时,执行所述分配。通常,诸如管理程序或LPAR管理器之类的受托实体进行所述分配。当受托实体接收到为系统映像分配存储器的请求时,所述操作在1802开始。在1804,对于具有范围表的每个输入/输出适配器,受托实体(诸如LPAR管理器或管理程序)分配一组IB或iWARP形式的存储器区或存储器窗口项目(诸如一组保护表1700和PCI总线地址表1708记录),用于系统映像使用。诸如LPAR管理器或管理程序之类的受托实体还向每个保护表1700记录中装入所述系统映像ID字段,诸如SIID11724,所述系统映像的标识符与所述项目相关联。然后所述操作结束。图19是按照本发明的一个说明性实施例,概述由LPAR管理器执行的功能的流程图,该功能是为了对于支持虚拟适配器或虚拟资源管理方案的PCI适配器、创建与系统映像相关联的一个或多个存储器范围表项目,从而在一组存储器地址与系统映像相关联时、或在系统映像钉住它相关联的一组存储器地址时执行的。所述LPAR管理器可以使用这两个方案之一来建立范围表项目。通常,一个或多个逻辑存储器块(LMB)在配置事件期间与系统映像相关联或脱离关联。配置事件通常不常发生。相比之下,通常频繁地钉住或去钉住在LMB中的存储器,使得通常在高端服务器上一秒发生几百万次存储器钉住或去钉住。操作以两种方式之一开始,如果LPAR管理器当LMB与系统映像相关联时建立范围表项目,则在1902当LMB与系统映像相关联时操作开始。接着,在1904,进行确定是否所述系统映像具有支持范围表的输入/输出适配器。如果所述系统映像没有支持范围表的输入/输出适配器,则所述操作结束。如果所述系统映像具有支持范围表的输入/输出适配器,则在1906,检查所述适配器范围表以看是否它具有可用的项目。如果所述适配器范围表具有可用的项目,则在1908,LPAR管理器将物理地址翻译为等于所述PCI总线地址的实际地址。LPAR管理器然后在1910,在包含PCI总线地址和长度、或在PCI总线地址的范围(高和低)的范围表中,建立项目。最后,LPAR管理器在1912向系统映像返回等于实际地址的PCI总线地址,并且所述操作结束。如果LPAR管理器当系统映像请求钉住存储器时建立范围表项目,则在1920当系统映像执行存储器钉住操作时,所述操作开始。在1922,进行检查以保证在存储器钉住操作中引用的存储器与执行存储器钉住的系统映像相关联。如果在1922在存储器钉住操作中引用的存储器不与执行存储器钉住的系统映像相关联,则在1924创建错误记录,且所述操作结束。如果在1922在存储器钉住操作中引用的存储器与执行存储器钉住的系统映像相关联,则在1926,LPAR管理器钉住在存储器钉住操作中引用的存储器地址。接着,在1928,对于这是否是要钉住的LMB的第一地址进行检查。如果在1928,这不是要钉住的LMB的第一地址,则所述操作成功地结束,因为先前已经对于在LMB内的地址进行了钉住请求,所以已经使得全部的LMB可用于那个系统映像的适配器的范围表。如果在1928,这是要钉住的LMB的第一地址,则在1906,检查所述适配器范围表以看是否它具有可用的项目。如果所述适配器范围表具有可用的项目,则在1908,LPAR管理器将物理地址翻译为等于PCI总线地址的实际地址。LPAR管理器然后在1910,在包含PCI总线地址和长度或PCI总线地址的范围(高和低)的范围表中建立项目。然后,LPAR管理器在1912向所述系统映像返回等于实际地址的PCI总线地址,且操作结束。如果在1906适配器的范围表没有可用的项目,则在1924创建错误记录,并且操作结束。图20是按照本发明的一个说明性实施例,概述由LPAR管理器执行的功能的流程图,该功能当系统映像去钉住它相关联的一组存储器地址时执行,以便对于支持虚拟适配器或虚拟资源管理方案的PCI适配器,取消(destroy)与系统映像相关联的一个或多个存储器范围表项目。当LPAR管理器在系统映像去钉住存储器的时候取消范围表项目时,使用该流程图。当系统映像在2002执行去钉住操作时,操作开始。通常,由LPAR管理器对于主机服务器执行去钉住操作,以便取消一个或多个先前注册的存储器范围。所述去钉住可以是InfiniBand或iWARP(RDMA使能的NIC)去钉住。LPAR管理器在2004去钉住(即,使得可分页)与存储器相关联的实际地址。LPAR管理器然后在2006去除在适配器的范围表中的那些实际地址的相关联的项目。接着所述操作结束。图21是按照本发明的一个说明性实施例,图示如何访问系统存储器的流程图。通常,在运行时,支持虚拟适配器或虚拟资源管理的PCI适配器按如下方式确认对于系统存储器的访问。当适配器在2102接收到访问系统映像的存储器区域的请求时,所述操作开始。适配器在2104执行所有的适当存储器和保护检查,诸如IB或IWARP存储器和保护检查。在2106,所述适配器例如通过使用系统映像标识符(SIID)在保护表中查找与系统映像相关联的范围表。在2108,所述适配器然后通过确定在访问请求中的存储器地址是否在适配器的范围表中的项目之一的范围中,从而确定在访问请求中的存储器区域是否有效。如果在所述请求中的存储器地址在所述适配器的范围表的项目之一的范围内,则在2110从物理地址表检索对应的物理地址。在2112,然后例如通过使用所述物理地址作为PCI总线地址,而使用对应的物理地址来访问所请求的存储器。如果在所述请求中的存储器地址不在适配器的范围表中的项目之一的范围内,则在2114创建错误记录,并且将所述系统映像除去(bringdown)。图22是按照本发明的一个说明性实施例,概述由LPAR管理器执行的功能的流程图,该功能当LMB与它相关联的系统映像脱离关联时执行,以便对于支持虚拟适配器或虚拟资源管理方案的PCI适配器,取消与系统映像相关联的一个或多个存储器范围表项目。当LPAR管理器在LMB与系统映像脱离关联的时候取消范围表项目时,使用该流程图。当LMB在2002与系统映像脱离关联时,所述操作开始。然后,对于具有范围表的每个适配器,LPAR管理器在2204取消与系统映像相关联的范围表项目,并且所述操作结束。本发明可以采取下述形式完全硬件实施例、完全软件实施例或包含硬件和软件元件的实施例。在一个优选实施例中,本发明在软件中被实现,所述软件包括但是不限于固件、驻留软件、微代码等。而且,本发明可以采取计算机程序产品的形式,所述计算机程序产品可从计算机可使用或计算机可读介质存取,所述计算机可使用或计算机可读介质提供通过或者结合计算机或任何指令执行系统使用的程序代码。为了本说明,计算机可使用或计算机可读介质可以是可以包含、存储、通信、传播或传送通过或者结合指令执行系统、装置或设备使用的程序。所述介质可以是电子、磁、光、电磁、红外或半导体系统(或装置或设备)或传播介质。计算机可读介质的实例包括半导体或固态存储器、磁带、可移除计算机盘、随机存取存储器(RAM)、只读存储器(ROM)、硬磁盘和光盘。光盘的当前实例包括致密盘-只读存储器(CD-ROM)、致密盘-读/写(CD-R/W)和DVD。适合于存储和/或执行程序代码的数据处理系统将包括至少一个处理器,所述处理器通过系统总线间接地或直接地耦合到存储器元件。所述存储器元件可以包括在实际执行程序代码期间使用的本地存储器、大容量存储体和提供至少一些程序代码的暂时存储的高速缓冲存储器,以便降低必须在执行期间从大容量存储器检索代码的次数。输入/输出或I/O设备(包括但是不限于键盘、显示器、指示设备等)可以或者直接地或者通过中间的输入/输出控制器而耦合到系统。网络适配器还可以耦合到系统,以使得数据处理系统能够变得通过中间私有或公用网络,耦合到其他数据处理系统或远程打印机或存储设备。调制解调器、电缆调制解调器和以太网卡仅仅是网络适配器的几种当前可用类型。本发明的说明已经为了图示和说明被给出,并且不意欲是穷尽性的或限于所公开形式的本发明。许多修改和改变对于本领域内的普通技术人员来说是显然的。所述实施例被选择和描述以便最佳地说明本发明的原理、实际应用,并且使得本领域内的其他普通技术人员能够明白本发明,用于具有适合于所考虑的特定用途的各种修改的各种实施例。权利要求1.一种计算机实现的方法,用于在主机服务器上的多个操作系统实例之间共享输入/输出适配器,所述计算机实现的方法包括在所述多个操作系统实例之间将虚拟存储器与操作系统实例相关联,以形成相关联的存储器;将虚拟存储器翻译为至少一个实际地址,其中,所述至少一个实际地址不需要进一步的翻译;向输入/输出适配器暴露所述至少一个实际地址,其中,所述输入/输出适配器保护由一个操作系统对于与另一个操作系统相关联的至少一个实际地址的访问;并且向所述操作系统实例提供所述至少一个实际地址,以访问所述相关联的存储器。2.按照权利要求1的计算机实现的方法,其中,向输入/输出适配器暴露所述至少一个实际地址来作为外设组件互连总线地址。3.按照权利要求1的计算机实现的方法,其中,所述输入/输出适配器使用第一数据结构、第二数据结构和第三数据结构,保护对于所述至少一个实际地址的访问,所述第一数据结构包含与操作系统实例相关联的一组实际地址范围,所述第二数据结构包含将项目与操作系统实例相关联的每个项目中的字段,所述第三数据结构包含与第二数据结构相关联的一组实际地址。4.按照权利要求3的计算机实现的方法,其中,所述第一数据结构是范围表,所述第二数据结构是保护表,而所述第三数据结构是外设组件互连总线地址表。5.按照权利要求4的计算机实现的方法,其中,仅仅通过软件中介可访问所述范围表,其中,所述软件中介是管理程序或逻辑分区管理器之一。6.按照权利要求4的计算机实现的方法,其中,保护表的每个项目包含将所述项目与操作系统实例相关联的字段,并且,所述字段仅仅通过软件中介可访问,其中,所述软件中介是管理程序或逻辑分区管理器之一。7.按照权利要求4的计算机实现的方法,其中,保护表的每个项目包含与所述项目和在所述项目中的字段相关联的保护控制,其中,在将项目与操作系统实例相关联的项目中的字段没有相关联的保护控制。8.按照权利要求4的计算机实现的方法,其中,通过操作系统实例之一可访问在外设组件互连总线地址表中的每个项目,所述操作系统实例之一注册所述项目或软件中介,其中,所述软件中介是管理程序或逻辑分区管理器之一。9.按照权利要求4的计算机实现的方法,其中,所述输入/输出适配器通过下述方式,在直接存储器地址操作上,保护由一个操作系统实例对于与另一个操作系统相关联的至少一个实际地址的访问使用键来查找保护表;获得在保护表的项目中包含的操作系统标识符,其中,所述操作系统标识符定义与操作系统实例相关联的范围表;从与保护表项目相关联的外设组件互连总线地址表获得所述一组实际地址;将所述操作系统实例正在试图访问的所述一组地址,与在所述外设组件互连总线地址表中包含的所述一组实际地址,以及与在所述范围表中包含的所述一组实际地址相比较;如果所述操作系统实例正在试图访问的所述一组实际地址,处于所述外设组件互连总线地址表中包含的所述一组实际地址、和所述范围表中包含的所述一组实际地址的范围内,则执行所述操作;并且如果所述操作系统实例正在试图访问的所述一组实际地址,处于所述外设组件互连总线地址表中包含的所述一组地址或所述范围表中包含的所述一组地址的范围之外,则产生错误,并且不执行所述操作。10.按照权利要求1的计算机实现的方法,其中,当初始化所述操作系统实例时,执行向所述操作系统实例提供所述至少一个实际地址,以使得适配器能够访问相关联的存储器。11.按照权利要求1的计算机实现的方法,其中,当系统映像执行存储器钉住操作时,执行向所述操作系统实例提供所述至少一个实际地址,以使得适配器能够访问相关联的存储器。12.按照权利要求3的计算机实现的方法,其中,所述第一数据结构被包含在输入/输出适配器中。13.按照权利要求3的计算机实现的方法,其中,所述第一数据结构被包含在系统存储器中,并且被使得可访问输入/输出适配器。14.按照权利要求1的计算机实现的方法,其中,所述输入/输出适配器是物理适配器或虚拟适配器之一。15.一种数据处理系统,用于在主机服务器上的多个操作系统实例之间共享输入/输出适配器,所述数据处理系统包括总线;存储设备,其连接到所述总线,其中,所述存储设备包含计算机可使用的代码;至少一个被管理的设备,其连接到所述总线;通信单元,其连接到所述总线;以及处理单元,其连接到所述总线,其中,所述处理单元执行计算机可使用的代码,以将虚拟存储器与在所述多个操作系统实例中的一个操作系统实例相关联,以形成相关联的存储器,将虚拟存储器翻译为至少一个实际地址,其中,所述至少一个实际地址不需要进一步的翻译,并且向所述输入/输出适配器暴露所述至少一个实际地址,其中,所述输入/输出适配器保护由一个操作系统实例对与另一个操作系统相关联的至少一个实际地址的访问,并且向所述操作系统实例提供所述至少一个实际地址,以访问所述相关联的存储器。16.按照权利要求15的数据处理系统,其中,所述输入/输出适配器使用第一数据结构、第二数据结构和第三数据结构来保护对于所述至少一个实际地址的访问,所述第一数据结构包含与操作系统实例相关联的一组实际地址范围,所述第二数据结构包含将项目与操作系统实例相关联的每个项目中的字段,所述第三数据结构包含与第二数据结构相关联的一组实际地址。17.按照权利要求16的数据处理系统,其中,所述第一数据结构是范围表,所述第二数据结构是保护表,而所述第三数据结构是外设组件互连总线地址表。全文摘要一种计算机实现的方法、装置和系统,用于在主机服务器上的多个操作系统实例之间共享输入/输出适配器。虚拟存储器被分配并与操作系统实例相关联。所述虚拟存储器被翻译为一个或多个实际地址,其中,所述一个或多个实际地址不需要进一步的翻译。向输入/输出适配器暴露一个或多个实际地址。所述操作系统实例被提供一个或多个实际地址,用于访问与所述操作系统实例相关联的虚拟存储器。可以通过输入/输出适配器或通过操作系统实例来执行地址翻译和保护。文档编号G06F17/30GK1983185SQ20061015364公开日2007年6月20日申请日期2006年9月12日优先权日2005年12月12日发明者雷纳多·J·里希奥,瓦蒂姆·马克赫瓦克斯,乔拉·比兰,托马斯·A·格雷格,戴维·F·克拉多克,佐里克·马彻尔斯基,利厄·沙利夫申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1