CN102906702A - 对适配器的地址空间的访客端访问 - Google Patents
对适配器的地址空间的访客端访问 Download PDFInfo
- Publication number
- CN102906702A CN102906702A CN2010800669487A CN201080066948A CN102906702A CN 102906702 A CN102906702 A CN 102906702A CN 2010800669487 A CN2010800669487 A CN 2010800669487A CN 201080066948 A CN201080066948 A CN 201080066948A CN 102906702 A CN102906702 A CN 102906702A
- Authority
- CN
- China
- Prior art keywords
- adapter
- instruction
- visitor
- function
- access
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/468—Specific access rights for resources, e.g. using capability register
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45579—I/O management, e.g. providing access to device drivers or storage
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2213/00—Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F2213/0038—System on Chip
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Storage Device Security (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明涉及对适配器的地址空间的访客端访问。授权机制允许执行访客端操作***的主机授予访客端直接访问适配器函数的地址空间而无需主机干涉的许可。此访问通过基于适配器函数的架构实现的指令。主机还具有干涉指令的执行的能力,如果需要的话。
Description
技术领域
本发明一般涉及计算环境的输入/输出处理,具体而言,涉及与计算环境的适配器的相关联的虚拟处理。
背景技术
计算环境可包括一种或多种类型的输入/输出设备,包括各种类型的适配器。一种类型的适配器是***组件互连(PCI)或快速***组件互连(PCIe)适配器。此适配器包括在适配器和适配器被附接到的***之间传递数据所使用的一个或多个地址空间。PCI规范可从网址www.pcisig.com/home获得。
在某些***中,耦合到适配器的中央处理单元(CPU)的地址空间的一部分被映射到适配器的地址空间,允许访问存储器的CPU指令直接操纵适配器的地址空间中的数据。地址空间的这种映射有时称为存储器映射的I/O。
在2008年3月4日颁发给Madukkarumukumana等人的标题为“Fault Processing for Direct Memory Access Address Translation”的美国专利No.7,340,582中,本发明的实施例是处理直接存储器访问地址转换中的故障的技术。寄存器集存储用于对由I/O设备所请求的输入/输出(I/O)事务所生成的故障的故障处理的全局控制或状态信息。地址转换结构将访客端(guest)物理地址转换为主机物理地址。访客端物理地址对应于I/O事务,并被映射到域。地址转换结构具有至少与域相关联的条目以及用于故障处理的域特定的控制信息。
在2008年10月28日颁发给Schoinas等人的标题为“AddressTranslation for Input/Output Devices Using HierarchicalTranslation Tables”的美国专利No.7,444,493中,本发明的实施例是执行地址转换的技术。表结构通过指定访客端物理地址的输入/输出(I/O)事务的源标识符索引,并被I/O设备请求将I/O设备映射到分配给I/O设备的域。地址转换结构将访客端物理地址转换为对应于I/O事务的主机物理地址。
2009年11月3日颁发给Kjos等人的标题为“PartiallyVirtualizing an I/O Device for Use By Virtual Machines”的美国专利No.7,613,847描述了一种计算机***,该计算机***包括物理计算机,以及可在物理计算机上执行并被配置成创建适于控制物理计算机的至少一个访客端操作***的仿真的虚拟机监视器。该计算机***还包括可在物理计算机上执行的主机,所述主机代表虚拟机监视器以及至少一个访客端操作***管理耦合到物理计算机的物理资源。主机适于虚拟化***组件互连(PCI)配置地址空间,从而至少一个访客端操作***直接并且在不存在I/O仿真的情况下控制PCI输入/输出(I/O)设备。
发明内容
在一个实施例中,向在主机上执行的访客端操作***提供对适配器的地址空间的直接访问而没有主机的干涉。
通过提供用于在计算环境中提供对适配器的访问的计算机程序产品,克服了现有技术的缺点并提供了另外的优点。计算机程序产品包括可以由处理电路读取的并存储由处理电路执行以便执行方法的指令的计算机可读存储介质。该方法包括,例如,执行包括访问适配器的请求的访客端指令;确定所述访客端指令是否被允许直接访问所述适配器;响应于被允许,所述执行直接地访问所述适配器的一个或多个地址空间而没有主机干预;以及,响应于不被允许,所述执行导致对主机操作***的拦截。
此处描述并要求保护涉及本发明的一个或多个方面的方法和***。
通过本发明的技术来实现其他特点和优点。此处将详细描述本发明的其他实施例和方面,它们被视为所要求保护的发明的一部分。
附图说明
现在将参考各个附图,只作为示例,对本发明的优选实施例进行描述,其中:
图1A描绘了包括并使用本发明的一个或多个方面的计算环境的一个实施例;
图1B描绘了根据本发明的一个方面所使用的设备表项目的一个示例;
图1C描绘了包括并使用本发明的一个或多个方面的中央处理综合体(complex)的一个实施例;
图2描绘了根据本发明的一个方面的适配器函数(adapterfunction)的地址空间的一个示例;
图3A描绘了根据本发明的一个方面所使用的函数表项目的一个示例;
图3B描绘了根据本发明的一个方面所使用的函数句柄的一个实施例;
图4A描绘了根据本发明的一个方面的从适配器函数读取数据的PCI Load(PCI加载)指令的一个示例;
图4B描绘了根据本发明的一个方面的向适配器函数写入数据的PCI Store(PCI存储)操作的一个实施例;
图4C描绘了根据本发明的一个方面的向适配器函数写入数据的Store Block(存储块)操作的一个实施例;
图5描绘了根据本发明的一个方面的为允许对适配器函数的地址空间进行访客端直接访问的由主机执行的初始化的一个实施例;
图6描绘了根据本发明的一个方面的代表访客端执行的授权处理的一个实施例;
图7A描绘了根据本发明的一个方面所使用的Call LogicalProcessor(调用逻辑处理器)指令的一个实施例;
图7B描绘了根据本发明的一个方面的由图7A的调用逻辑处理器指令所使用的请求块的一个实施例;
图7C描绘了根据本发明的一个方面的由图7A的调用逻辑处理器指令所提供的响应块的一个实施例;
图8描绘了根据本发明的一个方面的启用PCI函数的逻辑的一个实施例;
图9A描绘了根据本发明的一个方面所使用的Modify PCIFunction Controls(修改PCI函数控制)指令的一个实施例;
图9B描绘了根据本发明的一个方面的由图9A的修改PCI函数控制指令所使用的字段的一个实施例;
图9C描绘了根据本发明的一个方面的由图9A的修改PCI函数控制指令所使用的另一字段的一个实施例;
图9D描绘了根据本发明的一个方面所使用的函数信息块(FIB,Function Information Block)的内容的一个实施例;
图10A描绘了根据本发明的一个方面的修改PCI函数控制指令的逻辑的概述的一个实施例;
图10B描绘了根据本发明的一个方面的可以由修改PCI函数控制指令指定的设置拦截控制操作的一个实施例;
图11A描绘了根据本发明的一个方面所使用的PCI加载指令的一个实施例;
图11B描绘了根据本发明的一个方面的由图11A的PCI加载指令所使用的字段的一个实施例;
图11C描绘了根据本发明的一个方面的由图11A的PCI加载指令所使用的另一字段的一个实施例;
图12A-12B描绘了根据本发明的一个方面的执行PCI加载操作的逻辑的一个实施例;
图13A描绘了根据本发明的一个方面所使用的PCI Store(PCI存储)指令的一个实施例;
图13B描绘了根据本发明的一个方面的由图13A的PCI存储指令所使用的字段的一个实施例;
图13C描绘了根据本发明的一个方面的由图13A的PCI存储指令所使用的另一字段的一个实施例;
图14A-14B描绘了根据本发明的一个方面的执行PCI存储操作的逻辑的一个实施例;
图15A描绘了根据本发明的一个方面所使用的PCI Store Block(PCI存储块)指令的一个实施例;
图15B描绘了根据本发明的一个方面的由图15A的PCI存储块指令所使用的字段的一个实施例;
图15C描绘了根据本发明的一个方面的由图15A的PCI存储块指令所使用的另一字段的一个实施例;
图15D描绘了根据本发明的一个方面的由图15A的PCI存储块指令所使用的再一个字段的一个实施例;
图16A-16B描绘了根据本发明的一个方面的执行PCI存储块操作的逻辑的一个实施例;
图17描述了包括本发明的一个或多个方面的计算机程序产品的一个实施例;
图18描绘了包括并使用本发明的一个或多个方面的主机计算机***的一个实施例;
图19描绘了包括并使用本发明的一个或多个方面的计算机***的另一个示例;
图20描绘了包括并使用本发明的一个或多个方面的包括计算机网络的计算机***的的另一示例;
图21描绘了包括并使用本发明的一个或多个方面的计算机***的各种元件的一个实施例;
图22A描绘了包括并使用本发明的一个或多个方面的图21的计算机***的执行单元的一个实施例;
图22B描绘了包括并使用本发明的一个或多个方面的图21的计算机***的分支单元的一个实施例;
图22C描绘了包括并使用本发明的一个或多个方面的图21的计算机***的加载/存储单元的一个实施例;以及
图23描绘了包括并使用本发明的一个或多个方面的仿真的主机计算机***的一个实施例。
具体实施方式
在一个实施例中,提供了授权能力,该能力允许执行访客端操作***的主机(例如,主机操作***)授予访客端直接访问适配器的地址空间而无需主机干涉的许可。
如此处所使用的,术语“适配器”包括任何类型的适配器(例如,存储器适配器、网络适配器、处理适配器、PCI适配器、密码适配器、其他类型的输入/输出适配器等等)。在一个实施例中,适配器包括一个适配器函数。然而,在其他实施例中,适配器可包括多个适配器函数。无论适配器包括一个适配器函数还是多个适配器函数,本发明的一个或多个方面都适用。此外,在此处所呈现的示例中,适配器与适配器函数(例如,PCI函数)可互换地使用,除非另作说明。
参考图1A描述了包括并使用本发明的一个或多个方面的计算环境的一个实施例。在一个示例中,计算环境100是由IBM公司所提供的System服务器。System基于由IBM公司所提供的在标题为“z/Architecture Principles of Operation”(IBM Publication No.SA22-7832-07,2009年2月)的出版物中描述了关于的细节。System和是位于纽约Armonk的IBM公司的注册商标。此处所使用的其他名称可以是IBM公司或其他公司的注册商标、商标或产品名称。
在一个示例中,计算环境100包括通过存储器控制器106耦合到***存储器104(也叫做主存储器)的一个或多个中央处理单元(CPU)102。为访问***存储器104,中央处理单元102发出包括用来访问***存储器的地址的读取或写入请求。请求中所包括的地址通常不直接可被用来访问***存储器,因此,它被转换为在访问***存储器时可直接使用的地址。地址是通过转换机制(XLATE)108转换的。例如,地址使用例如动态地址转换(DAT)被从虚拟地址转换为实的或绝对地址。
包括地址(经过转换的,在必要时)的请求由存储器控制器106接收。在一个示例中,存储器控制器106包括硬件并被用来仲裁对***存储器的访问,以及维护存储器的一致性。此仲裁是对于从CPU 102接收到的请求以及对于从一个或多个适配器110接收到的请求执行的。类似于中央处理单元,适配器向***存储器104发出访问***存储器的请求。
在一个示例中,适配器110是包括一个或多个PCI函数的***组件互连(PCI)或快速PCI(PCIe)适配器。PCI函数发出请求,该请求通过一个或多个交换机(例如,PCIe交换机)114,被路由到输入/输出集线器112(例如,PCI集线器)。在一个示例中,输入/输出集线器包括硬件(包括一个或多个状态机),并通过I/O到存储器总线120耦合到存储器控制器106。
输入/输出集线器包括例如接收来自交换机的请求的根综合体(root complex)116。请求包括输入/输出地址,该地址被提供到地址转换和保护单元118,该单元118访问用于该请求的信息。作为示例,请求可包括用来执行直接存储器访问(DMA)操作或请求消息中断(MSI)的输入/输出地址。地址转换和保护单元118访问用于DMA或MSI请求的信息。作为特定示例,对于DMA操作,可以获取信息以转换地址。然后,经过转换的地址被转发到存储器控制器以访问***存储器。
在一个示例中,如参考图1B所描述的,用于由适配器所发出的DMA或MSI请求的信息是从位于I/O集线器(例如,在地址转换和保护单元)中的设备表132的设备表条目(DTE)130获得的。设备表条目包括适配器的信息,每一适配器都具有至少一个与其相关联的设备表条目。例如,分配给适配器的每个地址空间(在***存储器中)有一个设备表条目。DTE中的信息可以取决于被提供到适配器的服务(例如,地址转换、中断等等)。对于从适配器(例如,PCI函数138)发出的请求,使用请求中所提供的请求者ID来定位设备表条目。
现在参考图1C,在计算环境的又一实施例中,作为中央处理单元102中的一个或多个的补充或代替,中央处理综合体耦合到存储器控制器106。在此特定示例中,中央处理综合体150提供虚拟机支持。中央处理综合体150包括例如一个或多个虚拟机152、一个或多个中央处理器154,以及至少一个管理程序156,下面将对它们中的每一个进行描述。
对中央处理综合体的虚拟机支持提供操作大量的虚拟机的能力,每一虚拟机都能够托管诸如z/Linux之类的访客端操作***158。每一虚拟机152都能够充当单独的***。即,每一虚拟机都可以独立地重置、托管访客端操作***,并与不同的程序一起操作。在虚拟机中运行的操作***或应用程序看起来好像可以访问完全并完整的***,但实际上只有***的一部分可用。
在此特定示例中,虚拟机的模型是V=V模型,其中,虚拟机的存储器被虚拟存储器备份(back),代替实际存储器。每一虚拟机都具有虚拟线性存储器空间。物理资源被诸如VM管理程序之类的管理程序156拥有,共享的物理资源根据需要被管理程序分派到访客端操作***,以满足它们的处理需求。此V=V虚拟机模型假设,访客端操作***和物理共享机器资源之间的交互被VM管理程序控制,因为大量的访客端通常将管理程序从简单地分区并将硬件资源分配到配置的访客端中排除。在标题为“z/VM:Running Guest OperatingSystems”(IBM Publication No.SC24-5997-02,2001年10月)的IBM出版物中进一步描述了V=V模型的一个或多个方面。
中央处理器154是可分配到虚拟机的物理处理器资源。例如,虚拟机152包括一个或多个逻辑处理器,每一个逻辑处理器都表示可以被动态地分配给虚拟机的物理处理器资源154的全部或一些。虚拟机152是由管理程序156管理的。作为示例,管理程序可以在运行于处理器154上的固件中实现,或者也可以是在机器上执行的主机操作***的一部分。在一个示例中,管理程序156是诸如由位于纽约Armonk的IBM公司所提供的之类的VM管理程序。在标题为“z/VM:General Information Manual”(IBM Publication No.GC24-5991-05,2003年5月)的IBM出版物中描述了的一个实施例。
如此处所使用的,固件包括例如处理器的微代码、毫代码和/或宏码。它包括例如较高级别的机器代码的实现中所使用的硬件级别指令和/或数据结构。在一个实施例中,它包括例如通常作为微代码提供的专有代码,其包括底层硬件特定的可信软件或微代码并控制操作***对***硬件的访问。
如上文所描述的,适配器可以向处理器发出请求各种操作的请求,诸如直接存储器访问、消息信号通知中断等等。进一步地,处理器可以向适配器发出请求。例如,返回到图1B,处理器102可以发出访问适配器函数138的请求。请求从处理器通过I/O集线器112和一个或多个交换机114被路由到适配器函数。在此实施例中,未示出存储器控制器。然而,I/O集线器可以直接或通过存储器控制器耦合到处理器。
作为示例,在处理器内执行的操作***140向适配器函数发出请求特定操作的指令。在此示例中,由操作***所发出的指令是I/O基础结构所特定的。即,由于I/O基础结构基于PCI或PCIe(此处这两者都被称为PCI,除非另作说明),因此指令是PCI指令。示例PCI指令包括PCI Load(PCI加载)、PCI Store(PCI存储)和PCI StoreBlock(PCI存储块),仅举几个例子。虽然在此示例中I/O基础结构和指令基于PCI,但是在其他实施例中,也可以使用其他基础结构和对应的指令。
在一个特定示例中,指令被指向适配器函数的地址空间内的特定位置。例如,如图2所示,适配器函数138包括被定义为多个地址空间的存储器200,例如包括:配置空间202(例如,PCI函数的PCI配置空间);I/O空间204(例如,PCI I/O空间);以及一个或多个存储器空间206(例如,PCI存储器空间)。在一个实施例中,这些地址空间被映射到只有通过固件才可寻址的存储器。如此,这些空间的抽象被呈现给操作***并可由PCI指令访问。指令被定向到特定地址空间和该地址空间内的特定位置。这确保了发出指令的配置(例如,操作***、LPAR、处理器、访客端等等)被授权访问适配器函数。在其他实施例中,可以提供更多,更少或不同的地址空间。
为促进对指令的处理,使用存储在一个或多个数据结构中的信息。包括关于适配器的信息的一个这样的数据结构是存储在例如安全存储器中的函数表300。如图3A所示,在一个示例中,函数表300包括一个或多个函数表条目(FTE)302。在一个示例中,每个适配器函数有一个函数表条目。每一函数表条目302都包括在与其适配器函数相关联的处理中要使用的信息。在一个示例中,函数表条目302包括,例如:
实例编号308:此字段指出与函数表条目相关联的PCI函数句柄的特定实例;
设备表条目(DTE)索引1...n 310:可以有一个或多个设备表索引,而每一索引都是定位设备表条目(DTE)的设备表的索引。每个适配器函数有一个或多个设备表条目,且每一条目都包括与其适配器函数相关联的信息,包括用于处理适配器函数的请求(例如,DMA请求、MSI请求)的信息,以及涉及到适配器函数的请求的信息(例如,PCI指令)。每一设备表条目都与分配给适配器函数的***存储器内的一个地址空间相关联。适配器函数可以在分配给适配器函数的***存储器内具有一个或多个地址空间。
繁忙指示符312:此字段指出适配器函数是否繁忙;
永久错误状态指示符314:此字段指出适配器函数是否处于永久错误状态;
恢复已启动指示符316:此字段指出是否对于适配器函数已经启动恢复;
权限指示符318:此字段指出试图启用适配器函数的操作***是否具有权限这样做;
启用指示符320:此字段指出适配器函数是否启用(例如,1=启用,0=禁用);
请求者标识符(RID)322:这是适配器函数的标识符,并可包括例如总线编号、设备编号和函数编号。
此字段被例如用于访问适配器函数的配置空间。例如,配置空间可以通过在由操作***(或其他配置)向适配器函数所发出的指令中指定配置空间来被访问。在指令中指定了到配置空间的偏移,以及用来定位包括RID的适当的函数表条目的函数句柄。固件接收指令并确定它是针对配置空间的。因此,它使用RID来生成到I/O集线器的请求,以及I/O集线器创建访问适配器的请求。适配器函数的位置基于RID,以及偏移指定到适配器函数的配置空间的偏移。
基地址寄存器(BAR)(1到n)324:此字段包括多个无符号整数,表示为BAR0-BARn,它们与最初指定的适配器函数相关联,其值也被存储在与适配器函数相关联的基地址寄存器中。每一BAR都指定适配器函数内的存储器空间或I/O空间的起始地址,还指出地址空间的类型,即,它是64位还是32位存储器空间,或32位I/O空间,作为示例;
在一个示例中,它用于对适配器函数的存储器空间和/或I/O空间的访问。例如,访问适配器函数的指令中所提供的偏移和与在指令中指定的地址空间相关联的基地址寄存器中的值相加,以获取被用来访问适配器函数的地址。指令中所提供的地址空间标识符标识要被访问的适配器函数内的地址空间以及要使用的对应的BAR;
大小1....n 326:此字段包括多个无符号整数,表示为SIZE0-SIZEn。Size(大小)字段的值,当是非零时,表示每一地址空间的大小,每一条目都对应于前面所描述的BAR。
下面将描述关于BAR和Size的进一步的细节。
1.当BAR对于适配器函数没有实现时,BAR字段以及其对应的大小字段两者都被保存为零。
2.当BAR字段表示I/O地址空间或者32比特存储器地址空间时,对应的大小字段是非零的,并表示地址空间的大小。
3.当BAR字段表示64比特存储器地址空间时,
a.BARn字段表示最低有效地址比特。
b.下一连续的BARn+1字段表示最高有效地址比特。
c.对应的SIZEn字段是非零的,并表示地址空间的大小。
d.对应的SIZEn+1字段不是有意义的,并被保存为零。
内部路由信息328:此信息被用来执行到适配器的特定路由。它包括例如节点、处理器芯片、以及集线器寻址信息,作为示例。
状态指示符330:这提供加载/存储操作是否被阻止的指示,以及其他指示。
在一个示例中,繁忙指示符、永久错误状态指示符、以及恢复已启动指示符是基于由固件所执行的监视而设置的。进一步地,权限指示符例如基于策略来设置。BAR信息基于在由处理器(例如,处理器的固件)进行的总线测量(bus walk)过程中发现的配置信息。其他字段可以基于配置、初始化和/或事件而设置。在其他实施例中,函数表条目可包括更多、更少或不同的信息。所包括的信息可以取决于由适配器函数所支持的或对于适配器函数启用的操作。
为定位包括一个或多个条目的函数表中的函数表条目,在一个实施例中,使用函数句柄。例如,函数句柄的一个或多个比特被用作函数表的索引以定位特定的函数表条目。
参考图3B,描述了关于函数句柄的更多细节。在一个示例中,函数句柄350包括指出是否启用了PCI函数句柄的启用指示符352;标识函数的PCI函数编号354(这是静态标识符,在一个实施例中,是对函数表的索引);以及指出此函数句柄的特定实例的实例编号356。例如,每当启用函数句柄时,实例编号会递增以提供新实例编号。
在一个实施例中,适配器函数被***固件初始化,并被分配给操作***或其他配置(如此处所使用的,操作***包括设备驱动程序)。随后,操作***初始化每一分配的函数以便可以使用它。例如,操作***首先确定哪些适配器函数被分配给配置。在一个示例中,操作***发出进行此判断的列表PCI函数(list PCI function)命令。此命令返回分配给操作***的适配器函数的函数句柄的列表。作为示例,从函数表中检索此信息。具体而言,在初始化时间,或在适配器热插拔之后,固件执行总线测量以确定适配器的位置并确定其基本特点。此信息由固件存储到每一个适配器的函数表条目中。然后,通过列表命令来检索它。
对于由列表命令返回的每一个函数句柄,操作***确定由句柄指定的函数的特定特征。在一个示例中,这是通过发出从函数表条目中获取此信息的查询PCI函数(query PCI function)命令来完成的。在另一个示例中,还通过例如查询函数组(query function group)命令,来获取对一组适配器函数通用的特征。即,基于给定***I/O基础结构和固件和I/O集线器的能力的组信息可以存储在函数表条目(或其他位置),并通过查询组命令来检索。
对于操作***希望使用的每一个适配器函数,操作***启用适配器函数,并获取该函数的已启用的句柄。在一个示例中,使用调用逻辑处理器(CLP)的设置PCI函数(set PCI function)命令来执行启用。启用包括例如执行一个或多个有效性检查(例如,对函数句柄,函数表条目等等),并响应于通过有效性检查,在与适配器函数相关联的函数表条目、设备表条目和函数句柄中设置启用指示符。
在启用函数之后,在适配器函数特定的设备表条目和/或函数表条目中设置各种操作参数。在一个示例中,使用修改PCI函数控制(Modify PCI Function Control)指令来设置这些参数。具体而言,在一个示例中,将信息从函数信息块复制到与函数相关联的设备表条目和/或函数表条目中。例如,使用在修改PCI函数控制指令中指定的函数信息块来修改与在指令中指定的适配器函数相关联的选择的设备表条目和/或函数表条目。函数信息块的被用来修改设备表条目和/或函数表条目的参数取决于在指令中所提供的操作控制。作为示例,操作控制可以指定注册/取消注册适配器中断、注册/取消注册地址转换、复位错误状态、复位加载/存储块、设置PCI函数测量参数以及设置拦截控制。
在启用适配器函数之后,如上文所描述的,可以使用一个或多个指令来给操作***提供配置适配器函数、控制适配器函数(启动I/O操作)、以及读取其状态的能力。这些指令包括例如PCI加载指令、PCI存储指令、以及PCI存储块指令。这些指令按如下方式与适配器函数的配置、I/O以及存储器空间进行交互:
如图4A所示,PCI加载指令400可使例如在CPU 401上执行的操作***将例如PCI函数的配置空间402、I/O空间404或存储器空间406的多达8字节的内容读取到通用寄存器410中。
例如,在PCI加载指令的执行过程中,执行若干个有效性检查。如果这些检查成功,那么继续从适配器函数的指定的地址空间中的计算出的位置获取数据,并响应加载请求返回数据。如果指定的地址空间是配置空间,则使用RID来生成用来获取数据的配置读取请求。然而,如果它是I/O或存储器空间,则将从函数表条目获得的BAR起始地址添加到指令中所提供的偏移中,以计算出数据地址,该数据地址用于被转发到适配器函数的DMA读取请求数据包中,以获取数据。
如图4B所示,PCI存储指令414可使例如操作***从通用寄存器416写入(即,改变)例如PCI函数的配置空间402、I/O空间404或存储器空间406的多达8字节的内容。
例如,在PCI存储指令的执行过程中,执行若干个有效性检查。如果成功,在继续将数据存储在适配器函数的地址空间中的指定的位置。如果将在其中存储数据的位置是配置空间,那么使用从函数表条目获得的请求者ID来生成向适配器函数的配置写入请求。然而,如果将向I/O地址空间或存储器空间存储,那么将从函数表条目获得的BAR起始地址添加到指令中所提供的偏移中,以计算出数据地址,该数据地址包括在向适配器函数的DMA写入请求数据包中。然后,数据被存储在指定的位置。
如图4C所示,PCI存储块指令可使例如操作***从主存储器420写入(即,改变)例如PCI函数的存储器空间406的32、64、128或256字节。
根据本发明的一个方面,适配器函数将对于在主机(也叫做,主程序或主机操作***)上执行的访客端(例如,可分页的存储模式访客端;即,V=V访客端)被虚拟化。在一个示例中,在中,在解释的级别2,通过Start Interpretive Execution(SIE,开始解释执行)指令来解释性地执行可分页的访客端。例如,逻辑分区(LPAR)管理程序执行SIE指令来开始在物理的固定存储器中进行逻辑分区。如果是该逻辑分区中的操作***,则它发出在其V=V(虚拟)存储器中执行其访客端(虚拟)机器的SIE指令。因此,LPAR管理程序使用级别1 SIE,而管理程序使用级别2 SIE。
为虚拟化访客端,主机授权访客端独家使用分配给主机的适配器函数。授权可以保证成功地解释各种指令,包括PCI加载指令、PCI存储指令以及PCI存储块指令。即,当这些指令是由访客端所发出的而没有错误或异常时,则它们在没有主机干涉的情况下执行。如此,对于这些指令,消除了由主机所产生的解释性执行进入和退出开销、和指令仿真开销。下面将描述此授权机制。
参考图5和6描述了与授权访客端访问适配器函数相关联的逻辑的一个实施例。具体而言,图5描绘了由主机代表访客端(例如,访客端处理器)执行的初始化的一个实施例,而图6描绘了响应于访客端(例如,访客端处理器)执行指令而执行的授权检查的一个实施例。在此实施例中,指令是专门针对PCI函数实现的PCI指令。在其他实施例中,可以使用对于其他架构的其他指令。
参考图5,一开始,主机分配一个或多个适配器函数,供访客端专门使用,步骤500。例如,分配给主机的适配器函数中的一个或多个通过例如指出哪些适配器函数与访客端相关联的分配表,或通过作出这些关联的命令等等,被分配给访客端。主机希望PCI加载、PCI存储和PCI存储块指令,作为示例,被为访客端解释。如此,如下面所描述的,主机代表访客端为分配给访客端的每一个函数执行某些初始化操作。其他不是性能关键的并控制适配器的配置的指令(例如,修改PCI函数控制)通常可以被主机拦截。
对于分配的适配器函数,步骤502,主机通过将授权令牌与适配器函数相关联,来授权访客端解释PCI指令,步骤504。授权令牌是访客端的唯一令牌。在一个特定示例中,它是访客端中断状态区域(GISA)的指定,在指令执行过程中被用来判断访客端是否被允许对适配器进行访问。在此实施例中,GISA指定是唯一令牌,因为每个访客端有一个GISA,不管有多少虚拟CPU(状态描述)包括访客端。GISA指定(例如,32位值)被包括在每一状态描述中,该状态描述可被主机访问,而不被访客端访问。虽然在一个示例中,GISA指定被用作令牌,但是在另一示例中,可以使用任何唯一值。
在一个示例中,响应于访客端执行拦截到主机的Call LogicalProcessor(CLP,调用逻辑处理器)的set PCI function(设置PCI函数)命令,执行授权令牌的关联。授权令牌的关联是通过主机代表访客端执行设置PCI函数命令并指定访客端的GISA指定作为授权令牌来完成的。在指令的执行过程中,GISA指定被从命令请求块复制,并放在与被分配的适配器函数相关联的函数表条目中。下面将更全面地对此进行描述。
进一步地,主机允许访客端为适配器函数解释指令,步骤506。例如,主机确保适配器函数的函数表条目中的拦截控制指示符被设置为零。在一个示例中,可以使用修改PCI函数控制指令来设置此控制,下面将进一步对此进行描述。
此后,如果有更多函数待分配,查询508,那么处理返回到步骤502。否则,主机允许访客端解释与访客端相关联的所有适配器函数的指令,步骤510。在一个示例中,这是通过设置解释指示符来执行的。此指示符存储在例如访客端的状态描述中。
在初始化之后并响应于访客端执行诸如PCI加载、PCI存储或PCI存储块指令之类的指令,如果某些检查有效,则指令被解释,包括确保解释工具(facility)(称为PCI加载/存储解释)安装在主机配置中。这是通过在例如控制块中设置的指示符来确定的。下面将参考图6来描述进一步的有效性检查。
在一个实施例中,响应于访客端(例如,访客端处理器)执行PCI指令中的一个指令并假设工具被安装,步骤602,就访客端是否被允许进行PCI加载/存储解释作出判断,查询604。具体而言,例如在控制块中提供控制以使主机对于分配给访客端的所有PCI函数,启用和禁用对PCI指令的解释。如果设置了控制(例如,设置为1),则访客端被允许执行PCI加载/存储解释。如果未设置控制,那么访客端不被允许。主机可以动态地将此指示符从设置变为复位,当需要时,干涉指令的执行。
进一步地,就对于PCI加载/存储解释是否启用适配器函数作出另一判断,查询606。例如,提供控制以使主机通过PCI函数基在PCI函数上启用和禁用对PCI指令的解释。在一个示例中,此控制是函数表条目中的拦截控制指示符,其值是从函数信息块获得的(在一个示例中,作为修改PCI函数控制指令的操作数提供的)。如果在一个示例中,此指示符被设置为例如1,那么就访客端是否被授权为此适配器函数发出PCI加载、PCI存储、以及PCI存储块指令作出进一步的判断,查询608。
在一个示例中,为确定访客端是否被授权对于指定的适配器函数发出PCI加载、PCI存储或PCI存储块指令,使用授权令牌。例如,将执行访客端的状态描述的授权令牌的值与当主机允许并授权访客端(例如,通过CLP指令的设置PCI函数命令)时指定的FTE中的授权令牌进行比较。如果访客端被授权,那么就由指令操作数(由访客端执行的PCI指令的)所指定的PCI函数句柄是否是启用作出进一步的判断,查询610。在一个示例中,此判断是通过检查句柄中的启用位来作出的。如果启用了函数句柄,那么访客端可以执行PCI指令,无需主机干涉。
然而,如果有任何一个有效性检查失败的话,那么就发生对主机的拦截,步骤612。即,在主机干涉下,执行指令。
此处描述了CLP设置PCI函数命令的进一步的细节。为了使用PCI函数,它将被启用。例如,愿意使用PCI函数的操作***执行查询,以确定它有资格使用的一个或多个函数(基于I/O配置),并选定这些函数中的一个来启用。在一个示例中,使用调用逻辑处理器指令的设置PCI函数命令来启用函数。图7A中描绘了此指令的一个实施例。如图所示,在一个示例中,调用逻辑处理器指令700包括指出它是调用逻辑处理器指令的操作代码702;以及命令704的指示。在一个示例中,此指示是描述要执行的命令的请求块的地址。图7B中描绘了这样的请求块的一个实施例。
如图7B所示,在一个示例中,请求块720包括若干个参数,诸如例如指出请求块的长度的长度字段722;指出设置PCI函数命令的命令字段724;PCI函数句柄726,这是被提供到启用或者禁用函数的句柄;被用来指定启用或者禁用操作的操作代码728;指出要与特定PCI函数相关联的被请求的数量的地址空间的DMA地址空间(DMAAS)的数量730;以及用来授权访客端的访客端授权令牌732。在其他实施例中,可以包括更多、更少或不同的信息。例如,在其中指令由可分页的存储模式访客端的主机所发出的虚拟环境中,提供了访客端标识。其他变化也是可以的。
响应于发出并处理调用逻辑处理器指令,返回响应块,响应块中所包括的信息取决于要执行的操作。图7C中描绘了响应块的一个实施例。在一个示例中,响应块750包括指出响应块的长度的长度字段752;指出命令的状态的响应代码754;以及标识PCI函数的PCI函数句柄756。响应于启用命令,PCI函数句柄是PCI函数的已启用的句柄。进一步地,一旦完成禁用操作,PCI函数句柄是可以是在将来被启用函数启用的通用句柄。
参考图8描述了启用PCI函数的逻辑的一个实施例。在一个示例中,响应于发出调用逻辑处理器指令启动此逻辑,其中,命令被设置为设置PCI函数命令,以及操作代码被设置为启用函数。此逻辑是通过例如处理器响应于操作***或被授权执行此逻辑的操作***的设备驱动程序发出指令来执行的。在其他实施例中,该逻辑可以在不使用调用逻辑处理器指令的情况下执行。
参考图8,一开始,就在调用逻辑处理器指令的请求块中所提供的句柄是否是有效句柄作出判断,查询800。即,句柄是否指向函数表中的有效条目或它是否在有效条目的范围外面(例如,句柄的函数编号部分是否指定安装的函数)。如果句柄未知,那么提供对应的响应代码,指出句柄未被识别。然而,如果句柄已知,那么就是否启用句柄作出进一步的查询,查询804。此判断是通过检查PCI函数句柄中的启用指示符来作出的。如果设置了句柄已启用的指示,那么返回指出这一点的响应代码,步骤806。
然而,如果句柄已知但是没有启用(即,对启用有效),那么就被请求的待分配到PCI函数的地址空间的数量是否大于最大值作出进一步的判断,查询808。为作出此判断,将如在请求块中所指定的DMA地址空间的数量与最大值(在一个示例中,是基于策略提供的)进行比较。如果地址空间的数量大于最大值,那么提供响应代码,指出DMA地址空间的无效值,步骤810。否则,就是否有被请求数量的地址空间可用作出判断,查询812。此判断是通过对是否有可用于被请求数量的地址空间的设备表条目进行检查作出的。如果没有被请求数量的地址空间可用,那么返回指出没有足够资源的响应代码,步骤814。否则,处理继续以启用PCI函数。
使用所提供的句柄来定位函数表条目,步骤816。例如,句柄的一个或多个指定的比特被用作函数表的索引以定位特定的函数表条目。响应于定位适当的函数表条目,就是否启用了函数作出判断,查询818。此判断是通过检查函数表条目中的启用指示符来作出的。如果函数已经启用(即,指示符被设置为1),那么返回指出PCI函数已经处于被请求的状态的响应代码,步骤820。
如果函数还没有启用,那么处理继续判断函数是否处于永久错误状态,查询822。如果函数表条目中的永久错误状态指示符指出它处于永久错误状态,那么返回指出这一点的响应代码,步骤824。然而,如果函数不处于永久错误状态,则就是否对于函数启动错误恢复作出判断,查询826。如果设置了函数表条目中的恢复已启动指示符,那么提供指出恢复已启动的响应代码,步骤828。否则,就PCI函数是否繁忙作出进一步的查询,查询830。再次,如果对函数表条目中的繁忙指示符的检查指出PCI函数繁忙,那么提供这样的指示,步骤832。然而,如果PCI函数不处于永久错误状态,没有启动恢复并且它也不繁忙,那么就操作***是否被允许启用此PCI函数作出进一步的查询,步骤834。如果基于函数表条目的权限指示符它不被准许,那么提供指出未经授权的动作的响应代码,步骤836。然而,如果所有测试都成功地通过,那么就是否有DTE对此PCI函数可用作出判断,查询838。作为示例,对DTE可用的判断可以基于当前在I/O集线器中没有启用的DTE。另外,可以应用策略,以进一步限制对给定操作***或逻辑分区可用的DTE的数量。可以分配可以被适配器访问的任何可用的DTE。如果没有可用的DTE,那么返回指出被请求的DTE中的一个或多个不可用的响应代码,步骤840。
如果有DTE可用,那么分配并启用对应于被请求的地址空间的数量的数量的DTE,步骤842。在一个示例中,启用包括在每一要被启用的DTE中设置启用指示符。进一步地,启用包括,在此示例中,设置按内容寻址的存储器(CAM),以提供到每一DTE的索引。例如,对于每一个DTE,CAM中的条目被加载了索引,且CAM促进对DTE的定位。
进一步地,将DTE与函数表条目相关联,步骤844。这包括例如在函数表条目中包括每一DTE索引的实例。然后,通过在函数表条目中设置启用指示符,来将函数标记为已启用,步骤846。此外,还设置句柄中的启用比特,并更新实例编号,步骤848。然后,返回此启用的句柄,步骤850,允许使用PCI适配器。例如,响应于启用函数,可以执行对于地址转换和中断的注册,可以通过PCI函数来执行DMA操作,和/或可以向函数发出加载、存储和存储块指令。
如上文所指出的,在启用函数之后,通过修改PCI函数控制指令,在DTE和/或FTE中设置各种操作参数。参考图9A-9D描述了修改PCI函数控制指令的一个示例。
参考图9A,修改PCI函数控制指令900包括例如指出修改PCI函数控制指令的操作码902;指定包括关于为其正在建立操作参数的适配器函数的各种信息的位置的第一字段904;以及指定从其中获取PCI函数信息块(FIB)的位置的第二字段906。下面将进一步地描述通过字段1和2指定的位置的内容。
在一个实施例中,字段1指定包括各种信息的通用寄存器。如图9B所示,寄存器的内容包括例如标识代表其执行修改指令的适配器函数的句柄的函数句柄910;指定与由函数句柄指定的适配器函数相关联的***存储器中的地址空间的地址空间912;指定要对于适配器函数执行的操作的操作控制914;以及当指令以预定义的代码完成时提供关于指令的状态的状态916。
在一个示例中,如图9C所示,字段2指定包括关于相关联的适配器函数的信息的PCI函数信息块(FIB)的逻辑地址920。根据本发明的一个方面,使用函数信息块来更新与适配器函数相关联的设备表条目和/或函数表条目(或其他位置)。在初始化过程中和/或在适配器的配置过程中和/或响应于特定事件,在FIB中存储信息。
参考图9D描述了关于函数信息块的进一步的细节。在一个实施例中,函数信息块950包括下列字段:
格式951:此字段指定FIB的格式。
拦截控制952:此字段被用来指出由可分页的模式访客端对特定指令的访客端执行是否导致指令拦截;
错误指示954:此字段包括直接存储器访问和适配器中断的错误状态指示。当设置了比特(例如,1)时,当对于适配器函数执行直接存储器访问或适配器中断时,检测到一个或多个错误;
加载/存储被阻止956:此字段指出加载/存储操作是否被阻止;
PCI函数有效958:此字段包括对于适配器函数的启用控制。当比特被设置(例如,1)时,适配器函数被视为对于I/O操作已启用;
地址空间已注册960:此字段包括对于适配器函数的直接存储器访问启用控制。当字段被设置(例如,1)时,直接存储器访问被启用;
页面大小961:此字段指出通过DMA存储器访问而访问的页面或存储器的其他单元的大小;
PCI基本地址(PBA)962:此字段是分配给适配器函数的***存储器中的地址空间的基本地址。它表示适配器函数被允许用于对指定的DMA地址空间的直接存储器访问的最低虚拟地址;
PCI地址限制(PAL)964:此字段表示适配器函数被允许在指定的DMA地址空间内访问的最高虚拟地址;
输入/输出地址转换指针(IOAT)966:输入/输出地址转换指针指定PCI虚拟地址转换所使用的任何转换表中的第一个,或者它可以直接指定存储器的帧的绝对地址,这是转换的结果;
中断子类(ISC)968:此字段包括用来对于适配器函数呈现适配器中断的中断子类;
中断数量(NOI)970:此字段指定对于适配器函数接受的不同的中断代码的数量。此字段也定义由适配器中断比特矢量地址以及适配器中断比特矢量偏移字段所指定的适配器中断比特矢量的以比特为单位的大小;
适配器中断比特矢量地址(AIBV)972:此字段指定适配器函数的适配器中断比特矢量的地址。此矢量用于中断处理中;
适配器中断比特矢量偏移974:此字段指定适配器函数的第一适配器中断比特矢量比特的偏移;
适配器中断概要比特地址(AISB)976:此字段提供指定可任选地用于中断处理中的适配器中断概要比特的地址;
适配器中断概要比特偏移978:此字段提供到适配器中断概要比特矢量的偏移;
函数测量块(FMB)地址980:此字段提供用来收集关于适配器函数的测量的函数测量块的地址;
函数测量块密钥982:此字段包括访问函数测量块的访问密钥;
概要比特通知控制984:此字段指出是否有正在使用的概要比特矢量;
指令授权令牌986:此字段被用来确定可分页的存储模式访客端(例如,V=V访客端)是否被授权执行PCI指令而没有主机干涉;以及
地址转换格式987:此字段指出要用于转换中的最高级别转换表的地址转换的选择的格式(例如,段表、区域第三等等)。
在配置、初始化、和/或特定事件的出现过程中获取函数信息块中的信息。
根据本发明的一个方面,使用修改PCI函数控制指令中所指定的函数信息块,来修改选择的设备表条目、函数表条目和/或与在指令中所指定的适配器函数相关联的其他固件控制。通过修改设备表条目,函数表条目和/或其他固件控制,为适配器提供了某些服务。这些服务包括例如适配器中断;地址转换;复位错误状态;复位加载/存储被阻止;设置函数测量参数;以及设置拦截控制。
参考图10A描述了与修改PCI函数控制指令相关联的逻辑的一个实施例。在一个示例中,指令由操作***(或其他配置)发出并由执行操作***的处理器(例如,固件)来执行。在此处的示例中,指令和适配器函数是基于PCI的。然而,在其他示例中,可以使用不同的适配器架构和对应的指令。
在一个示例中,操作***向指令提供下列操作数(例如,在由指令指定的一个或多个寄存器中):PCI函数句柄;DMA地址空间标识符;操作控制;以及函数信息块的地址。
参考图10A,一开始,就是否安装了允许修改PCI函数控制指令的工具作出判断,查询1000。此判断是通过例如检查存储在例如控制块中的指示符来作出的。如果工具没有安装,则提供异常状态,步骤1002。否则,就可分页的存储模式访客端(或其他访客端)是否发出了指令作出判断,查询1004。如果是,则主机操作***将仿真该访客端的操作,步骤1006。例如,主机将拦截并判断是否对于此访客端将允许拦截控制。此判断是通过检查FTE来作出的。如果拦截被授权,则主机将代表访客端重新发出修改PCI函数控制指令。否则,提供异常状态。
否则,就操作数中的一个或多个是否对齐作出判断,查询1008。例如,就函数信息块的地址是否位于双字边界作出判断。在一示例中,这是可选的。如果操作数没有对齐,则提供异常状态,步骤1010。否则,就函数信息块是否是可访问的作出判断,查询1012。如果不,则提供异常状态,步骤1014。否则,就修改PCI函数控制指令的操作数中所提供的句柄是否启用作出判断,查询1016。在一个示例中,此判断是通过检查句柄中的启用指示符来作出的。如果句柄没有启用,则提供异常状态,步骤1018。
如果句柄已启用,则使用句柄来定位函数表条目,步骤1020。即,句柄的至少一部分被用作函数表的定位对应于将为其建立操作参数的适配器函数的函数表条目的索引。
就是否找到函数表条目作出判断,查询1022。如果不,则提供异常状态,步骤1024。否则,如果发出指令的配置是访客端,查询1026,那么提供异常状态(例如,对主机的拦截),步骤1028。如果配置不是访客端,则可以忽略此查询,或者也可以检查其他授权,如果指定的话。
然后,就是否启用函数作出判断,查询1030。在一个示例中,此判断是通过检查函数表条目中的启用指示符来作出的。如果还没有启用,则提供异常状态,步骤1032。
如果函数已启用,则就恢复是否有效作出判断,查询1034。如果如由函数表条目中的恢复指示符确定的,恢复是有效,则提供异常状态,1036。然而,如果恢复不是有效的,则就函数是否繁忙作出进一步的判断,1038。此判断是通过检查函数表条目中的繁忙指示符来作出的。如果函数繁忙,则提供繁忙状态,步骤1040。在繁忙状态下,可以重试指令,而不是丢弃。
如果函数不繁忙,则就函数信息块格式是否有效作出进一步的判断,查询1042。例如,检查FIB的格式字段,以确定此格式是否被***支持。如果无效,则提供异常状态,步骤1044。如果函数信息块格式有效,则就在指令的操作数中指定的操作控制是否有效作出进一步的判断,查询1046。即,操作控制是否是为此指令指定的操作控制中的一个。如果无效,则提供异常状态,步骤1048。然而,如果操作控制有效,则处理继续指定特定操作控制。
可以由修改PCI函数控制指令的操作控制指定的一个操作是用于控制来自适配器的中断的设置拦截控制操作。利用此操作,从函数信息块的中断控制字段来设置相对于中断控制的PCI函数参数。当由可分页的存储模式访客端发出时,此操作控制被视为预留的。
参考图10B描述了设置拦截控制操作的逻辑的一个实施例。在一个示例中,操作数是来自函数信息块的拦截控制。响应于指定此操作,函数表条目中的拦截控制被设置为来自函数信息块的拦截控制,步骤1060。
在初始化之后,访客端可以执行PCI加载、PCI存储、以及PCI存储块指令,下面将描述其中的每一个指令。
首先参考图11A,描绘了PCI加载指令的一个实施例。如图所示,PCI加载指令1100包括例如指出PCI加载指令的操作码1102;指定将加载从适配器函数获取的数据的位置的第一字段1104;以及指定包括关于将从其中加载数据的适配器函数的各种信息的位置的第二字段1106。下面将进一步地描述通过字段1和2指定的位置的内容。
在一个示例中,字段1指定通用寄存器,并如图11B中所描绘的,该寄存器的内容1104包括从指令中所指定的适配器函数的位置加载的一个或多个字节的相邻范围。在一个示例中,数据被加载到寄存器的最右边的字节位置。
在一个实施例中,字段2指定包括各种信息的一对通用寄存器。如图11B所示,寄存器的内容包括例如:
已启用的句柄1110:此字段是将从其中加载数据的适配器函数的已启用的函数句柄;
地址空间1112:此字段是将从其中加载数据的适配器函数内的地址空间;
地址空间内的偏移1114:此字段是将从其中加载数据的指定的地址空间内的偏移;
长度字段1116:此字段指定加载操作的长度(例如,要被加载的字节的数量);以及
状态字段1118:此字段提供当指令以预定义的条件码完成时适用的状态码。
在一个实施例中,从适配器函数加载的字节将被包含在适配器函数的指定的PCI地址空间中的整数界限内。当地址空间字段指定存储器地址空间时,整数界限大小是例如双字。当地址空间字段指定I/O地址空间或配置地址空间时,整数界限大小是例如一个字。
参考图12A-12B描述了与PCI加载指令相关联的逻辑的一个实施例。在一个示例中,指令由操作***(或其他配置)发出并由执行操作***的处理器(例如,固件)来执行。在此处的示例中,指令和适配器函数是基于PCI的。然而,在其他示例中,可以使用不同的适配器架构和对应的指令。
为发出指令,操作***向指令提供下列操作数(例如,在由指令所指定的一个或多个寄存器中):PCI函数句柄、PCI地址空间(PCIAS)、PCI地址空间中的偏移、以及要被加载的数据的长度。在成功地完成PCI加载指令之后,数据被加载到由指令所指定的位置(例如,寄存器)。
参考图12A,一开始,就是否安装了允许PCI加载指令的工具(facility)作出判断,查询1200。此判断是通过例如检查存储在例如控制块中的指示符来作出的。如果工具没有安装,则提供异常状态,步骤1202。否则,如果访客端正在发出此指令,则就访客端是否被允许加载/存储解释作出判断。这是通过检查访客端的状态描述中的加载/存储解释控制来确定的。如果它不被允许,则提供异常状态。否则,就操作数是否对齐作出判断,查询1204。例如,如果某些操作数需要处于偶数/奇数寄存器对中,则就是否满足这些要求作出判断。如果操作数没有对齐,则提供异常状态,步骤1206。否则,如果安装了工具并且操作数对齐,则就PCI加载指令的操作数中所提供的句柄是否被启用作出判断,查询1208。在一个示例中,此判断是通过检查句柄中的启用指示符来作出的。如果句柄没有启用,则提供异常状态,步骤1210。
如果句柄已启用,则使用句柄来定位函数表条目,步骤1212。即,句柄的至少一部分被用作函数表的定位对应于将从其加载数据的适配器函数的函数表条目的索引。
此后,就指令是否是由访客端所发出的作出判断,查询1213。如果是,则就是否设置了拦截控制(例如,设置为1)作出进一步的判断,查询1215。此判断是通过检查FTE中的拦截控制来作出的。如果已设置,则提供异常状态,步骤1217。否则,就函数是否被配置成供访客端使用作出判断,查询1214。如果未被授权,则提供异常状态,步骤1216。如果配置不是访客端,则可以忽略此查询,或者也可以检查其他授权,如果指定的话。
此后,或者如果指令不是由访客端所发出的,就函数是否启用作出判断,查询1218。在一个示例中,此判断是通过检查函数表条目中的启用指示符来作出的。如果还没有启用,则提供异常状态,步骤1220。
如果函数已启用,则就地址空间是否有效作出判断,查询1222。例如,指定的地址空间是否是适配器函数的指定的地址空间,并且是适合于此指令的地址空间。如果地址空间无效,则提供异常状态,步骤1224。否则,就加载/存储是否被阻止作出判断,查询1226。在一个示例中,此判断是通过检查函数表条目中的状态指示符来作出的。如果加载/存储被阻止,则提供异常状态,步骤1228。
然而,如果加载/存储不被阻止,则就恢复是否有效作出判断,查询1230。在一个示例中,此判断是通过检查函数表条目中的恢复已启动指示符来作出的。如果恢复有效,则提供异常状态,步骤1232。否则,就函数是否繁忙作出判断,查询1234。此判断是通过检查函数表条目中的繁忙指示符来作出的。如果函数繁忙,则提供繁忙状态,步骤1236。在繁忙状态下,可以重试指令,而不是丢弃。
如果函数不繁忙,则就指令中所指定的偏移是否有效作出进一步的判断,查询1238。即,偏移是否与基内的操作长度以及地址空间的长度相结合,如函数表条目中所指定的。如果不,则提供异常状态,步骤1240。然而,如果偏移有效,则就长度是否有效作出判断,查询1242。即,取决于地址空间类型、地址空间内的偏移、以及整数界限大小,长度是否有效。如果不,则提供异常状态,步骤1244。否则,处理对加载指令继续。(在一个实施例中,固件执行上面的检查。)
继续图12B,由固件就加载是否是针对适配器函数的配置地址空间作出判断,查询1250。即,基于适配器函数的存储器的配置,指令中所提供的指定的地址空间是否是配置空间。如果是,则固件执行各种处理以向耦合到适配器函数的集线器提供请求;然后,集线器将请求路由到函数,步骤1252。
例如,固件从指令操作数中所提供的函数句柄所指向的函数表条目获取请求者ID。进一步地,固件基于函数表条目中的信息(例如,内部路由信息)来确定接收此请求的集线器。即,环境可具有一个或多个集线器,固件确定耦合到适配器函数的集线器。然后,它将请求转发到集线器。集线器生成配置读取请求数据包,该数据包在PCI总线上流出到由函数表条目中的RID所标识的适配器函数。配置读取请求包括被用来获取数据的RID和偏移(即,数据地址),如下面所描述的。
返回到查询1250,如果指定的地址空间不是配置空间,那么固件再次执行各种处理以向集线器提供请求,步骤1254。固件使用句柄来选定函数表条目,并从该条目获取定位适当的集线器的信息。它还计算要在加载操作中使用的数据地址。此地址是通过将从函数表条目获得的BAR起始地址(BAR是与指令中所提供的地址空间标识符相关联的)与指令中所提供的偏移相加来计算出的。此计算出的数据地址被提供到集线器。然后,集线器获取该地址,并将它包括在诸如DMA读取请求数据包之类的请求数据包中,该数据包通过PCI总线流出到适配器函数中。
响应于通过步骤1252或者步骤1254接收到请求,适配器函数从指定的位置(即,在数据地址处)获取所请求的数据,并在针对该请求的响应中返回该数据,步骤1256。响应被从适配器函数转发到I/O集线器。响应于接收到响应,集线器将响应转发到启动处理器。然后,启动处理器从响应数据包获取数据,并将它加载到指令中指定的位置(例如,字段1 404)。PCI加载操作以成功的指示来结束(例如,设置条件码零)。
除从适配器函数检索数据并将它存储在指定的位置的加载指令之外,可以执行的另一指令是存储指令。存储指令将数据存储在适配器函数中的指定位置。参考图13A描述了PCI存储指令的一个实施例。如图所示,PCI存储指令1300包括,例如指出PCI存储指令的操作码1302;指定包括要在适配器函数中存储的数据的位置的第一字段1304;以及指定包括关于将向其中存储数据的适配器函数的各种信息的位置的第二字段1306。下面将进一步地描述通过字段1和2指定的位置的内容。
在一个示例中,字段1指定通用寄存器,并如图13B中所描绘的,该寄存器的内容1304包括要被存储到适配器函数的指定位置的数据的一个或多个字节的相邻范围。在一个示例中,寄存器的最右边的字节位置中的数据被存储。
在一个实施例中,字段2指定包括各种信息的一对通用寄存器。如图13B所示,寄存器的内容包括例如:
已启用的句柄1310:此字段是将向其中存储数据的适配器函数的已启用的函数句柄;
地址空间1312:此字段标识将向其中存储数据的适配器函数内的地址空间;
地址空间内的偏移1314:此字段指定将向其中存储数据的指定的地址空间内的偏移;
长度字段1316:此字段指定存储操作的长度(例如,要被存储的字节的数量);以及
状态字段1318:此字段提供当指令以预定义的条件码完成时适用的状态码。
参考图14A-14B描述了与PCI存储指令相关联的逻辑的一个实施例。在一个示例中,指令由操作***发出并由执行操作***的处理器(例如,固件)来执行。
为发出指令,操作***向指令提供下列操作数(例如,在由指令所指定的一个或多个寄存器中):PCI函数句柄、PCI地址空间(PCIAS)、PCI地址空间中的偏移、以及要被存储的数据的长度、以及指向要被存储的数据的指针。在成功地完成PCI存储指令之后,数据被存储到由指令所指定的位置。
参考图14A,一开始,就是否安装了允许PCI存储指令的工具作出判断,查询1400。此判断是通过例如检查存储在例如控制块中的指示符来作出的。如果工具没有安装,则提供异常状态,步骤1402。否则,如果访客端正在发出此指令,则就访客端是否被允许加载/存储解释作出判断。这是通过检查访客端的状态描述中的加载/存储解释控制来确定的。如果它不被允许,则提供异常状态。否则,就操作数是否对齐作出判断,查询1404。例如,如果某些操作数需要处于偶数/奇数寄存器对中,则就是否满足这些要求作出判断。如果操作数没有对齐,则提供异常状态,步骤1406。否则,如果安装了工具并且操作数对齐,则就PCI存储指令的操作数中所提供的句柄是否被启用作出判断,查询1408。在一个示例中,此判断是通过检查句柄中的启用指示符来作出的。如果句柄没有启用,则提供异常状态,步骤1410。
如果句柄已启用,则使用句柄来定位函数表条目,步骤1412。即,句柄的至少一部分被用作函数表的定位对应于将在其存储数据的适配器函数的函数表条目的索引。此后,就指令是否是由访客端所发出的作出判断,查询1413。如果是,则就是否设置了拦截控制(例如,设置为1)作出进一步的判断,查询1415。此判断是通过检查FTE中的拦截控制来作出的。如果已设置,则提供异常状态,步骤1417。否则,就函数是否被配置成供访客端使用作出判断,查询1414。如果未被授权,则提供异常状态,步骤1416。如果配置不是访客端,则可以忽略此查询,或者也可以检查其他授权,如果指定的话。
此后,或者如果指令不是由访客端所发出的,则就函数是否启用作出判断,查询1418。在一个示例中,此判断是通过检查函数表条目中的启用指示符来作出的。如果还没有启用,则提供异常状态,步骤1420。
如果函数已启用,则就地址空间是否有效作出判断,查询1422。例如,指定的地址空间是否是适配器函数的指定的地址空间,并且是适合于此指令的地址空间。如果地址空间无效,则提供异常状态,步骤1424。否则,就加载/存储是否被阻止作出判断,查询1426。在一个示例中,此判断是通过检查函数表条目中的状态指示符来作出的。如果加载/存储被阻止,则提供异常状态,步骤1428。
然而,如果加载/存储不被阻止,则就恢复是否有效作出判断,查询1430。在一个示例中,此判断是通过检查函数表条目中的恢复已启动指示符来作出的。如果恢复有效,则提供异常状态,步骤1432。否则,就函数是否繁忙作出判断,查询1434。此判断是通过检查函数表条目中的繁忙指示符来作出的。如果函数繁忙,则提供繁忙状态,步骤1436。在繁忙状态下,可以重试指令,而不是丢弃。
如果函数不繁忙,则就指令中所指定的偏移是否有效作出进一步的判断,查询1438。即,偏移是否与基内的操作的长度以及地址空间的长度相结合,如函数表条目中所指定的。如果不,则提供异常状态,步骤1440。然而,如果偏移有效,则就长度是否有效作出判断,查询1442。即,取决于地址空间类型、地址空间内的偏移、以及整数界限大小,长度是否有效。如果不,则提供异常状态,步骤1444。否则,处理对存储指令继续。(在一个实施例中,固件执行以上检查。)
继续图14B,由固件就存储是否是针对适配器函数的配置地址空间作出判断,查询1450。即,基于适配器函数的存储器的配置,指令中所提供的指定地址空间是否是配置空间。如果是,则固件执行各种处理以向耦合到适配器函数的集线器提供请求;然后,集线器将请求路由到函数,步骤1452。
例如,固件从指令操作数中所提供的函数句柄所指向的函数表条目获取请求者ID。进一步地,固件基于函数表条目中的信息(例如,内部路由信息)来确定接收此请求的集线器。即,环境可具有一个或多个集线器,以及固件确定耦合到适配器函数的集线器。然后,它将请求转发到集线器。集线器生成配置写入请求数据包,该数据包在PCI总线上流出到由函数表条目中的RID所标识的适配器函数。配置写入请求包括被用来存储数据的RID和偏移(即,数据地址),如下面所描述的。
返回到查询1450,如果指定的地址空间不是配置空间,那么固件再次执行各种处理以向集线器提供请求,步骤1454。固件使用句柄来选定函数表条目,并从该条目获取定位适当的集线器的信息。它还计算要在存储操作中使用的数据地址。此地址是通过将从函数表条目获得的BAR起始地址与指令中所提供的偏移相加来计算出的。此计算出的数据地址被提供到集线器。然后,集线器获取该地址,并将它包括在诸如DMA写入请求数据包之类的请求数据包中,该数据包通过PCI总线流出到适配器函数。
响应于通过步骤1452或者步骤1454接收到请求,适配器函数将所请求的数据存储在指定位置(即,在数据地址处),步骤1456。PCI存储操作以成功的指示来结束(例如,设置条件码零)。
除通常加载或存储最大(例如,8字节)的加载和存储指令之外,可以执行的另一指令是存储块指令。存储块指令在适配器函数中的指定位置存储更大块的数据(例如,16、32、64、128或256字节);块大小不一定在大小方面仅限于2的乘幂。在一个示例中,指定的位置处于适配器函数的存储器空间(不是I/O或配置空间)。
参考图15A描述了PCI存储块指令的一个实施例。如图所示,PCI存储块指令1500包括,例如,指出PCI存储块指令的操作码1502;指定包括关于将向其中存储数据的适配器函数的各种信息的位置的第一字段1504;指定包括将向其中存储数据的指定地址空间内的偏移的位置的第二字段1506;以及指定包括要被存储在适配器函数中的数据的***存储器地址的位置的第三字段1508。下面将进一步地描述通过字段1、2以及3指定的位置的内容。
在一个实施例中,字段1指定包括各种信息的通用寄存器。如图15B所示,寄存器的内容包括例如:
启用的句柄1510:此字段是将向其中存储数据的适配器函数的已启用的函数句柄;
地址空间1512:此字段指出将向其中存储数据的适配器函数内的地址空间;
长度字段1514:此字段指定存储操作的长度(例如,要被存储的字节的数量);以及
状态字段1516:此字段提供当指令以预定义的条件码完成时适用的状态码。
在一个示例中,字段2指定通用寄存器,如在图15C中所描绘的,寄存器的内容包括指定将向其中存储数据的指定的地址空间内的偏移的值(例如,64比特无符号整数)。
在一个示例中,字段3,如图15中所描绘的,包括要被存储在适配器函数中的***存储器中的第一字节数据的逻辑地址1522。
参考图16A-16B描述了与PCI存储块指令相关联的逻辑的一个实施例。在一个示例中,指令由操作***发出并由执行操作***的处理器(例如,固件)来执行。
为发出指令,操作***向指令提供下列操作数(例如,在由指令所指定的一个或多个寄存器中):PCI函数句柄、PCI地址空间(PCIAS)、PCI地址空间中的偏移、以及要被存储的数据的长度、以及指向要被存储的数据的指针。指针操作数可以包括寄存器以及签名的或未签名的位移。在成功地完成PCI存储块指令之后,数据被存储到由指令所指定的适配器中的位置。
参考图16A,一开始,就是否安装了允许PCI存储块指令的工具作出判断,查询1600。此判断是通过例如检查存储在例如控制块中的指示符来作出的。如果工具没有安装,则提供异常状态,步骤1602。否则,如果访客端正在发出此指令,则就访客端是否被允许加载/存储解释作出判断。这是通过检查访客端的状态描述中的加载/存储解释控制来确定的。如果它不被允许,则提供异常状态。否则,如果安装了工具,则就PCI存储块指令的操作数中所提供的句柄是否被启用作出判断,查询1604。在一个示例中,此判断是通过检查句柄中的启用指示符来作出的。如果句柄没有启用,则提供异常状态,步骤1606。
如果句柄已启用,则使用句柄来定位函数表条目,步骤1612。即,句柄的至少一部分被用作函数表的定位对应于将在其存储数据的适配器函数的函数表条目的索引。
此后,就指令是否是由访客端所发出的作出判断,查询1613。如果是,则就是否设置了拦截控制(例如,设置为1)作出进一步的判断,查询1615。此判断是通过检查FTE中的拦截控制来作出的。如果已设置,则提供异常状态,步骤1617。否则,就函数是否被配置成供访客端使用作出判断,查询1614。如果未被授权,则提供异常状态,步骤1616。如果配置不是访客端,则可以忽略此查询,或者也可以检查其他授权,如果指定的话。
然后,或者如果指令不是由访客端所发出的,就函数是否启用作出判断,查询1618。在一个示例中,此判断是通过检查函数表条目中的启用指示符来作出的。如果还没有启用,则提供异常状态,步骤1620。
如果函数已启用,则就地址空间是否有效作出判断,查询1622。例如,指定的地址空间是否是适配器函数的指定地址空间,并且是适合于此指令的地址空间(即,存储器空间)。如果地址空间无效,则提供异常状态,步骤1624。否则,就加载/存储是否被阻止作出判断,查询1626。在一个示例中,此判断是通过检查函数表条目中的状态指示符来作出的。如果加载/存储被阻止,则提供异常状态,步骤1628。
然而,如果加载/存储不被阻止,则就恢复是否有效作出判断,查询1630。在一个示例中,此判断是通过检查函数表条目中的恢复已启动指示符来作出的。如果恢复有效,则提供异常状态,步骤1632。否则,就函数是否繁忙作出判断,查询1634。此判断是通过检查函数表条目中的繁忙指示符来作出的。如果函数繁忙,则提供繁忙状态,步骤1636。在繁忙状态下,可以重试指令,而不是丢弃。
如果函数不繁忙,则就指令中所指定的偏移是否有效作出进一步的判断,查询1638。即,偏移是否与基内的操作的长度以及地址空间的长度相结合,如函数表条目中所指定的。如果不,则提供异常状态,步骤1640。然而,如果偏移有效,则就长度是否有效作出判断,查询1642。即,取决于地址空间类型、地址空间内的偏移、以及整数界限大小,长度是否有效。如果不,则提供异常状态,步骤1644。否则,处理对存储块指令继续。(在一个实施例中,固件执行以上的检查。)
继续图16B,由固件就包括要被存储的数据的存储器是否是可访问作出判断,查询1650。如果不,则提供异常状态,步骤1652。如果是,则固件执行各种处理以向耦合到适配器函数的集线器提供请求;然后,集线器将请求路由到函数,步骤1654。
例如,固件使用句柄来选定函数表条目,并从该条目获取定位适当的集线器的信息。它还计算要在存储块操作中使用的数据地址。此地址是通过将从函数表条目获得的BAR起始地址(BAR是由地址空间标识符所标识的)与指令中所提供的偏移相加来计算出的。此计算出的数据地址被提供到集线器。另外,由指令中所提供的地址所引用的数据是从***存储器获取的,并提供到I/O集线器。然后,集线器获取该地址和数据,并将它包括在诸如DMA写入请求数据包之类的请求数据包中,该数据包通过PCI总线流出到适配器函数中。
响应于接收到请求,适配器函数将所请求的数据存储在指定位置(即,在数据地址处),步骤1656。PCI存储块操作以成功的指示来结束(例如,设置条件码零)。
上文详细描述了允许执行访客端的主机授予访客端直接访问适配器的地址空间而无需主机干涉的许可的授权能力。这些地址空间不被映射到由操作***(访客端或主机)看到的存储器空间。相反,它们被提取(即,通过特定PCI指令,使得它们可用)。当访客端在解释性的执行下执行时,分配给访客端的适配器函数被访客端“拥有”,因此,可以通过访客端指令(例如,PCI加载和PCI存储函数)的执行直接***纵,当被授权时,无需主机干涉。进一步地,当访客端在解释性的执行下执行时,访客端指令存储器和操作数地址被视为逻辑地址,以及编址存储器可以通过访客端指令(例如,当授权时,PCI存储块)的执行被直接操纵而无需主机干涉。在一个示例中,访客端处于管理程序状态以执行指令。
解释控制在访客端和函数级别给予主机对PCI指令解释的控制。可以有仿真的(即,设备的软件表示)和专用设备(即,硬件设备)的混合。对于仿真设备,没有拦截控制。访客端PCI加载/存储指令将拦截到主机;而主机将维护FTE和DTE的一个版本以维护状态,以使得它看到访客端,好像设备存在那样。
此外,如果主机判断它希望干涉,那么它可以动态地这样做,(包括在指令执行过程中)。
在此描述的实施例中,适配器是PCI适配器。如在此使用的,PCI指根据由***组件互连特别兴趣组(PCI-SIG)定义的基于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服务器之外的服务器,诸如由国际商业机器公司提供的PowerSystems服务器或其他服务器,或其他公司的服务器,可包括、使用和/或受益于本发明的一个或多个方面。而且,尽管在此示出的例子中,适配器和PCI集线器被认为是服务器的一部分,在其他实施例中,它们不是必须被认为是服务器的一部分,而是可被简单地认为是耦合到计算环境的***存储器和/或其他组件。计算环境不需要是服务器。而且,尽管描述了转换表,可使用任何数据结构,且术语表将包括所有这样的数据结构。而且,尽管适配器是基于PCI的,可与其他适配器或其他I/O组件一起使用本发明的一个或多个方面。适配器和PCI适配器仅仅是例子。而且,DTE、FTE、FIB和/或其它结构可包括更多、更少或不同的数据。许多其他变化是可能的。
而且,其他类型的计算环境可受益于本发明的一个或多个方面。作为例子,可使用适于存储和/或执行程序代码的数据处理***,其包括至少两个通过***总线直接或间接耦合到存储元件的处理器。存储器元件包括,例如,在程序代码的实际执行期间使用的本地存储器、大容量存储器以及高速缓冲存储器,其提供至少一些程序代码的临时存储,以便减少在执行期间必须从大容量存储器取回代码的次数。
输入/输出或I/O设备(包括但不限于键盘、显示器、指点设备、DASD、磁带、CD、DVD、拇指驱动器(thumb drive)以及其他的存储介质等)可直接或通过介于其间的I/O控制器被耦合到***。网络适配器也可被耦合到***以使得数据处理***能够通过介于其间的私有或公共网络而耦合到其他的数据处理***或远程打印机或存储设备。调制解调器、电缆调制解调器和以太网卡仅是一些可获得的网络适配器类型。
参考图18,其描述了实施本发明的一个或多个方面的主机计算机***5000的代表性组件。代表性主机计算机5000包括与计算机存储器(即,中央存储器)5002通信的一个或多个CPU 5001,以及到存储介质设备5011和网络5010的I/O接口,以用于与其他计算机或SAN等通信。CPU5001符合具有架构指令集和架构功能的架构。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 CACHEATTRIBUTE(提取高速缓存属性)指令,其返回高速缓存线的字节大小。模型也可提供PREFETCH DATA(预取数据)和PREFETCH DATARELATIVE 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、8和16字节的字段。半字是两字节边界上的一组两个连续的字节,且是指令的基本构件。字是四字节边界上的一组四个连续的字节。双字是八字节边界上一组八个连续的字节。四倍长字(quadword)是16字节边界上的一组16个连续的字节。当存储器地址指定半字、字、双字和四倍长字时,地址的二进制表示分别包括一个、两个、三个或四个最右边的零位。指令将位于二字节整数边界上。大多数指令的存储器操作数不具有界限对准要求。
在为指令和数据操作数实现单独的高速缓存的设备上,如果程序在高速缓存线中存储且指令被随后从该高速缓存线获取,可经历显著的延迟,不管该存储是否改变随后被获取的指令。
在一个实施例中,本发明可被软件(有时候被称为许可的内部代码、固件、微代码、毫代码、微微代码(pico-code)等,其任何一个都将符合本发明)实施。参考图18,体现本发明的软件程序代码可典型地由主***5000的处理器5001从长期存储介质设备5011(诸如CD-ROM驱动器、磁带驱动或硬盘驱动器)访问。软件程序代码可体现在与数据处理***一起使用的各种已知介质(诸如软磁盘、硬盘驱动或CD-ROM)中的任何一个上。代码可在这样的介质上被分发,或可从一个计算机***的计算机存储器5002或存储设备通过网络5010被分发给其他计算机***的用户,以由这样的其他***的用户使用。
软件程序代码包括操作***,其控制各种计算机组件和一个或多个应用程序的功能和交互。程序代码通常可从存储介质设备5011调页到相对更高速的计算机存储器5002,在此它对于处理器5001是可用的。用于在存储器中、物理介质上体现软件程序代码和/或经由网络分发软件代码的技术和方法是熟知的,且不会在此被进一步讨论。当程序代码被创建并存储在有形介质(包括但不限于电子存储模块(RAM)、闪存、光盘(CD)、DVD、磁带等)上时,其经常被称为“计算机程序产品”。计算机程序产品介质典型地可由优选地位于计算机***中的处理电路读取以由处理电路执行。
图19示出了可在其中实施本发明的代表性工作站或服务器硬件***。图19的***5020包括代表性基本计算机***(base computersystem)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。可以利用可从国际商业机器公司获得的IBMeServerTMSystem服务器来实现网关计算机。
同时参考图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,其能执行多种逻辑功能,诸如移位、旋转、和、或、异或,以及多种代数函数,包括加减乘除中的任何一个。有些ALU 5066被设计为用于标量运算,有些用于浮点。根据架构,数据可以是大端(big endien)(其中最低有效字节位于最高字节地址)或小端(little endien)(其中最低有效字节位于最低字节地址)。是大端。根据架构,带符号字段可以是符号和幅度、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单元通常由软件驱动器向计算机程序呈现。在诸如来自的System的大型计算机中,通道适配器和开放***适配器是提供操作***和***设备之间的通信的大型计算机的I/O单元。
而且,其他类型的计算环境可受益于本发明的一个或多个方面。作为例子,环境可包括仿真器(例如,软件或其他仿真机制),其中特定架构(包括例如指令执行、诸如地址转换的架构功能、以及架构寄存器)或其子集被仿真(例如,在具有处理器和存储器的本机计算机***中)。在这样的环境中,仿真器的一个或多个仿真功能可实施本发明的一个或多个方面,即使执行仿真器的计算机可具有与正被仿真的能力不同的架构。作为一个例子,在仿真模式中,解码正被仿真的特定指令或操作,且建立合适的仿真功能以实施单个指令或操作。
在仿真环境中,主计算机包括例如存储器以存储指令和数据;指令获取单元以从存储器获取指令,且可选地,提供用于获取的指令的本地缓冲;指令解码单元以接收获取的指令并确定已被获取的指令的类型;以及指令执行单元以执行该指令。执行可包括将数据从存储器加载到寄存器;从寄存器将数据存储回存储器;或执行如由解码单元确定的某些类型的算术或逻辑运算。在一个例子中,每个单元在软件中实现。例如,被所述单元执行的操作被实现为仿真器软件中的一个或多个子例程。
更具体地,在大型计算机中,程序员(通常是如今的“C”程序员)一般通过编译器应用使用架构机器指令。存储在存储介质中的这些指令可以在服务器中本机地执行,或在执行其他架构的机器中执行。它们可在现有的和未来的大型计算机服务器以及的其他机器(例如,Power Systems服务器和System服务器)中被仿真。它们可在使用由AMDTM等制造的硬件的各种机器上运行Linux的机器中被执行。除了在下的该硬件上执行,Linux也可被用于这样的机器,其使用由Hercules或FSI(FundamentalSoftware,Inc)(其中一般地执行是处于仿真模式中)提供的仿真。在仿真模式中,仿真软件由本机处理器执行以仿真被仿真处理器的架构。关于上述参考的仿真器产品的信息可以分别从网址www.hercules-390.org和www.funsoft.com获得。
本机处理器典型地执行仿真软件,其包括固件或本机操作***,以执行被仿真处理器的仿真程序。仿真软件负责获取并执行被仿真处理器架构的指令。仿真软件维护仿真的程序计数器以保持跟踪指令界限。仿真软件可一次获取一个或多个仿真的机器指令,并将所述一个或多个仿真的机器指令转换为对应的本机机器指令组,以由本机处理器执行。这些转换的指令可被高速缓存,这样可完成更快的转换。仿真软件将维持被仿真的处理器架构的架构规则以保证为被仿真处理器编写的操作***和应用正确操作。而且,仿真软件将提供由被仿真的处理器架构确定的资源,包括但不限于控制寄存器、通用寄存器、浮点寄存器、例如包括段表和页表的动态地址转换功能、中断机制、上下文转换机制、日中时间(TOD)时钟和到I/O子***的架构接口,这样被设计为在被仿真处理器上运行的操作***或应用程序可在具有仿真软件的本机处理器上运行。
解码正被仿真的特定指令,且调用子例程以执行该单个指令的功能。仿真被仿真处理器的功能的仿真软件功能例如在“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等人的标题为“DecodingGuest Instruction to Directly Access Emulation Routines that Emulatethe Guest Instructions”的美国专利证书号,5,574,873;以及Gorishek等人的标题为“Symmetrical Multiprocessing Bus and Chipset Used forCoprocessor Support Allowing Non-Native Code to Run in a System”的美国专利证书号6,308,255;以及Lethin等人的标题为“DynamicOptimizing Object Code Translator for Architecture Emulation andDynamic Optimizing Object Code Translation Method”的美国专利证书号6,463,582,;以及Eric Traut的标题为“Method for Emulating GuestInstructions on a Host Computer Through Dynamic Recompilation ofHost Instructions”的美国专利证书号5,790,825;以及许多其他专利的各种软件和硬件仿真专利示出各种已知的方式来实现针对可为本领域技术人员获得的目标机器对为不同机器进行架构设计的指令格式的仿真。
在图16中,提供了仿***计算机***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’的功能。
在此使用的术语仅是为了描述特定实施例,且不旨在限制本发明。如在此使用的,单数形式“一”、“一个”和“该”也旨在包括复数形式,除非上下文另外清楚地指明。还将理解,当在说明书中使用时,术语“包括”和/或“包含”指明存在所述的特征、整体、步骤、操作、元件和/或组件,但不排除存在或附加一个或多个其他特征、整体、步骤、操作、元件和/或组件。
所附权利要求书中的所有装置或步骤加功能元件的相应结构、材料、操作以及等价物,如有的话,旨在包括用于结合如特别要求保护的其他所要求保护的元件来执行所述功能的任何结构、材料或操作。呈现本发明的说明是为了示出和描述的作用,但不是穷尽性的或将本发明限制于所公开的形式。许多修改和变化对本领域普通技术人员来说是明显的,且不脱离本发明的范围。选择和描述实施例是为了最佳地解释本发明的原理和实际应用,并使得本领域普通技术人员能针对适于考虑的特定用途的具有各种修改的各种实施例理解本发明。
Claims (19)
1.一种在计算环境中提供对适配器的访问的方法,包括下列步骤:
可以由处理电路读取的并存储由所述处理电路执行以便执行包括下列步骤的方法的指令的计算机可读存储介质;
执行包括访问适配器的请求的访客端指令;
确定所述访客端指令是否被允许直接访问所述适配器;
响应于被允许,所述执行直接地访问所述适配器的一个或多个地址空间而没有主机干预;以及
响应于不被允许,所述执行导致对主机操作***的拦截。
2.如权利要求1所述的方法,其中,所述确定包括确定执行所述访客端指令的访客端处理器是否被授权访问所述适配器。
3.如权利要求2所述的方法,其中,所述确定所述访客端处理器是否被授权使用授权令牌来进行判断。
4.如权利要求3所述的方法,其中,所述确定所述访客端处理器是否被授权包括将存储在指定位置中的授权令牌和与访客端处理器相关联的授权令牌进行比较,其中相等表示授权。
5.如权利要求2所述的方法,其中,所述确定所述访客端指令是否被允许还包括:
确定所述访客端处理器是否被启用供适配器访问解释;
确定所述适配器是否被启用供适配器访问解释;以及
确定与所述适配器相关联的并在所述请求中指定的函数句柄是否被启用,其中,响应于所述访客端处理器被授权、所述访客端处理器被启用供适配器访问解释、所述适配器被启用供适配器访问解释、以及所述函数句柄被启用,所述访客端处理器被允许访问。
6.如权利要求1所述的方法,其中,所述执行直接访问所述适配器的地址空间,所述访问包括读取或写入操作。
7.如权利要求1所述的方法,其中,所述方法还包括:
由所述主机确定,它希望干涉所述访客端指令的执行;以及
响应于所述主机确定它希望干涉,由所述主机拦截所述访客端指令的执行。
8.如权利要求1所述的方法,其中,所述方法还包括由所述主机代表执行所述访客端指令的访客端处理器执行一个或多个动作,以允许所述访客端指令直接访问所述适配器。
9.如权利要求8所述的方法,其中,所述一个或多个动作包括:
授权所述访客端处理器解释一个或多个特定特许指令;以及
允许所述访客端处理器解释一个或多个特定特许指令。
10.一种包括存储在计算机可读介质上的计算机程序代码的计算机程序,当被加载到计算机***并在其上执行时,使所述计算机***执行根据权利要求1到9中任一权利要求所述的方法的所有步骤。
11.一种在计算环境中提供对适配器的访问的计算机***,所述计算机***包括:
存储器;以及
与所述存储器进行通信的处理器;
用于执行包括访问适配器的请求的访客端指令的执行器;
用于确定所述访客端指令是否被允许直接访问所述适配器的确定器;
所述执行器,响应于被允许,用于直接地访问所述适配器的一个或多个地址空间而没有主机干预;以及
所述执行器,响应于不被允许,用于导致对主机操作***的拦截。
12.一种在计算环境中提供对适配器的访问的计算机***,所述计算机***包括:
存储器;以及
与所述存储器进行通信的处理器,其中所述计算机***被配置成执行方法,所述方法包括:
执行包括访问适配器的请求的访客端指令;
确定所述访客端指令是否被允许直接访问所述适配器;
响应于被允许,所述执行直接地访问所述适配器的一个或多个地址空间而没有主机干预;以及
响应于不被允许,所述执行导致对主机操作***的拦截。
13.如权利要求12所述的计算机***,其中,所述确定包括确定执行所述访客端指令的访客端处理器是否被授权访问所述适配器。
14.如权利要求12所述的计算机***,其中,所述确定所述访客端处理器是否被授权使用授权令牌来进行判断。
15.如权利要求12所述的计算机***,其中,所述确定所述访客端指令是否被允许还包括:
确定所述访客端处理器是否被启用供适配器访问解释;
确定所述适配器是否被启用供适配器访问解释;以及
确定与所述适配器相关联的并在所述请求中指定的函数句柄是否被启用,其中,响应于所述访客端处理器被授权、所述访客端处理器被启用供适配器访问解释、所述适配器被启用供适配器访问解释、以及所述函数句柄被启用,所述访客端处理器被允许访问。
16.如权利要求12所述的计算机***,其中,所述执行直接访问所述适配器的地址空间,所述访问包括读取或写入操作。
17.如权利要求12所述的计算机***,其中,所述方法还包括:
由所述主机确定,它希望干涉所述访客端指令的执行;以及
响应于所述主机确定它希望干涉,由所述主机拦截所述访客端指令的执行。
18.如权利要求12所述的计算机***,其中,所述方法还包括由所述主机代表执行所述访客端指令的访客端处理器执行一个或多个动作,以允许所述访客端指令直接访问所述适配器。
19.一种在计算环境中提供对适配器的访问的计算机程序产品,所述计算机程序产品包括:
可以由处理电路读取的并存储由所述处理电路执行以便执行根据权利要求1到9中任一权利要求所述的方法的指令的计算机可读存储介质。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/821,190 US9342352B2 (en) | 2010-06-23 | 2010-06-23 | Guest access to address spaces of adapter |
US12/821,190 | 2010-06-23 | ||
PCT/EP2010/067031 WO2011160713A1 (en) | 2010-06-23 | 2010-11-08 | Guest access to address spaces of adapter |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102906702A true CN102906702A (zh) | 2013-01-30 |
CN102906702B CN102906702B (zh) | 2015-11-25 |
Family
ID=43821739
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201080066948.7A Active CN102906702B (zh) | 2010-06-23 | 2010-11-08 | 对适配器的地址空间的访客端访问 |
Country Status (5)
Country | Link |
---|---|
US (1) | US9342352B2 (zh) |
EP (1) | EP2430535A1 (zh) |
JP (1) | JP5731642B2 (zh) |
CN (1) | CN102906702B (zh) |
WO (1) | WO2011160713A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104737138A (zh) * | 2012-10-08 | 2015-06-24 | 国际商业机器公司 | 用半虚拟化的管理程序提供全虚拟化的附属部件 |
Families Citing this family (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8510599B2 (en) * | 2010-06-23 | 2013-08-13 | International Business Machines Corporation | Managing processing associated with hardware events |
US8468284B2 (en) | 2010-06-23 | 2013-06-18 | International Business Machines Corporation | Converting a message signaled interruption into an I/O adapter event notification to a guest operating system |
US8572635B2 (en) | 2010-06-23 | 2013-10-29 | International Business Machines Corporation | Converting a message signaled interruption into an I/O adapter event notification |
US8615645B2 (en) | 2010-06-23 | 2013-12-24 | International Business Machines Corporation | Controlling the selectively setting of operational parameters for an adapter |
US8635430B2 (en) | 2010-06-23 | 2014-01-21 | International Business Machines Corporation | Translation of input/output addresses to memory addresses |
US8364817B1 (en) | 2012-02-09 | 2013-01-29 | Gramboo Inc. | Method and system for managing a data item |
US9355032B2 (en) | 2012-10-08 | 2016-05-31 | International Business Machines Corporation | Supporting multiple types of guests by a hypervisor |
US9280488B2 (en) | 2012-10-08 | 2016-03-08 | International Business Machines Corporation | Asymmetric co-existent address translation structure formats |
US9600419B2 (en) | 2012-10-08 | 2017-03-21 | International Business Machines Corporation | Selectable address translation mechanisms |
US9740624B2 (en) | 2012-10-08 | 2017-08-22 | International Business Machines Corporation | Selectable address translation mechanisms within a partition |
US9348757B2 (en) | 2012-10-08 | 2016-05-24 | International Business Machines Corporation | System supporting multiple partitions with differing translation formats |
US20150261693A1 (en) * | 2014-03-14 | 2015-09-17 | International Business Machines Corporation | Dynamic storage key assignment |
US9727359B2 (en) * | 2015-04-27 | 2017-08-08 | Red Hat Israel, Ltd. | Virtual machine function based sub-page base address register access for peripheral component interconnect device assignment |
US9910690B2 (en) * | 2015-11-20 | 2018-03-06 | Red Hat, Inc. | PCI slot hot-addition deferral for multi-function devices |
US9529759B1 (en) * | 2016-01-14 | 2016-12-27 | International Business Machines Corporation | Multipath I/O in a computer system |
US10102022B2 (en) | 2016-05-23 | 2018-10-16 | Red Hat Israel, Ltd. | System and method for configuring a virtual device |
US10614092B2 (en) * | 2017-01-24 | 2020-04-07 | International Business Machines Corporation | Optimizing data retrieval operation in big-data processing systems |
US11977493B2 (en) * | 2019-07-17 | 2024-05-07 | Red Hat, Inc. | Safe virtual machine physical device access for network function virtualization |
US11531467B1 (en) * | 2021-01-29 | 2022-12-20 | Pure Storage, Inc. | Controlling public access of resources in a secure distributed storage system |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6629175B1 (en) * | 2000-04-14 | 2003-09-30 | International Business Machines Corporation | Efficient adapter context switching |
US20040025166A1 (en) * | 2002-02-02 | 2004-02-05 | International Business Machines Corporation | Server computer and a method for accessing resources from virtual machines of a server computer via a fibre channel |
CN1536842A (zh) * | 2003-04-10 | 2004-10-13 | 国际商业机器公司 | 用于根据使用类来控制对设施的访问的装置、***和方法 |
CN1924842A (zh) * | 2005-08-31 | 2007-03-07 | 国际商业机器公司 | 用于i/o适配器的方法和装置 |
Family Cites Families (222)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3976979A (en) | 1974-01-02 | 1976-08-24 | Honeywell Information Systems, Inc. | Coupler for providing data transfer between host and remote data processing units |
US4028668A (en) | 1975-12-22 | 1977-06-07 | Honeywell Information Systems, Inc. | Apparatus for selectively addressing sections and locations in a device controller's memory |
US4323963A (en) | 1979-07-13 | 1982-04-06 | Rca Corporation | Hardware interpretive mode microprocessor |
US4271468A (en) | 1979-11-06 | 1981-06-02 | International Business Machines Corp. | Multiprocessor mechanism for handling channel interrupts |
JPS57191826A (en) | 1981-05-19 | 1982-11-25 | Matsushita Electric Ind Co Ltd | Magnetic head demagnetizer |
WO1983001524A1 (en) | 1981-10-13 | 1983-04-28 | Cormier, Roger, Louis | Method and apparatus for measurements of channel operation |
JPS6273347A (ja) | 1985-09-27 | 1987-04-04 | Hitachi Ltd | アドレス変換装置 |
JPH0250744A (ja) | 1988-08-12 | 1990-02-20 | Nec Corp | アドレス変換方式 |
JPH0282343A (ja) | 1988-09-20 | 1990-03-22 | Hitachi Ltd | マルチプロセッサシステムの割込処理方式 |
US5282274A (en) | 1990-05-24 | 1994-01-25 | International Business Machines Corporation | Translation of multiple virtual pages upon a TLB miss |
US5170472A (en) | 1991-03-28 | 1992-12-08 | International Business Machines Corp. | Dynamically changing a system i/o configuration definition |
US5465355A (en) | 1991-09-04 | 1995-11-07 | International Business Machines Corporation | Establishing and restoring paths in a data processing I/O system |
JPH05165715A (ja) | 1991-12-12 | 1993-07-02 | Nec Corp | 情報処理装置 |
JPH0821015B2 (ja) | 1992-01-20 | 1996-03-04 | インターナショナル・ビジネス・マシーンズ・コーポレイション | コンピュータならびにそのシステム再構成化装置および方法 |
US5617554A (en) | 1992-02-10 | 1997-04-01 | Intel Corporation | Physical address size selection and page size selection in an address translator |
US5418956A (en) | 1992-02-26 | 1995-05-23 | Microsoft Corporation | Method and system for avoiding selector loads |
US5600805A (en) | 1992-06-15 | 1997-02-04 | International Business Machines Corporation | Pass-through for I/O channel subsystem call instructions for accessing shared resources in a computer system having a plurality of operating systems |
US5265240A (en) | 1992-07-24 | 1993-11-23 | International Business Machines Corporation | Channel measurement method and means |
US5465332A (en) | 1992-09-21 | 1995-11-07 | International Business Machines Corporation | Selectable 8/16 bit DMA channels for "ISA" bus |
JP2500101B2 (ja) | 1992-12-18 | 1996-05-29 | インターナショナル・ビジネス・マシーンズ・コーポレイション | 共用変数の値を更新する方法 |
AU6629894A (en) | 1993-05-07 | 1994-12-12 | Apple Computer, Inc. | Method for decoding guest instructions for a host computer |
US5535352A (en) | 1994-03-24 | 1996-07-09 | Hewlett-Packard Company | Access hints for input/output address translation mechanisms |
US5551013A (en) | 1994-06-03 | 1996-08-27 | International Business Machines Corporation | Multiprocessor for hardware emulation |
JPH10502197A (ja) | 1994-06-28 | 1998-02-24 | インテル・コーポレーション | Pci−isa割込みプロトコルコンバータ及び選択機構 |
US5748950A (en) | 1994-09-20 | 1998-05-05 | Intel Corporation | Method and apparatus for providing an optimized compare-and-branch instruction |
US5901312A (en) | 1994-12-13 | 1999-05-04 | Microsoft Corporation | Providing application programs with unmediated access to a contested hardware resource |
US5802590A (en) | 1994-12-13 | 1998-09-01 | Microsoft Corporation | Method and system for providing secure access to computer resources |
DE19602872A1 (de) | 1995-01-27 | 1996-08-08 | Gmd Gmbh | Verfahren zum Betreiben einer Adreßumsetzvorrichtung |
US5586268A (en) | 1995-03-03 | 1996-12-17 | Advanced System Products, Inc. | Multiple peripheral adapter device driver architecture |
JPH08263424A (ja) | 1995-03-20 | 1996-10-11 | Fujitsu Ltd | コンピュータ装置 |
DE69601599T2 (de) | 1995-06-07 | 1999-10-14 | Ibm | Videoverarbeitungseinheit mit Steuerung des Adressierungsmodus |
US5671365A (en) | 1995-10-20 | 1997-09-23 | Symbios Logic Inc. | I/O system for reducing main processor overhead in initiating I/O requests and servicing I/O completion events |
US5790825A (en) | 1995-11-08 | 1998-08-04 | Apple Computer, Inc. | Method for emulating guest instructions on a host computer through dynamic recompilation of host instructions |
US5960213A (en) | 1995-12-18 | 1999-09-28 | 3D Labs Inc. Ltd | Dynamically reconfigurable multi-function PCI adapter device |
US5974440A (en) | 1996-03-25 | 1999-10-26 | Texas Instruments Incorporated | Microprocessor with circuits, systems, and methods for interrupt handling during virtual task operation |
US5819053A (en) | 1996-06-05 | 1998-10-06 | Compaq Computer Corporation | Computer system bus performance monitoring |
US5761448A (en) | 1996-08-30 | 1998-06-02 | Ncr Corporation | Physical-to-logical bus mapping scheme for computer systems having multiple PCI bus configuration |
US5838960A (en) | 1996-09-26 | 1998-11-17 | Bay Networks, Inc. | Apparatus for performing an atomic add instructions |
US5995745A (en) | 1996-12-23 | 1999-11-30 | Yodaiken; Victor J. | Adding real-time support to general purpose operating systems |
US5826084A (en) | 1997-03-25 | 1998-10-20 | Texas Instruments Incorporated | Microprocessor with circuits, systems, and methods for selectively bypassing external interrupts past the monitor program during virtual program operation |
US6272257B1 (en) | 1997-04-30 | 2001-08-07 | Canon Kabushiki Kaisha | Decoder of variable length codes |
KR100263672B1 (ko) | 1997-05-08 | 2000-09-01 | 김영환 | 가변적인 페이지 크기를 지원하는 어드레스 변환장치 |
US5914730A (en) | 1997-09-09 | 1999-06-22 | Compaq Computer Corp. | System and method for invalidating and updating individual GART table entries for accelerated graphics port transaction requests |
US6067595A (en) | 1997-09-23 | 2000-05-23 | Icore Technologies, Inc. | Method and apparatus for enabling high-performance intelligent I/O subsystems using multi-port memories |
US5864703A (en) | 1997-10-09 | 1999-01-26 | Mips Technologies, Inc. | Method for providing extended precision in SIMD vector arithmetic operations |
US6078970A (en) | 1997-10-15 | 2000-06-20 | International Business Machines Corporation | System for determining adapter interrupt status where interrupt is sent to host after operating status stored in register is shadowed to host memory |
US6009261A (en) | 1997-12-16 | 1999-12-28 | International Business Machines Corporation | Preprocessing of stored target routines for emulating incompatible instructions on a target processor |
US6023736A (en) | 1997-12-19 | 2000-02-08 | International Business Machines Corporation | System for dynamically configuring I/O device adapters where a function configuration register contains ready/not ready flags corresponding to each I/O device adapter |
US6021458A (en) | 1998-01-21 | 2000-02-01 | Intel Corporation | Method and apparatus for handling multiple level-triggered and edge-triggered interrupts |
US6223299B1 (en) | 1998-05-04 | 2001-04-24 | International Business Machines Corporation | Enhanced error handling for I/O load/store operations to a PCI device via bad parity or zero byte enables |
US6308255B1 (en) | 1998-05-26 | 2001-10-23 | Advanced Micro Devices, Inc. | Symmetrical multiprocessing bus and chipset used for coprocessor support allowing non-native code to run in a system |
US6460094B1 (en) | 1998-07-08 | 2002-10-01 | Microsoft Corporation | Peripheral device configured to detect the type of interface to which it is connected and configuring itself accordingly |
US6615305B1 (en) | 1998-08-27 | 2003-09-02 | Intel Corporation | Interrupt pacing in data transfer unit |
US20020147969A1 (en) | 1998-10-21 | 2002-10-10 | Richard A. Lethin | Dynamic optimizing object code translator for architecture emulation and dynamic optimizing object code translation method |
US6408347B1 (en) | 1998-12-10 | 2002-06-18 | Cisco Technology, Inc. | Integrated multi-function adapters using standard interfaces through single a access point |
US6519645B2 (en) | 1999-02-19 | 2003-02-11 | International Business Machine Corporation | Method and apparatus for providing configuration information using a queued direct input-output device |
US6397350B1 (en) | 1999-02-19 | 2002-05-28 | International Business Machines Corporation | Method of providing direct data processing access using a queued direct input-output device |
US6349380B1 (en) | 1999-03-12 | 2002-02-19 | Intel Corporation | Linear address extension and mapping to physical memory using 4 and 8 byte page table entries in a 32-bit microprocessor |
US6557035B1 (en) | 1999-03-30 | 2003-04-29 | International Business Machines Corporation | Rules-based method of and system for optimizing server hardware capacity and performance |
US6330656B1 (en) | 1999-03-31 | 2001-12-11 | International Business Machines Corporation | PCI slot control apparatus with dynamic configuration for partitioned systems |
JP2000293476A (ja) | 1999-04-09 | 2000-10-20 | Nec Corp | Pciデバイスへのリソース割当方式及びその方法 |
US6578191B1 (en) | 1999-05-17 | 2003-06-10 | International Business Machines Corporation | Method and apparatus for dynamic generation of adapters |
US6330647B1 (en) | 1999-08-31 | 2001-12-11 | Micron Technology, Inc. | Memory bandwidth allocation based on access count priority scheme |
US6772097B1 (en) | 1999-09-30 | 2004-08-03 | Intel Corporation | Retrieving I/O processor performance monitor data |
US6493741B1 (en) | 1999-10-01 | 2002-12-10 | Compaq Information Technologies Group, L.P. | Method and apparatus to quiesce a portion of a simultaneous multithreaded central processing unit |
US6970992B2 (en) | 1999-10-04 | 2005-11-29 | Intel Corporation | Apparatus to map virtual pages to disparate-sized, non-contiguous real pages and methods relating thereto |
US6651126B1 (en) | 1999-10-29 | 2003-11-18 | Texas Instruments Incorporated | Snapshot arbiter mechanism |
US7509391B1 (en) | 1999-11-23 | 2009-03-24 | Texas Instruments Incorporated | Unified memory management system for multi processor heterogeneous architecture |
US6529978B1 (en) | 2000-02-23 | 2003-03-04 | International Business Machines Corporation | Computer input/output (I/O) interface with dynamic I/O adaptor processor bindings |
US6963940B1 (en) | 2000-03-30 | 2005-11-08 | International Business Machines Corporation | Measuring utilization of individual components of channels |
US6581130B1 (en) | 2000-04-04 | 2003-06-17 | Hewlett Packard Development Company, L.P. | Dynamic remapping of address registers for address translation between multiple busses |
US6772264B1 (en) | 2000-05-22 | 2004-08-03 | International Business Machines Corporation | Enabling a docking station for ISA adapters |
US6715011B1 (en) | 2000-05-31 | 2004-03-30 | International Business Machines Corporation | PCI/PCI-X bus bridge with performance monitor |
US6654818B1 (en) | 2000-06-22 | 2003-11-25 | International Business Machines Corporation | DMA access authorization for 64-bit I/O adapters on PCI bus |
US6611883B1 (en) | 2000-11-16 | 2003-08-26 | Sun Microsystems, Inc. | Method and apparatus for implementing PCI DMA speculative prefetching in a message passing queue oriented bus system |
US6704831B1 (en) | 2000-11-16 | 2004-03-09 | Sun Microsystems, Inc. | Method and apparatus for converting address information between PCI bus protocol and a message-passing queue-oriented bus protocol |
US6658521B1 (en) | 2000-12-22 | 2003-12-02 | International Business Machines Corporation | Method and apparatus for address translation on PCI bus over infiniband network |
US6721839B1 (en) | 2000-12-27 | 2004-04-13 | International Business Machines Corporation | Method of mapping multiple address spaces into single PCI bus |
US6938138B2 (en) | 2001-01-11 | 2005-08-30 | International Business Machines Corporation | Method and apparatus for managing access to memory |
TW499795B (en) | 2001-03-19 | 2002-08-21 | Realtek Semiconductor Corp | PCI extended function interface and the PCI device using the same |
US6792492B1 (en) | 2001-04-11 | 2004-09-14 | Novell, Inc. | System and method of lowering overhead and latency needed to service operating system interrupts |
US6820164B2 (en) | 2001-04-17 | 2004-11-16 | International Business Machines Corporation | Peripheral component interconnect bus detection in logically partitioned computer system involving authorizing guest operating system to conduct configuration input-output operation with functions of pci devices |
US20020161907A1 (en) | 2001-04-25 | 2002-10-31 | Avery Moon | Adaptive multi-protocol communications system |
US6968446B1 (en) | 2001-08-09 | 2005-11-22 | Advanced Micro Devices, Inc. | Flags handling for system call instructions |
US6842870B2 (en) | 2001-09-20 | 2005-01-11 | International Business Machines Corporation | Method and apparatus for filtering error logs in a logically partitioned data processing system |
US6880021B2 (en) | 2001-09-28 | 2005-04-12 | International Business Machines Corporation | Intelligent interrupt with hypervisor collaboration |
US6801993B2 (en) | 2001-09-28 | 2004-10-05 | International Business Machines Corporation | Table offset for shortening translation tables from their beginnings |
US6901537B2 (en) | 2002-02-27 | 2005-05-31 | International Business Machines Corporation | Method and apparatus for preventing the propagation of input/output errors in a logical partitioned data processing system |
US6907510B2 (en) | 2002-04-01 | 2005-06-14 | Intel Corporation | Mapping of interconnect configuration space |
US7302692B2 (en) | 2002-05-31 | 2007-11-27 | International Business Machines Corporation | Locally providing globally consistent information to communications layers |
US7299266B2 (en) | 2002-09-05 | 2007-11-20 | International Business Machines Corporation | Memory management offload for RDMA enabled network adapters |
US20040049603A1 (en) | 2002-09-05 | 2004-03-11 | International Business Machines Corporation | iSCSI driver to adapter interface protocol |
US7197585B2 (en) | 2002-09-30 | 2007-03-27 | International Business Machines Corporation | Method and apparatus for managing the execution of a broadcast instruction on a guest processor |
US7054972B2 (en) | 2002-12-13 | 2006-05-30 | Lsi Logic Corporation | Apparatus and method for dynamically enabling and disabling interrupt coalescing in data processing system |
KR100449807B1 (ko) | 2002-12-20 | 2004-09-22 | 한국전자통신연구원 | 호스트 버스 인터페이스를 갖는 데이터 전송 프로토콜제어 시스템 |
US7065598B2 (en) | 2002-12-20 | 2006-06-20 | Intel Corporation | Method, system, and article of manufacture for adjusting interrupt levels |
US20040139304A1 (en) | 2003-01-09 | 2004-07-15 | International Business Machines Corporation | High speed virtual instruction execution mechanism |
JP4256693B2 (ja) | 2003-02-18 | 2009-04-22 | 株式会社日立製作所 | 計算機システム、i/oデバイス及びi/oデバイスの仮想共有方法 |
JP2004248985A (ja) | 2003-02-21 | 2004-09-09 | Air Water Inc | 注射器およびそれに用いるパッキン |
US7073002B2 (en) | 2003-03-13 | 2006-07-04 | International Business Machines Corporation | Apparatus and method for controlling resource transfers using locks in a logically partitioned computer system |
US7107382B2 (en) | 2003-04-03 | 2006-09-12 | Emulex Design & Manufacturing Corporation | Virtual peripheral component interconnect multiple-function device |
US7139940B2 (en) | 2003-04-10 | 2006-11-21 | International Business Machines Corporation | Method and apparatus for reporting global errors on heterogeneous partitioned systems |
US7281075B2 (en) | 2003-04-24 | 2007-10-09 | International Business Machines Corporation | Virtualization of a global interrupt queue |
US7130949B2 (en) | 2003-05-12 | 2006-10-31 | International Business Machines Corporation | Managing input/output interruptions in non-dedicated interruption hardware environments |
US7290070B2 (en) | 2003-05-12 | 2007-10-30 | International Business Machines Corporation | Multiple logical input/output subsystem facility |
US7127599B2 (en) | 2003-05-12 | 2006-10-24 | International Business Machines Corporation | Managing configurations of input/output system images of an input/output subsystem, wherein a configuration is modified without restarting the input/output subsystem to effect a modification |
US7177961B2 (en) | 2003-05-12 | 2007-02-13 | International Business Machines Corporation | Managing access, by operating system images of a computing environment, of input/output resources of the computing environment |
US7174550B2 (en) | 2003-05-12 | 2007-02-06 | International Business Machines Corporation | Sharing communications adapters across a plurality of input/output subsystem images |
US7130938B2 (en) | 2003-05-12 | 2006-10-31 | International Business Machines Corporation | Method, system and program products for identifying communications adapters of a computing environment |
US7000036B2 (en) | 2003-05-12 | 2006-02-14 | International Business Machines Corporation | Extended input/output measurement facilities |
US6996638B2 (en) | 2003-05-12 | 2006-02-07 | International Business Machines Corporation | Method, system and program products for enhancing input/output processing for operating system images of a computing environment |
US7134052B2 (en) | 2003-05-15 | 2006-11-07 | International Business Machines Corporation | Autonomic recovery from hardware errors in an input/output fabric |
US6931460B2 (en) | 2003-05-19 | 2005-08-16 | Emulex Design & Manufacturing Corporation | Dynamically self-adjusting polling mechanism |
US7420931B2 (en) | 2003-06-05 | 2008-09-02 | Nvidia Corporation | Using TCP/IP offload to accelerate packet filtering |
US7991918B2 (en) | 2003-06-05 | 2011-08-02 | Nvidia Corporation | Transmitting commands and information between a TCP/IP stack and an offload unit |
EP1489491A1 (en) | 2003-06-19 | 2004-12-22 | Texas Instruments Incorporated | Dynamically changing the semantic of an instruction |
US7013358B2 (en) | 2003-08-09 | 2006-03-14 | Texas Instruments Incorporated | System for signaling serialized interrupts using message signaled interrupts |
US7979548B2 (en) | 2003-09-30 | 2011-07-12 | International Business Machines Corporation | Hardware enforcement of logical partitioning of a channel adapter's resources in a system area network |
JP2005122640A (ja) | 2003-10-20 | 2005-05-12 | Hitachi Ltd | サーバシステム及びi/oスロット共有方法。 |
US7146482B2 (en) | 2003-11-25 | 2006-12-05 | International Business Machines Corporation | Memory mapped input/output emulation |
US7552436B2 (en) | 2003-11-25 | 2009-06-23 | International Business Machines | Memory mapped input/output virtualization |
US7277968B2 (en) | 2004-01-23 | 2007-10-02 | International Business Machines Corporation | Managing sets of input/output communications subadapters of an input/output subsystem |
US7107384B1 (en) | 2004-03-01 | 2006-09-12 | Pericom Semiconductor Corp. | Dynamic PCI-bus pre-fetch with separate counters for commands of commands of different data-transfer lengths |
JP2005309553A (ja) | 2004-04-19 | 2005-11-04 | Hitachi Ltd | 計算機 |
US7530071B2 (en) | 2004-04-22 | 2009-05-05 | International Business Machines Corporation | Facilitating access to input/output resources via an I/O partition shared by multiple consumer partitions |
US7209994B1 (en) | 2004-05-11 | 2007-04-24 | Advanced Micro Devices, Inc. | Processor that maintains virtual interrupt state and injects virtual interrupts into virtual machine guests |
US7941799B2 (en) | 2004-05-27 | 2011-05-10 | International Business Machines Corporation | Interpreting I/O operation requests from pageable guests without host intervention |
US20050289271A1 (en) | 2004-06-29 | 2005-12-29 | Martinez Alberto J | Circuitry to selectively produce MSI signals |
US20060005083A1 (en) | 2004-06-30 | 2006-01-05 | International Business Machines Corporation | Performance count tracing |
US7496706B2 (en) | 2004-06-30 | 2009-02-24 | Intel Corporation | Message signaled interrupt redirection table |
US7418572B2 (en) | 2004-08-18 | 2008-08-26 | International Business Machines Corporation | Pretranslating input/output buffers in environments with multiple page sizes |
JP4788124B2 (ja) | 2004-09-16 | 2011-10-05 | 株式会社日立製作所 | データ処理システム |
TWI252397B (en) | 2004-09-17 | 2006-04-01 | Ind Tech Res Inst | Method and apparatus of built-in self-diagnosis and repair in a memory with syndrome identification |
US7340582B2 (en) | 2004-09-30 | 2008-03-04 | Intel Corporation | Fault processing for direct memory access address translation |
US7444493B2 (en) | 2004-09-30 | 2008-10-28 | Intel Corporation | Address translation for input/output devices using hierarchical translation tables |
US7334107B2 (en) | 2004-09-30 | 2008-02-19 | Intel Corporation | Caching support for direct memory access address translation |
US7373446B2 (en) | 2004-11-05 | 2008-05-13 | Microsoft Corporation | Method and system for dynamically patching an operating system's interrupt mechanism |
US7296120B2 (en) | 2004-11-18 | 2007-11-13 | International Business Machines Corporation | Mechanism that provides efficient multi-word load atomicity |
US7188346B2 (en) | 2004-11-29 | 2007-03-06 | International Business Machines Corporation | Method, system and program product for correlating data between operating environments |
US7284112B2 (en) | 2005-01-14 | 2007-10-16 | International Business Machines Corporation | Multiple page size address translation incorporating page size prediction |
US7886086B2 (en) | 2005-02-03 | 2011-02-08 | International Business Machines Corporation | Method and apparatus for restricting input/output device peer-to-peer operations in a data processing system to improve reliability, availability, and serviceability |
US7562366B2 (en) | 2005-02-03 | 2009-07-14 | Solarflare Communications, Inc. | Transmit completion event batching |
US7464191B2 (en) | 2005-02-25 | 2008-12-09 | International Business Machines Corporation | System and method for host initialization for an adapter that supports virtualization |
US7260664B2 (en) | 2005-02-25 | 2007-08-21 | International Business Machines Corporation | Interrupt mechanism on an IO adapter that supports virtualization |
US7493425B2 (en) | 2005-02-25 | 2009-02-17 | International Business Machines Corporation | Method, system and program product for differentiating between virtual hosts on bus transactions and associating allowable memory access for an input/output adapter that supports virtualization |
US20060195617A1 (en) | 2005-02-25 | 2006-08-31 | International Business Machines Corporation | Method and system for native virtualization on a partially trusted adapter using adapter bus, device and function number for identification |
US7475166B2 (en) | 2005-02-28 | 2009-01-06 | International Business Machines Corporation | Method and system for fully trusted adapter validation of addresses referenced in a virtual host transfer request |
US7567567B2 (en) | 2005-04-05 | 2009-07-28 | Sun Microsystems, Inc. | Network system including packet classification for partitioned resources |
US7260663B2 (en) | 2005-04-07 | 2007-08-21 | International Business Machines Corporation | System and method for presenting interrupts |
US7200704B2 (en) | 2005-04-07 | 2007-04-03 | International Business Machines Corporation | Virtualization of an I/O adapter port using enablement and activation functions |
US7478178B2 (en) | 2005-04-22 | 2009-01-13 | Sun Microsystems, Inc. | Virtualization for device sharing |
US7502872B2 (en) | 2005-05-23 | 2009-03-10 | International Bsuiness Machines Corporation | Method for out of user space block mode I/O directly between an application instance and an I/O adapter |
US7225287B2 (en) | 2005-06-01 | 2007-05-29 | Microsoft Corporation | Scalable DMA remapping on a computer bus |
US7516252B2 (en) | 2005-06-08 | 2009-04-07 | Intel Corporation | Port binding scheme to create virtual host bus adapter in a virtualized multi-operating system platform environment |
US20060288130A1 (en) | 2005-06-21 | 2006-12-21 | Rajesh Madukkarumukumana | Address window support for direct memory access translation |
US7631097B2 (en) | 2005-07-21 | 2009-12-08 | National Instruments Corporation | Method and apparatus for optimizing the responsiveness and throughput of a system performing packetized data transfers using a transfer count mark |
US8028154B2 (en) | 2005-07-29 | 2011-09-27 | Broadcom Corporation | Method and system for reducing instruction storage space for a processor integrated in a network adapter chip |
US7546487B2 (en) | 2005-09-15 | 2009-06-09 | Intel Corporation | OS and firmware coordinated error handling using transparent firmware intercept and firmware services |
US20070073955A1 (en) | 2005-09-29 | 2007-03-29 | Joseph Murray | Multi-function PCI device |
US7475183B2 (en) | 2005-12-12 | 2009-01-06 | Microsoft Corporation | Large page optimizations in a virtual machine environment |
US20070136554A1 (en) | 2005-12-12 | 2007-06-14 | Giora Biran | Memory operations in a virtualized system |
US7328296B1 (en) | 2006-01-03 | 2008-02-05 | Emc Corporation | Interrupt processing system |
US7398343B1 (en) | 2006-01-03 | 2008-07-08 | Emc Corporation | Interrupt processing system |
US7653803B2 (en) | 2006-01-17 | 2010-01-26 | Globalfoundries Inc. | Address translation for input/output (I/O) devices and interrupt remapping for I/O devices in an I/O memory management unit (IOMMU) |
US7673116B2 (en) | 2006-01-17 | 2010-03-02 | Advanced Micro Devices, Inc. | Input/output memory management unit that implements memory attributes based on translation data |
US7548999B2 (en) | 2006-01-17 | 2009-06-16 | Advanced Micro Devices, Inc. | Chained hybrid input/output memory management unit |
US7849232B2 (en) | 2006-02-17 | 2010-12-07 | Intel-Ne, Inc. | Method and apparatus for using a single multi-function adapter with different operating systems |
US7739422B2 (en) | 2006-03-21 | 2010-06-15 | International Business Machines Corporation | Method to improve system DMA mapping while substantially reducing memory fragmentation |
US7412589B2 (en) | 2006-03-31 | 2008-08-12 | International Business Machines Corporation | Method to detect a stalled instruction stream and serialize micro-operation execution |
US8621120B2 (en) | 2006-04-17 | 2013-12-31 | International Business Machines Corporation | Stalling of DMA operations in order to do memory migration using a migration in progress bit in the translation control entry mechanism |
US7613847B2 (en) | 2006-05-16 | 2009-11-03 | Hewlett-Packard Development Company, L.P. | Partially virtualizing an I/O device for use by virtual machines |
US7954099B2 (en) | 2006-05-17 | 2011-05-31 | International Business Machines Corporation | Demultiplexing grouped events into virtual event queues while in two levels of virtualization |
JP4961833B2 (ja) | 2006-05-19 | 2012-06-27 | 日本電気株式会社 | クラスタシステム、負荷分散方法、最適化クライアントプログラム、及び調停サーバプログラム |
TW200801952A (en) | 2006-06-02 | 2008-01-01 | Via Tech Inc | Method for setting up a peripheral component interconnect express (PCIE) |
US7571307B2 (en) | 2006-07-26 | 2009-08-04 | International Business Machines Corporation | Capacity upgrade on-demand for I/O adapters |
US7546398B2 (en) | 2006-08-01 | 2009-06-09 | International Business Machines Corporation | System and method for distributing virtual input/output operations across multiple logical partitions |
US7496707B2 (en) | 2006-08-22 | 2009-02-24 | International Business Machines Corporation | Dynamically scalable queues for performance driven PCI express memory traffic |
US8725914B2 (en) | 2006-08-28 | 2014-05-13 | International Business Machines Corporation | Message signaled interrupt management for a computer input/output fabric incorporating platform independent interrupt manager |
US7627723B1 (en) | 2006-09-21 | 2009-12-01 | Nvidia Corporation | Atomic memory operators in a parallel processor |
US20080126652A1 (en) | 2006-09-27 | 2008-05-29 | Intel Corporation | Managing Interrupts in a Partitioned Platform |
US7552298B2 (en) | 2006-09-28 | 2009-06-23 | Broadcom Corporation | Method and system for deferred pinning of host memory for stateful network interfaces |
JP2008090375A (ja) | 2006-09-29 | 2008-04-17 | Hitachi Ltd | 割込み制御システム、およびこれを利用した記憶制御システム |
US9135951B2 (en) | 2006-10-10 | 2015-09-15 | Qualcomm Incorporated | System and method for dynamic audio buffer management |
US7587575B2 (en) | 2006-10-17 | 2009-09-08 | International Business Machines Corporation | Communicating with a memory registration enabled adapter using cached address translations |
US20080091868A1 (en) | 2006-10-17 | 2008-04-17 | Shay Mizrachi | Method and System for Delayed Completion Coalescing |
US20080098197A1 (en) | 2006-10-20 | 2008-04-24 | International Business Machines Corporation | Method and System For Address Translation With Memory Windows |
JP2008123298A (ja) | 2006-11-13 | 2008-05-29 | Canon Inc | 情報処理方法及びシステム |
US7849287B2 (en) | 2006-11-13 | 2010-12-07 | Advanced Micro Devices, Inc. | Efficiently controlling special memory mapped system accesses |
US7624235B2 (en) | 2006-11-30 | 2009-11-24 | Apple Inc. | Cache used both as cache and staging buffer |
US7529860B2 (en) | 2006-12-19 | 2009-05-05 | International Business Machines Corporation | System and method for configuring an endpoint based on specified valid combinations of functions |
US7984454B2 (en) | 2006-12-19 | 2011-07-19 | International Business Machines Corporation | Migration of single root stateless virtual functions |
US7617340B2 (en) | 2007-01-09 | 2009-11-10 | International Business Machines Corporation | I/O adapter LPAR isolation with assigned memory space |
US20080168208A1 (en) | 2007-01-09 | 2008-07-10 | International Business Machines Corporation | I/O Adapter LPAR Isolation In A Hypertransport Environment With Assigned Memory Space Indexing a TVT Via Unit IDs |
JP5119686B2 (ja) | 2007-03-06 | 2013-01-16 | 日本電気株式会社 | 情報処理装置および設定方法 |
EP2075696A3 (en) | 2007-05-10 | 2010-01-27 | Texas Instruments Incorporated | Interrupt- related circuits, systems and processes |
JP5018252B2 (ja) | 2007-06-06 | 2012-09-05 | 株式会社日立製作所 | デバイス割り当て変更方法 |
US7617345B2 (en) | 2007-07-02 | 2009-11-10 | International Business Machines Corporation | Prioritization of interrupts in a storage controller based on interrupt control directives received from hosts |
US20090024823A1 (en) | 2007-07-20 | 2009-01-22 | Wenjeng Ko | Overlayed separate dma mapping of adapters |
US8250254B2 (en) | 2007-07-31 | 2012-08-21 | Intel Corporation | Offloading input/output (I/O) virtualization operations to a processor |
US8127296B2 (en) | 2007-09-06 | 2012-02-28 | Dell Products L.P. | Virtual machine migration between processors having VM migration registers controlled by firmware to modify the reporting of common processor feature sets to support the migration |
US8762999B2 (en) | 2007-09-27 | 2014-06-24 | Oracle America, Inc. | Guest-initiated resource allocation request based on comparison of host hardware information and projected workload requirement |
US8141094B2 (en) | 2007-12-03 | 2012-03-20 | International Business Machines Corporation | Distribution of resources for I/O virtualized (IOV) adapters and management of the adapters through an IOV management partition via user selection of compatible virtual functions |
US7689734B2 (en) | 2007-12-18 | 2010-03-30 | International Business Machines Corporation | Method for toggling non-adjacent channel identifiers during DMA double buffering operations |
US7913030B2 (en) | 2007-12-28 | 2011-03-22 | Sandisk Il Ltd. | Storage device with transaction logging capability |
US8677098B2 (en) | 2008-01-11 | 2014-03-18 | International Business Machines Corporation | Dynamic address translation with fetch protection |
US8151083B2 (en) | 2008-01-11 | 2012-04-03 | International Business Machines Corporation | Dynamic address translation with frame management |
US8037221B2 (en) | 2008-01-16 | 2011-10-11 | International Business Machines Corporation | Dynamic allocation of DMA buffers in input/output adaptors |
US7996628B2 (en) | 2008-02-14 | 2011-08-09 | International Business Machines Corporation | Cross adapter shared address translation tables |
US8332846B2 (en) | 2008-02-28 | 2012-12-11 | Sony Mobile Communications Ab | Selective exposure to USB device functionality for a virtual machine by filtering descriptors |
JP2009249108A (ja) | 2008-04-04 | 2009-10-29 | Mitsubishi Electric Building Techno Service Co Ltd | エレベーター押ボタン一体型位置表示器 |
JP2009259108A (ja) | 2008-04-18 | 2009-11-05 | Toshiba Corp | 情報処理装置および情報処理装置の制御方法 |
US20090276774A1 (en) | 2008-05-01 | 2009-11-05 | Junji Kinoshita | Access control for virtual machines in an information system |
US7743189B2 (en) | 2008-05-05 | 2010-06-22 | International Business Machines Corporation | PCI function south-side data management |
US8032680B2 (en) | 2008-06-27 | 2011-10-04 | Microsoft Corporation | Lazy handling of end of interrupt messages in a virtualized environment |
US8359408B2 (en) | 2008-06-30 | 2013-01-22 | Intel Corporation | Enabling functional dependency in a multi-function device |
US9262357B2 (en) | 2008-09-29 | 2016-02-16 | International Business Machines Corporation | Associating process priority with I/O queuing |
US8645596B2 (en) | 2008-12-30 | 2014-02-04 | Intel Corporation | Interrupt techniques |
CN101634975B (zh) | 2009-08-20 | 2011-09-14 | 广东威创视讯科技股份有限公司 | 一种实现dma数据传输的方法及装置 |
JP5266590B2 (ja) | 2009-09-18 | 2013-08-21 | 株式会社日立製作所 | 計算機システムの管理方法、計算機システム及びプログラム |
US8321615B2 (en) | 2009-12-18 | 2012-11-27 | Intel Corporation | Source core interrupt steering |
US8504754B2 (en) | 2010-06-23 | 2013-08-06 | International Business Machines Corporation | Identification of types of sources of adapter interruptions |
US8572635B2 (en) | 2010-06-23 | 2013-10-29 | International Business Machines Corporation | Converting a message signaled interruption into an I/O adapter event notification |
-
2010
- 2010-06-23 US US12/821,190 patent/US9342352B2/en active Active
- 2010-11-08 CN CN201080066948.7A patent/CN102906702B/zh active Active
- 2010-11-08 EP EP10776347A patent/EP2430535A1/en not_active Ceased
- 2010-11-08 JP JP2013515726A patent/JP5731642B2/ja active Active
- 2010-11-08 WO PCT/EP2010/067031 patent/WO2011160713A1/en active Application Filing
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6629175B1 (en) * | 2000-04-14 | 2003-09-30 | International Business Machines Corporation | Efficient adapter context switching |
US20040025166A1 (en) * | 2002-02-02 | 2004-02-05 | International Business Machines Corporation | Server computer and a method for accessing resources from virtual machines of a server computer via a fibre channel |
CN1536842A (zh) * | 2003-04-10 | 2004-10-13 | 国际商业机器公司 | 用于根据使用类来控制对设施的访问的装置、***和方法 |
CN1924842A (zh) * | 2005-08-31 | 2007-03-07 | 国际商业机器公司 | 用于i/o适配器的方法和装置 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104737138A (zh) * | 2012-10-08 | 2015-06-24 | 国际商业机器公司 | 用半虚拟化的管理程序提供全虚拟化的附属部件 |
CN104737138B (zh) * | 2012-10-08 | 2018-01-12 | 国际商业机器公司 | 用半虚拟化的管理程序提供全虚拟化的附属部件 |
Also Published As
Publication number | Publication date |
---|---|
US20110321158A1 (en) | 2011-12-29 |
WO2011160713A1 (en) | 2011-12-29 |
JP2013534666A (ja) | 2013-09-05 |
JP5731642B2 (ja) | 2015-06-10 |
EP2430535A1 (en) | 2012-03-21 |
CN102906702B (zh) | 2015-11-25 |
US9342352B2 (en) | 2016-05-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102906702B (zh) | 对适配器的地址空间的访客端访问 | |
CN102906701B (zh) | 在计算环境中控制对适配器的访问的方法和*** | |
CN102906722B (zh) | 将消息信号中断转换为i/o适配器事件通知 | |
CN102906719B (zh) | 输入/输出地址到存储器地址的转换 | |
CN102947808B (zh) | 一种有利于存储器访问的***及方法 | |
CN102906692B (zh) | 修改适配器功能参数的指令的方法和*** | |
CN102906704B (zh) | 控制处理适配器中断请求的速率 | |
CN102906716B (zh) | 促进计算环境的***存储器的管理的方法 | |
CN102906721B (zh) | 与访问地址空间并行地对地址空间调整大小 | |
CN102906705B (zh) | 将消息信号中断转换为对客户操作***的i/o适配器事件通知 | |
CN102906693B (zh) | 用于执行用于将数据存储在适配器中的存储指令的方法及*** | |
CN102906694B (zh) | 用于与适配器进行通信的加载指令的方法和*** | |
CN102906720B (zh) | 启用/禁用计算环境的适配器 | |
CN102918516B (zh) | 适配器中断源的类型的标识 | |
CN102906707A (zh) | 管理与硬件事件关联的处理 | |
CN102906708B (zh) | 响应于适配器事件采取的动作的操作***通知 | |
CN102906711A (zh) | 用于适配器功能的测量工具 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |