本专利文档的公开内容的一部分可能包含服从版权保护的材料。版权所有人不反对任何人如同出现在美国专利和商标局专利文件或记录中那样对本专利文档或专利公开的拓制,但是无论如何都保留所有版权。以下注意事项适用于本文档:Copyright2004,Microsoft Corp.
具体实施方式
综述
如上所述,本发明提供了用于向图形硬件空间应用虚拟机的系统和方法。在本发明的各实施例中,尽管诸如图形虚拟机监控程序等监管代码运行在CPU上,然而实际的图形工作项直接运行在图形硬件上。
在本发明的一个非限制方面,提供了用于将图形硬件功能分成特许和非特许操作以及用于有效地虚拟化特许操作,并同时维持无缝的用户体验的系统和方法。在本发明的另一非限制方面,实现了硬件中断处理的有效虚拟化。在其它方面,本发明提供了仿真层中的资源管理能力,用于向分区分派诸如存储器、处理周期、屏幕实际状况等预先固定的分配,和/或用于依照系统的跨应用程序和跨平台参数/需求来动态地分派这些资源。
该体系结构的另一有益的结果是本发明允许虚拟分区直接访问图形硬件,而无需改变客机操作系统或应用程序。许多应用也从本发明的基本体系结构中导出,例如,传统代码可使用传统操作系统的实例保留在旧操作系统中,以执行依赖于传统代码的应用程序。另一示例是构建可信和非可信服务的概念,它进而可用于支持可信图形输出或内容保护技术。
依照本发明提供的其它系统和方法涉及用户体验。采用多个分区,由本发明提供的一种用户体验是“窗口中的桌面”方法,其中,对每一客机操作系统显示的桌面被重定向到显示设备(或在多个监视器的情况下是多个显示设备,有时候被称为“多监视器”上的窗口(或替换的桌面视图。在其它实施例中,本发明启用了允许来自不同客机操作系统的窗口混和在单个同一的显示中的用户体验,由此标识了与任何特定的窗口相关联的“像素”。在一个实施例中,本发明通过向客机操作系统添加“助手程序”来标识各窗口的各部分,实现了标识像素与其窗口的关联。在其它实施例中,本发明允许与客机“窗口管理器”交互,以确保主桌面中的未遮蔽窗口在虚拟客机操作系统桌面中也是未遮蔽的,使得它们可在主桌面中提取和显示。在其它实施例提供了图形硬件支持,以部分或全部地帮助标识来自不同窗口的像素的存储器位置。
本发明也包括提供附加图形硬件支持来帮助管理虚拟桌面上的窗口的实施例。尽管有未来的操作系统可添加支持来使得该任务更容易的区域,然而概念是启用标识来自不同客机操作系统的各个窗口的框架,并使该数据对组成多个来源的非统一演示服务(有时候也称为桌面合成引擎)可用。该引擎能够访问来自多个客机的图形存储器状态,而客机一般不能看见彼此的函数调用和活动。
启用显示输出相对于各自客机OS的内容的复杂分层合成效果的一种方法是使演示引擎从不同的客机OS中“拉”出窗口内容,以构建合成桌面。一个替换方法是允许客机OS直接向单个主桌面呈现,即,向该存储器呈现,但使用特殊的硬件支持来约束客机OS能够绘制的桌面部分。例如,可使用类似于用于硬件窗口裁剪的机制的单独的特许机制来控制可允许的区域,在该裁剪机制中,矩形或位图的列表定义了指示哪些像素可写的掩码。可将这一方法实现为“推”操作,其中,客机OS直接向桌面绘制,且演示引擎控制对每一客机OS可写的区域在哪里。
在各实施例中,本发明提供了用于标识和定位来自由第一OS呈现的窗口和由第二OS呈现的窗口的像素,并以某种用于显示的方式每次一个或组合在一起来呈现窗口的系统和方法。本发明也包括用于向第二OS分配和分派诸如视频或系统存储器等物理资源,使得所分派的资源直接可被第二OS访问,且未分派的资源不可被第二OS访问的系统和方法。本发明还提供了用于截取和有效地仿真特许操作的系统和方法。
下文将描述本发明的其它更详细方面,但是首先,以下描述提供了用于虚拟机和相关联的术语的综述和某些公共词汇,因为对于操作系统和主机处理器(“CPU”)虚拟化技术,必须知道这些术语。通过这样做,阐明了一组词汇,本领域的普通技术人员会发现该组词汇对于以下依照本发明用于提供计算系统的图形子系统侧的仿真能力的装置、系统和方法的描述是有用的。
虚拟机综述
计算机包括被设计成执行一组特定的系统指令的通用中央处理单元(CPU)或“处理器”。具有类似的体系结构或设计规范的一组处理器被认为是同一处理器家族的成员。当前的处理器家族的示例包括由国际商业机器(IBM)公司或亚利桑那州菲尼克斯市的摩托罗拉公司生产的Motorola 680X0处理器家族;由加利福尼亚州桑尼维尔市的英特尔公司生产的Intel 80X86处理器家族;以及由摩托罗拉公司生产的并在加利福尼亚州库珀蒂诺市的苹果计算机公司生产的计算机中使用的PowerPC处理器家族。尽管一组处理器由于其类似的体系结构和设计思想可以在同一家族中,然而处理器可依照其时钟速度和其它性能参数而在家族中各不相同。
每一微处理器执行对该处理器家族唯一的指令。处理器或处理器家族可执行的共同的指令集被称为处理器的指令集。作为示例,由Intel 80X86处理器家族使用的指令集与由PowerPC处理器家族使用的指令集不兼容。Intel 80X86指令集基于复杂指令集计算机(CISC)格式。Motorola PowerPC指令集基于精简指令集计算机(RISC)格式。CISC处理器使用大量的指令,某些指令能够执行相当复杂的功能,但是一般需要许多时钟周期来执行。RISC处理器使用了较少数量的可用指令来执行以较高速率执行的一组较简单的功能。
处理器家族在计算机系统之中的唯一性通常也导致计算机系统的硬件体系结构的其它硬件之间的不兼容性。用来自Intel 80X86处理器家族的处理器制造的计算机系统将具有与用来自PowerPC处理器家族的处理器制造的计算机系统的硬件体系结构不同的硬件体系结构。由于处理器指令集和计算机系统的硬件体系结构的唯一性,通常编写应用软件程序以在运行特定操作系统的特定计算机系统上运行。
一般而言,计算机制造商试图通过使得更多而不是更少的应用程序运行在与计算机制造商的产品线相关联的微处理器家族上来最大化其市场份额。为扩展可运行在计算机系统上的操作系统和应用程序的数量,开发了一种技术领域,其中,具有被称为主机的一种类型的CPU的给定计算机将包括允许主计算机仿真被称为客机的不相关类型CPU的指令的虚拟化器程序。由此,主计算机将执行使得响应于给定客机指令而调用一个或多个主机指令的应用程序,并且以此方式,主计算机可运行为其自己的硬件体系结构设计的软件和为具有不相关硬件体系结构的计算机编写的软件两者。
作为一个更具体示例,例如,由苹果计算机公司制造的计算机系统可运行为基于PC的计算机系统编写的操作系统和程序。也可能使用虚拟化器程序以在单个CPU上并发地执行多个不兼容的操作系统。在后一安排中,尽管每一操作系统彼此不兼容,但是虚拟化器程序可作为若干操作系统的每一个的主机,并由此允许不兼容的操作系统并发地在同一主计算机系统上运行。
当在主计算机系统上仿真客计算机系统时,客计算机系统被认为是“虚拟机”,因为客计算机系统仅作为一个特定硬件体系结构的操作的纯软件表示存在于主计算机系统中。术语虚拟化器、仿真器、直接执行器、虚拟机和处理器仿真有时互换地使用,以表示使用本领域的技术人员已知和理解的一种或几种方法来模拟或仿真整个计算机系统的硬件体系结构的能力。此外,以任何形式对术语“仿真”的所有使用旨在传达这一广泛的意义,并非在虚拟机中的操作系统指令的仿真和直接执行的指令执行概念之间进行区分。由此,例如,由加利福尼亚州圣马特奥市的Connectix公司创建的Virtual PC软件“仿真”(通过指令执行仿真和/或直接执行)包括Intel 80X86Pentium处理器和各种主板组件和卡的整个计算机,并且这些组件的操作在运行在主机器上的虚拟机中“仿真”。在诸如具有PowerPC处理器的计算机系统等主计算机的操作系统软件和硬件体系结构上执行的虚拟化程序器模拟了整个客计算机系统的操作。
虚拟化的一般情况允许一种处理器体系结构运行来自其它处理器体系结构的OS和程序(例如,在x86Windows上运行PowerPC Mac程序,反之亦然),但是一个重要的特殊情况是当底层处理器体系结构相同(在x86上运行各种版本的x86Linux或不同版本的x86Windows)的时候。在后一情况下,可能更有效地执行客机OS及其应用程序,因为底层指令集是相同的。在这一情况下,允许客机指令直接在处理器上执行,而不会丢失控制或让系统对攻击开放(即,客机OS被装入沙箱)。如下文将详细描述的,这是特许和非特许之间的分隔以及用于控制对存储器的访问的技术起作用的情况。对于存在体系结构失配(PowerPC<->x86)的虚拟化,可使用两种方法:逐条指令仿真(相对较慢)或从客机指令集转换成本机指令集(更有效,但使用了转换步骤)。如果使用指令集仿真,则可相对容易地使得环境健壮;然而,如果使用转换,则它映射回到处理器体系结构相同的特殊情况。
依照本发明,图形平台被虚拟化,且由此依照本发明应用于图形体系结构的一个示例性情形将是使用NVidia硬件对ATI卡的仿真。对于图形虚拟化情况,在各实施例中,本发明集中于来自同一图形体系结构的命令的直接执行。在图形上下文中,转换的等效物不实际存在,或者相反,仿真或转换等于同一事物。转换对处理器工作,因为一旦代码被转换,该代码可被执行多次,由此摊销了转换成本。然而,由于结构化图形应用程序的方式,要转换的程序的等效物(忽略着色器)不必要存在。相反,经常再生成命令流(工作项列表),因此不必要有可摊销转换成本的任何重用。在一个更复杂的实施例中,可检查工作项列表来确定它们是否匹配预先转换的列表。
如在下文各实施例中描述的,依照本发明的各实施例,如果可维持系统的安全性,则虚拟化的同时执行客机指令(或者来自转换,或者由于包含了同一处理器体系结构)具有性能益处。由此,在各实施例中,本发明描述了用于控制客机对部分或全部底层物理资源(存储器、设备等)的访问的系统和方法。
虚拟化器程序担当主机机器的硬件体系结构和由运行在仿真的环境中的软件(例如,操作系统、应用程序等)发送的指令之间的互换。该虚拟化器程序可以是主机操作系统(HOS),它是直接运行在物理计算机硬件上的操作系统(并且可包括系统管理程序,将在下文详细讨论)。或者,仿真的环境也可以是虚拟机监控程序(VMM),它是直接运行在硬件之上,可能与主机操作系统并排运行且结合主机操作系统工作的软件层,并可通过展示与VMM正在虚拟化的硬件相同的接口来虚拟化主机机器的所有资源(以及某些虚拟资源)。该虚拟化使得虚拟化器(以及主计算机系统本身)能够不被运行在其上的操作系统层注意到。
由此,处理器仿真使客机操作系统能够在由虚拟化器创建的虚拟机上执行,该虚拟化器运行在包括物理硬件和主机操作系统两者的主计算机系统上。
从概念的观点来看,计算机系统一般包括运行在基本硬件层上的一个或多个软件层。这一分层是为了抽象的原因而完成的。通过对给定的软件层定义接口,该层可以由其上的其它层不同地实现。在设计良好的计算机系统中,每一层仅了解(并仅依赖于)直接在其下方的层。这允许替换层或“栈”(多个相邻的层),而不会负面地影响所述层或栈之上的层。例如,软件应用程序(较高层)通常依赖于操作系统的较低层(较低层)以将文件写入某一形式的永久存储中,并且这些应用程序无需理解将数据写入软盘、硬盘驱动器或网络文件夹的区别。如果该较低层用用于写文件的新操作系统组件来替换,则较高层软件应用程序的操作保持不受影响。
分层软件的灵活性允许虚拟机(VM)呈现虚拟硬件层,它实际上是另一软件层。以此方式,VM可为其上的软件层创建该软件层正在其自己的专用计算机系统上运行的假象,并且因此,VM可允许多个“客机系统”并发地运行在单个“主机系统”上。这一抽象级别是由图2A的图示来表示的。
图2A是表示用于计算机系统中仿真的操作系统的硬件和软件体系结构的逻辑分层的图示。在图中,仿真程序94直接或间接运行在物理硬件体系结构92上。仿真程序94可以是(a)与主机操作系统并排运行的虚拟机监控程序,(b)具有本机仿真能力的专门化的主机操作系统,或者(c)具有系统管理程序组件的主机操作系统,其中所述系统管理程序组件执行所述仿真。仿真程序94仿真客机硬件体系结构96(被示为虚线,以示出该组件是“虚拟机”的事实,即,不实际存在而是相反由所述仿真程序94仿真的硬件)。客机操作系统98在所述客机硬件体系结构96上执行,且软件应用程序100在客机操作系统98上运行。在图2A的仿真操作环境中,并且由于仿真程序94的操作,即使软件应用程序100被设计成运行在一般与主机操作系统和硬件体系结构92不兼容的操作系统上,软件应用程序100也可在计算机系统90中运行。
图2B示出了包括直接运行在物理计算机硬件102上的主机操作系统软件层104的虚拟化计算系统,其中主机操作系统(主机OS)104通过展现与主机OS正在仿真(或“虚拟化”)的硬件相同的接口提供对物理计算机硬件102的资源的访问,这进而使主机OS不被运行在其上的操作系统层注意到。再一次,为了执行仿真,主机操作系统102可以是具有本机仿真能力的特别设计的操作系统,或者它可以是具有用于执行仿真的合并的系统管理程序组件(未示出)的标准操作系统。
再次参考图2B,在主机OS104上的是两个虚拟机(VM)实现,即VM A108,它可以是例如虚拟化的Intel386处理器;以及VM B110,它可以是例如Motorola680X0处理器家族之一的虚拟化版本。在每一VM108和110上的分别是客机操作系统(客机OS)A112和B114。运行在客机OS A112上的是两个应用程序,即应用程序A1116和应用程序A2118,而运行在客机OS B114上的是应用程序B1120。
对于图2B,重要的是注意,VMA108和VMB110(用虚线示出)是虚拟化的计算机硬件表示,它们仅作为软件构造存在,并且由于专门仿真软件的执行而变得可能,这些专门仿真软件不仅分别向客机OS A112和客机OS B114呈现了VMA108和VM B110,而且还执行客机OS A112和客机OS B114间接与真实的物理计算机硬件102交互所必需的所有软件步骤。
图2C示出了另一虚拟化的计算系统,其中,仿真由与主机操作系统104″并排运行的虚拟机监控程序(VMM)104′执行。对于某些实施例,VMM可以是运行在主机操作系统104上并仅通过所述主机操作系统104与计算机硬件交互的应用程序。在其它实施例中,如图2C所示,VMM可以改为包括部分独立软件系统,它在某一级别通过主机操作系统104间接与计算机硬件102交互,而在其它级别,VMM直接与计算机硬件102交互(类似于主机操作系统直接与计算机硬件交互的方式)。在另外的实施例中,VMM可包括完全独立的软件系统,它在所有级别都直接与计算机硬件102交互(类似于主机操作系统直接与计算机硬件交互的方式),而不利用主机操作系统104(尽管在协调使用所述计算机硬件102和避免冲突等的范围内仍与所述主机操作系统104交互)。
用于实现虚拟机的所有这些变体都被预期形成此处所描述的本发明的替换实施例,并且此处没有内容应当被解释为将本发明限于特定的仿真实施例。另外,对应用程序116、118和120之间分别通过VM A108和/或VM B110的交互(假定在硬件仿真的情形中)的任何参考应当被解释为实际上是应用程序116、118和120与创建虚拟化的虚拟化器之间的交互。同样,对应用程序VM A108和/或VM B110与主机操作系统104和/或计算机硬件102之间的交互(假定直接或间接在计算机硬件102上执行计算机指令)的任何参考应当被解释为实际上是创建虚拟化的虚拟化器与主机操作系统104和/或计算机硬件102之间在适当时的交互。
用于虚拟化GPU和图形管道的系统和方法
如所述的,本发明提供了用于向图形硬件空间应用虚拟机的系统和方法,由此,监管代码运行在CPU上,而图形工作项直接由图形硬件处理。图3A示出了第一非限制体系结构,它示出了某些通用概念。例如,如图所示,在计算设备的图形硬件302的上方分层了虚拟机监控程序304。以非限制的方式,该实施例类似于客机OS来对待主机OS,因为其每一个都接收虚拟机。运行应用程序H1和应用程序H2的主机OS310由主机虚拟机308主存。运行应用程序A1的客机OS A330由虚拟机A328主存。运行应用程序B1的客机OS B340由虚拟机B338主存。在一个非限制实施例中,监管代码被结构化为图形虚拟机监控程序。
本发明的目标是在较新的操作系统中提供对旧图形软件的连续支持,并且本发明的各虚拟化体系结构实现了该目标。将旧功能带到新操作系统中的解决方案仅仅复杂化了新的操作系统,这是依照本发明的体系结构要避免的结果。依照本发明提供的解决方案包括与新系统一起运行旧操作系统的虚拟版本,并且仅在旧操作系统实例中支持旧图形软件。这利用了上文中所描述的虚拟机和虚拟机监控程序的概念,并且在如Virtual PC和VMware等市场上可购买的产品中使用。然而,在这些基于PC的体系结构中,虚拟操作系统“分区”中的图形软件通常被仿真,并且比原始的非虚拟化实现慢得多地执行。由此,依照本发明,允许图形软件栈在旧(即,客机)操作系统下运行时继续能够直接访问底层图形硬件。这类似于被称为类型II虚拟机监控程序的东西,其中客机操作系统可直接运行在处理器上,而无需由虚拟机监控程序的昂贵仿真。
图形硬件中需要支持以允许多个操作系统分区在不为彼此所知且不知道图形硬件被虚拟化的情况下在图形硬件上运行。由此,依照本发明的实施例,一种图形虚拟机监控程序管理资源,并控制哪一分区在图形硬件上执行。使用本发明,多个客机操作系统可并行地运行,且每一个都具有对图形硬件的(几乎)全速的直接访问。某些客机可以是运行较旧软件的传统操作系统,而其它客机可完成其它特定的任务。
本发明的执行产生了提供安全处理的实施例,其中安全处理可以在“主机”或“客机”操作系统的任一个中运行。依照本发明实现该目的是图形硬件的健壮和安全虚拟化的有利效果,使得客机操作系统不能彼此干扰。如果客机操作系统不能彼此干扰,则消除了不同客机操作系统上不为用户所知地操作的欺诈性软件的可能性。系统将虚拟机监控程序处理为可信基或“可信内核”。在本发明的各实施例中,可信基可被扩展成另一客机(或主机)操作系统,以提供附加的可信图形服务(而非将所有的服务都放在虚拟机监控程序或内核中)。这些服务可包括例如用安全或可信窗口管理器或桌面合成引擎对显示器上什么可见的控制。这允许应用程序的混合在可信和非可信操作系统分区中运行,具有通过单个(或多个)物理图形设备的统一输出。
安全基可以依照本发明进一步扩展以提供用于启用内容保护的更健壮的系统,例如用于支持附加到文档、视频、音频等的数字权限。这一系统充分利用了在可信虚拟机监控程序和可信分区中操作的可信服务来实施数字权限。然而,回放应用程序中的用户界面和其它功能(媒体库管理、播放列表等)可被分离,并运行在与可信分区中的安全服务通信的不可信分区中。
当顾客迁移到新的操作系统和新的操作系统版本时,通过坚持不懈地保存过时的软件界面和行为(需要开发周期中日益增长的损失),从根本上保证了兼容性。设计和实现复杂性增加,且无意破坏传统行为的风险贯穿整个开发周期始终存在。因此,本发明提出了一种替换的开发策略,其中,可从新开发中在战略上且安全地挑出传统行为,同时仍保护顾客的投资。
使用虚拟机监控程序(VMM)技术在单独的虚拟机(VM)中与新OS同时运行原始OS版本保持了应用程序兼容性。将主机机器的传统VMM技术扩展到图形处理单元(GPU),以允许对图形加速器的硬件访问,从而确保传统应用程序以完全的性能操作。本发明也提供了在不同VM中运行多个应用程序的同时使用户体验表面上无缝的方法。在本发明的其它方面,通过采用VMM技术,扩展了本发明的虚拟化图形体系结构,以提供可信服务和内容保护/数字权限管理。
长期的软件成功不可避免地导致传统的软件界面和行为。新软件革新和向后兼容性的对立要求导致更复杂且耗时的软件设计周期。通过丢弃传统的选择位来流线化日益增长的复杂性的尝试使用了更多资源来评估决策,如果做出了错误的决策将会增加风险,且总是提供了边际减缓。最终结果是核心技术中对革新和递送的缓慢步伐,且注意力集中在不会干扰现状的革新上。
一种替换方法是通过推进操作系统软件的较旧版本,同时保持它处于新开发之外,来包含该较旧版本。由此,本发明使用了虚拟机监控程序在单独的虚拟机中与最新的OS版本同时运行前一OS版本,同时提供了引人注目的用户体验,其中,使用较旧版本接口的应用程序无缝或几乎无缝地在为其设计这些应用程序的同一环境中运行,且以同样的方式来表现。
在陈述本发明的各实施例之前,一个示例将是有益的。由此,假定对于OS的第二版本,即OS_B,期望它没有在OS的第一版本,即OS_A中支持的某一图形API集。然而,目标是同时运行OS_B和OS_A,即,使用OS-A图形界面的应用程序在OS_A虚拟“视图”中运行,而新的应用程序在OS_B视图中运行,它们都具有同样“良好”的用户体验。定义什么构成良好用户体验是有些模糊的,但是某些基本规则可以不同地包括(A)当使用任一OS视图时无缝的用户输入(键盘、鼠标等)以及应用程序输出(显示器、打印机、多媒体等),(B)极少或没有可感知的性能差异。可应用的一个度量是运行在OS_A视图中的任何OS_A应用程序的性能应当在没有虚拟机监控程序的OS的本机第一版本上运行的同一应用程序的5%之内,以及(C)OS_A虚拟视图应当使用用于OS的第一版本的未修改的软件。这是合乎需要的,因为一旦打开门路以允许对客机操作系统的改变,破坏兼容性的风险会通过背景技术中所描述的扇出重新显现。放松这一要求的一种方法是通过允许附加助手应用程序在未修改的客机OS下运行以便于无缝操作。
提供用户体验中的最小性能降级的一个问题是提供图形呈现服务的硬件加速。对于如图形设备接口(GDI)等API,仿真软件中的整个栈可能是实用的,但是对于依赖于硬件加速的较新的API,性能降级可能是不可接受的。一个可能性是例如使用公知的图形硬件设备的低级硬件接口的软件仿真/俘获将图形处理请求从客机OS重定向到主机OS。
尽管这一传统方法对于具有高级抽象(对每一请求有大量工作)或简单设备(例如,串行端口)的设备是成功的,但是对于现代的图形硬件它是不实用的。在这一级别上俘获请求一般效率太低(图形硬件被设计成接受1GB/s以上的输入数据),并且现代图形硬件一般太复杂,以致于无法如实地在这一细节级别上进行仿真(可以回想,现代图形设备具有~2亿个晶体管)。同时,这一方法对于具有少于1千万个晶体管的设备以及对于图形上较不密集的应用程序可能是不实用的,但是即使在这些情况下,也不能提供所需的性能程度。
另一个选择是在图形协议流中的较高(设备无关)点截听图形协议流,,并将其重定向到主机OS。尽管这通过仿真复杂硬件消除了该问题,但是如果包含高带宽协议流,则会导致严重的性能问题。可能导致的另一个问题涉及协议流在没有对客机OS的显著改变的情况下不受截听的作用的情况。一种方法可以是用协议占位程序替换包含图形API的系统动态链接库(DLL),以重定向到客机OS,尽管当用于管理原始API中的状态的方法未考虑这一方法而设计时,该方法仍有严重的问题。尽管被设计成远程执行(“远程化”)的API可能具有可用于实现这一目标的合理行为,但是并非所有的图形和媒体API都是考虑了这一解决方案来设计的。再一次,该方法要求修改(替换)系统级组件,并由此引入了兼容性的风险。
本发明的各实施例的方法是将问题推到硬件中,并继续允许客机OS具有令人想起用于CPU的VMM技术的直接硬件访问。当有效地实现时,该技术有若干优点。第一个优点是消除了对客机OS做出改变的需求。第二个优点是如同客机OS在硬件上本机地运行一样或高度相似的性能级别。应当注意,该模式允许传统OS支持较新的图形硬件,只要图形硬件销售商继续运送对传统OS上新硬件的驱动程序支持。由此,在本发明的各种虚拟化体系结构中,构建了可虚拟化的图形硬件,并结构化主机OS和VMM以有效地充分利用硬件,并且虚拟化了演示(显示),使得它可被集成到合成桌面中。
因此,本发明允许每一VM对管道的端对端虚拟化访问图形呈现资源、在GPU上创建VMM环境。具体地,这包括为多个图形客户机有效地虚拟化GPU的概念。在各实施例中,本发明的虚拟化体系结构符合以下要求的一个或多个:明确定义的执行状态(上下文)、低等待时间上下文切换支持、受保护的虚拟地址空间、需求分页存储器管理、以及特许执行模式。这些要求用于提供多个客户机(应用程序)之中对GPU硬件资源的有效的、安全的和健壮的共享。
为简化虚拟化讨论,总结依照本发明构想的虚拟化支持的程度是有帮助的。最简单的类推是应当能找到在现代CPU中找到的大致相同的GPU共享等级,用于在多个客户机(应用程序)之中共享。这是GPU进展的自然结果,它是应当在多个独立的客户机之间有效地共享的强大计算资源。与CPU的一个不同之处在于GPU是由运行在CPU而非GPU上的可执行代码来管理的。相反,在某些驱动程序模型中,内核图形子系统担当微型执行器,它提供了调度和存储器管理服务,以及对诸如视频显示配置、电源管理等全局资源的控制。该微型执行器独立于内核执行器操作,从而使得其自己的具有算法和策略的调度和存储器管理决策被调整到GPU客户机的要求。
一旦满足了虚拟化要求,可能允许客户机驱动程序直接访问GPU硬件。规则类似于用于虚拟化其它内核功能的那些规则,即,主存的驱动程序应当不能够检测它正在VMM上运行,且它应当不能够绕过由VMM在适当的位置放置的任何保护机制。为本讨论的目的,假设GPU VMM被嵌入在内核VMM中,且对于所有的实用目的作为内核VMM中的驱动程序操作。图形VMM可包括设备无关部分和设备相关部分(后者是由图形硬件制造商提供的)。
图3B示出了依照本发明被提供来虚拟化图形管道的另一示例性非限制体系结构。虚拟机监控程序304包括组件图形VMM,它依照本发明处理图形功能和管理。具有主机图形驱动程序HGF的主机OS、具有图形驱动程序AGD的客机OS A以及具有图形驱动程序BGD的客机OS B的任一个可通过VMM304与图形VMM交互。
由于使用VMM的动机之一是效率,因此直接实现具有硬件支持的类型II图形VMM是有意义的。提供高级显示驱动程序模型(DDM)增加了对访问控制的虚拟地址空间、预占和特许操作的硬件支持。对于有效的VMM支持的一个严峻考验是在图形VMM之上运行现有的高级DDM驱动程序而不改变该驱动程序。这意味着初始化卡、设置页表、程序显示控制器、设置PCI空隙、操纵被解释为物理地址的输入等的图形子系统内核操作应当生成对VMM的俘获以供有效的解释。中断应当可由VMM截取并转发到适当的(客机)驱动程序。诸如呈现操作等高频非特许操作应当可由图形硬件执行而无需VMM的介入。
高级驱动程序模型硬件支持多个执行上下文,其每一个具有独立的虚拟地址空间和输入队列(环形缓冲区),用于管理命令流的输入DMA缓冲区。局部和系统物理存储器资源通过将页表条目初始化为指向物理地址而被映射到上下文的虚拟地址空间。命令流操作的完成使用存储器写(栅栏)和中断来发信号通知。
用于管理存储器保护的一种方法是划分本地图形存储器物理地址空间,并向每一虚拟机(客机OS)分配固定的连续分区。位于该分配外的存储器对虚拟机是不可见的。这一机制可使用通过由图形VMM编程的基本和有限的寄存器的简单间接级别来实现。这可能要求控制对驱动程序可见的(由VMM俘获的读)PCI总线配置寄存器的内容。在这一存储器管理方案中,每一客机看到对客机生存周期固定的存储器分配。这消除了对VMM俘获页表操作(可能是频繁的)需求,因为对硬件可见的物理地址空间的窗口由VMM仔细地控制。这是实现虚拟化存储器支持的合理的第一种方法,因为它使VMM位于详细的存储器管理之外,同时可论证地提供了对存储器资源的效率较低的利用。
可以更长期地构想使VMM更多地牵涉在详细的存储器管理操作中。这部分将变得更复杂,因为由驱动程序用于对页表条目编程的操作要由VMM俘获。取决于分页的性能目标,硬件设计可能需要被更仔细地设计以改进检测和仿真这些操作的效率。例如,设计页映射操作(命令)可能是有益的,使得多个映射可被指定为一个组,且它们可被容易地识别并解码为图形VMM中的一组。这最小化了通过VMM的俘获的数量。同样,VMM可使用客机分区中(可信)服务来支持对后备存储(除客机DDM驱动程序所实现的之外的另一级后备存储)的分页操作。尽管这一模式更复杂,然而它允许每一客机利用所有的硬件存储器资源。
结合本发明的这些实施例所描述的方法包含了对软件虚拟化的页表的使用。对软件虚拟化页表的一种替换方法是在图形硬件中添加另一组特许页表,即另一间接级别,以供VMM直接使用。这是对固定分区所描述的基本和有限的寄存器方法的推广,从而允许VMM在页级粒度上控制图形硬件的物理资源视图。
至今为止讨论的存储器管理集中于管理本地图形存储器到图形上下文的映射。在将系统存储器页到硬件的映射中也有类似的要求,因为这些也使用物理存储器地址。处理器VMM管理物理存储器的方式进入到构想中。一般地,小心地管理使用物理地址的设备,以便对它们的映射保持完全的控制。再一次,通过添加图形硬件控制来限制可用系统存储器的窗口,可扩展为视频存储器提议的简单的固定分区方案,以对系统存储器工作。然而,如果处理器VMM在服务对客机的分配操作时分配了非连续的物理存储器,则它是不适用的。这意味着必需对系统存储器资源实现用于详细存储器管理的更复杂方案(建议同时完成本地图形存储器解决方案)。可能由处理器VMM做出的关于管理需要被仔细检查的物理存储器和可能的与图形VMM的交互的某些额外假设。
为允许更有效地处理中断,可将中断类型划分成需要由VMM处理的中断和不需要由VMM处理的中断。后一类别可包括命令完成等,并且这些可直接由客机驱动程序来处理。
其它主要管理类别是对处理资源的调度。高级驱动程序模型支持上下文预占,因此最简单的管理模型使VMM分配时间片给分区,从而预占了来自当前运行分区的当前运行的图形上下文。现有的高级驱动程序模型在指定要运行的新的上下文列表时使用双重缓冲运行列表。存在不会有一个以上未完成运行列表的假设。虚拟化调度模型要求某些修改,以使VMM能够更容易地在运行列表边界处切换分区,并进一步确保当做出到新分区的转移时上下文状态被保存在旧分区中并从新分区中恢复(例如,在上下文保存和恢复期间的适当时刻映射适当分区的存储器资源)。再一次,存在对要考虑的处理器VMM调度程序的假设和与它的交互。
可实现一种更详细的调度方案,其中图形VMM更多地认识到不同上下文的工作负载和优先级。这一信息可对处理器VMM可用,以做出更智能的调度决策。关于图形VMM是否可从与处理器VMM正在执行的不同分区中执行上下文存在某些有趣的设计问题。在分区之间转移时,可能并且有可能必须允许某些重叠来最大化硬件利用。然而,它的确需要对在转移期间如何管理和映射资源的更仔细的考虑。
对于虚拟化演示和交互,在第一实施例中,一旦虚拟化了图形硬件,则每一客机创建其自己的桌面,并将窗口从客机应用程序呈现到该桌面。这一客机桌面储存在逻辑图形存储器中,并且在正常的环境中被扫描输出到显示设备(CRT或平板显示器)。在虚拟化的环境中,多个客机桌面的内容被收集在一起并显示在单个显示器上。有若干种方法来创建这一显示,包括对多个虚拟桌面的供应(每次一个桌面)、在其自己的窗口或单个统一桌面中对桌面的供应。
在第一实施例中,单个客机桌面被选为“当前”桌面并被显示。使用某一UI控件,用户可在不同的客机之间进行选择,但是每次仅显示一个。这一方法是最简单的,因为只需显示各个客机桌面图像。实际上,UI控件确定了允许哪一客机设置显示器控制器的扫描输出寄存器。
图4A示出了“一次显示单个桌面”的实施例。可以看到,每一虚拟机在本地图形存储器中接收其自己的桌面空间,其中每一空间彼此独立,由此仅由用户选中的“活动”桌面被扫描输出到显示器。由此,客机能够光栅化其各自的工作项,并使它们在存储器中的某一地方,且演示引擎能够控制显示哪一存储器(包含光栅化的位),这可能包含调整内容大小或移动内容的附加光栅化处理。
按照定义,第一实施例不允许多个桌面同时可见(尽管在多监视器配置中,不同的显示器控制器可显示来自不同客机的桌面而非来自同一客机的所有桌面)。一种替换方法是第二实施例,其中在主机桌面上的单独的容器窗口中显示各个桌面。这使用了要运行在主机上的服务,该服务能够访问每一客机桌面的内容。该服务执行一合成操作,以使用客机桌面作为输入来构造主机桌面。对每一客机桌面使用代理窗口,从而控制了桌面的大小和位置。客机桌面的内容可通过截取对该桌面的显示器控制器设置的改变(使用它们来确定存储器地址、维度和其它参数)直接从视频存储器内容中获取。以与使用桌面合成引擎(DCE)构造典型桌面几乎相同的方式来构造合成主机桌面,也使用了硬件图形加速。该第二实施例可与第一实施例组合,以支持具有客机桌面的单个直接视图的模式,或在单独的窗口中具有多个桌面的合成视图的模式。
图4B示出了替换的“窗口中的桌面”实施例,由此所有桌面可由演示引擎考虑遮蔽来同时显示。例如,主机桌面可默认地为显示器上的背景桌面窗口,而各自显示在其自己的容器窗口中的客机桌面接收背景桌面窗口上的显示上的单独窗口。
该第二实施例在同步客机桌面的窗口的位置和大小时开始引入具有输入坐标的某些复杂因素。由于窗口是在主机容器窗口中对客机桌面操作的,因此这些交互被俘获并被发送到客机用于处理。客机,例如其窗口管理器更新客机桌面,并且在主机桌面中反映新的窗口位置,如同它被重建一样。这一类型的输入坐标已在实现“窗口中的桌面”的其它虚拟化产品中解决,并且应当通过虚拟化图形硬件而不受影响。
第二实施例是显著的改进,但是对于混和来自多个客机桌面的窗口仍是合乎需要的,即,隐藏了存在客机桌面的事实。该问题相当于在每一客机桌面中定位各个窗口内容,但是比定位桌面内容更难,因为各个窗口信息不能容易地从发送到图形硬件的数据流中截取。然而,如果有目的地违反关于修改客机操作系统的规则,则可能添加某些挂钩以协助为标识各个窗口的像素(存储器位置)。此处存在可采取的几种不同的方法。
一种方法是保持客机桌面中的窗口平铺(不重叠),使得整个内容总是可用,同时维护了关于客机桌面中的每一窗口的大小和位置的信息,以供主机窗口管理器/合成引擎使用。该方法涉及维护两组独立的窗口信息:虚拟信息(主机桌面中)和客机桌面中的物理位置。它也复杂化了输入坐标,因为操纵虚拟窗口的操纵可以影响或不影响物理窗口(例如,如果虚拟窗口被遮蔽,则收回客机桌面中的实际状况可能是有益的)。虚拟窗口内的交互被转换成对物理窗口适当的交互(这可以与输入坐标的偏移量一样简单)。
一种替换方法是将客机桌面窗口重定向到更容易管理的存储器。这类似于对图形设备接口(GDI)完成的重定向,其中对每一窗口维护单独的“后备缓冲区”。使这些后备缓冲区的内容对主机窗口管理器/合成引擎可用。然后,当用户与虚拟窗口的内容交互时,执行虚拟输入坐标和物理输入坐标之间的类似映射。
采用某些远见和计划,可能勾画出未来的操作系统以在操作系统作为客机运行时更好地促进这类截取。每一客机桌面中的外壳的处置(它们是否以及何时停止以从用户的观点退出)、外壳扩展处理、开始菜单选项、应用程序快捷方式、剪贴板等被合并到统一的桌面视图中。这些是可解决的问题,但是涉及理解关于每一客机中的对应实现以及可能(静态地)提取该信息并将其合并在一起来产生统一视图的更多细节的理解。对于支持统一的可访问性,产生类似的问题。
在提供多客机系统的其它部分,例如存储、安装的应用程序、联网等的无缝视图时存在类似的问题。将多个客机展现为具有独立指纹的窗口化桌面的临时策略允许集中在构建健壮的虚拟化基础结构的任务上。同时可能解决某些其它特征,诸如对数字权限管理的可信处理和内容保护。
作为安全(可信)图形处理的基础,上述虚拟化图形系统与用于使用虚拟机进行安全处理的其它模型相一致。虚拟化图形环境的特征容易地允许可信和不可信处理的混合以可靠的方式用完全的性能出现在同一系统上。这一模型要求图形VMM健壮地认证并用程序引导图形设备。当然,它依赖于其它可信组件来安全地用程序引导图形VMM。由于虚拟化环境健壮地彼此保护了多个客机和主机分区,可能构建可完成可信图形处理的可信分区。如果窗口管理器和合成引擎作为可信分区中的服务运行,则它们可以使用先前描述的演示方法用可靠的方式混和可信和非可信应用程序数据。
图4C示出了依照本发明用于混和可信和非可信应用程序数据的示例性体系结构。如所描述的,类似于具有图形驱动程序HGD的主机OS H,可信OS T作为具有图形驱动程序TGD的可信分区来提供。可信OS T包括窗口管理器或窗口合成器,它是可从图形VMM代码中取出关于对存储的任何限制以及在由图形管道呈现之前对可信数据和非可信数据的呈现的输入的组件。
可信服务需要对单独的客机桌面显示数据的访问,但是这一信息不被合成服务解释为控制数据。它被用作呈现输入,因此没有来自共享数据的内容的攻击的风险。如果图形硬件被正确地虚拟化,则没有一个分区中的代码攻击另一分区中的代码的风险。客机驱动程序不能控制硬件也不能与其它客机交互。运行在图形硬件内的应用程序代码不能与同一客机分区内的其它应用程序交互,更不用说其它客机分区。
本发明的虚拟化支持并不消除对硬件认证、显示输出的健壮控制或其它要求的需求,这些要求确保单个可信分区能够可靠地向显示设备传递显示数据;但是它的确允许多个分区健壮地共享图形硬件而只有极少的性能影响。
依照本发明,对于处理和显示过程中对内容保护的基础,对全运动视频数据实施数字权限当前是使用“受保护的视频路径”保护内容来实现的。受保护的视频路径集成了以下方法中的若干种,以提供对从源设备到显示设备的视频数据的安全传输和处理:
(1)内核环境被硬化以禁止内核调试程序等,并且当正在播放受保护内容时仅允许可信组件在内核模式(“环0”)中操作;
(2)处理受保护内容的用户模式进程被进一步硬化以免遭外来攻击(受保护环境)。在系统或图形存储器中展示(或从中显示)的视频数据不能从其它进程访问;
(3)通过用户可访问总线发送的视频数据被加密;
(4)必须证明图形驱动程序来播放受保护内容,且它进而确认图形硬件对于受保护内容是有效的同步;以及
(5)显示输出保护由图形硬件(Macrovision、CGSM-A、HDCP)支持,并可由媒体播放子系统健壮地操纵。
依照本发明,机制(1)和(2)可用更一般的安全计算基础来替换。这一安全计算基础应当进一步防止通过使得不可能破坏安全程序引导进程经由虚拟化技术来绕过。机制(3)和(5)仍是需要的,以继续提供当视频数据从系统存储器通过图形硬件移动到显示器时的安全处理和传输。本发明的图形硬件虚拟化方法不替换任何特定图形路径相关的内容保护方法;相反,它们担当用于构建可信图形服务的基础。这些可信服务可被扩展以包括受保护媒体处理组件(媒体互操作性网关,或简称MIG),并在“安全”可信的分区而非敌对的客机分区中运行它们。现有的受保护视频基础结构已经将受保护处理(权限协商、策略、解码、解密)从未受保护处理(回放应用程序GUI等)中分离开来。这一分离保持了虚拟化环境中的完整,其中受保护组件在可信分区(不同的[更好的]受保护环境)中执行,而未受保护的组件保留在非可信客机分区中。
图4D示出了结合图4C开发的可信分区T的概念的扩展,以包括媒体互操作性网关MIG,作为用于由在客机OS A上执行的媒体播放器应用程序呈现的内容的单独保护层。
以Virtual PC产品能够运行大量OS的同一方法,本发明的虚拟化图形环境能够支持预定数量的操作系统或版本的驱动程序/驱动程序模型。
每一操作系统的成功是由它可以运行的应用程序的宽度和那些应用程序的效率来测量的。通过无情地消除修改客机操作系统的强烈愿望,应当能够在虚拟化操作系统下运行任何本机执行的操作系统下运行的应用程序。可能存在差异的地方在于如何对资源进行分区。例如,如果仅使资源的一个子集(逻辑图形存储器的一部分)对分区可用,则应用程序也可能无法操作。在未来的操作系统中,当“一阶”虚拟化(用于在多个应用程序之间共享的资源的虚拟化)变得标准时,这将不是问题。
转向完全虚拟化的图形硬件的启发是对于要免于传统代码问题而仍提供用于继续的应用程序兼容性的实用路径的软件公司的。作为一种边缘效应,本发明也提供用于可信图形处理和内容保护的卓越环境。
成功的这一第二个度量意味着前进的应用程序必须停止使用传统代码并且也前进。对于大型的应用程序代码基,这可能是极其困难的。例如,如果诸如微软的Office代码基等随着OS版本而进展的传统应用程序代码基不可避免地依赖于OS,则可能无法使GDI软件如传统代码那样留在后方。在这些情况下,可能有可以探究的混合模型。例如,客机操作系统可被视为通用服务提供者。再一次使用GDI作为示例,传统操作系统可以被认为是提供GDI呈现服务。应用程序使用利用该服务的类似远程的机制。这一情况下的目标不必要是运行应用程序而没有任何代码改变,而是相反,做出允许应用程序继续使用传统GDI代码作为跨分区服务同时争取时间来完全从API中转移出来的最小改变。
图4E示出了一个示例性交互,其中在主机OS H上执行的客机OS A传统应用程序与客机OS A的传统服务组件交互以仍然从主机OS H的观点仿真传统行为。
图5示出了一个示例性序列,其中,依照此处所示出或描述的任何虚拟化体系结构,在客机OS上执行的应用程序发出包含图形子系统资源的命令。在500,在客机OS上执行的应用程序输出图形工作项(例如,在屏幕上坐标“x,y”处绘制蓝色的圆)。在510,客机OS处理该请求,将其发送到图形工作队列和相关联的调度程序。在520,当图形工作项准备好(已调度)时,图形驱动程序将指向该图形工作项的指针数据传递到硬件。在530,如果图形工作项是特许操作,则图形VMM基于策略(客机OS与主机OS的关系、存储器策略、命令类型等等)接收并处理该工作请求。如果图形工作项不是特许的,则改为在540,图形硬件直接处理该请求。
由此,本发明将处理器硬件虚拟化到图形加速器,目的是向运行在虚拟化环境中的多个客机操作系统提供高性能的呈现。这一环境可用于有效地解决若干问题:(A)消除新操作系统开发中的传统代码,同时通过在虚拟机环境中执行传统操作系统中的传统应用程序来保持应用程序兼容性;(B)提供在同一虚拟化环境中安全地混合可信和非可信处理的基础结构;以及(C)充分利用可信环境来提供用于数字权限管理的内容保护。
示例性联网和分布式环境
本领域的普通技术人员可以理解,本发明可以结合任何计算机或其它客户机或服务器设备来实现,这些设备可以作为计算机网络的一部分来部署,或部署在分布式计算环境中。在这一点上,本发明涉及具有任何数量的存储器或存储单元,以及跨任何数量的存储单元或卷发生的任何数量的应用程序和进程的任何计算机系统或环境,它可用于依照本发明虚拟化图形管道。本发明可应用于具有服务器计算机和客户机计算机的环境中,这些计算机部署在网络环境或分布式计算环境中,具有远程或本地存储。本发明也可应用于具有用于生成、接收和发送关于远程或本地服务的信息的编程语言功能、解释和执行能力的独立计算设备。在游戏环境中,图形管道尤其与在网络或分布式计算环境中操作的那些计算设备有关,且因此依照本发明的图形管道虚拟化可以用极大的效率应用于这些环境。
分布式计算通过计算设备和系统之间的交换提供了计算机资源和服务的共享。这些资源和服务包括信息交换、高速缓存存储和文件的磁盘存储。分布式计算利用了网络连通性,从而允许客户机充分利用其集体的能力来使整个企业获益。在这一点上,各种设备可具有包含本发明的图形处理的应用程序、对象或资源。
图6A提供了一个示例性联网或分布式计算环境的示意图。该分布式计算环境包括计算对象10a、10b等,以及计算对象或设备610a、610b、610c等。这些对象可包括程序、方法、数据存储、可编程逻辑等。对象可包括诸如PDA、音频/视频设备、MP3播放器、个人计算机等相同或不同设备的各部分。每一对象可通过通信网络14彼此通信。该网络本身可包括向图6A的系统提供服务的其它计算对象和计算设备,并且本身可表示多个互连的网络。依照本发明的一方面,每一对象10a、10b等或610a、610b、610c等可包含利用API或其它对象、软件、固件和/或硬件来请求对本发明的图形虚拟化处理的使用的应用程序。
可以理解,诸如610c等对象可被主存在另一计算设备10a、10b等或610a、610b等上。由此,尽管所描述的物理环境可将连接的设备示为计算机,然而这一图示仅是示例性的,且物理环境可选地可被描绘或描述为包括诸如PDA、电视机、MP3播放器等各种数字设备、诸如接口、COM对象等软件对象。
存在支持分布式计算环境的各种系统、组件和网络配置。例如,计算系统可以由有线或无线系统、局域网或广域网连接在一起。当前,许多网络耦合到因特网,因特网提供了用于广泛分布的计算的基础结构并包含许多不同的网络。这些基础结构中的任一个可以用于与本发明的图形硬件虚拟化处理关联做出的示例性通信。
在家庭联网环境中,有至少四种完全不同的网络传输媒体,它们每一个可支持唯一的协议,诸如输电线、数据(无线和有线)、语音(例如,电话)和娱乐媒体。诸如灯开关和电器等大多数家庭控制设备可使用输电线用于连通性。数据服务可作为宽带(例如,DSL或线缆调制解调器)进入家庭,并可在家庭内使用无线(例如,HomeRF或802.11B)或有线(例如,家庭PNA、Cat5、以太网甚至输电线)连接来访问。语音话务可作为有线(例如,Cat3)或无线(例如,蜂窝电话)进入家庭,并可使用Cat3布线在家庭内分布。娱乐媒体或其它图形数据可通过卫星或电缆进入家庭,并且通常使用同轴电缆在家庭内分布。IEEE 1394和DVI也是用于媒体设备集群的数字互连。所有这些网络环境以及可作为协议标准显现的其它环境可被互连以形成可通过因特网连接到外部世界的网络,如内联网。简言之,存在各种不同种类的源用于数据的存储和传输,并且因此,进一步地计算设备会要求共享数据的方式,诸如与程序对象关联地访问或利用数据,该程序对象利用了依照本发明的虚拟化图形服务。
因特网一般指利用计算联网领域中公知的TCP/IP协议套件的网络和网关的集合。TCP/IP是“传输控制协议/网际协议”的缩写。因特网可以被描述为由执行允许用户通过网络交互和共享信息的联网协议的计算机互连的地理上分布的远程计算机网络的系统。由于这一广泛分布的信息共享,诸如因特网等远程网络迄今一般已进展成一种开放系统,开发者可对其设计软件应用程序来执行专门的操作或服务,本质上是没有限制的。
由此,网络基础结构启用了大量的网络拓扑结构,诸如客户机/服务器、对等或混合体系结构。“客户机”是使用不相关的另一类或组的服务的一类或组的成员。由此,在计算中,客户机是请求由另一程序提供的服务的进程,即粗略地为一组指令或任务。客户机进程利用所请求的服务,而无需“知道”关于其它程序或该服务本身的任何工作细节。在客户机/服务器体系结构中,尤其是在联网系统中,客户机通常是访问由另一计算机,如服务器提供的共享网络资源的计算机。在图6A的示例中,计算机610a、610b等可以被认为是客户机,而计算机10a、10b等可以被认为是服务器,其中服务器10a、10b等维护然后被复制到客户机计算机610a、610b等的数据,尽管任何计算机可被认为是客户机、服务器或两者,取决于环境。这些计算设备的任一个可以处理数据或请求可包含本发明的虚拟化图形体系结构的实现的服务或任务。
服务器通常是可通过诸如因特网等远程或本地网络访问的远程计算机系统。客户机进程可以在第一计算机系统中是活动的,而服务器进程可以在第二计算机系统中是活动的,它们通过通信介质彼此通信,从而提供了分布式功能并允许多个客户机利用服务器的信息收集能力。依照本发明的虚拟化体系结构的使用来利用的任何软件对象可以跨多个计算设备或对象分布。
客户机和服务器利用由协议层提供的功能来彼此通信。例如,超文本传输协议(HTTP)是一种用于万维网(WWW)或“Web”的公共协议。通常,诸如网际协议(IP)地址等计算机网络地址或诸如统一资源定位符(URL)等其它引用可用于彼此标识服务器或客户机计算机。网络地址可被称为URL地址。通信可通过通信介质来提供,例如,客户机和服务器可通过用于高容量通信的TCP/IP连接而彼此耦合。
由此,图6A示出了其中可采用本发明的一个示例性联网或分布式环境,其中,服务器通过网络/总线与客户机计算机通信。更详细地,依照本发明,多个服务器10a、10b等通过通信网络/总线14互连,通信网络/总线14可以是LAN、WAN、内联网、因特网等,具有多个客户机或远程计算设备610a、610b、610c、610d、610e等,诸如便携式计算机、手持式计算机、瘦客户机、联网电器、或诸如VCR、TV、烤箱、灯、加热器等其它设备。由此,可以构想本发明可应用于任何计算设备,对于这些计算设备期望实现依照本发明的客机图形接口和操作系统。
在其中通信网络/总线14是因特网的网络环境中,例如,服务器10a、10b等可以是Web服务器,客户机610a、610b、610c、610d、610e等通过诸如HTTP等多种已知协议中的任一种与它们进行通信。服务器10a、10b等也可担当客户机610a、610b、610c、610d、610e等,这可以是分布式计算环境的特征。
在适当时,通信可以是有线或无线的。客户机设备610a、610b、610c、610d、610e等可以通过通信网络/总线14通信或不通信,并且可具有与其相关联的独立通信。例如,在TV或VCR的情况下,可以有或没有控制它们的联网方面。每一客户机计算机610a、610b、610c、610d、610e等以及服务器计算机10a、10b等可以配备各种应用程序模块或对象635,并可具有对各种类型的存储元件或对象的连接或访问,文件或数据流可被储存在这些存储元件或对象上,或者文件或数据流可被下载、发送或迁移到这些存储元件或对象上。一个或多个计算机10a、10b、610a、610b等的任一个可负责维护和更新数据库20或其它存储元件,诸如用于储存依照本发明处理的数据的数据库或存储器20。由此,本发明可在具有客户机计算机610a、610b等的计算机网络环境中使用,这些客户机计算机可访问计算机网络/总线14和服务器计算机10a、10b等并与其交互,这些服务器可与客户机计算机610a、610b等以及其它相似的设备和数据库20交互。
示例性计算设备
图6B和以下讨论旨在提供可结合其实现本发明的合适的计算环境的简要概括描述。然而,应当理解,所有类型的手持式、便携式或其它计算设备和计算对象都被构想为用于本发明,即计算环境中存在GPU的任何地方。尽管下文描述了通用计算机,但这只是一个示例,本发明可以用具有网络/总线互操作性和交互的瘦客户机来实现。由此,本发明可以在网络化主存服务的环境中实现,在这一环境中仅包含了极少或最少的客户机资源,例如其中客户机设备仅担当诸如放置在电器中的对象等到网络/总线的接口的联网环境。本质上,可储存数据或可从其检索数据或将数据发送到另一计算机的任何地方都是用于依照本发明的图形虚拟化技术的操作的期望或合适的环境。
尽管并非所需,但本发明可全部或部分地通过操作系统来实现,操作系统由设备或对象的服务开发者使用,和/或包括在结合本发明的虚拟化图形管道操作的应用软件中。软件可以在诸如程序模块等由诸如客户机工作站、服务器或其它设备等一个或多个计算机执行的计算机可执行指令的通用上下文中描述。一般而言,程序模块包括例程、程序、对象、组件、数据结构等等,它们执行特定的任务或实现特定的抽象数据类型。通常,程序模块的功能可如各种实施例中所需的组合或分布。此外,本领域的技术人员可以理解,本发明可以用其它计算机系统配置和协议来实践。适用于本发明的其它公知的计算系统、环境和/或配置包括,但不限于,个人计算机(PC)、自动售货机、服务器计算机、手持式或膝上型设备、多处理器系统、基于微处理器的系统、可编程消费者电子设备、网络PC、电器、灯、环境控制元件、小型机、大型机等等。本发明也可以在分布式计算环境中实践,其中,任务由通过通信网络/总线或其它数据传输介质连接的远程处理设备来执行。在分布式计算环境中,程序模块可以位于包括存储器存储设备的本地和远程计算机存储介质中,且客户机节点可进而作为服务器节点来运作。
由此,图6B示出了其中可实现本发明的一个合适的计算系统环境600的示例,尽管如上文清晰地指出的,计算系统环境600仅是合适的计算环境的一个示例,并非对本发明的使用范围或功能提出任何局限。也不应将计算环境600解释为对示例性操作环境600中示出的任一组件或其组合具有任何依赖或需求。
参考图6B,用于实现本发明的示例性系统包括计算机610形式的通用计算设备。计算机610的组件可包括,但不限于,处理单元620、系统存储器630以及将包括系统存储器的各类系统组件耦合至处理单元620的系统总线621。系统总线621可以是若干种总线结构类型的任一种,包括存储器总线或存储器控制器、外围总线以及使用各类总线体系结构的局部总线。作为示例而非局限,这类体系结构包括工业标准体系结构(ISA)总线、微通道体系结构(MCA)总线、增强ISA(EISA)总线、视频电子技术标准协会(VESA)局部总线、外围部件互连(PCI)总线(也称为Mezzanine总线)以及PCI Express(PCIe)。
计算机610通常包括各种计算机可读介质。计算机可读介质可以是可由计算机610访问的任一可读介质,包括易失性和非易失性介质、可移动和不可移动介质。作为示例而非局限,计算机可读介质包括计算机存储介质和通信介质。计算机存储介质包括以用于储存诸如计算机可读指令、数据结构、程序模块或其它数据等信息的任一方法或技术实现的易失性和非易失性,可移动和不可移动介质。计算机存储介质包括但不限于,RAM、ROM、EEPROM、闪存或其它存储器技术、CD-ROM、数字多功能盘(DVD)或其它光盘存储、磁盒、磁带、磁盘存储或其它磁存储设备、或可以用来储存所期望的信息并可由计算机610访问的任一其它介质。通信介质通常具体化为诸如载波或其它传输机制的已调制数据信号中的计算机可读指令、数据结构、程序模块或其它数据,并包括任一信息传送介质。术语“已调制数据信号”指以对信号中的信息进行编码的方式设置或改变其一个或多个特征的信号。作为示例而非局限,通信介质包括有线介质,如有线网络或直接连线连接,以及无线介质,如声学、RF、红外和其它无线介质。上述任一的组合也应当包括在计算机可读介质的范围之内。
系统存储器630包括易失性和/或非易失性存储器形式的计算机存储介质,如只读存储器(ROM)631和随机存取存储器(RAM)632。基本输入/输出系统633(BIOS)包括如在启动时帮助在计算机610内的元件之间传输信息的基本例程,通常储存在ROM631中。RAM632通常包含处理单元620立即可访问和/或者当前正在操作的数据和/或程序模块。作为示例而非局限,图6B示出了操作系统634、应用程序635、其它程序模块636和程序数据637。
计算机610也可包括其它可移动/不可移动、易失性/非易失性计算机存储介质。仅作示例,图6B示出了对不可移动、非易失性磁介质进行读写的硬盘驱动器641、对可移动、非易失性磁盘652进行读写的磁盘驱动器651以及对可移动、非易失性光盘656,如CD ROM或其它光介质进行读写的光盘驱动器655。可以在示例性操作环境中使用的其它可移动/不可移动、易失性/非易失性计算机存储介质包括但不限于,磁带盒、闪存卡、数字多功能盘、数字录像带、固态RAM、固态ROM等等。硬盘驱动器641通常通过不可移动存储器接口,如接口640连接到系统总线621,磁盘驱动器651和光盘驱动器655通常通过可移动存储器接口,如接口650连接到系统总线621。
上文讨论并在图6B示出的驱动器及其关联的计算机存储介质为计算机610提供了计算机可读指令、数据结构、程序模块和其它数据的存储。例如,在图6B中,示出硬盘驱动器641储存操作系统644、应用程序645、其它程序模块646和程序数据647。注意,这些组件可以与操作系统634、应用程序635、其它程序模块636和程序数据637相同,也可以与它们不同。这里对操作系统644、应用程序645、其它程序模块646和程序数据647给予不同的标号来说明至少它们是不同的副本。用户可以通过输入设备,如键盘662和定位设备661(通常指鼠标、跟踪球或触摸板)向计算机610输入命令和信息。其它输入设备(未示出)可包括麦克风、操纵杆、游戏垫、圆盘式卫星天线、扫描仪等等。这些和其它输入设备通常通过耦合至系统总线621的用户输入接口660连接至处理单元620,但是也可以通过其它接口和总线结构连接,如并行端口、游戏端口或通用串行总线(USB)。这些是可由本发明的体系结构虚拟化的种类的结构。诸如由Northbridge实现的接口之一等图形接口682也可被连接到系统总线621。Northbridge是与CPU或主机处理单元620通信的芯片组,并承担诸如PCI、PCIe和加速图形端口(AGP)通信等通信的责任。本发明构想了集成的(在Northbridge内)和离散的(在Northbridge外)图形实现。一个或多个图形处理单元(GPU)684可与图形接口682通信。在这一点上,GPU 684一般包括诸如寄存器存储等片上存储,且GPU684与视频存储器686通信。然而,GPU684仅是协处理器的一个示例,且因此各种协处理设备可被包括在计算机610中,并且可包括各种过程着色器,诸如像素和顶点着色器。监视器691或其它类型的显示设备也通过接口,如视频接口690连接至系统总线626,并由此与视频存储器686通信。除监视器691之外,计算机也可包括其它外围输出设备,如扬声器697和打印机696,它们通过输出外围接口695连接。
计算机610可以使用到一个或多个远程计算机,如远程计算机680的逻辑连接在网络化或分布式环境中操作。远程计算机680可以是个人计算机、服务器、路由器、网络PC、对等设备或其它普通网络节点,并通常包括许多或所有以上相对于计算机610所描述的元件,尽管在图6B中仅示出了存储器存储设备681。图6B描述的逻辑连接包括局域网(LAN)671和广域网(WAN)673,但也可包括其它网络/总线。这类网络环境常见于家庭、办公室、企业范围计算机网络、内联网以及因特网。
当在LAN网络环境中使用时,计算机610通过网络接口或适配器670连接至LAN671。当在WAN网络环境中使用时,计算机610一般可包括调制解调器672或用于通过WAN673,如因特网建立通信的其它装置。调制解调器672可以是内置或外置的,通过用户输入接口660或其它适当的机制连接至系统总线621。在网络化环境中,相对于计算机610所描述的程序模块或其部分可储存在远程存储器存储设备中。作为示例而非局限,图6B示出了远程应用程序685驻留在存储器设备681上。可以理解,示出的网络连接是示例性的,也可以使用在计算机之间建立通信链路的其它手段。
可以有多种方式来实现本发明,例如适当的API、工具箱、驱动程序代码、操作系统、控件、独立或可下载软件对象等等,它们使得应用程序和服务能够使用本发明的虚拟化体系结构、系统和方法。本发明从API(或其它软件对象)的观点以及接收依照本发明的任一上述技术的软件或硬件对象构想了本发明的使用。由此,此处所描述的本发明的各种实现可具有完全硬件、部分硬件和部分软件以及完全软件的方面。
如上所述,尽管本发明的示例性实施例是结合各种计算设备和网络体系结构来描述的,然而基本概念可应用于其中期望采用GPU的任何计算设备或系统。例如,本发明的各种算法和硬件实现可以应用于计算设备的操作系统,该操作系统作为设备上的单独对象、作为另一对象的一部分、作为可重用控件、作为可从服务器下载的对象、作为设备或对象与网络之间的“中间人”、作为分布式对象、作为硬件、在存储器中、上述任一个的组合等来提供。本领域的普通技术人员可以理解,存在多种提供对象代码和命名法的方式来实现本发明的各实施例所实现的相同、相似或等效功能。
如上所述,此处所描述的各种技术可结合硬件或软件来实现,或在适当时以两者的组合来实现。由此,本发明的方法和装置或其某些方面或部分,可采用包含在诸如软盘、CD-ROM、硬盘或任何其它机器可读存储介质等有形介质中的程序代码(即,指令)的形式,其中,当程序代码被加载到诸如计算机等机器中并由其执行时,该机器变为用于实施本发明的装置。在可编程计算机上的程序代码执行的情况下,计算设备一般包括处理器、处理器可读的存储介质(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备以及至少一个输出设备。例如,可通过使用数据处理API、可重用控件等来实现或利用本发明的GPU虚拟化技术的一个或多个程序较佳地用高级过程语言或面向对象的编程语言来实现,以与计算机系统通信。然而,如有需要,程序可以用汇编语言或机器语言来实现。在任何情况下,语言可以是已编译或已解释语言,并与硬件实现相组合。
本发明的方法和装置也可通过以程序代码的形式实施的通信来实现,该程序代码通过某一传输介质来发送,如通过电线或电缆、通过光纤或通过任一其它形式的传输,其中,当程序代码由诸如EPROM、门阵列、可编程逻辑器件(PLD)、客户机计算机等的机器接收被装载到其中由其执行时,该机器变为用于实施本发明的装置。当在通用处理器上实现时,程序代码与处理器相结合,以提供用于调用本发明的功能的唯一装置。另外,用于本发明的任何存储技术可以不变地为硬件和软件的组合。
尽管本发明是结合各附图的较佳实施例来描述的,但是可以理解,可使用其它类似的实施例或可以对所描述的实施例做出修改和添加来执行本发明的相同功能,而不偏离本发明的。例如,尽管本发明的示例性网络环境是在诸如对等联网环境等联网环境的上下文中描述的,然而本领域的技术人员可以认识到,本发明不限于此,并且本发明申请中所描述的方法可应用于任何计算设备或环境,诸如游戏控制台、手持式计算机、便携式计算机等,无论它们是有线还是无线的,并且这些方法可应用于通过通信网络连接并在网络上交互的任何数量的这样的计算设备。此外,应当强调,构想了各种计算机平台,包括手持式设备操作系统和其它应用程序专用操作系统,尤其是当无线联网设备的数量持续增长的时候。
尽管示例性实施例涉及在图形管道的上下文中利用本发明,然而本发明不限于此,而是相反,也可以被实现以虚拟化为其它原因与主处理器协作的第二专用处理单元。此外,本发明构想了OS的同一版本或发行版本的多个实例在依照本发明的单独虚拟机中操作的情形。可以理解,本发明的虚拟化与对其使用GPU的操作无关。也可以预期本发明适用于所有的GPU体系结构,包括但不限于多个GPU实现,以及提供对单个GPU接口的假象的多GPU实施例。此外,本发明可以在多个处理芯片或设备中或跨多个处理芯片或设备来实现,并且存储可以类似地跨多个设备来实现。因此,本发明不应限于任何单个实施例,而是相反,应当依照所附权利要求书的宽度和范围来解释。