带多重优化的函数级即时翻译引擎的制作方法

文档序号:6567428阅读:359来源:国知局
专利名称:带多重优化的函数级即时翻译引擎的制作方法
技术领域
本发明涉及用于通过将旧版本计算机系统(legacy computer system)所使用的代码转换成由主机计算机系统执行的代码而在主机硬件环境中虚拟化旧版本硬件环境的系统和方法,并且本发明尤其涉及在函数级而不是在指令级执
行代码翻译的即时(just-in-time)翻译引擎,并且该即时翻译引擎通过将旧版本代码指令的序列翻译成相应的主机代码指令序列来优化所得的代码。
背景技术
在更新像游戏控制台那样的计算机系统硬件体系结构以实现更快、具备更多功能的硬件时,开发者面临由为旧版本计算机系统平台开发的应用程序或游戏带来的对旧版本计算机系统的向后兼容性问题。尤其,商业上希望最新的硬件体系结构支持为旧版本硬件体系结构开发的应用程序或游戏。然而,如果最新的硬件体系结构实质上或根本上不同于旧版本硬件体系结构,两个系统之间的体系结构差异会使得旧版本应用程序或游戏没有真实硬件修改和/或软件补丁就在新硬件体系结构工作变得非常困难甚至不可能。由于用户通常期待这样的向后兼容性,这些问题的解决对最新的硬件体系结构的成功至关重要。
个人计算机体系结构和软件仿真的最近进展已经为计算机甚至游戏控制
台提供足够强大的硬件体系结构来允许以软件而不是硬件来仿真旧版本应用程序或游戏。这类软件仿真器将用于应用程序或游戏的标题指令(titleinstruction)即时地翻译成新硬件体系结构可以理解的设备指令。这一软件仿真方式对游戏控制台的向后兼容性特别有用,因为游戏控制台的开发者保持对硬件和软件平台的控制,而且对旧版本游戏相当熟悉。
大多数这类软件仿真器每次一个处理器指令地翻译代码。例如,软件仿真器可以把单个x86指令从源流提出来,即时地将其翻译成目标处理器(例如,PowerPC (PPC))指令集的一个或多个预定义等效(指令),在目标处理器上运行那些PPC指令,然后返回到源流处理下一个指令。这一方式在概念上很简单,但是它有缺点。例如,这一方式涉及在软件仿真器和实现使用X86指令
集写成的旧版本应用程序或游戏系统的虚拟机(VM)之间的许多慢速上下文来回切换。当翻译指令时,这一方式也从软件仿真器强占任何上下文,强迫仿真器依赖于简单的映射指令表。这是显著的性能缺点,因为如果软件仿真器能够考虑上下文的指令,那么软件仿真器将能够翻译代码块而非一个指令接着一个指令地翻译,由此显著地改进翻译性能。
因此,需要通过为待翻译的指令提供一种在上下文中考虑的机制来改进指令翻译性能的技术。本发明解决本领域中的这一需求。
发明概述
通过在源代码的函数级而不是在操作码级翻译代码,本发明解决本领域中的上述需求。本发明的软件仿真器从源流抓取完整的x86函数,将整个函数翻译成目标处理器的一个等效函数,并在返回到源流之前一次性地运行该函数。这一技术不但减少上下文切换,而且由于一次性见到完整的x86函数上下文,软件仿真器可以优化代码翻译。例如,软件仿真器可以决定将一个x86指令序
列翻译成一个高效的PPC等效序列。许多这样的优化产生更紧密的已仿真二进制,这是任何软件仿真器尤其期望的,特别是必须很快地运行代码的游戏仿真器。
本领域内的技术人员应该认识到,尽管本发明的一个示例性实施例在可从微软公司获得的Xbox计算机游戏系统中被实现,但在其中使用代码翻译的任何计算机游戏控制台或其他类型计算机系统均可受益于本发明的函数级代码翻译技术。基于以下详细描述,本领域中的技术人员将会明显看出本发明的其他特性。
附图简述
参照附图,进一步描述用于依照本发明提供具有多重优化的函数级即时代
码翻译的系统和方法,在附图中


