带多重优化的函数级即时翻译引擎
发明领域
本发明涉及用于通过将旧版本计算机系统(legacy computer system)所使用的代码转换成由主机计算机系统执行的代码而在主机硬件环境中虚拟化旧版本硬件环境的系统和方法,并且本发明尤其涉及在函数级而不是在指令级执行代码翻译的即时(just-in-time)翻译引擎,并且该即时翻译引擎通过将旧版本代码指令的序列翻译成相应的主机代码指令序列来优化所得的代码。
发明背景
在更新像游戏控制台那样的计算机系统硬件体系结构以实现更快、具备更多功能的硬件时,开发者面临由为旧版本计算机系统平台开发的应用程序或游戏带来的对旧版本计算机系统的向后兼容性问题。尤其,商业上希望最新的硬件体系结构支持为旧版本硬件体系结构开发的应用程序或游戏。然而,如果最新的硬件体系结构实质上或根本上不同于旧版本硬件体系结构,两个系统之间的体系结构差异会使得旧版本应用程序或游戏没有真实硬件修改和/或软件补丁就在新硬件体系结构工作变得非常困难甚至不可能。由于用户通常期待这样的向后兼容性,这些问题的解决对最新的硬件体系结构的成功至关重要。
个人计算机体系结构和软件仿真的最近进展已经为计算机甚至游戏控制台提供足够强大的硬件体系结构来允许以软件而不是硬件来仿真旧版本应用程序或游戏。这类软件仿真器将用于应用程序或游戏的标题指令(titleinstruction)即时地翻译成新硬件体系结构可以理解的设备指令。这一软件仿真方式对游戏控制台的向后兼容性特别有用,因为游戏控制台的开发者保持对硬件和软件平台的控制,而且对旧版本游戏相当熟悉。
大多数这类软件仿真器每次一个处理器指令地翻译代码。例如,软件仿真器可以把单个x86指令从源流提出来,即时地将其翻译成目标处理器(例如,PowerPC(PPC))指令集的一个或多个预定义等效(指令),在目标处理器上运行那些PPC指令,然后返回到源流处理下一个指令。这一方式在概念上很简单,但是它有缺点。例如,这一方式涉及在软件仿真器和实现使用x86指令集写成的旧版本应用程序或游戏系统的虚拟机(VM)之间的许多慢速上下文来回切换。当翻译指令时,这一方式也从软件仿真器强占任何上下文,强迫仿真器依赖于简单的映射指令表。这是显著的性能缺点,因为如果软件仿真器能够考虑上下文的指令,那么软件仿真器将能够翻译代码块而非一个指令接着一个指令地翻译,由此显著地改进翻译性能。
因此,需要通过为待翻译的指令提供一种在上下文中考虑的机制来改进指令翻译性能的技术。本发明解决本领域中的这一需求。
发明概述
通过在源代码的函数级而不是在操作码级翻译代码,本发明解决本领域中的上述需求。本发明的软件仿真器从源流抓取完整的x86函数,将整个函数翻译成目标处理器的一个等效函数,并在返回到源流之前一次性地运行该函数。这一技术不但减少上下文切换,而且由于一次性见到完整的x86函数上下文,软件仿真器可以优化代码翻译。例如,软件仿真器可以决定将一个x86指令序列翻译成一个高效的PPC等效序列。许多这样的优化产生更紧密的已仿真二进制,这是任何软件仿真器尤其期望的,特别是必须很快地运行代码的游戏仿真器。
本领域内的技术人员应该认识到,尽管本发明的一个示例性实施例在可从微软公司获得的Xbox计算机游戏系统中被实现,但在其中使用代码翻译的任何计算机游戏控制台或其他类型计算机系统均可受益于本发明的函数级代码翻译技术。基于以下详细描述,本领域中的技术人员将会明显看出本发明的其他特性。
附图简述
参照附图,进一步描述用于依照本发明提供具有多重优化的函数级即时代码翻译的系统和方法,在附图中:
图1A是一个表示用于计算机系统的仿真操作环境的硬件和软件体系结构的逻辑分层的框图;
图1B是一个表示虚拟化计算系统的框图,其中仿真由主机操作系统执行(直接执行或经由管理程序执行);
图1C是一个表示备选虚拟化计算系统的框图,在该计算系统中仿真由与主机操作系统并列运行的虚拟机监视器执行;
图2示出了虚拟机中实现的旧版本游戏系统的虚拟存储器和主机游戏系统的虚拟存储器之间的关系。
图3示出了使用本发明的技术把来自虚拟机中实现的旧版本游戏系统的x86代码转换成主机游戏系统的PPC代码的系统。
图4示出了本发明的JIT二进制翻译器的操作的流程图。
图5A是一个表示可以在其中实现本发明的、具有多种计算设备的示例性网络环境的框图;以及
图5B是一个表示在其中可以实现本发明的示例性无限制主机计算设备的框图。
示例性实施例的详细描述
概述
本发明提供一种用于在源代码的函数级而非操作码(opcode)级处翻译代码的系统和方法。本发明的软件仿真器从源流中抓取完整的x86函数而非一个指令,将整个函数翻译成目标处理器的等效函数,而且在返回源流之前一次性执行该函数,籍此减少上下文转换。同时,由于软件仿真器一次见到完整的源代码函数上下文,因此该软件仿真器可以优化代码翻译。例如,软件仿真器可以决定将一个x86指令序列翻译成一个高效的PPC等效序列。许多这样的优化产生更紧密的已仿真二进制。
如下将描述本发明其他更详细的各方面,但首先,以下描述提供有关虚拟机、仿真器的总的概述和部分普通词汇以及相关联的术语,因为需要知道与操作系统和主机处理器(“CPU”)虚拟化技术有关的这些术语。在这种情况下,为本描述阐述一组词汇,本领域中普通技术人员会发现这些词汇对随后描述依照本发明的技术在源代码的函数级别翻译代码的装置、系统和方法是有用的。
虚拟机概述
计算机包括被设计用以执行特定系统指令集的通用中央处理单元(CPU),即“处理器”。一组具有类似体系结构或设计规格的处理器可以被认为是相同处理器系列的成员。目前处理器家族的例子包括由亚历桑那州凤凰城的摩托罗拉公司制造的摩托罗拉680X0处理器系列;由加利福尼亚州桑尼维尔市的英特尔公司制造的英特尔80X86处理器系列;以及由国际商用机器(IBM)或摩托罗拉公司制造并且被用于加利福尼亚州库珀蒂诺市的苹果计算机公司制造的计算机的PowerPC处理器系列。尽管一组处理器由于其类似体系结构和设计考虑而位于同一系列中,但是根据其时钟速度和其他性能参数,一个系列中的处理器可能相差很大。
每个微处理器系列执行该处理器系列独有的指令。处理器或处理器系列能执行的共同指令集被称为处理器指令集。例如,英特尔80X86处理器系列所用的指令集与PowerPC处理器系列所用的指令集不兼容。英特尔80X86指令集基于复杂指令集计算机(CISC)格式,而摩托罗拉PowerPC指令集则基于精简指令集计算机(RISC)格式。CISC处理器使用大量指令,一些指令能执行相当复杂的功能,但是通常需要许多时钟周期来执行。另一方面,RISC处理器使用少量的可用指令来以高得多的速率执行较为简单的一组函数。
计算机系统之间处理器系列的独特性也通常导致各计算机系统的硬件体系结构的其他元件之间的不兼容。用英特尔80X86处理器系列的处理器制造的计算机系统具有与用PowerPC处理器系列的处理器制造的计算机系统不同的硬件体系结构。因为处理器指令集以及计算机系统的硬件体系结构的独特性,应用软件程序通常被写成能够在在运行特定操作系统的特定计算机系统上运行。
一般而言,计算机制造商通过使得更多而不是更少的应用程序在与该计算机制造商产品线关联的微处理器系列上运行来争取最大的市场份额。为了扩大能在计算机系统上运行的操作系统和应用程序的数目,已经开发一个技术领域,在其中具有一种CPU类型的给定计算机(被称为主机)包括虚拟器程序,该虚拟器程序允许主机计算机仿真不相关CPU类型(被称为客机)的指令。于是,主机计算机响应于给定客机指令执行将引起一个或多个主机指令被调用的应用程序,由此该主机计算机既可以运行为它自己的硬件体系结构设计的软件,也可以运行为具有不相关硬件结构的计算机写成的软件。
作为一个更具体的例子,例如由苹果计算机公司制造的计算机系统可以执行为基于PC计算机系统写成的操作系统和程序。它也可以使用虚拟器程序在单个处理器多个不兼容的操作系统上并发执行。在后一种配置中,尽管每个操作系统与另一操作系统不兼容,但是虚拟器程序能主存若干操作系统中的每一个,籍此允许其他不兼容的操作系统在相同的主机计算机系统上并发运行。
当客机计算机系统在主机计算机系统上被仿真时,该客机计算机系统就被称为“虚拟机”,因为该客机计算机系统只作为一个特定硬件体系结构的操作的纯软件表示而存在于主机计算机系统中。于是在诸如微软公司的Virtual PC的虚拟机软件中运行的操作系统可以被称为“客机”和/或“虚拟机”,而运行虚拟机软件的操作系统可以被称为“主机”。类似地,在新游戏系统里的虚拟机或仿真软件中运行的旧版本游戏系统内的操作系统可以被称为“客机”,而运行该虚拟机或仿真软件的新游戏系统的操作系统可以被称为“主机”。术语虚拟器、仿真器、直接执行器、虚拟机和处理器仿真有时可互相交换地被用于指示使用本领域中的技术人员所知道并理解的一种或数种方法来模仿或仿真完整的计算机系统的硬件体系结构的能力。而且,任何形式的术语“仿真”的所有使用被规定为覆盖这一广义,而并非旨在要区分仿真的指令执行概念和虚拟机中的操作系统指令的直接执行。因此,例如可从微软公司获得的Virtual PC软件“仿真”(通过指令执行仿真或直接执行)包含英特尔80X86 Pentium处理器和各种主板组件和板卡的完整计算机,而且这些组件的操作是在正运行在主机上的虚拟机中被“仿真”。在主机计算机的操作系统软件和硬件体系结构(诸如,具有PowerPC处理器的计算机系统)上执行的虚拟器程序模仿完整的客机计算机系统的操作。
虚拟化的一般情况允许一个处理器体系结构执行来自其他处理器体系结构的操作系统和软件(例如,在x86 Windows上执行PowerPC Mac程序,反之亦然),但一个重要的特定情况是当下层处理器体系结构相同的情况(在x86上运行各种版本的x86 Linux或不同版本的x86 Windows)。在后一情况中,存在更有效率地执行客机OS及其应用程序的潜力,因为基本指令集是相同的。在此情况下,客机指令被允许直接在处理器上执行而不会失去控制或使得系统开放而受到攻击(也就是说,客机OS被放入沙箱(sandbox))。这就是特许和非特许的分隔以及用于控制对存储器的访问的技术开始起作用的所在。对于存在体系结构不匹配(PowerPC<->x86)的虚拟化,传统上使用两种方法:一个指令接着一个指令的仿真(相对较慢),或者从客机指令集翻译成本地指令集指令(更有效率,但要使用翻译步骤)。如果使用指令仿真,那么使得环境稳健相对容易;然而,如果使用翻译,则随后向后映射到处理器体系结构相同的特殊情况。
依照本发明,客机操作系统被虚拟化,并因此依照本发明的一个示例性情形是在可以从微软公司获得的Virtual Server或者Xbox游戏控制台上的Xbox操作系统上仿真Windows95、Windows98、Windows 3.1或Windows NT 4.0操作系统。在各实施例中,本发明因而描述用于控制客机对主机计算机的基本物理资源(存储器、设备等等)中的部分或全部的访问的系统和方法。
虚拟器程序用作在主机硬件体系结构和由运行在所仿真的环境中的软件(例如,操作系统、应用程序等等)传输的指令之间的互换。这一虚拟器程序可以是主机操作系统(HOS),该HOS是在物理计算机硬件上直接地运行的操作系统(并且可以包含管理程序)。作为其他选择,所仿真的环境也可以是虚拟机监视器(VMM),该VMM是在硬件上直接运行的软件层,也许并列地运行并和主机操作系统一起工作,并能通过暴露与该VMM正在虚拟化的硬件相同的接口来虚拟化主机的所有资源(以及特定的虚拟资源)。这一虚拟化使得虚拟器(以及主机计算机系统本身)能够运行而不被运行在其上的操作系统层注意。
处理器仿真于是能够让客机操作系统在由虚拟器创建的虚拟机上运行,其中该虚拟器运行在包括物理硬件和主机操作系统的主机计算机系统上。
从概念性角度来看,计算机系统通常包含运行在基础硬件层上的一个或多个软件层。这一分层是为了抽象而作出的。通过定义用于给定软件层的接口,该层能由在其上的其他层不同地实现。在一个设计良好的计算机系统中,每个层只知道(也只依赖于)直接在它之下的层。这允许替换一个层或一个“堆栈”(多个毗邻的层),而不会给在上述层或堆栈之上的层带来负面影响。例如,软件应用程序(较高的层)通常依赖于操作系统的较低级别(较低的层)来将文件写到一些形式的永久存储器,而且这些应用程序不需要理解将数据写到软盘、硬盘或网络文件夹之间的不同。如果这一较低的层被用于写入文件的新操作系统组件所替换,较高层的软件应用程序的操作保持不受影响。
分层软件的灵活性允许虚拟机(VM)呈现事实上是另一软件层的虚拟硬件层。这样,VM能为在其上的软件层创建这样的假象:软件层正运行在它们自己的私有计算机系统上,因此诸VM能允许多个“客机系统”在单个“主机系统”上并发运行。这一级别的抽象由图1A的示例表示。
图1A表示用于计算机系统中所仿真的操作环境的硬件和软件体系结构的逻辑分层。在该图中,仿真程序54在物理硬件体系结构52上直接地或间接地运行。仿真程序54可以是(a)在主机操作系统旁边运行的虚拟机监视器,(b)具有本地仿真能力的专用主机操作系统,或(c)具有管理程序组件的主机操作系统,其中该管理程序组件执行该仿真。仿真程序54仿真客机硬件体系结构56(示出为虚线以举例说明该组件是“虚拟机”的事实,也就是说,硬件并不实际存在,而是由上述仿真程序的硬件54仿真)。客机操作系统58在客机硬件体系结构56上执行,软件应用程序60在客机操作系统58上运行。在图1A的仿真操作环境中——而且因为仿真程序54的操作——即使软件应用程序60被设计成运行在通常与主机操作系统和硬件体系结构52不兼容的操作系统上,该软件应用程序60也可以在计算机系统50中运行。
图1B示出了包括直接在物理计算机硬件62上运行的主机操作系统软件层64的虚拟化计算系统,在这一系统中,主机操作系统(主机OS)64通过暴露与该主机OS正在仿真(或虚拟)的硬件相同的接口来提供对物理计算机硬件62的资源的访问,而这又使得主机操作系统64能够运行而不被运行在其上的操作系统层注意。同样为执行仿真,主机OS 64可以是具有本地仿真能力的特别设计的操作系统,或者可以可选地具有用于执行仿真的整合管理程序组件的标准操作系统(未示出)。
如图1B所示出,在主机OS 64上面是两个虚拟机(VM)实现,VM A 66,它例如可以是虚拟化的英特尔386处理器,以及VM B 68,它例如可以是摩托罗拉680 X0处理器系列的其中之一的虚拟化版本。上述的VM 66和68分别是客机操作系统(客机OS)A 70和B 72。运行在客机OS 70上的是两个应用程序,应用程序A1 74和应用程序A2 76,运行在客机OS B 72上面是应用程序B1 78。
关于图1B,VM A 66和VM B 68(被示出为在虚线中)是虚拟化计算机硬件表示,该虚拟化计算机硬件表示只作为软件构造存在,并且由于(一个或多个)专用仿真软件的仿真使得这一虚拟化计算机硬件表示成为可能,其中(一个或多个)专用仿真软件不仅分别向客机OS A 70和客机OS B 72呈现VM A 66和VM B 68,而且也执行客机OS A 70和客机OS B 72间接地与真实的物理计算机硬件62交互所必需的所有软件步骤,而认识到上述几点非常重要。
图1C示出了备选的虚拟化计算系统,其中仿真由在主机操作系统64”旁边运行的虚拟机监视器(VMM)64’来执行。对于特定实施例而言,VMM 64’可以是运行在主机操作系统64”上并只通过主机操作系统64”与物理计算机硬件交互62的应用程序。在其他实施例中,如图1C所示,VMM 64’可以改为包含一个部分独立的软件系统,它在某些级别上经由主机操作系统64”间接地与计算机硬件62交互,但在其他级别上VMM 64’直接地与计算机硬件62交互(类似于主机操作系统直接地与计算机硬件交互的方式)。而在另外一些实施例中,VMM 64’可以包含完全独立的软件系统,它在所有级别上直接地与计算机硬件62交互(类似于主机操作系统64”直接地与计算机硬件62交互的方式),而不需要利用主机操作系统64”(尽管为协调计算机硬件62的使用并避免冲突的范围内仍然与上述主机操作系统64”交互)。
预期用于实现虚拟机的所有这些改变来实现在此所述的本发明的各个备选实施例,而且在此不应该被解释为将本发明限制在任何的特定仿真实施例。另外,对分别经由VM A 66和/或VM B 68在应用程序74、76和78之间的交互的任何引用(可能在硬件仿真的情形中)应该被解释为事实上是在应用程序74、76和78与已经创建虚拟化的虚拟器之间的交互。同样地,对用主机操作系统64和/或计算机硬件62而在应用程序VM A 66和/或VM B 68之间的交互的任何引用(可能是为了直接地或间接地在计算机硬件62上执行计算机指令)应该被解释为事实上是视情况而定在已经创建虚拟化的虚拟器与主机操作系统64和/或计算机硬件62之间的交互。
带多重优化的函数级即时版本引擎
本发明涉及使用软件仿真器来在主机游戏系统平台上虚拟化诸如Xbox的旧版本游戏系统平台的系统的各特征,其中主机游戏系统平台是旧版本游戏系统平台的升级。软件仿真器使得主机游戏系统平台能够以无缝方式运行旧版本游戏。如上所述,本发明提供具有即时翻译引擎的软件仿真器,其中即时翻译引擎在函数级翻译代码并优化代码以改进代码翻译效率。本发明的技术将会在下面参照图2-4描述。
依照本发明,当主机游戏系统控制台的介质载入器接收到含有旧版本计算机游戏的介质并被主机游戏系统的操作系统要求启动该旧版本计算机游戏时,介质载入器改为调用本发明的软件仿真器来为旧版本计算机游戏的操作提供向后兼容性。软件仿真器把旧版本计算机游戏当作与任何主机游戏系统的本地计算机游戏相同的权限和限制的标准游戏来载入并运行。在启动时,软件仿真器请求保留两个物理存储块(memory chunk):用于主存虚拟化旧版本计算机游戏的64MB段,以及用于在实现旧版本计算机游戏的虚拟机和主机计算机游戏系统之间提供管道(conduit)的64MB段。
图2示出了在虚拟机中所实现的旧版本游戏系统的虚拟存储器和主机游戏系统的虚拟存储器之间的关系。在这个例子中,假定旧版本游戏系统是可以从微软公司获得的Xbox。作为例示,旧版本Xbox游戏系统在虚拟机环境中被实现,并且假定可以使用4GB的虚拟地址空间80。作为例示,旧版本Xbox游戏系统假定旧版本4GB虚拟地址空间,以拥有分专用于所插入的旧版本游戏的虚拟标题(virtual title)的存储器82的一部分、专用于虚拟的旧版本Xbox内核的存储器84、直接映射到主机游戏系统的物理RAM 88的64MB共享存储器的64MB共享存储器86、以及在4GB虚拟地址空间中的以上区域中的虚拟MMIO地址空间90。本领域中的技术人员将会认识到,旧版本Xbox游戏系统中的MMIO地址空间90含有指向被Xbox游戏系统控制台的操作系统的驱动器调用的实际硬件设备的指针。被虚拟机环境所实现的旧版本Xbox游戏访问的虚拟地址空间被配置为与本地旧版本Xbox游戏系统环境中的虚拟地址空间一样,因此欺骗旧版本Xbox游戏使它认为是在本地旧版本Xbox游戏系统环境中工作。
另一方面,本地主机Xbox游戏系统的虚拟地址空间92以仿真器二进制存储器94、本地主机Xbox内核96以及主存旧版本Xbox虚拟机的64MB物理存储器段98为特征。也提供64MB共享存储器100,它直接映射到本地主机Xbox游戏系统的物理RAM 88中的64MB共享存储器。正如下面将参照图3更详细地解释的那样,x86 Xbox内核84被重复创建的副本以及最初被传递到游戏载入器的x86标题二进制(title binary)被载入到保留给虚拟Xbox游戏系统的64MB空间98。另一方面,在64MB共享存储空间100中,本地主机Xbox游戏系统载入其调度器程序,载入特定的手动优化的“glue(联结)”函数,并创建用于虚拟机(VM)状态和已翻译代码高速缓存的结构(图3)。这些函数经由共享存储器88,与运行在虚拟机上的旧版本Xbox游戏一起共享,这实际上是可由虚拟机实现旧版本Xbox和本地主机Xbox操作系统的仿真引擎访问的RAM的物理共享扇区。
图3示出了使用本发明的技术将来自虚拟机中所实现的旧版本游戏系统的x86代码转换成主机游戏系统的PPC代码的软件仿真系统。作为例示,本发明的软件仿真系统包含四个主要组件:
·即时(JIT)二进制翻译器102,它将旧版本Xbox游戏系统的x86代码即时二进制翻译成PPC代码或本地主机Xbox游戏系统的其他处理器代码;
·旧版本Xbox虚拟机(VM)104,它重复创建在复制的x86 Xbox内核106和未翻译标题代码存储器108中的大部分旧版本Xbox环境、以及在存储的标题资源(title resource)和状态存储器110中的旧版本标题环境;
·共享存储器88,它允许在本地主机Xbox游戏系统的操作系统和VM104之间进行通信,并在跟踪VM状态116时主存调度器112和已翻译代码高速缓存114;以及
·Xbox异常处理器118,它使用在本地Xbox内核122上的设备仿真120来仿真本地主机Xbox系统的硬件设备,以供Xbox VM 104在运行旧版本Xbox游戏时使用。
在初始化旧版本Xbox虚拟机104中的旧版本Xbox游戏之后,本地主机Xbox游戏的操作系统将控制传递给驻留在共享存储器空间88内的调度器112。从根本上来讲,调度器112为虚拟化的旧版本Xbox游戏引导代码执行。它维护在x86空间中被引用的每个x86函数和已翻译代码高速缓存114中的等效的已翻译的PPC(或其他主处理器)函数之间的散列表中的映射。调度器112的工作是将已翻译的PPC(或其他主处理器)函数按虚拟化x86旧版本Xbox标题所期望的顺序连锁在一起。调度器112的第一个任务是模拟启动旧版本x86Xbox内核106和标题存储器110中的旧版本x86标题。如果本地主机Xbox游戏系统的主机OS不执行显著的已仿真二进制的预翻译,调度器112首先就没有被请求的x86函数的高速缓存PPC(或其他主处理器)等效函数。为了填充这些间隙,调度器112调用JIT二进制翻译器102以进行即时函数翻译。
本领域中的技术人员将会认识到,例如,将x86代码翻译成PPC代码在某些方面是棘手的。首先,x86 ISA包含不带有简单PPC ISA等效函数的若干复杂函数。其次,本地主机Xbox游戏系统的PPC处理器可能被配置以大尾端(Big-Endian)解释解释,然而旧版本Xbox标题则期望小尾端(Little-Endian)解释。另外,旧版本Xbox x86代码的天真的翻译会导致本地主机Xbox系统硬件上指令和高速缓存出错的放大。本发明的JIT二进制翻译器设法缓和“翻译膨胀(bloat)”,这将会在下面描述。
如图3所例示,本发明的JIT二进制翻译器被实现为五个阶段(102a、102b、102c、102d、102e),每个阶段将会被依次描述。
步骤1:x86读取和解析。在步骤102a中,JIT二进制翻译器102被调度器112调用,并被交给引用虚拟机104的4GB地址空间80中的x86代码的扩展指令指针(EIP)112b。在二进制翻译的这个第一阶段中,执行地址翻译以在软件仿真器自己的4GB虚拟地址空间92中定位相应的存储器地址。然后,软件仿真器将来自4GB地址空间80的x86函数操作码解析成对应于该x86代码函数的结构。如果证明该函数是比在虚拟地址空间92中预先分配结构空间更大,那么JIT二进制翻译器102将暂停执行。
步骤2:x86代码优化。一旦JIT二进制翻译器102已经载入它的目标x86函数,它在步骤102b中执行一些初始优化。标识已知用以产生PPC低效的x86代码序列以供将来引用。例如,优化器做出不需要尾端字节倒置(endian bytereversal)的非易失性存储器/负载操作的注释。
步骤3:PPC描述符产生。优化器在步骤102c把它的产品交给JIT中间层,该中间层执行将已优化的x86指令的天真的翻译转换成相应的多个PPC指令。通常,单个x86指令对应于多个PPC指令。像fsin那样的很复杂的x86指令被存储在共享存储器88中手写编码的PPC“glue”函数替换。
步骤4:PPC二进制可执行优化。在步骤102d中,PPC二进制可执行(BE)优化器获得在步骤102c产生的PPC指令序列,并尝试尽可能多地减少指令计数、循环计数和可能的缓存出错率。在这一阶段之后仍在PPC代码中剩余的任何“翻译膨胀”只能由主机计算机系统的处理器速度弥补。
步骤5:PPC编译和存储。最后,在步骤102e中,JIT二进制翻译器102将PPC描述映射到32位PPC机器指令中。完整的已翻译函数被存储在共享存储器88中的已翻译代码高速缓存114,该函数的启动地址被作为指令地址寄存器(IAR)112a存储到调度器112的散列表中毗邻原始EIP112b的位置。这允许软件仿真器记住从输入代码到已翻译代码块的映射,以便可以通过在调用JIT二进制翻译器102之前检查调度器112的散列表来避免重新编译相同的代码块。于是软件仿真器放弃控制,并且线程返回到虚拟机104。
当虚拟机104继续执行时,调度器112再次尝试将其需要的EIP映射到IAR。这次,查询是成功的,调度器112使得代码执行跳转到已命名的IAR。对应于旧版本Xbox指令序列中的一个或多个x86指令的期望的PPC函数得以执行,而在旧版本Xbox虚拟机(104)的4GB地址空间中的资源上工作。当旧版本Xbox虚拟机完成期望的PPC函数的处理时,控制经由带有对下一个x86函数的请求的中断跳转回到调度器112,并且完整的JIT二进制翻译循环再次开始。由于计算机游戏通常被编码为巨大的循环,因此在执行的最初几秒之后,大多数x86函数已经被翻译并且在已翻译代码中高速缓存114被呈现为已优化的PPC代码(或其他处理器代码,如果本地主机Xbox游戏系统使用不同的处理器的话)。
本领域中的技术人员将会认识到,JIT二进制翻译器102是直到恰好需要x86函数的时刻才会将那些x86函数翻译成PPC代码的即时编译器。当JIT二进制翻译器102第一次遇到一个大函数时候,本发明的技术被设计为防止感觉延迟。可以考虑一些选项来解决这一问题:
·将较大函数预编译成二进制。软件仿真器可以在启动应用程序或游戏之前花费一些时间来标识难以解决的函数,并在开始玩游戏之前编译它们。这会消除感觉抖动,但是也意味着更长的启动延迟。
·对一些函数执行两阶段编译。JIT二进制翻译器102可以跳过一些函数的性能优化以便使它们更快地运行。运行在次要CPU上的另一线程可以及时地优化代码,从而代替代码高速缓存中的操作码。
当虚拟化旧版本Xbox游戏想要跟旧版本Xbox硬件通话但不知道它正在本地主机平台上工作时,由旧版本Xbox游戏发起的设备请求和系统调用会创建异常。正如许多操作系统的情况一样,在旧版本Xbox操作系统中,游戏通过写入到周知存储器映射输入/输出(MMIO)位置来与大多数设备通信。如图2所例示,在Xbox操作系统的情况中,这些MMIO位置是在4GB虚拟存储器空间的上层区域90中。正如同样被转让给本发明受让人并通过引用结合在此的美国专利申请号(微软记录号312634.01)所描述的那样,访问控制列表(ACL)可用来限制和/或减少页面许可(例如,只能读取或者不能读取或写入)以使得实现旧版本Xbox游戏的虚拟机104缺乏对存储器90中的这些MMIO地址的读取和写入特权。结果,当在虚拟机中104运行的旧版本Xbox游戏尝试访问其预期的设备存储器90时,主机Xbox操作系统在126处探测到无效的XboxMMIO设备地址并中止该线程。存储器访问违规消息被发送管理程序128,而该管理程序128又将VM状态信息传递给Xbox异常处理器118以解决该存储器访问违规。
处理被管理程序128转发到Xbox异常处理器118的存储器违规和任何有意的系统调用,以使用来自旧版本Xbox游戏的MMIO写入中所提供的MMIO地址来确定预期目标设备。因为存储器访问违规常常指示虚拟设备请求,Xbox异常处理器118可以简单地检查由管理程序128(从VM状态记录器116)提供的虚拟机状态,并确定预期目标设备。然后将控制给予Xbox异常处理器118中适当的Xbox设备仿真器120,它翻译并中继虚拟机104对Xbox内核122的适当函数或者对本地主机Xbox库的请求。因为不能假定本地主机Xbox系统与旧版本Xbox系统共享任何硬件,所以简单的指令转发不是可选项。当然,如果硬件被共享,那么就可以使用指令转发。
如图3所例示,一些对诸如硬盘机I/O之类的Xbox物理设备124的本地硬件请求会产生具有设备中断130形式的异步回调。当本地主机Xbox内核122接收到这样一个中断时,它中止JIT二进制翻译器102并将中断数据提供给Xbox异常处理器118中适当的Xbox设备仿真器120,而该Xbox异常处理器118又翻译该应答并将其存储在共享存储器空间88中。然后,通过模拟旧版本Xbox中断,将控制返回给虚拟机104,以使得虚拟机104可以处理新的数据。
图4示出了本发明的JIT二进制翻译器102的操作。作为例示,在步骤132,通过在所提供的地址开始,JIT二进制翻译器102开始编译输入源代码。JIT二进制翻译器102因此开始建立机器可执行代码流以供执行。然而,依照本发明,在步骤134,通过识别代码模式并相应地动作,JIT二进制翻译器102的解析器102a标识机器代码中的函数。例如,源函数可以被定义为具有一起完成任务并返回经过处理的变量的开始部分(prolog)、主体和结尾部分(epilog)。开始部分介绍函数并定义变量,而结尾部分则结束函数视情况而定以返回控制流并返回易变量值。通常,结尾部分是RET或IRET函数。另一方面,主体包括用于执行其他语句的代码语句和条件,包括可以或不可以嵌套的条件转移(conditional branch)。
以下是解析器102如何解析来自代码列表的简单函数的几个例子。
A.整数相加
int add(inti,intj) :prolog
{ :mov eax,i
return(i+j); :add eax,j
} :epilog
B.整数相乘
int multiply(int i,intj) :prolog
{ :mov eax,i
return(i*j); :imul eax,j
} :epilog
C. 对整数ij计算j+(i*j)
int multiplyadd(inti,intj) :prolog
{ :pushj
:push i
return add(multiply(ij),j); :call multiply
:push eax
:pushj
:call add
} :epilog
D.带有条件跳转的例子
以下示例示出了在认为完成该函数之前要求分解的未完成条件转移:
int arithmetic(int i,int j,int operation)
{ :prolog
if(operation=ADD) :cmp operation,ADD
{ :jnz NotAdd
return(i+j); :mov eax,i
:add eaxj
:ret
} :NotAdd:
else if(operation==SUBTRACT) :cmp operation,SUBTRACT
{ :jnz NotSubtract
return(i-j); :mov eax,i
:sub eaxj
:ret
} :NotSubtract:
else if (operation==MULTIPLY) :cmp operation,MULTIPLY
{ :jnz NotMultiply
return(i*j); :mov eax,i
:imul eax,
:ret
} :NotMultiply:
else if(operation==DIVIDE) :cmp operation,DIVIDE
{ :jnz NotDivide
return(i/j); :mov eax,i
:idiv eax,j
:ret
} :NotDivide:
} :epilog
如上述例子所例示,解析器102将开始部分、主体和结尾部分看作函数块。该块被通过分析代码以标识开始部分和结尾部分并且标识条件转移操作,该块被标识。入在步骤134所例示,如果当到结尾部分时没有未完成条件转移,那么就知道该函数是完整的。换句话说,如果RET或IRET被解析器102a遇到,并且没有未完成的条件转移,那么JIT二进制翻译器102知道已经达到机器代码函数的结尾。
在步骤136,作为结果且由解析器102a提供的函数代码块可以被JIT二进制翻译器102的优化器102b优化以改进处理效率。例如,PowerPC处理器是本来是大尾端,以大尾端格式被载入的数据需要一个(或最多可能两个)PowerPC指令,然而x86本来是小尾端,以小尾端格式被载入的数据需要一个或多个(最多可达7个)PowerPC指令。因此,可以由优化器102b执行的一种明显的优化是在有可能时以大尾端格式存储数据,并避免将数据转换成小尾端格式。这一优化使得在运行时需要处理较少的指令。
作为另一个简单例子,设想编写一个源代码块以计算i值,其中i=j*k。该代码可以被写成:
k=0
跳转至计算j值的例程
返回j的值
i=j*k
在这一简单例子中,因为k=0,无论所计算的j值是什么,乘积将会是零。因此,这一代码可以优化为i=0。本领域中的技术人员将会认识到,在其中每个指令被分开翻译的传统系统中,因为还不知道该指令的上下文,所以必须解决该跳转例程的问题。
一旦已经标识函数且已经优化代码,在步骤138,在输入机器代码中构成函数的处理器指令被转换成目标处理器的机器代码(例如,从x86到PowerPC)。然后,在步骤140,所产生的机器代码被优化,例如,通过尽可能减少指令计数、循环计数和可能的高速缓存出错率。在步骤142,作为结果的目标处理器的已优化机器代码优化被存储在已翻译代码高速缓存114中以供执行。最后,在步骤144,一个条目被放置在调度器散列表之内,其中该调度器散列表标识已优化代码块,以避免下次在输入代码流中遇到相同函数块时重新编译该相同函数块。
因此,本发明就提供了一种机制,藉此JIT二进制翻译器可以基于所接收到的上下文更高效地将为第一处理器写成的指令翻译第二处理器的指令。尤其,对代码的函数块执行二进制翻译,以便加速二进制翻译操作。当与运行在虚拟机环境中的程序和游戏一起使用时,依照本发明的这种JIT二进制翻译器特别有利,其中在虚拟机环境中快速翻译对平滑操作非常重要。本领域中的技术人员将会认识到,这类技术可以被扩展到所有类型的应用程序而不只是游戏系统。而且,本发明的技术可以被用来提供实现软件仿真技术的其他计算机系统的二进制翻译。
示例性网络化和分布式环境
尽管可以结合Xbox游戏系统体系结构实现本发明的一个示例性实施例,但是本领域中的技术人员能认识到,可以结合能被部署为计算机网络的一部分或者被部署在分布式计算环境中的任何合适的主机计算机或其他客户端或服务器设备来实现本发明。在这方面,本发明涉及具有任意数量的存储器或存储单元以及在任意数量的存储单元或卷上发生的任意数量的应用程序和进程的任何计算机系统或环境,其中该计算机系统或环境可以结合依照本发明虚拟化客机OS来使用。本发明可以适用于具有在网络化环境或分布式计算环境中部署的服务器计算机和客户端计算机的、拥有远程或本地存储器的环境。本发明也可以应用于独立的计算设备,其中该独立计算设备拥有用于结合远程或本地服务产生、接收和传输信息的编程语言功能性、解释和执行能力。
分布式计算通过在计算设备和系统之间进行交换来提供计算机资源和服务的共享。这些资源和服务包括信息的交换、文件的高速缓存和磁盘存储器。分布式计算利用网络连接性,允许客户端利用他们的集体性能使整个企业受益。在这方面,多种设备可以拥有涉及本发明的进程的应用程序、对象或资源。
图5A提供示例性网络化或分布式计算环境的示意图。分布式计算环境包含计算对象145a、145b等等,以及计算对象或设备146a、146b、146c等等。这些对象可以包含程序、方法、数据存储、可编程逻辑等等。诸对象可以包含相同或不同设备的部分,如PDA、声音/视频设备、MP3播放器、个人计算机等等。每个对象能经由通信网络147与另一个对象通信。这一网络本身可以包含向图5A的系统提供服务的其他计算对象和计算设备,且本身可以表示多个互相连接的网络。依照本发明的一个方面,每个对象145a、145b等等或146a、146b、146c等等可以包含可以使用API或其他对象、软件、固件和/或硬件来请求使用本发明的虚拟化进程的应用程序。
也可以认识到,像146c那样的对象可以被寄宿在另一计算设备145a、145b等等或者146a、146b等等上。因此,尽管所述物理环境可以将所连接的设备示出为计算机,但这样的例子只是示例性的,而且该物理环境可以备选地或者被描绘或描述为包含诸如PDA、电视、MP3播放器等等的各种数字设备以及诸如界面、COM对象等等的软件对象。
存在多种支持分布式计算环境的系统、组件和网络配置。例如,计算系统可以由本地网络或广泛分布式网络通过有线或无线系统连接在一起。现在,许多网络被耦合到因特网,其中因特网提供用于广泛分布式计算的基础设施,并包含许多不同的网络。任何一种基础设施都可以用于与本发明的虚拟化进程关联的示例性通信。
在家庭联网环境中,至少有四种其中每种都可以支持独特协议的不同网络传输介质,如电力线、数据(无线和有线)、语音(例如,电话)和娱乐介质。诸如灯开关和电器等的大多数家庭控制设备可以使用输电线来连接。像宽带(例如,DSL或线缆调制解调器)那样的数据服务可以进入家庭,并且可以使用无线(例如,HomeRF或802.11B)或有线(例如,家庭电话网络接口卡(HomePNA)、Cat 5、以太网、甚至电力线)连接在家庭中访问。语音话务也可以进入家庭,例如有线(例如,Cat 3)或无线(例如,蜂窝式移动电话),而且可以在使用Cat 3连线在家庭中分布。娱乐介质或其他图形数据可以通过卫星或缆线进入家庭,并且通常使用同轴线在在家庭中分布。IEEE 1394和DVI也是用于介质设备集群的数字互连。所有这些网络环境和可以作为协议标准出现的其他网络环境可以被互相连接以形成一个像企业内部互联网那样的网络,该网络通过因特网连接到外部世界。简而言之,存在用于数据存储和传输的多种不同的源,因此,进一步,计算设备将会需要共享数据的方式,如与利用依照本发明的虚拟化服务的程序对象关联的、被访问或被利用的数据。
因特网通常是指利用在计算机连网领域中众所周知的TCP/IP协议组的网络和网关的集合。TCP/IP是“传输控制协议/因特网协议”的缩写。因特网可以被描述为由诸计算机互连的地理上分布的远程计算机网络系统,其中诸计算机执行允许用户在(一个或多个)网络上交互并共享信息的连网协议。因为这样的广泛信息共享,像因特网那样的远程网络因此已经普遍地发展成开放的系统,开发者能本质上不受限制地为这一开放系统设计执行专门操作或服务的软件应用程序。
因此,网络基础设施允许大量的网络拓扑,如客户端/服务器、对等或混合体系结构。“客户端”是使用与其不相关的另一类或群的服务的类或群的一个成员。因此,在计算中,客户端是程序,一般地说也就是请求由另一程序提供的服务的一系列指令或任务。客户端程序利用所请求的服务而无须“知道”关于另一程序或服务本身的任何工作细节。在客机机/服务器体系结构中,尤其是在网络化系统中,客户端通常是一台访问由另一计算机(例如,服务器)提供的共享网络资源的计算机。在图5A的例子中,计算机146a、146b等等可以被认为是客户端,计算机145a、145b等等可以被认为是服务器,其中服务器145a、145b等等维护数据,该数据然后在客户端计算机146a、146b等等中被复制,尽管取决于环境任何计算机都可以被认为是客户端、服务器或两者。这些计算设备中的任何一个都可以处理数据或请求服务或任务,其中这些服务或任务可以包含本发明的虚拟化进程的实现。
服务器通常是可以在像因特网那样的远程或本地网络上访问的计算机系统。客户端进程可以活动在第一计算机系统中,服务器程序可以在第二计算机系统中,两者在通信介质上相互通信,因而提供分布式功能性并允许多个客户端利用服务器的信息收集能力。被用来使用本发明的(一个或多个)虚拟化体系结构的任何软件对象可以分布在多个计算设备或对象中。
利用由(一个或多个)协议层提供的功能性,(一个或多个)客户端和(一个或多个)服务器相互通信。例如,超文件传输协议(HTTP)是结合万维网(WWW)即“Web”使用的公共协议。通常,像因特网协议(IP)地址那样的计算机网络地址或像统一资源定位器(URL)那样的其他引用可以被用来将服务器或客户端计算机与其他计算机标识开来。网络地址可以被称为URL地址。可以在通信介质上提供通信,例如,(一个或多个)客户端和(一个或多个)服务器可以经由(一个或多个)TCP/IP连接相互耦合,以便进行高容量通信。
图5A例示其中可以使用本发明的示例性网络化或分布式环境,具有经由网络/总线与诸客户端计算机进行通信的服务器。更详细地,若干服务器145a、145b等等经由通信网络/总线147被相互连接,其中通信网络/总线147可以是LAN、WAN、企业内部互联网、因特网等等,并具有多个客户端或远程计算设备146a、146b、146c、146d、146e等等,如便携式计算机、手持式计算机、瘦客机、网络化电器或其他设备,如录像机、电视、烤炉、灯、加热器等等。因此可以认为,本发明可以适用于结合希望依照本发明实现客机界面和操作系统的任何计算设备。
在通信网络/总线147是因特网的网络环境中,例如,诸服务器145a、145b等等可以是诸客户端146a、146b、146c、146d、146e等等经由若干已知协议中的任何协议(如HTTP)与之通信的Web服务器。服务器145a、145b等等也可以充当客户端146a、146b、146c、146d、146e等等,这是分布式计算环境特性。
如果合适,通信可以是有线或无线的。客户端设备146a、146b、146c、146d、146e等等可以或不可以经由通信网络/总线147通信,并可以拥有与其关联的独立通信。例如,对电视或录像机来说,可以有或没有对于其控制的网络化方面。每一客户端计算机146a、146b、146c、146d、146e等等和服务器计算机145a、145b等等可以装备各种应用程序模块或对象148,并具有到各种类型的存储元件或对象连接或访问,文件或数据流可以被存储到这些存储元件或对象,或者文件或数据流的(一个或多个)部分可以被下载、传输或迁移到这些存储元件或对象。诸计算机145a、145b、146a、146b等等中的任何一个可以负责维护并更新数据库149或其他存储元件,如用于存储根据本发明处理的数据的数据库或存储器149。因此,本发明能被用于计算机网络环境中,其中该计算机网络环境拥有可以访问网络/总线147并与之互动的客户端计算机146a、146b等等、可用于客户端计算机146a、146b等等和其他类似设备交互的服务器计算机145a、145b等等、数据库149。
示例性计算设备
图5B和下列讨论旨在提供可以与之结合实现本发明的主机计算环境的简要一般描述合适。然而应该理解,所有类型的手持式、便携式和其他计算设备、便携式和固定游戏设备和计算对象被考虑结合本本发明使用。尽管在下面描述通用计算机,但这不过只是一个例子,而且本发明可以与具有网络/总线互操作性和交互的瘦客户端一起实现。因此,可以在其中包括很少或最少的客户端资源的、网络化的、被寄宿服务的环境中实现本发明,例如,其中客户端设备只充当网络/总线的接口(如置于电器中的一个对象)的网络化环境。实质上,数据可以被存储的任何地方或数据可以被检索或者传输到另一计算机的地方,是所希望的或合适的、用于依照本发明的虚拟化技术的操作的环境。
尽管未作要求,但是本发明可以整体或部分地经由一个操作系统被实现,以供设备或对象的诸服务的开发者使用,和/或被包含在结合本发明的虚拟化OS一起操作的应用软件里面。软件可以在像程序模块那样的计算机可运行指令一般上下文中描述,由一个或多个计算机如客户端工作站、服务器或其他设备运行。一般地,程序模块包括完成特定的任务或实现特定的抽象数据类型的例程、程序、对象、组件、数据结构等等。通常,程序模块的功能性可以根据各种实施例中的需要进行组合或分布。而且,本领域中的技术人员将会认识到,本发明可以与其他计算机系统配置和协议一起实践。可以适于实现本发明的众所周知的计算系统、环境、和/或配置包含但不限于:个人计算机(PC)、自动柜员机、服务器计算机、手持式或膝上型设备、多处理器系统、基于微处理器的系统、可编程的消费性电子产品、网络PC、电器、灯、环境控制元件、微型计算机、大型计算机等等。如上所述,本发明还可以在分布式计算环境中实践,在分布式计算环境中任务由通过通信网络/总线或是其他数据传输介质连接的远程处理设备执行。在分布式计算环境中,程序模块可以位于包括存储器设备的本地和远程计算机存储介质中,并且客机节点可以反过来充当服务器节点。
图5B例示可以在其中实现本发明的合适的主机计算系统环境150的一个例子,尽管上面已经清楚地描述,该主机计算系统环境150仅仅是合适的计算机环境的一个例子,并且不旨在暗示对本发明的使用或功能性范围的任何限制。计算环境150也不应该被解释为具有涉及在示例性操作环境150中所例示的任何组件或它们的组合的任何依赖或要求。
参见图5B,适于实现本发明的示例性系统包含一个以计算机160形式的通用计算设备。计算机160的组件包括但不限于:处理单元162、系统存储器164、以及将包括系统存储器在内的各种系统组件耦合到处理单元162的系统总线166。系统总线166可以是若干总线体系结构类型中的任一种,该总线体系结构包括使用多种总线体系结构的任一种的存储器总线或存储器控制器、外围总线以及局部总线。作为例子而非限制,此类体系结构包括工业标准体系结构(ISA)总线、微通道体系结构(MCA)总线、增强型ISA(EISA)总线、视频电子标准协会(VESA)局部总线、外围组件互连(PCI)总线(也称为Mezzanine总线)以及PCI Express(PCIe)。
计算机160通常包含多种计算机可读介质。计算机可读介质可以是能由计算机160访问的任何可用介质,而且包含易失性和非易失性介质、可移动/不可移动介质。作为例子而非限制,计算机可读介质可以包含计算机存储介质和通信介质。计算机存储介质包括以用于诸如计算机可读指令、数据体系结构、程序模块或其他数据的信息的存储的任何方法或技术实现的易失性和非易失性、可移动和不可移动的介质。计算机存储介质包括但不限于RAM、ROM、EEPROM、闪速存储器或者其他存储器技术、CD ROM、数字通用盘(DVD)或其他光学存储器、磁带盒、磁带、磁盘存储器或其他磁存储设备、或任何其他能够用于存储所需信息并且能够由计算机160访问的介质。通信介质通常以诸如载波或者其他传输机制的已调制数据信号的形式包含计算机可读指令、数据体系结构、程序模块或其他数据,并包括任意信息传递介质。术语“已调制数据信号”是指以在该信号中编代码信息的方式来设置或改变其一个或多个特性的信号。作为例子而非限制,通信介质包括有线介质,如有线网络或直接有线连接,以及无线介质,如声音、射频、红外和其他无线介质。以上任何一个的组合也应当被包括在计算机可读介质的范围之内。
系统存储器164包括以易失性和/或非易失性存储器如只读存储器(ROM)168以及随机存取存储器(RAM)170形式的计算机存储介质。基本输入/输出系统172(BIOS)通常存储在ROM 168内,它包括比如在启动时帮助在计算机160内的元件间传输信息的基本例程。RAM 170通常包含可由处理单元162即时访问和/或目前在操作的数据和/或程序模块。作为例子而非限制,图5B例示了操作系统174、应用程序176、其他程序模块178以及程序数据180。
计算机160还包括其他可移动/不可移动、易失性/非易失性计算机存储介质。仅仅作为例子,图5B例示有从不可移动的非易失磁性介质读取或向其中写入的硬盘驱动器182、从可移动的非易失磁性磁盘186读取或向其中写入的磁盘驱动器184、以及向诸如CD-ROM或其他光学介质的可移动非易失光盘190读取或向其中写入的光盘驱动器188。其他能用于示例性操作环境的可移动/不可移动、易失性/非易失性计算机存储介质包括但不限于:盒式磁带、闪存卡、数字通用盘、数字录像带、固态RAM、固态ROM等等。硬盘驱动器182通常通过诸如接口192等不可移动存储器接口连接到系统总线166,而磁盘驱动器184通常通过诸如接口194等可移动存储器接口连接到系统总线166。
以上讨论并在图5B中示出的驱动器及其关联的计算机存储介质为计算机160提供了计算机可读指令、数据体系结构、程序模块和其他数据的存储器。例如,在图5B中,硬盘驱动器182被例示为存储操作系统196、应用程序198、其他程序模块200和程序数据202。注意,这些组件可以与操作系统174、应用程序176、其他程序模块178和程序数据180相同,也可以与它们不同。这里对操作系统196、应用程序198、其他程序模块200和程序数据202给予不同的标号来说明至少它们是不同的拷贝。用户可以通过输入设备向计算机160输入命令和信息,如键盘204和定点设备206(通常指鼠标、跟踪球或触摸板)。其他输入设备(未示出)可以包括话筒、操纵杆、游戏垫、圆盘式卫星天线、扫描仪等等。这些和其他输入设备通常通过耦合至系统总线的用户输入接口208连接至处理单元162,但是也可以通过其他接口和总线体系结构连接,如并行端口、游戏端口或通用串行总线(USB)。这些是被本发明体系结构虚拟化的结构的种类。图形接口210,例如由北桥(Northbridge)实现的接口之一,也可以被连接到系统总线166。北桥是与CPU或主处理单元162通信并负责诸如PCI、PCIe和加速图形端口(AGP)通信的各种通信的芯片组。一个或多个图形处理单元(GPU)212可以与图形界面210通信。在这方面,图形处理单元212通常包含像寄存器那样的芯片级存储器,而且图形处理单元212与视频存储器214通信。但是,图形处理单元212仅仅是协处理器的一个例子,因而多种协同处理设备可以被包含在计算机160之中,而且可以包含多种渲染(shader)程序,如像素和顶点渲染。监视器216或其他类型的显示设备也通过接口连接至系统总线166,如可以反过来与视频存储器通信的视频接口218。除监视器216之外,计算机也可包括其他外围输出设备,如扬声器220和打印机222,它们可通过输出外围接口224连接。
使用到一个或多个诸如远程计算机226的远程计算机的逻辑连接,计算机160可以工作在网络化或分布式环境内。尽管图5B中仅例示了存储器存储设备228,远程计算机226可以是个人计算机、服务器、路由器、网络PC、对等设备或其他公共网络节点,并且一般包括与计算机160相关的许多或所有上述元件。图5B所述的逻辑连接包括局域网(LAN)230以及广域网(WAN)232,但也可以包括其他网络/总线。这种网络环境常见于家庭、办公室、企业范围的计算机网络、企业内部互联网和因特网。
当用于LAN网络环境时,计算机160通过网络接口或适配器234连到局域网230。当用于WAN网络环境时,计算机160通常包括调制解调器236或用于在如因特网的广域网232上建立通信的其他装置。可以内置或者外置的调制解调器236可经由用户输入接口208或者其他适当的机制连接到系统总线166。在网络化环境中,与个人计算机160相关的所述程序模块或其中的一部分可存储在远程存储器设备内。作为例子而非限制,图5B例示远程应用程序23 8驻留在存储器设备228上。应该明白,所示网络连接是示例性的,并且可以使用在计算机之间建立通信链路的其他方式。
存在实现本发明的多种方式,例如,使应用程序和服务能够使用本发明的(一个或多个)虚拟化体系结构、系统和方法的适当的API、工具箱、驱动器代码、操作系统、控制、独立的或可下载的软件对象等等。本发明考虑从API(或其他软件对象)以及从接受前面提到过的依照本发明任何技术的软件或硬件对象的立场使用本发明。因此,在此被描述的本发明的各种实现可以具有完全以硬件、部分以硬件和部分以软件以及以软件实现的方面。
如上所述,尽管已经结合不同的计算设备和网络体系结构描述本发明的示例性实施例,基本概念可以适用于希望仿真客机软件的任何计算设备或系统。例如,本发明的各种算法和硬件实现可以被用于计算设备的操作系统,作为在设备上的单独对象、作为另一个对象的一部分、作为可重用的控制器、作为可从服务器下载的对象、作为设备或对象和网络之间的“中间人”、作为分布式对象、作为硬件、在存储器中、前述的任意组合等等被提供。本领域中的技术人员将会认识到,存在提供达成与由本发明的各种实施例达成的功能性相同、类似或等效的功能性的目标代码和命名法的无数种方式。
如上所述,在此描述的不同技术可以结合硬件或软件实现,或者如果合适,结合两者的组合实现。因此,本发明的方法和装置或其特定方面或部分,可以采取包含在具体介质如软盘、CD-ROM、硬盘或任何其他可用的机器可读存储介质中的程序代码的形式(即指令),其中当机器(如计算机)载入并执行程序代码时,该机器就变成用于实践本发明的装置。在在可编程计算机上执行程序代码的情况下,计算设备通常包括处理器、处理器可读存储介质(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备和至少一个输出设备。可以(例如)通过使用数据处理API、可重用控制等等实现或利用本发明的虚拟化技术的一个或多个程序,适宜用高级过程的或面向对象的编程语言实现,以与计算机系统通信。然而,如果需要的话,(一个或多个)程序可以用汇编或机器语言实现。无论如何,该语言可以是编译或解释语言,并与硬件实现结合。
也可以经由具体化为在传输介质上传输的程序代码的形式的通信介质来实践本发明的诸方法和装置,如在电线或电缆上、通过光纤或经由任意其他传输形式,其中,当程序代码被诸如EPROM、门阵列、可编程逻辑器件(PLD)、客户端计算机等等的机器接收并载入及执行时,该机器就变成实践本发明的装置。当在通用处理器上实现时,程序代码与处理器结合,以提供调用本发明的功能性的独特装置。另外,结合本发明所使用的任何的存储技术可以总是硬件和软件的组合。
尽管已经结合各种附图的优先实施例描述本发明,应该理解,可以使用其他类似实施例,并可以对所描述实施例进行修改和增加以执行本发明的同一函数而不会偏离于此。例如,尽管在像对等网络化环境那样的网络化环境上下文中描述本发明的示例性网络环境,本领域中的技术人员将会认识到,本发明不限于此,而且本申请书中所述诸方法可以适用于无论是有线还是无线的任何计算设备或环境,如游戏控制台、手持式计算机、便携式计算机等等,而且可以适用于经由通信网络连接并跨过网络交互的若干此类计算设备。此外,应该强调,考虑多种计算机平台,包括手持式设备操作系统和其他专用操作系统,尤其是当无线网络化设备的数目连续增长的时候。
尽管示例性的实施例涉及在主机操作系统上被虚拟化的客机OS的上下文中的利用本发明,但本发明不限于此,而是也可以被实现为虚拟化出于其他目的与主处理器协同操作的第二专用处理器单元。而且,本发明考虑这样的情况:相同版本OS的多个实例运行在根据本发明的分离的虚拟机中。可以认识到,本发明的虚拟化不依赖于客机OS所被用于的操作。也规定本发明适用于所有的计算机体系结构,而不只是Windows或Xbox体系结构。更进一步,本发明可以在多个处理芯片或设备内实现,或跨过多个处理芯片或设备实现,并且存储器同样可以跨过多个设备实现。因此,本发明不应当限于任何单个实施例,而应当根据依照所附权利要求书的广度和范围来解释。