异步运行时编译的制作方法

文档序号:6569603阅读:150来源:国知局
专利名称:异步运行时编译的制作方法
异步运行时编译
版权告示和许可
本专利文献的公开内容的一部分可能包含受版权保护的材料。版权所有者不 反对任何人对在(美国)专利商标局文件或记录中所出现的本专利文献或专利公
开的复制,但无论如何都保留所有版权。以下告示应用于本文C叩yrightO)2005, Microsoft Corp。
背景
在典型的仿真器/运行时(just-in-time, JIT)编译器中,代码执行和同步代 码翻译线程一般位于同一个处理器或处理器核上。当用户导航该程序时,该代码 执行线程将试图在已翻译的代码高速缓存中找到所请求的功能。当这些功能存在 时,该线程将全速执行它们并且用户会感到极少或没有延迟。然而,如果这些功 能不存在,则代码执行线程将对同步代码翻译线程作出一阻塞请求并且等待直到 该线程报告该功能已经被翻译。这些情况下,在已发生来代表仿真/JIT编译的程 序执行中,用户会感到短暂的"抖动"。在用户需要平滑且逼真的操作以及诸如 计算机游戏玩家所期望的那些视觉效果的程序中,这是非常有问题的。
基于这点考虑,需要一种提供程序模块的平滑且即时执行的仿真器/JIT编译器。
概述
提供本概述一般用简化的形式介绍以下将在详细描述中进一步描述的一些 概念。本概述并不旨在确定所要求保护的主题的关键特征或必要特征,也不旨在 用于帮助确定所要求保护的主题的范围。
考虑到本领域中的上述不足,提供了异步JIT编译。对于几个实施例,该异 步JIT编译部分地通过检测计算机程序的将来执行可能所需的至少一个计算机程 序代码模块,并且随后对检测到的程序代码模块进行翻译以便执行,同时执行该计算机程序的至少一个其它先前已翻译的程序代码模块来实现。例如,这可以通 过由同步代码翻译线程调用异步代码翻译线程以便在计算机程序的用户执行之 前运行并且预翻译用于所述预翻译的检测到的程序代码来完成。异步线程可以自 由地继续翻译,然后在代码高速缓存内存储预期将来用户可能需要的已发现的第 二个功能。这种协作增加了用户请求的下一个功能已经被翻译的可能性。在理想 的环境中,这种方法允许整个程序在用户行使其更复杂的特征之前被良好地转 换,从而减少感知到的"抖动"并提高平均性能。 本发明其它的优点和特征将在以下描述。
附图简述
参考附图将进一步描述阻塞本地感测阻挡物,其中