图1A是一个表示用于计算机系统的仿真操作环境的硬件和软件体系结构的逻辑分层的框图1B是一个表示虚拟化计算系统的框图,其中仿真由主机操作系统执行(直接执行或经由管理程序执行);
7图ic是一个表示备选虚拟化计算系统的框图,在该计算系统中仿真由与 主机操作系统并列运行的虚拟机监视器执行;
图2示出了虚拟机中实现的旧版本游戏系统的虚拟存储器和主机游戏系统 的虚拟存储器之间的关系。
图3示出了使用本发明的技术把来自虚拟机中实现的旧版本游戏系统的 X 8 6代码转换成主机游戏系统的P P C代码的系统。
图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能允许多个"客机系统"在单个"主机 系统"上并发运行。这一级别的抽象由图IA的示例表示。
图1A表示用于计算机系统中所仿真的操作环境的硬件和软件体系结构的 逻辑分层。在该图中,仿真程序54在物理硬件体系结构52上直接地或间接地 运行。仿真程序54可以是(a)在主机操作系统旁边运行的虚拟机监视器,(b)
11具有本地仿真能力的专用主机操作系统,或(C)具有管理程序组件的主机操作
系统,其中该管理程序组件执行该仿真。仿真程序54仿真客机硬件体系结构 56 (示出为虚线以举例说明该组件是"虚拟机"的事实,也就是说,硬件并不 实际存在,而是由上述仿真程序的硬件54仿真)。客机操作系统58在客机硬 件体系结构56上执行,软件应用程序60在客机操作系统58上运行。在图1A 的仿真操作环境中一一而且因为仿真程序54的操作一一即使软件应用程序60 被设计成运行在通常与主机操作系统和硬件体系结构52不兼容的操作系统上, 该软件应用程序60也可以在计算机系统50中运行。
图1B示出了包括直接在物理计算机硬件62上运行的主机操作系统软件层 64的虚拟化计算系统,在这一系统中,主机操作系统(主机OS) 64通过暴露 与该主机OS正在仿真(或虚拟)的硬件相同的接口来提供对物理计算机硬件 62的资源的访问,而这又使得主机操作系统64能够运行而不被运行在其上的 操作系统层注意。同样为执行仿真,主机OS64可以是具有本地仿真能力的特 别设计的操作系统,或者可以可选地具有用于执行仿真的整合管理程序组件的 标准操作系统(未示出)。
如图1B所示出,在主机OS64上面是两个虚拟机(VM)实现,VMA66, 它例如可以是虚拟化的英特尔386处理器,以及VMB68,它例如可以是摩托 罗拉680 X0处理器系列的其中之一的虚拟化版本。上述的VM 66和68分别是 客机操作系统(客机OS) A70和B72。运行在客机OS70上的是两个应用程 序,应用程序Al 74和应用程序A2 76,运行在客机OS B 72上面是应用程序 Bl 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所示,VMM64'可以改为包含一个部分独立的软件系统,它在某些级别上经由主机操作系统64"间接地与计
算机硬件62交互,但在其他级别上VMM64,直接地与计算机硬件62交互(类 似于主机操作系统直接地与计算机硬件交互的方式)。而在另外一些实施例中, VMM64'可以包含完全独立的软件系统,它在所有级别上直接地与计算机硬件 62交互(类似于主机操作系统64"直接地与计算机硬件62交互的方式),而不 需要利用主机操作系统64"(尽管为协调计算机硬件62的使用并避免冲突的范 围内仍然与上述主机操作系统64"交互)。
预期用于实现虚拟机的所有这些改变来实现在此所述的本发明的各个备 选实施例,而且在此不应该被解释为将本发明限制在任何的特定仿真实施例。 另外,对分别经由VMA66禾口/或VMB68在应用程序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段。
13图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游戏系统的操作系统和VM 104之间进行通信,并在跟踪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的第一个任务是模拟启动旧版本x86 Xbox内核106和标题存储器110中的旧版本x86标题。如果本地主机Xbox游 戏系统的主机OS不执行显著的已仿真二进制的预翻译,调度器112首先就没 有被请求的x86函数的高速缓存PPC (或其他主处理器)等效函数。为了填充 这些间隙,调度器112调用JIT二进制翻译器102以进行即时函数翻译。
本领域中的技术人员将会认识到,例如,将x86代码翻译成PPC代码在某 些方面是棘手的。首先,x86 ISA包含不带有简单PPC ISA等效函数的若干复 杂函数。其次,本地主机Xbox游戏系统的PPC处理器可能被配置以大尾端 (Big-Endian)解释解释,然而旧版本Xbox标题则期望小尾端(Little-Endian) 解释。另外,旧版本Xboxx86代码的天真的翻译会导致本地主机Xbox系统硬 件上指令和高速缓存出错的放大。本发明的JIT二进制翻译器设法缓和"翻译 膨胀(bloat)",这将会在下面描述。
如图3所例示,本发明的JIT二进制翻译器被实现为五个阶段(102a、102b、 102c、 102d、 102e),每个阶段将会被依次描述。
步骤1: x86读取和解析。在步骤102a中,JIT 二进制翻译器102被调度 器112调用,并被交给引用虚拟机104的4GB地址空间80中的x86代码的扩
15展指令指针(EIP) 112b。在二进制翻译的这个第一阶段中,执行地址翻译以 在软件仿真器自己的4GB虚拟地址空间92中定位相应的存储器地址。然后, 软件仿真器将来自4GB地址空间80的x86函数操作码解析成对应于该x86代 码函数的结构。如果证明该函数是比在虚拟地址空间92中预先分配结构空间 更大,那么JIT二进制翻译器102将暂停执行。
步骤2: x86代码优化。 一旦JIT二进制翻译器102已经载入它的目标x86 函数,它在步骤102b中执行一些初始优化。标识已知用以产生PPC低效的x86 代码序列以供将来引用。例如,优化器做出不需要尾端字节倒置(endian byte reversal)的非易失性存储器/负载操作的注释。
步骤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游戏尝试访问 其预期的设备存储器卯时,主机Xbox操作系统在126处探测到无效的Xbox MMIO设备地址并中止该线程。存储器访问违规消息被发送管理程序128,而 该管理程序128又将VM状态信息传递给Xbox异常处理器118以解决该存储 器访问违规。
处理被管理程序128转发到Xbox异常处理器118的存储器违规和任何有 意的系统调用,以使用来自旧版本Xbox游戏的MMIO写入中所提供的MMIO 地址来确定预期目标设备。因为存储器访问违规常常指示虚拟设备请求,Xbox 异常处理器18可以简单地检查由管理程序128 (从VM状态记录器116)提供的虚拟机状态,并确定预期目标设备。然后将控制给予Xb0X异常处理器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 eaxj
} : epilog
B. 整数相乘
int multiply(int i, intj) : prologmov sax, i imul eax,j epilog
C. 对整数ij计算j+(i*j) int multiplyadd(inti, intj)
return add(multiply(i j), j);
prolog pushj push i
call multiply push eax pushj call add epilog
D. 带有条件跳转的例子
以下示例示出了在认为完成该函数之前要求分解的未完成条件转移:
int arithmetic (int i, int j, int operation) if (operation = ADD)
:prolog
:cmp operation,ADD :jnz NotAdd
return (i+j);
else if (operation SUBTRACT) return (i-j); : mov eax,i
else if (operation -MULTIPLY)
:mov cax,i :add eaxj :ret
:NotAdd:
:cmp operation,SUBTRACT :jnz NotSubtract
:sub eaxj :ret
:NotSubtract:
:cmp operation,MULTIPLY
19return (i*j);
else if (operation==DIVIDE) return (i/j);
:jnz NotMultiply :mov eax,i :imul eax,j ret
:NotMultiply:
:cmp operation,DIVIDE
:jnz NotDivide
:mov cax,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叫+ k。该 代码可以被写成
k=0
跳转至计算j值的例程 返回j的值i=j*l(
在这一简单例子中,因为ki,无论所计算的j值是什么,乘积将会是零。
因此,这一代码可以优化为i=0。本领域中的技术人员将会认识到,在其中每 个指令被分开翻译的传统系统中,因为还不知道该指令的上下文,所以必须解 决该跳转例程的问题。
一旦已经标识函数且已经优化代码,在步骤138,在输入机器代码中构成 函数的处理器指令被转换成目标处理器的机器代码(例如,从x86到PowerPC)。 然后,在步骤140,所产生的机器代码被优化,例如,通过尽可能减少指令计 数、循环计数和可能的高速缓存出错率。在步骤142,作为结果的目标处理器 的已优化机器代码优化被存储在已翻译代码高速缓存114中以供执行。最后, 在步骤144, 一个条目被放置在调度器散列表之内,其中该调度器散列表标识 已优化代码块,以避免下次在输入代码流中遇到相同函数块时重新编译该相同 函数块。
因此,本发明就提供了一种机制,藉此JIT二进制翻译器可以基于所接收 到的上下文更高效地将为第一处理器写成的指令翻译第二处理器的指令。尤 其,对代码的函数块执行二进制翻译,以便加速二进制翻译操作。当与运行在 虚拟机环境中的程序和游戏一起使用时,依照本发明的这种JIT二进制翻译器 特别有利,其中在虚拟机环境中快速翻译对平滑操作非常重要。本领域中的技 术人员将会认识到,这类技术可以被扩展到所有类型的应用程序而不只是游戏
系统。而且,本发明的技术可以被用来提供实现软件仿真技术的其他计算机系 统的二进制翻译。
示例件网络化和分布式环境
尽管可以结合Xbox游戏系统体系结构实现本发明的一个示例性实施例, 但是本领域中的技术人员能认识到,可以结合能被部署为计算机网络的一部分 或者被部署在分布式计算环境中的任何合适的主机计算机或其他客户端或服 务器设备来实现本发明。在这方面,本发明涉及具有任意数量的存储器或存储 单元以及在任意数量的存储单元或巻上发生的任意数量的应用程序和进程的 任何计算机系统或环境,其中该计算机系统或环境可以结合依照本发明虚拟化
客机OS来使用。本发明可以适用于具有在网络化环境或分布式计算环境中部 署的服务器计算机和客户端计算机的、拥有远程或本地存储器的环境。本发明 也可以应用于独立的计算设备,其中该独立计算设备拥有用于结合远程或本地
21服务产生、接收和传输信息的编程语言功能性、解释和执行能力。
分布式计算通过在计算设备和系统之间进行交换来提供计算机资源和服
务的共享。这些资源和服务包括信息的交换、文件的高速缓存和磁盘存储器。 分布式计算利用网络连接性,允许客户端利用他们的集体性能使整个企业受 益。在这方面,多种设备可以拥有涉及本发明的进程的应用程序、对象或资源。 图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)或有线(例如,家庭电话网络接口卡(Home PNA) 、 Cat5、以太网、甚至电力线)连接在家庭中访问。语音话务也可以进 入家庭,例如有线(例如,Cat3)或无线(例如,蜂窝式移动电话),而且可以在使用Cat 3连线在家庭中分布。娱乐介质或其他图形数据可以通过卫星或 缆线进入家庭,并且通常使用同轴线在在家庭中分布。IEEE 1394和DVI也是 用于介质设备集群的数字互连。所有这些网络环境和可以作为协议标准出现的 其他网络环境可以被互相连接以形成一个像企业内部互联网那样的网络,该网 络通过因特网连接到外部世界。简而言之,存在用于数据存储和传输的多种不 同的源,因此,进一步,计算设备将会需要共享数据的方式,如与利用依照本 发明的虚拟化服务的程序对象关联的、被访问或被利用的数据。
因特网通常是指利用在计算机连网领域中众所周知的TCP/IP协议组的网 络和网关的集合。TCP/IP是"传输控制协议/因特网协议"的縮写。因特网可 以被描述为由诸计算机互连的地理上分布的远程计算机网络系统,其中诸计算 机执行允许用户在(一个或多个)网络上交互并共享信息的连网协议。因为这 样的广泛信息共享,像因特网那样的远程网络因此已经普遍地发展成开放的系 统,开发者能本质上不受限制地为这一开放系统设计执行专门操作或服务的软 件应用程序。
因此,网络基础设施允许大量的网络拓扑,如客户端/服务器、对等或混合 体系结构。"客户端"是使用与其不相关的另一类或群的服务的类或群的一个 成员。因此,在计算中,客户端是程序, 一般地说也就是请求由另一程序提供 的服务的一系列指令或任务。客户端程序利用所请求的服务而无须"知道"关 于另一程序或服务本身的任何工作细节。在客机机/服务器体系结构中,尤其是 在网络化系统中,客户端通常是一台访问由另一计算机(例如,服务器)提供 的共享网络资源的计算机。在图5A的例子中,计算机"6a、 "6b等等可以被 认为是客户端,计算机145a、 145b等等可以被认为是服务器,其中服务器145a、 145b等等维护数据,该数据然后在客户端计算机146a、 146b等等中被复制, 尽管取决于环境任何计算机都可以被认为是客户端、服务器或两者。这些计算 设备中的任何一个都可以处理数据或请求服务或任务,其中这些服务或任务可 以包含本发明的虚拟化进程的实现。
服务器通常是可以在像因特网那样的远程或本地网络上访问的计算机系 统。客户端进程可以活动在第一计算机系统中,服务器程序可以在第二计算机 系统中,两者在通信介质上相互通信,因而提供分布式功能性并允许多个客户 端利用服务器的信息收集能力。被用来使用本发明的(一个或多个)虚拟化体 系结构的任何软件对象可以分布在多个计算设备或对象中。
23利用由(一个或多个)协议层提供的功能性,(一个或多个)客户端和(一 个或多个)服务器相互通信。例如,超文件传输协议(HTTP)是结合万维网
(WWW)即"Web"使用的公共协议。通常,像因特网协议(IP)地址那样 的计算机网络地址或像统一资源定位器(URL)那样的其他引用可以被用来将 服务器或客户端计算机与其他计算机标识开来。网络地址可以被称为URL地 址。可以在通信介质上提供通信,例如,(一个或多个)客户端和(一个或多 个)服务器可以经由(一个或多个)TCP/IP连接相互耦合,以便进行高容量通 信。
图5A例示其中可以使用本发明的示例性网络化或分布式环境,具有经由 网络/总线与诸客户端计算机进行通信的服务器。更详细地,若干服务器145a、 l45b等等经由通信网络/总线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、 l46e等等可以或不可以经由通信网络/总线147通信,并可以拥有与其关联的 独立通信。例如,对电视或录像机来说,可以有或没有对于其控制的网络化方 面。每一客户端计算机146a、 146b、 146c、 146d、 146e等等和服务器计算机 145a、 145b等等可以装备各种应用程序模块或对象148,并具有到各种类型的 存储元件或对象连接或访问,文件或数据流可以被存储到这些存储元件或对 象,或者文件或数据流的(一个或多个)部分可以被下载、传输或迁移到这些 存储元件或对象。诸计算机145a、 145b、 146a、 146b等等中的任何一个可以负 责维护并更新数据库M9或其他存储元件,如用于存储根据本发明处理的数据 的数据库或存储器149。因此,本发明能被用于计算机网络环境中,其中该计算机网络环境拥有可以访问网络/总线147并与之互动的客户端计算机146a、 146b等等、可用于客户端计算机146a、 146b等等和其他类似设备交互的服务 器计算机145a、 145b等等、数据库149。 示例性计算设备
图5B和下列讨论旨在提供可以与之结合实现本发明的主机计算环境的简 要一般描述合适。然而应该理解,所有类型的手持式、便携式和其他计算设备、 便携式和固定游戏设备和计算对象被考虑结合本本发明使用。尽管在下面描述 通用计算机,但这不过只是一个例子,而且本发明可以与具有网络/总线互操作 性和交互的瘦客户端一起实现。因此,可以在其中包括很少或最少的客户端资 源的、网络化的、被寄宿服务的环境中实现本发明,例如,其中客户端设备只 充当网络/总线的接口 (如置于电器中的一个对象)的网络化环境。实质上,数 据可以被存储的任何地方或数据可以被检索或者传输到另一计算机的地方,是 所希望的或合适的、用于依照本发明的虚拟化技术的操作的环境。
尽管未作要求,但是本发明可以整体或部分地经由一个操作系统被实现, 以供设备或对象的诸服务的开发者使用,和/或被包含在结合本发明的虚拟化 OS —起操作的应用软件里面。软件可以在像程序模块那样的计算机可运行指 令一般上下文中描述,由一个或多个计算机如客户端工作站、服务器或其他设 备运行。 一般地,程序模块包括完成特定的任务或实现特定的抽象数据类型的 例程、程序、对象、组件、数据结构等等。通常,程序模块的功能性可以根据 各种实施例中的需要进行组合或分布。而且,本领域中的技术人员将会认识到, 本发明可以与其他计算机系统配置和协议一起实践。可以适于实现本发明的众 所周知的计算系统、环境、和/或配置包含但不限于个人计算机(PC)、自 动柜员机、服务器计算机、手持式或膝上型设备、多处理器系统、基于微处理 器的系统、可编程的消费性电子产品、网络PC、电器、灯、环境控制元件、微 型计算机、大型计算机等等。如上所述,本发明还可以在分布式计算环境中实 践,在分布式计算环境中任务由通过通信网络/总线或是其他数据传输介质连接 的远程处理设备执行。在分布式计算环境中,程序模块可以位于包括存储器设 备的本地和远程计算机存储介质中,并且客机节点可以反过来充当服务器节 点。
图5B例示可以在其中实现本发明的合适的主机计算系统环境150的一个 例子,尽管上面已经清楚地描述,该主机计算系统环境150仅仅是合适的计算
25机环境的一个例子,并且不旨在暗示对本发明的使用或功能性范围的任何限 制。计算环境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、闪速存储器或者其他存储器技术、CDROM、数字通用盘(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例示远程应用程序 238驻留在存储器设备228上。应该明白,所示网络连接是示例性的,并且可 以使用在计算机之间建立通信链路的其他方式。
存在实现本发明的多种方式,例如,使应用程序和服务能够使用本发明的 (一个或多个)虚拟化体系结构、系统和方法的适当的API、工具箱、驱动器 代码、操作系统、控制、独立的或可下载的软件对象等等。本发明考虑从API (或其他软件对象)以及从接受前面提到过的依照本发明任何技术的软件或硬 件对象的立场使用本发明。因此,在此被描述的本发明的各种实现可以具有完 全以硬件、部分以硬件和部分以软件以及以软件实现的方面。
如上所述,尽管已经结合不同的计算设备和网络体系结构描述本发明的示 例性实施例,基本概念可以适用于希望仿真客机软件的任何计算设备或系统。 例如,本发明的各种算法和硬件实现可以被用于计算设备的操作系统,作为在 设备上的单独对象、作为另一个对象的一部分、作为可重用的控制器、作为可 从服务器下载的对象、作为设备或对象和网络之间的"中间人"、作为分布式 对象、作为硬件、在存储器中、前述的任意组合等等被提供。本领域中的技术 人员将会认识到,存在提供达成与由本发明的各种实施例达成的功能性相同、类似或等效的功能性的目标代码和命名法的无数种方式。
如上所述,在此描述的不同技术可以结合硬件或软件实现,或者如果合适, 结合两者的组合实现。因此,本发明的方法和装置或其特定方面或部分,可以
采取包含在具体介质如软盘、CD-ROM、硬盘或任何其他可用的机器可读存储
介质中的程序代码的形式(即指令),其中当机器(如计算机)载入并执行程 序代码时,该机器就变成用于实践本发明的装置。在在可编程计算机上执行程 序代码的情况下,计算设备通常包括处理器、处理器可读存储介质(包括易失 性和非易失性存储器和/或存储元件)、至少一个输入设备和至少一个输出设备。
可以(例如)通过使用数据处理API、可重用控制等等实现或利用本发明的虚
拟化技术的一个或多个程序,适宜用高级过程的或面向对象的编程语言实现, 以与计算机系统通信。然而,如果需要的话,(一个或多个)程序可以用汇编
或机器语言实现。无论如何,该语言可以是编译或解释语言,并与硬件实现结合。
也可以经由具体化为在传输介质上传输的程序代码的形式的通信介质来 实践本发明的诸方法和装置,如在电线或电缆上、通过光纤或经由任意其他传 输形式,其中,当程序代码被诸如EPROM、门阵列、可编程逻辑器件(PLD)、 客户端计算机等等的机器接收并载入及执行时,该机器就变成实践本发明的装 置。当在通用处理器上实现时,程序代码与处理器结合,以提供调用本发明的 功能性的独特装置。另外,结合本发明所使用的任何的存储技术可以总是硬件 和软件的组合。
尽管已经结合各种附图的优先实施例描述本发明,应该理解,可以使用其 他类似实施例,并可以对所描述实施例进行修改和增加以执行本发明的同一函
数而不会偏离于此。例如,尽管在像对等网络化环境那样的网络化环境上下文 中描述本发明的示例性网络环境,本领域中的技术人员将会认识到,本发明不 限于此,而且本申请书中所述诸方法可以适用于无论是有线还是无线的任何计 算设备或环境,如游戏控制台、手持式计算机、便携式计算机等等,而且可以 适用于经由通信网络连接并跨过网络交互的若干此类计算设备。此外,应该强 调,考虑多种计算机平台,包括手持式设备操作系统和其他专用操作系统,尤 其是当无线网络化设备的数目连续增长的时候。
尽管示例性的实施例涉及在主机操作系统上被虚拟化的客机OS的上下文 中的利用本发明,但本发明不限于此,而是也可以被实现为虚拟化出于其他目
29的与主处理器协同操作的第二专用处理器单元。而且,本发明考虑这样的情况 相同版本OS的多个实例运行在根据本发明的分离的虚拟机中。可以认识到, 本发明的虚拟化不依赖于客机OS所被用于的操作。也规定本发明适用于所有
的计算机体系结构,而不只是Windows或Xbox体系结构。更进一步,本发明
可以在多个处理芯片或设备内实现,或跨过多个处理芯片或设备实现,并且存 储器同样可以跨过多个设备实现。因此,本发明不应当限于任何单个实施例,
而应当根据依照所附权利要求书的广度和范围来解释。
权利要求
1.一种将第一CPU类型的计算机可执行代码翻译成第二CPU类型的计算机可执行代码的方法,包括解析所述第一CPU类型的所述计算机可执行代码的流以便在所述第一CPU类型的所述计算机可执行代码的所述流中标识与所述第一CPU类型的所述计算机可执行代码中一函数相对应的CPU代码指令的序列;以及从在与所述函数相对应的所述流内的所述CPU代码指令的序列中产生所述第二CPU类型的所述可执行代码的序列。
2. 如权利要求l所述的方法,其特征在于,所述第一处理器类型是x86, 而所述第二处理器类型是PowerPC。
3. 如权利要求1所述的方法,其特征在于,所述解析步骤包括指令编译 器创建所述第一 CPU类型的指令列表的步骤,其中所述第一 CPU类型的指令 列表在所述第一 CPU类型的所述计算机可执行代码的所述流内的函数起始处 开始,并且在达到函数指令的末尾且在所述第一 CPU类型的指令列表里没有未 完成的条件转移时,在所述第一CPU类型的计算机可执行代码的流中的一点处 结束所述第一 CPU类型的指令列表。
4. 如权利要求3所述的方法,还包括在所述产生步骤之前分析所述指令 列表以找出优化并实现所述优化的步骤。
5. 如权利要求4所述的方法,还包括分析所述第二CPU类型的可执行代 码的所述已产生序列以找出优化并实现所述优化的步骤。
6. 如权利要求3所述的方法,还包括编译和存储所述第二 CPU类型的所述可执行代码的所述序列并相关一存储器地址的步骤,其中在所述存储器地址 处,所述已编译序列和所述第一CPU类型的所述函数的所述起始的存储器地址一起被存储。
7. —种把第一 CPU类型的计算机可执行代码翻译成第二 CPU类型的计算机可执行代码的二进制翻译系统,包括解析器,解析所述第一 CPU类型的计算机可执行代码的流以便在所述第一 CPU类型的计算机可执行代码的所述流里标识与所述第一 CPU类型的计算机可执行代码中的一函数相对应的CPU代码指令的序列;以及代码生成器,从与所述函数相应的所述流内的CPU代码指令的序列中产 生所述第二 CPU类型的可执行代码的序列。
8. 如权利要求7所述的二进制翻译系统,其特征在于,所述第一CPU类 型是x86,而所述第二处理器类型是PowerPC。
9. 如权利要求7所述的二进制翻译系统,其特征在于,所述解析器创建 所述第一 CPU类型的指令列表,其中所述第一 CPU类型的指令列表在所述第 一 CPU类型的计算机可执行代码的所述流内的函数起始处开始,并且在达到函 数指令的末尾且在所述第一CPU类型的指令列表里没有未完成的条件转移时, 在所述第一 CPU类型的计算机可执行代码的流中的一点处结束所述第一 CPU 类型的指令列表。
10. 如权利要求9所述的二进制翻译系统,其特征在于,还包括一优化器, 所述优化器在将所述指令列表提供给所述编码生成器之前分析所述指令列表 以找出优化并实现所述优化。
11. 如权利要求10所述的二进制翻译系统,其特征在于,还包括第二优 化器,所述第二优化器分析所述第二 CPU类型的可执行代码的所述已产生序列 以找出优化并实现所述优化。
12. 如权利要求9所述的二进制翻译系统,其特征在于,还包括编译器, 所述编译器编译并存储所述第二CPU类型的可执行代码的所述序列。
13. 如权利要求12所述的二进制翻译系统,其特征在于,还包括用于存储所述编译序列被存储的存储器地址以及所述第一 CPU类型的所述函数的所 述起始的存储器地址的表,所述表和所述存储器地址彼此相关。
14. 一个在被插入主机计算机系统内时创建一个二进制翻译系统的计算机可读介质,其中所述二进制翻译系统将第一 CPU类型的计算机可执行代码翻译成第二 CPU类型的计算机可执行代码,所述计算机可读介质包括解析器软件,解析所述第一 CPU类型的所述计算机可执行代码的流以便 在所述第一 CPU类型的所述计算机可执行代码的所述流内标识与在所述第一CPU类型的所述计算机可执行代码中的一函数相对应的CPU代码指令的序列;以及代码生成器软件,从与所述函数相应的所述流内的所述CPU代码指令的 序列中产生所述第二CPU类型的所述可执行代码的序列。
15. 如权利要求14所述的计算机可读介质,其特征在于,所述第一处理 器类型是x86,而所述第二处理器类型是PowerPC。
16. 如权利要求14所述的计算机可读介质,其特征在于,所述解析器软 件创建所述第一 CPU类型的指令列表,其中所述第一 CPU类型的指令列表在 所述第一CPU类型的所述计算机可执行代码的所述流内的函数起始处开始,并 且在达到函数指令的末尾且在所述第一 CPU类型的指令列表里没有未完成的 条件转移时,在所述第一 CPU类型的计算机可执行代码的流中的一点处结束所 述第一CPU类型的指令列表。
17. 如权利要求16所述的计算机可读介质,其特征在于,还包括一优化 器软件,所述优化器软件在将所述指令列表提供给所述编码生成器软件之前分 析所述指令列表以找出优化并实现所述优化。
18. 如权利要求17所述的计算机可读介质,其特征在于,还包括第二优 化器软件,所述第二优化器软件分析所述第二 CPU类型的可执行代码的所述已 产生序列以找出优化并实现所述优化。
19. 如权利要求16所述的计算机可读介质,其特征在于,还包括编译并 存储所述第二 CPU类型的所述代码指令的所述序列的编译器。
20. 如权利要求19所述的计算机可读介质,其特征在于,还包括用于存 储所述编译序列被存储的存储器地址以及所述第二 CPU类型的所述函数的所 述起始的存储器地址的表,所述表和所述存储器地址彼此相关。
全文摘要
一个JIT二进制翻译器在源代码的函数级而不是在操作码级翻译代码。本发明的JIT二进制翻译器从源流而不是从指令抓取一个完整的x86函数,将整个函数翻译成目标处理器的一个等效函数,并在返回到源流之前一次性运行该函数,由此减少上下文切换。同时,因为JIT二进制翻译器一次见到完整的源代码函数上下文,所以软件仿真器可以优化代码翻译。例如,JIT二进制翻译器可以决定将一个x86指令序列翻译成一个高效的PPC等效序列。许多这样的优化产生更紧密的已仿真二进制。
文档编号G06F9/45GK101517536SQ200680016250
公开日2009年8月26日 申请日期2006年4月28日 优先权日2005年5月12日
发明者V·谭 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1