图1是示出根据使用一个处理器的同步运行时(JIT)编译的进程的示例性实 现的时间图2是示出根据使用两个处理器的异步运行时(JIT)编译的进程的示例性实 现的时间图3是示出根据异步运行时(JIT)编译的进程的示例性实现的流程图4示出了适用于实现图1到图3的运行时编译进程的示例性计算设备的框
图5示出了其中可实现许多计算机化进程以执行图1到图3的运行时编译进 程的示例性联网计算环境;
详细描述
在以下的描述和附图中阐明了某些具体细节以便提供对本发明的各实施例 的全面理解。经常与计算和软件技术相关联的某些众所周知的细节未在以下公开 内容中阐明以免不必要地混淆本发明的各实施例。此外,相关领域的普通技术人 员会明白,没有以下所述的一个或多个细节也可以实施本发明的其它实施例。最 后,尽管参考以下公开内容中的步骤和序列来描述各方法,但是这样的描述用于 提供本发明实施例的清除实现,而不应该将各步骤和步骤序列认为是实施本发明 所必需的。
参考图1和图2,所示的是示出根据使用一个处理器的同步运行时(JIT)编
6译(图1)和使用两个处理器的异步运行时编译(图2)的进程的示例性实现。 如图所示,利用使用两个处理器的异步运行时编译的系统的组件的示例包括以 下
1. 响应于用户输入并代表用户执行已翻译代码的代码执行线程101。
2. 可由代码执行线程101在代码翻译线程101需要首次103翻译一功能 时调用的同步代码翻译线程102。在退化的情况下,代码执行线程101和同步线 程102运行于同一个处理器或处理器核104上。
3. 可由同步线程102调用或者可自调用以便在用户执行之前运行并且预 翻译代码117的异步代码翻译线程105。
4. 具有竞争管理结构的已翻译代码高速缓存(未示出),其中同步102 线程和异步105线程存放了已翻译代码以便传送到代码执行线程101,且引入了 运行于另一处理器或处理器核106上的第二、异步代码翻译线程105。
接着另外参考图3,所示的是示出根据异步运行时(JIT)编译的进程的示例 性实现的流程图。当用户导航该程序时,判断用户动作是否需要还未准备好执行 (即,还未被翻译或编译)的功能107。如果用户动作需要己经准备好执行的功 能,则该功能正常执行108。如果用户动作需要还未准备好执行的功能,则代码 执行线程101将试图在已翻译代码高速缓存内找到所请求的功能。当那些功能存 在110时,线程将全速执行它们并且用户将感到极少或没有延迟。然而,如果那 些功能不存在,则代码执行线程对同步代码翻译线程102作出阻塞请求111,并 且等待直到线程报告该功能己经被翻译112。在这些情况下,在已发生来代表仿 真/JIT编译的程序执行中,用户会感到短暂的"抖动"。
这一确定通过引入运行于另一个处理器或处理器核106上的第二、异步代码 翻译线程105来解决。当同步翻译线程102处理功能时,其检测113代码中对目 前还不是用户所需的其它功能的调用的存在。在标识到这一调用之后,同步翻译 线程102将该功能的入口点传递114给异步翻译线程105。为了解除代码执行线 程101的阻塞,同步线程102尽可能快地返回112,并且继续执行先前存储在代 码高速缓存内的已翻译功能。然而,异步线程105自由地继续翻译115,并且随 后在代码高速缓存116内存储预期用户将来可能需要所发现的第二个功能。这种 协作增加了用户所请求的下一个功能己经被翻译的可能性。在理想的环境中,这 种方法允许整个程序在用户行使其更复杂的特征之前就被良好地翻译,从而减少感知的"抖动"并提高平均性能。
该进程通过运行于异步线程105上的、能主动地发现和处理程序二进制代码 中未翻译的代码的逻辑来进一步优化。在实践中,并非所有的功能都可通过以下
分支树来发现;特别地,无法通过这种方式找到"虚拟"功能。例如, 一个实现 包括解析二进制代码本身并标识看来像是代码功能的文件分段的逻辑。当找到这 种分段时,它们立刻被放入异步翻译线程105的翻译队列中。作为该方法的能力 的真实世界演示,诸如Halo 2⑧等超过90%的复杂游戏可以在游戏开始的一分钟 内被定位和编译。
接着参考图4,所示是表示适用于实现以上所述的进程的示例性计算设备的 框图。例如,执行用于异步JIT编译的进程和方法的计算机可执行指令可以驻留 在如图4所示的计算环境中和/或在其中执行。计算系统环境220只是合适的计算 环境的一个示例,且并不旨在对本发明的使用范围和功能提出任何限制。计算环 境220也不应该被解释为对示例性操作环境220内示出的任意一个组件或组件组 合具有任何依赖性或要求。例如,计算机游戏控制台也可以包括诸如以下所述用
于实现以上所述的进程的那些项目。
本发明的各方面可用众多其它通用或专用计算系统环境或配置来操作。适用 于本发明的众所周知的计算系统、环境和/或配置的示例包括,但不限于,个人计 算机、服务器计算机、手持式或膝上型设备、多处理器系统、基于微处理器的系 统、机顶盒、可编程消费电子产品、网络PC、微型计算机、大型计算机以及包 括以上系统或设备中的任一个的分布式计算环境等。
本发明的各方面可以在诸如程序模块等由计算机执行的计算机可执行指令 的一般上下文中实现。程序模块一般包括执行特定任务或实现特定抽象数据类型 的例程、程序、对象、组件和数据结构等。本发明的各方面也可以在分布式计算 环境中实施,其中任务由通过通信网络链接的远程处理设备来执行。在分布式计 算环境中,程序模块可以位于包括存储器存储设备的本地和远程计算机存储介质 内。
用于实现本发明各方面的一个示例性系统包括计算机241形式的通用计算 设备。计算机241的组件可以包括,但不限于,处理单元259、系统存储器222、 以及将包括系统存储器的系统组件耦合到处理单元259的系统总线221。系统总 线221可以若干种总线结构中的任一种,包括存储器总线或存储器控制器、外围总线、以及使用各种总线体系结构中的任意一种的的局部总线。作为示例而非局
限,这样的体系结构包括工业标准结构(ISA)总线、微通道体系结构(MCA)总线、 增强型ISA (EISA)总线、视频电子技术标准协会(VESA)局部总线以及外围部件 互连(PCI)总线(也称为小背板(Mezzanine)总线)。
计算机241通常包括各种计算机可读介质。计算机可读介质可以是可由计算 机241访问的任何可用介质,并且包括易失性和非易失性介质、可移动和不可移 动介质。计算机存储介质包括以用于诸如计算机可读指令、数据结构、程序模块 或其它数据等信息的存储的所有方法或技术实现的易失性和非易失性、可移动和 不可移动介质。计算机存储介质包括,但不限于,RAM、 ROM、 EEPROM、闪 存或其它存储器技术、CD-ROM、数字多功能盘(DVD)或其它光盘存储、磁带 盒、磁带、磁盘存储或其它磁性存储设备、或者可用于存储所需数据并可由计算 机241访问的任何其它介质。通信介质一般以诸如载波或其它传输机制等已调制 数据信号来体现计算机可读指令、数据结构、程序模块或其它数据,并且包括任 何信息传输介质。术语"己调制数据信号"指的是以在该信号中编码信息的方式 设置或更改其一个或多个特性的信号。作为示例,而非局限,通信介质包括诸如 有线网络或直接线连接等有线介质,以及诸如声学、RF、红外线和其它无线介质 等无线介质。上述介质中的任一个的组合也应该被包括在计算机可读介质的范围 内。
系统存储器222包括诸如只读存储器(ROM)223和随机存储存储器 (RAM)260等易失性或/和非易失性形式的计算机存储介质。基本输入/输出系统 224 (BIOS) —般存储于ROM223中,其包含用于比如在启动期间帮助在计算机 241内的元件之间传输信息的基本例程。RAM 260 —般包含处理单元259立即可 访问和/或当前正在操作的数据和/或程序模块。作为示例而非局限,图4示出了 操作系统225、应用程序226、其它程序模块227和程序数据228。
计算机241还可以包括其它可移动/不可移动、易失性/非易失性计算机存储 介质。仅作为示例,图4示出了从不可移动、非易失性磁介质中读取或向其写入 的硬盘驱动器238,从可移动、非易失性磁盘254中读取或向其写入的磁盘驱动 器239,以及从诸如CDROM或其它光学介质等可移动、非易失性光盘253中读 取或向其写入的光盘驱动器240。可以在示例性操作环境中使用的其它可移动/不 可移动、易失性/非易失性计算机存储介质包括磁带盒、闪存卡、数字多功能盘、数字录像带、固态RAM、固态ROM等。硬盘驱动器238 —般通过诸如接口234 等不可移动存储器接口连接到系统总线221 ,而磁盘驱动器239和光盘驱动器240 一般通过诸如接口 235等可移动存储器接口连接到系统总线221。
以上所述并且在图4中示出的驱动器及其相关联的计算机存储介质为计算 机241提供了计算机可读指令、数据结构、程序模块和其它数据的存储。在图4 中,例如,硬盘驱动器238被示为存储操作系统258、应用程序257、其它程序 模块256和程序数据255。注意,这些组件既可以与操作系统225、应用程序226、 其它程序模块227和程序数据228相同,也可以不同。此处对操作系统258、应 用程序257、其它程序模块256和程序数据255赋予不同标号以示出至少它们是 不同的副本。用户可以通过诸如键盘251和一般称作鼠标、轨道球和触摸板的定 点设备等输入设备将命令和信息输入到计算机241中。其它输入设备(未示出) 可包括话筒、操纵杆、游戏手柄、圆盘式卫星天线和扫描仪等。这些和其它输入 设备经常通过耦合到系统总线的用户输入接口 236连接到处理单元259,但也可 以通过诸如并行端口、游戏端口或通用串行总线(USB)等其它接口和总线结构 来连接。监视器242或其它类型的显示设备也可以通过诸如视频接口 232等接口 连接到系统总线221。除监视器外,计算机还可以包括其它外围输出设备,诸如 扬声器224和打印机243,它们可通过输出外围接口 223连接。
计算机241可以使用到一个或多个远程计算机,如远程计算机246的逻辑连 接在联网环境中操作。远程计算机246可以是个人计算机、服务器、路由器、网 络PC、对等设备或其它常见的网络节点,并且一般包括以上相对于计算机241 所描述的许多或全部元件,尽管在图4中仅示出了存储器存储设备247。图4中 所示的逻辑连接包括局域网(LAN)245和广域网(WAN)249,但也可包括其它网 络。这样的联网环境在办公室、企业范围计算机网络、内联网和因特网中是很常 见的。
当在LAN联网环境中使用时,计算机241通过网络接口或适配器237连接 到LAN 245。当在WAN联网环境中使用时,计算机241 —般包括调制解调器250 或用于通过诸如因特网等WAN 249建立通信的其它装置。可以是内置或外置的 调制解调器250通过用户输入接口 236或其它合适的机制连接到系统总线221。 在联网环境中,相对于计算机241所描述的程序模块或其部分可以存储在远程存 储器存储设备中。作为示例而非局限,图4示出远程应用程序248驻留在存储器
10设备247上。可以理解,所示的网络连接是示例性的,并且可以使用在计算机之 间建立通信链路的其它手段。
应该理解,此处所描述的各种技术可以结合硬件或软件,或者在适当时以两 者的组合来实现。因此,本发明的方法和装置或某些方面或其部分都可以采用包 含在诸如软盘、CD-ROM、硬盘驱动器或任何其它机器可读存储介质等有形介质 中的程序代码(即,指令)的形式,其中,当该程序代码被加载到诸如计算机等 机器上并由其执行时,该机器就成为用于实现本发明的装置。在可编程计算机上 的程序代码执行的情况下,计算设备通常包括处理器、处理器可读的存储介质(包 括易失性和非易失性存储器和/或存储元件)、至少一个输入设备和至少一个输出 设备。 一个或多个程序可以例如通过使用API、可重复使用控件等来实现或利用 此处结合本发明所描述的进程。这样的程序较佳地用高级过程语言或面向对象的 编程语言来实现,以便与计算机系统通信。然而,如有需要,该程序可以用汇编 语言或机器语言来实现。在任何情况下,语言可以是已编译或已解释语言,并且 与硬件实现相组合。
尽管示例性实施例可以涉及在一个或多个单独计算机系统的上下文中使用 本发明的各方面,但本发明不局限于此,而是可以结合诸如网络或分布式计算环 境等任何计算环境来实现。此外,本发明的各方面可以在多个处理芯片或设备中 或上实现,并且存储可以类似地在多个设备上实现。这样的设备可以包括个人计 算机、网络服务器、手持式设备、超级计算机或者集成到诸如汽车和飞机等其它 系统中的计算机。
接着参考图5,所示的是其中可实现许多计算机化进程以执行上述进程的示 例性联网计算环境。例如,并行计算可以是具有图5的网络上使用和/或实现异步 JIT编译的各种客户机的这一网络环境的一部分。本领域普通技术人员可以理解, 网络可以连接任何计算机或其它客户机或服务器设备,或者可以在一分布式计算 环境中。在这一点上,具有任意数目的处理、存储器或者存储单元以及任意数目 的同时发生的应用程序和进程的任何计算机系统或环境都可以被认为是适用于 所提供的系统和方法。
分布式计算通过计算机设备和系统之间的交换提供了计算机资源和服务的
共享。这些资源和服务包括信息交换、高速缓存存储和文件的盘存储。分布式计 算利用网络连接,从而允许客户机充分利用其整体能力来使整个企业获益。在这一点上,各种设备可以包括可实现此处所述的进程的应用程序、对象或资源。
图5提供了示例性联网或分布式计算环境的示意图。该环境包括计算设备
271、 272、 276和277,以及对象273、 274和275,和数据库278。这些实体271、
272、 273、 274、 275、 276、 277和278中的每一个都可以包括或利用程序、方法、 数据存储、可编程逻辑等。实体271、 272、 273、 274、 275、 276、 277和278可 以跨越诸如PDA、音频/视频设备、MP3播放器、个人计算机等相同或不同设备 的各部分。每个实体271、 272、 273、 274、 275、 276、 277和278可以通过通信 网络270与另一个实体271、 272、 273、 274、 275、 276、 277和278进行通信。 在这一点上,任何实体都可以负责数据库278或其它存储元件的维护和更新。
该网络270本身可以包括向图5的系统提供服务的其它计算实体,并且本身 可以表示多个互相连接的网络。根据本发明的一方面,每个实体271、 272、 273、 274、 275、 276、 277和278都可以包含可能利用API或其它对象、软件、固件和 /或硬件来请求其它实体271、 272、 273、 274、 275、 276、 277和278中的一个或 多个的服务的离散功能程序模块。
还可以理解,诸如275等对象可以被主存在另一个计算设备276上。因而, 尽管所述的物理环境可能将连接的设备示为计算机,但是但这种说明仅仅是示例 性的,并且所描绘或描述的物理环境可以替换地包括诸如PDA、电视机和MP3 播放器等各种数字设备,和诸如接口、 COM对像等软件对象等。
存在支持分布式计算环境的各种系统、组件和网络配置。例如,计算系统可 以通过有线或无线系统、局域网或广泛分布的网络连接在一起。当前,许多网络 耦合到因特网,其提供了用于广泛分布的计算的基础结构并且包含了许多不同的 网络。任何这样的基础结构,不管是否耦合到因特网,都适用于所提供的系统和 方法。
网络基础结构可允许诸如客户机/服务器、对等网络或混合体系结构等大量 网络拓扑结构。"客户机"是一类或者一组的成员,该类或组使用与其不相关的 另一个类或组的服务。在计算时,客户机是一个进程,例如,粗略地讲是请求由 另一个程序提供的服务的一组指令或任务。客户机进程使用所请求的服务而不必 "知道"关于另一个程序或服务本身的任何工作细节。在客户机/服务器体系结构 中,尤其是联网系统中,客户机通常是访问由其它计算机(例如,服务器)提供 的共享网络资源的计算机。在图5的示例中,任何实体271、 272、 273、 274、 275、276、 277和278可以取决于环境而被认为是客户机、服务器或两者。
服务器一般(但不必然)是可通过例如因特网等远程或本地网络访问的远程 计算机系统。客户机进程可以在第一计算机系统中是活动的,而服务器进程可以 在第二计算机系统中是活动的,它们通过通信介质互相通信,由此提供了分布式 功能并允许多个客户机利用服务器的信息收集能力。任何软件对象都可以分布在 多个计算设备或对象上。
客户机和服务器使用由协议层提供的功能来彼此通信。例如,超文本传输协 议(HTTP)是用于万维网(WWW),即"web"的常用协议。通常,诸如网间协议(IP) 地址等计算机网络地址或诸如统一资源定位符(URL)等其它引用都可以用于彼此 标识服务器或客户机。网络地址可被称为URL地址。通信可通过通信介质来提 供,例如,客户机和服务器可以通过用于大容量通信的TCP/IP连接而彼此耦合。 鉴于可根据图5提供的通用框架构建的不同计算环境和可能在诸如图5的网 络环境中的计算中发生的其它变化,此处提供的系统和方法不能以任何方式被解 释为限于一特定计算体系结构。相反,本发明不应被限于任意单个实施例,而是 应该根据所附权利要求书的宽度和范围来解释。
权利要求
1.一种用于翻译计算机程序代码的方法,包括检测计算机程序的将来执行可能需要的至少一个计算机程序代码模块;以及在翻译所检测到的程序代码模块以便执行的同时执行所述计算机程序的至少一个其它先前已翻译的程序代码模块。
2. 如权利要求l所述的方法,其特征在于,还包括存储所翻译的检测到的程序代码模块,以便在将来万一需要该程序代码模用 于来执行所述计算机程序时执行。
3. 如权利要求l所述的方法,其特征在于,所述翻译还包括 由一同步代码翻译线程调用一异步代码翻译线程以便在用户执行之前运行,并且预翻译所述检测到的程序代码。
4. 如权利要求3所述的方法,其特征在于,还包括由所述同步和异步线程一起将已翻译的代码存放到一已翻译代码高速缓存 中以便传送到一代码执行线程,其中所述已翻译代码高速缓存包括一竞争管理结 构。
5. 如权利要求l所述的方法,其特征在于,所述翻译包括 自调用一异步代码翻译线程以便在用户执行之前运行,并且预翻译所述检测到的程序代码。
6. 如权利要求5所述的方法,其特征在于,还包括由所述同步和异步代码翻译线程同时将已翻译代码存放到一已翻译代码高 速缓存中以便传送到一代码执行线程,其中所述已翻译代码高速缓存具有竞争管 理结构。
7. 如权利要求l所述的方法,其特征在于,所述检测包括 通过解析对应于代表所述计算机程序的可能执行的分支树的二叉树来识别所述计算机程序中看似为代码功能的分段。
8. —种其上具有用于执行如权利要求1所述的方法的指令的计算机可读介质。
9. 一种其上具有用于执行如权利要求2所述的方法的指令的计算机可读介质。
10. —种其上具有用于执行如权利要求3所述的方法的指令的计算机可读介质。
11. 一种其上具有用于执行如权利要求4所述的方法的指令的计算机可读介质。
12. —种其上具有用于执行如权利要求5所述的方法的指令的计算机可读介质。
13. —种其上具有用于执行如权利要求6所述的方法的指令的计算机可读介质。
14. 一种其上具有用于执行如权利要求7所述的方法的指令的计算机可读介质。
15. —种用于翻译计算机程序代码的系统,包括用于检测计算机程序的将来执行可能需要的至少一个计算机程序代码模块 的装置;以及用于在翻译所检测到的程序代码模块以便执行的同时执行所述计算机程序 的至少一个其它先前已翻译的程序代码模块的装置。
16. 如权利要求15所述的系统,其特征在于,还包括用于存储所述已翻译的检测到的程序代码模块、以便在将来万一需要所述程 序代码模块来执行所述计算机程序时执行的装置。
17. —种翻译计算机程序代码的系统,包括用于由一同步代码翻译线程调用一异步代码翻译线程以便在计算机程序的 用户执行之前运行并且预翻译所检测到的用于所述预翻译的程序代码的装置。
18. 如权利要求17所述的系统,其特征在于,还包括-用于由所述同步和异步线程一起将已翻译代码存放到一已翻译代码高速缓 存中以便传送到一代码执行线程的装置,其中所述已翻译代码高速缓存具有竞争 管理结构。
19. 如权利要求17所述的系统,其特征在于,所述调用装置包括 用于自调用一异步代码翻译线程以便在用户执行之前运行并且预翻译所述检测到的程序代码的装置。
20. 如权利要求19所述的系统,其特征在于,还包括-用于由所述同步和异步代码翻译线程一起将已翻译代码存放到一已翻译代码高速缓存中以便传送到一代码执行线程的装置,其中所述已翻译代码高速缓存 具有竞争管理结构。
全文摘要
提供了异步运行时(JIT)编译技术。运行在第二处理器上的异步代码翻译线程可以由同步线程调用或者自调用以便在用户执行之前运行并且预翻译代码。存在具有竞争管理结构的已翻译代码高速缓存,其中同步和异步线程两者都存放了已翻译代码以便传送到代码执行线程。
文档编号G06F9/45GK101310256SQ200680042080
公开日2008年11月19日 申请日期2006年10月18日 优先权日2005年11月14日
发明者V·谭 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1