虚拟机环境中用于多级截取处理的系统和方法

文档序号:6554339阅读:171来源:国知局
专利名称:虚拟机环境中用于多级截取处理的系统和方法
技术领域
本发明一般涉及虚拟机(也称为“处理器虚拟化”)领域,更具体而言,本发明针对这样一种多级外部虚拟机监控程序(VMM),其中某些截取处理功能是由运行在特定分区(其每一个是虚拟机即“VM”的实例)中的外部监控程序来执行的,这些外部监控程序是结合管理这些分区的外部监控程序的基层VMM运行的。
背景技术
计算机包括被设计成执行一组特定的系统指令的通用中央处理单元(CPU)。具有类似的体系结构或设计规范的一组处理器可被认为是同一处理器家族的成员。当前处理器家族的示例包括由亚利桑那州菲尼克斯市的摩托罗拉有限公司制造的Motorola 680×0处理器家族;由加利福尼亚州桑尼维尔市的因特尔公司制造的Intel80×86处理器家族;以及由摩托罗拉有限公司制造的,且在由加利福尼亚州库珀蒂诺市的苹果计算机有限公司制造的计算机中使用的PowerPC处理器家族。尽管一组处理器由于其类似的体系结构和设计考虑事项可以在同一处理器家族中,然而根据其时钟速度和其它性能参数,处理器在家族内也可以有很大的不同。
每一微处理器家族执行对该处理器家族独特的指令。处理器或处理器家族可执行的一组集体的指令被称为处理器的指令集。作为一个示例,由Intel 80×86处理器家族使用的指令集与由PowerPC处理器家族使用的指令集不兼容。Intel 80×86指令集基于复杂指令集计算机(CISC)格式。而摩托罗拉的PowerPC指令集基于精简指令集计算机(RISC)格式。CISC处理器使用大量的指令,其中某一些可执行相当复杂的功能,但是一般需要许多时钟周期来执行。RISC处理器使用较少数量的可用指令来执行一组以更高速率执行的较简单的功能。
计算机系统之间处理器家族的独特性通常导致计算机系统的硬件体系结构的其它元件之间的不兼容性。用来自Intel 80×86处理器家族的处理器制造的计算机系统将具有与用来自PowerPC处理器家族的处理器制造的计算机系统的硬件体系结构不同的硬件体系结构。由于处理器指令集以及计算机系统的硬件体系结构的独特性,应用软件程序通常被编写为在运行特定操作系统的特定计算机系统上运行。
处理器虚拟化计算机厂商希望通过使更多而不是更少应用程序能够运行在与计算机厂商的产品线相关联的微处理器家族上来最大化其市场份额。为扩展可运行在计算机系统上的操作系统和应用程序的数目,开发了一种技术领域,其中具有一种类型的CPU(称为主机)的给定计算机将包括允许主计算机仿真不相关类型的CPU(称为客机)的指令的仿真器程序。由此,主计算机将执行可导致响应于给定客机指令而调用一个或多个主机指令的应用程序。由此,主计算机可以同时运行用于其自己的硬件体系结构的软件设计以及为具有不相关的硬件体系结构的计算机编写的软件两者。作为一个更具体的示例,例如,由苹果计算机制造的计算机系统可运行为基于PC的计算机系统编写的操作系统和程序。也可能使用仿真器程序在单个CPU上并发地操作多个不兼容的操作系统。在这一方案中,尽管每一操作系统彼此不兼容,但是仿真器程序可作为两个操作系统之一的主机,从而允许在其它情况下不兼容的操作系统并发地运行在同一计算机系统上。
当客计算机系统在主计算机系统上仿真时,客计算机系统被认为是“虚拟机”,因为客计算机计算机系统仅作为一个特定硬件体系结构的操作的纯软件表示存在于主计算机系统中。术语仿真器、虚拟机和处理器仿真有时可互换地使用,以表明模拟或仿真整个计算机系统的硬件体系结构的能力。作为一个示例,由加利福尼亚州圣马特奥市的Connectix公司创建的Virtual PC软件仿真包括Intel 80×86 Pentium处理器和各种主板组件和卡的整个计算机。这些组件的操作在运行在主机上的虚拟机中仿真。在诸如具有PowerPC处理器的计算机系统等主机的操作系统软件和硬件体系结构上执行的仿真器程序模拟了整个客计算机系统的操作。
仿真器程序担当主机的硬件体系结构和由运行在仿真的环境中的软件发送的指令之间的交换点。该仿真的环境可由虚拟机监控程序(VMM)来创建,VMM是直接运行在硬件上,且通过展示与该VMM正在虚拟化的硬件相同的接口(这使得VMM不被运行在其上的操作系统层注意到)来虚拟化机器的所有资源的软件层。在该配置中,主机操作系统(HOS)和VMM可在同一物理硬件上并排运行。或者,仿真器程序可以是直接运行在物理计算机硬件上且仿真另一硬件配置的HOS本身。在本实施例的一个特定实现中,HOS软件可特别地包括“系统管理程序”的一个实施例。
系统管理程序是存在于HOS的内核层附近的控制程序,它操作来允许除HOS之外的一个或多个次级操作系统使用计算机系统的硬件,包括计算机系统的物理处理器。系统管理程序为次级操作系统仿真操作环境,使得次级操作系统相信它在其习惯的硬件和/或操作系统环境中操作,且它在计算机系统的逻辑控制之下,即使它实际上可能在另一硬件和/或操作系统环境中操作,且HOS可能在计算机系统的逻辑控制之下。这是重要的,因为许多操作系统如此运作,使得操作系统必须如同它在计算机系统的硬件的排它逻辑控制下那样操作。由此,为使多个操作系统在单个计算机系统上同时运作,每一操作系统的系统管理程序必须运作以掩盖其它操作系统的存在,使得每一操作系统如同它具有对整个计算机系统的排它控制那样来运作。
为简明起见,包括但不限于VMM和系统管理程序的处理器虚拟化程序在此被总称为“虚拟化器”。此外,此处在系统管理程序的上下文中揭示的本发明的任一方面也可被假定为对于VMM和其它虚拟化器同等地有效且被揭示,反之亦然。
截取和监控如本领域的技术人员已知和理解的,虚拟化器(例如,系统管理程序或VMM)的一个主要功能是截取当软件在一个分区(VM的个别实例)中在客机操作系统上执行时发生的事件。在这一上下文中,事件是发生在分区的某一组件和实际上不是该分区的一部分的某一物理或虚拟资源之间的交互。例如,在第一分区中执行的程序可能希望向某一外围设备发送数据,其中该分区的操作系统相信它对于所述设备具有排他的控制。然而,在这一情况下,当程序通过其分区的客机操作系统发送数据,且客机操作系统试图与外围设备通信时,虚拟化器截取该通信,且用于管理该分区对所述设备的访问以及其它分区完成同样的任务的尝试,即,设备实际上并不是专用于任何特定分区。通过截取这些种类的事件,虚拟化器本质上欺骗客机OS,使其认为它拥有了该机器的所有资源(如同在物理硬件上执行的OS通常所拥有的那样),而事实上,底层物理资源实际上正在若干虚拟机分区之间共享或划分。在这一点上,虚拟化器负责截取这类事件并当它们发生时响应于该截取。不幸的是,在每一分区外部操作的单个虚拟化器中集中这种功能要求虚拟化器是相当复杂的,而出于本领域的技术人员可以容易地明白的原因,需要的是一种更简单的虚拟化器。因此,本领域中需要一种仍能够提供截取功能的更简单的虚拟化器截取模型。本发明提供了一个这样的解决方案。

发明内容
本发明的各实施例针对被设计成从基层虚拟化器(存在于每一分区之外)中移除大多数截取相关功能,而改为将大多数这样的功能直接结合到每一分区中的多级虚拟化器。对于若干实施例,某些截取处理功能是由运行在分区内且对特定的截取事件进行响应的“外部监控程序”来执行的,且基层虚拟化器在每一分区内安装这些外部监控程序,且之后为单分区和跨分区截取事件管理外部监控程序。这一截取处理的分布式方法允许一种较不复杂的虚拟化器,并将截取功能向上移至每一分区中,在每一分区中,每一外部监控程序使用该分区中对应的客机操作系统的资源来解决截取事件。


当结合附图阅读时,能够更好地理解以上概述以及以下较佳实施例的详细描述。为说明本发明起见,附图中示出了本发明的示例性构造;然而,本发明不限于所揭示的任何特定方法和装置。附图中图1是表示其中可结合本发明的各方面的计算机系统的框图;图2示出了用于计算机系统中仿真的操作环境的硬件和软件体系结构的逻辑分层;图3A示出了其中仿真由主机操作系统(直接或通过系统管理程序)执行的虚拟化计算系统;图3B示出了其中仿真由与主机操作系统并排运行的虚拟机监控程序执行的替换虚拟化计算系统;图4是示出通过处理器所支持的任何手段(例如,异常、默认值、俘获等)来安装截取以及响应于所有截取的事件的传统虚拟化器的单一特性的框图;图5是示出用于本发明的若干实施例的多级截取方法的框图;以及图6是示出多级方法用于处理截取事件的方法的过程流程图。
具体实施例方式
本发明的主题用细节来描述以满足法定要求。然而,该描述本身并不旨在限制本专利的范围。相反,发明人构想所要求保护的主题也可用其它方法来实施,以结合其它现有或未来技术,包括类似于本文档中所描述的那些步骤的不同步骤或步骤的组合。此外,尽管此处使用术语“步骤”来表示所采用的方法的不同元素,然而该术语并不应被解释为按时此处所揭示的各种步骤之中或之间的任何特定顺序,除非明确地描述了各个步骤的顺序。
计算机环境本发明的众多实施例可在计算机上执行。图1及以下讨论提供了对适于在其中实现本发明的计算环境的简要概括描述。尽管并非所需,但本发明将在诸如程序模块等由如客户机工作站或服务器等计算机执行的计算机可执行指令的一般上下文环境中描述。一般而言,程序模块包括例程、程序、对象、组件、数据结构等等,它们执行特定的任务或实现特定的抽象数据类型。此外,本领域的技术人员可以理解,本发明可以用其它计算机系统配置来实施,包括手持式设备、多处理器系统、基于微处理器或可编程消费者电子设备、网络PC、小型机、大型机等等。本发明也可以在分布式计算环境中实践,其中,任务由通过通信网络连接的远程处理设备来执行。在分布式计算环境中,程序模块可以位于本地和远程存储器存储设备中。
参考图1,一个示例性通用计算系统包括常规计算机20等形式的通用计算设备,包括处理单元21、系统存储器22以及将包括系统存储器的各类系统组件耦合至处理单元21的系统总线23。系统总线23可以是若干种总线结构类型的任一种,包括存储器总线或存储器控制器、外围总线以及使用各类总线体系结构的局部总线。系统存储器包括只读存储器(ROM)24和随机存取存储器(RAM)25。基本输入/输出系统(BIOS)26包含如在启动时协助在计算机20内的元件之间传输信息的基本例程,可储存在ROM 24中。个人计算机20也可包括用于对硬盘(未示出)进行读写的硬盘驱动器27、用于对可移动磁盘29进行读写的磁盘驱动器28以及用于对可移动光盘31,如CD-ROM或其它光介质进行读写的光盘驱动器30。硬盘驱动器27、磁盘驱动器28以及光盘驱动器30分别通过硬盘驱动器接口32、磁盘驱动器接口33和光盘驱动器接口34连接至系统总线23。驱动器及其相关联的计算机可读介质为计算机20提供了计算机可执行指令、数据结构、程序模块和其它数据的非易失性存储。尽管这里描述的示例性环境采用了硬盘、可移动磁盘29以及可移动光盘31,然而本领域的技术人员可以理解,可储存可由计算机访问的数据的其它类型的计算机可读介质,如盒式磁带、闪存卡、数字多功能盘、Bernoulli盒式磁盘、随机存取存储器(RAM)、只读存储器(ROM)等等,也可用于示例性操作环境中。
多个程序模块可储存在硬盘、磁盘29、光盘31、ROM 24或RAM 25中,包括操作系统35、一个或多个应用程序36、其它程序模块37以及程序数据38。用户可以通过键盘40和定点设备42向计算机20输入命令和信息。其它输入设备(未示出)可包括麦克风、操纵杆、游戏垫、圆盘式卫星天线、扫描仪等等。这些和其它输入设备通常通过耦合至系统总线的串行端口接口46连接到处理单元21,但也可以通过其它接口连接,如并行端口、游戏端口或通用串行总线(USB)。监视器47或其它类型的显示设备也通过接口,如视频适配器48连接到系统总线23。除监视器47之外,个人计算机通常包括其它外围输出设备(未示出),如扬声器和打印机。图1的示例性系统还包括主机适配器55、小型计算机系统接口(SCSI)总线56以及连接到SCSI总线56的外部存储设备62。
个人计算机20可以使用到一个或多个远程计算机,如远程计算机49的逻辑连接在网络化环境中操作。远程计算机49可以是另一个人计算机、服务器、路由器、网络PC、对等设备或其它常见的网络节点,并通常包括许多或所有相对于计算机20所描述的元件,尽管在图1中仅示出了存储器存储设备50。图1描述的逻辑连接包括局域网(LAN)51和广域网(WAN)52。这类网络环境常见于办公室、企业范围计算机网络、内联网以及因特网。
当在LAN网络环境中使用时,计算机20通过网络接口或适配器53连接至LAN 51。当在WAN网络环境中使用时,计算机20可包括调制解调器54或用于通过WAN 52,如因特网建立通信的其它装置。调制解调器54可以是内置或外置的,它通过串行端口接口46连接至系统总线23。在网络化环境中,相对于计算机20所描述的程序模块或其部分可储存在远程存储器存储设备中。可以理解,示出的网络连接是示例性的,也可以使用在计算机之间建立通信链路的其它装置。此外,尽管预想本发明的众多实施例尤其适用于计算机化的系统,然而本文档中没有任何内容旨在将本发明限于这些实施例。
虚拟机从概念上的观点来看,计算机系统一般包括运行在硬件的功能层上的一个或多个软件层。该分层是处于抽象的原因而完成的。通过为给定软件层定义接口,该层可以由其上的其它层不同地实现。在一种设计良好的计算机系统中,每一层仅了解(且仅依赖于)直接在其之下的层。这允许层或“栈”(多个邻接的层)可被替换,而不会不利地影响所述层或栈之上的层。例如,软件应用程序(较高层)通常依赖于较低级的操作系统(较低层)以将文件写入某一形式的持久存储中,且这些应用程序无需理解将数据写入软盘、硬盘驱动器或网络文件夹之间的区别。如果较低层用用于写文件的新操作系统组件来替换,较高层软件应用程序的操作仍保持不受影响。
分层软件的灵活性允许虚拟机(VM)呈现实际上是另一软件层的虚拟硬件层。以此方式,VM可为在其上的软件层创建所述软件层在其自己的专用计算机系统上运行的假象,且由此,VM可允许多个“客机系统”在单个“主机系统”上并发运行。
图2是表示用于计算机系统中仿真的操作环境的硬件和软件体系结构的逻辑分层的图示。在该图中,仿真程序94直接或间接运行在物理硬件体系结构92上。仿真程序94可以是(a)与主机操作系统并排运行的虚拟机监控程序,(b)具有本机仿真能力的专用主机操作系统,或(c)具有系统管理程序组件的主机操作系统,其中所述系统管理程序组件执行所述仿真。仿真程序94仿真客机硬件体系结构96(被示为虚线,以示出该组件是“虚拟机”的这一事实,即,不实际存在而是由所述仿真程序94仿真的硬件)。客机操作系统98在所述客机硬件体系结构96上执行,且软件应用程序100在客机操作系统98上运行。在图2的仿真的操作系统中,且由于仿真程序94的操作,即使软件应用程序100被设计成运行在一般与主机操作系统和硬件体系结构92不兼容的操作系统上,软件应用程序100也可在计算机系统90中运行。
图3A示出了一个虚拟化计算系统,包括直接运行在上述物理计算机硬件102上的主机操作系统软件层104,其中主机操作系统(主机OS)104通过展示与主机OS正在仿真(或“虚拟化”)的硬件相同的接口提供了对物理计算机硬件102的资源的访问,这进而使得主机OS不被运行在其上的操作系统层注意到。为执行仿真,主机操作系统102可以是具有本机仿真能力的特别设计的操作系统,或者它可以是具有用于执行仿真的结合的系统管理程序组件的标准操作系统。
再次参考图3A,在主机OS 104上的是两个虚拟机(VM)实现,即,VM A 108,它可以是例如虚拟化的Intel 386处理器;以及VM B 110,它可以是例如Motorola680×0家族处理器之一的虚拟化版本。在每一VM 108和110上的分别是客机操作系统(客机OS)A 112和B 114。运行在客机OS A 112上的是两个应用程序,即应用程序A1 116和应用程序A2 118,而运行在客机OS B 114上的是应用程序B1120。
对于图3A,重要的是注意,VM A 108和VM B 110(在虚线内示出)是虚拟化的计算机硬件表示,它们仅作为软件构造存在,且由于专用软件代码的存在而变得可能,该专用软件代码不仅分别向客机OS A 112和客机OS B 114呈现VM A 108和VM B 110,还执行客机OS A 112和客机OS B 114间接与真实的物理计算机硬件102交互所需的所有软件步骤。
图3B示出了一个替换的虚拟化计算系统,其中仿真是由与主机操作系统104″并排运行的虚拟机监控程序(VMM)104′执行的。对于某些实施例,VMM可以是运行在主机操作系统104上且仅通过所述主机操作系统104与计算机硬件交互的应用程序。在其它实施例中,如图3B所示,VMM可以改为包括部分独立的软件系统,它在某一级别上通过主机操作系统104间接与计算机硬件102交互,而在其它级别上,VMM直接与计算机硬件102交互(类似于主机操作系统直接与计算机硬件交互的方式)。而在又一些其它实施例中,VMM可包括完全独立的软件系统,该系统在所有级别上都直接与计算机硬件102交互(类似于主机操作系统直接与计算机硬件交互的方式),而不利用主机操作系统104(尽管在协调所述计算机硬件102的使用以及避免冲突等的程度上仍与所述主机操作系统104交互)。
所有这些用于实现VMM的变化都预期形成此处所描述的本发明的替换实施例,且此处没有任何内容应当被解释为将本发明限于任何特定的VMM配置。另外,对应用程序116、118和120之间分别通过VM A 108和/或VM B 110的交互(假定在硬件仿真情形中)的任何参考应当被解释为实际上是应用程序116、118和120以及VMM之间的交互。同样,对应用程序VM A 108和/或VM B 110与主机操作系统104和/或计算机硬件102之间的交互(假定在计算机硬件102上直接或间接执行计算机指令)的任何参考应被解释为实际上是VMM和主机操作系统104或计算机硬件102之间适当的交互。
事件截取综述如先前所讨论的,虚拟化器是运行在计算机系统上,且允许创建一个或多个抽象虚拟机(VM)实例(其每一个也称为分区)的薄软件层。这些实例的每一个通常如具有其自己的存储器、处理器和I/O设备的真实计算机那样运作,这些资源可对应于实际的物理资源或实际上不在任何物理意义上存在的虚拟化资源。为执行虚拟化,大多数虚拟化器需要截取当客机软件在分区中执行时发生的特定事件。(客机软件是运行在特定虚拟机内,其通常由操作系统和一个或多个应用程序构成的软件。)截取特定事件对于虚拟化是关键的,因为它使得虚拟化器能够欺骗客机,使其认为它拥有物理机器上的所有资源,而事实上,这些资源是被共享或划分的(即,细分且分配给特定的虚拟机)。例如,考虑具有四个处理器和报告处理器的总数的寄存器,以及运行在系统上的四个虚拟机(分区)的计算机系统,其中每一虚拟机被分配给单个处理器。在这一情况下,当这些虚拟机的每一个的客机软件读取“处理器数目”寄存器时,它们通常会读取值“4”(这实际上是物理处理器的总数,且由此是物理寄存器中的值)。然而,在这一情况下,虚拟化器需要欺骗每一客机OS,以使其认为它正运行在一个处理器的系统上。为达到这一目标,虚拟化器为每一虚拟机(分区)配置虚拟处理器,以在客机从“处理器数目”寄存器中读取时生成“截取”事件。该截取防止VM直接读取寄存器,且导致控制从客机转移到虚拟化器。虚拟化器然后能够用它希望报告的值(在这一情况下为“1”)来覆盖寄存器中实际存在的正常值“4”。
如本领域的技术人员公知且容易理解的,一般而言,截取可被划分成两种类别处理器截取和存储器截取。处理器截取是被绑定到特定处理器指令、寄存器、异常或中断的事件。存储器截取是对导致处理器从指定存储器位置进行读取或写入的动作专用的,这些动作包括显式访问(例如,从存储器中读取的“MOVE”指令)或隐式访问(例如,当处理器响应于TLB(翻译后备缓冲器)缺失而步查页表时由处理器生成的引用)。
传统上,虚拟化器(存在于每一分区外部)负责“安装”截取和当截取发生时“响应于”截取。用于安装截取的技术高度依赖于所述的处理器体系结构。大多数处理器提供了在某些事件上“俘获”的方式。在某些情况下,对于截取的控制可以是细粒度或粗粒度的。如果是后者,则虚拟化器可能需要安装单个粗粒度的截取,然后“滤出”它希望截取的特定事件并忽略其它截取事件。如果处理器对特定的截取类型提供细粒度的控制,则虚拟化器可仅请求它希望的那些截取。理想地,截取应当仅在虚拟化器需要覆盖标准处理器行为时发生,因为截取报告一般实质上增加了额外的处理开销,这会降低系统性能。再次参考先前的四个处理器、四个VM的计算机系统的示例,如果用户配置四个处理器的物理系统上的单个四处理器虚拟机,则不需要截取对“处理器数目”寄存器的访问,因此编写良好的虚拟化器可避免在这一情况下的截取,且由此避免不必要的额外开销和性能冲击。
用于减少对截取的需求的另一种技术是“影像寄存器”的总体概念。影像寄存器是当在虚拟机内运行时访问的真实寄存器的副本。再次参考先前的示例,如果系统实现影像“处理器数目”寄存器,则对于在虚拟化环境外部操作的进程(包括虚拟化器本身),访问寄存器将读取真实的值,但是对于运行在虚拟化环境内部的客机进程,访问该寄存器将读取影像值,其中虚拟化器对影像寄存器进行编程以报告适当的寄存器数目。通过预先对该信息进行编程,虚拟化器无需在这一寄存器访问上请求截取,而是相反,普遍地使每一分区读取影像值而非真实值。然而,尽管该方法避免了开销大的截取事件,然而需要额外的处理器复杂性(通常是额外的寄存器),且导致灵活性的某些降低(与可执行任意动作的一般截取处理程序相比)。
更具体地,传统虚拟化器在本质上是单一的,即,它们负责安装截取和当截取的事件发生时对其进行响应,且由此,这些虚拟化器迄今为止必须是复杂且繁琐的。图4是示出传统虚拟化器的单一特性的框图,该虚拟化器通过处理器所支持的任何手段(例如,异常、默认值、俘获等)来安装截取,并对所有截取的事件进行响应。在该图中,在物理计算机硬件402上操作的虚拟化器404虚拟化两个虚拟机环境,即VM A 408和VM B 410。客机操作系统(GOS)A 412在VM A 408中执行,而GOS B 414在VM B 410中执行。软件应用程序A1 416和A2 418在VM A408上的GOS A 412中执行,而软件应用程序B1 420在VM B 410上的GOS B 414中执行。在这一实施例中,虚拟化器被示为系统管理程序(尽管也预想且可使用其它虚拟化器),且VM A 408是“主分区”,即,VM A的客机操作系统(GOS)A也由系统管理程序利用来提供否则可能由主机操作系统提供的功能(如本领域的技术人员所理解的,在这一特定虚拟化配置中,主机操作系统是不必要的,且不存在)。
对于截取,虚拟化器404(在这一情况下仍是系统管理程序)包括很大程度上增加了虚拟化器404的复杂性的全截取功能450。由此,在这一方案中,第一分区(例如,VM A 408)中的事件触发截取,且导致处理器将控制从运行在第一分区中的客机OS(例如,客机OS A 412)转移到虚拟化器404。虚拟化器404然后确定截取的原因,并对其作出响应,从而在完成时将控制返回给客机OS A 412。
多级截取事件本发明的各实施例针对用于虚拟化器的多级设计以及截取处理方法,它允许从基层虚拟化器(在虚拟化环境外部执行的虚拟化器组件)中移出大多数截取相关的复杂性,且将其放置到存在于每一分区(虚拟机)内的外部监控程序中。在这一方案中,基层虚拟化器(对于某些实施例,可以被集成为一般化的系统管理程序)保持简单,而某些或所有截取处理是由运行在每一分区内(即,在客机级),且要么在同一分区内,要么在与生成截取事件的分区不同的分区内的一个或多个外部监控程序来执行。
图5是示出用于本发明的若干实施例的多级截取方法的框图。在该图中,在物理计算机硬件502上操作的虚拟化器504虚拟化两个虚拟机环境,即VM A 508和VM B 510。GOS A 512在VM A 508中执行,GOS B 514在VM B 510中执行。软件应用程序A1 516和A2 518在VM A 508上的GOS A 512中执行,软件应用程序B1 520在VM B 510上的GOS B 514中执行。在这一实施例中,虚拟化器再次被示为系统管理程序(尽管也预想且可使用其它虚拟化器),且VM A 508是“主分区”,即,VM A的客机操作系统(GOS)A也由系统管理程序利用来提供否则可能由主机操作系统提供的功能。
然而,对于截取,虚拟化器504(在这一情况下,仍为系统管理程序)仅包括最小的截取功能550,且大量截取功能改为结合到每一分区508和510中的一个或多个外部监控程序(“EM”)562和564中(此处被示为结合到每一分区的VM虚拟化中,尽管EM在分区中相对于VM、客机OS和应用程序的位置可能在替换在这一方案中,且参考图5和6,图6是示出多级方法用于处理截取事件的方法的过程流程图,在步骤602,第一分区(例如,VM A 508)中的事件触发截取,且在步骤604,导致处理器将控制从运行在第一分区中的客机OS(例如,客机OSA 512)转移到虚拟化器504。在步骤606,虚拟化器504然后确定是使用其自己的默认(且简单)处理机制来处理截取,还是将截取传递到“外部监控程序”(例如,EM 462)。例如,如果截取的源请求了默认处理,则虚拟化器可选择前者(在步骤608自己处理截取),或者相反,如果例如截取的源请求不使用默认行为,则选择后者(将通过步骤610将截取转发到EM)。如果虚拟化器要将截取转发到外部监控程序用于处理,则在步骤610,虚拟化器首先发信号通知将处理该截取的特定的外部监控程序,且在步骤612允许该EM用以下两种方式之一来响应该截取(a)EM将截取返回给虚拟化器,且在步骤614请求虚拟化器以正常的默认方式来处理该截取(诸如当EM不能处理特定的截取事件时),或者(b)EM在步骤616处理该截取(并且对于某些实施例,向虚拟化器通知虚拟化器不必采取默认动作)。当截取处理完成时,在步骤618,控制被返回给截取的源(例如,客机OS A 412)。
在实现中,外部监控程序可对每一分区、对每一虚拟处理器、对每一截取类向虚拟化器注册;或者代替注册,当需要处理截取时可由虚拟化器轮询EM(即,依次调用直到一个外部监控程序决定处理该截取)。本发明的某些实施例仅允许外部监控程序在每一分区的基础上注册,使得对给定分区的所有请求的截取都针对指定的外部监控程序。然而,对于其它实施例,一个以上分区可具有运行在不同分区中的替换外部监控程序,这将允许其每一个对每一分区具有略微不同的行为(例如,外部监控程序的不同版本)。
对于若干实施例,可能不允许分区处理其自己的截取以防止循环依赖性和死锁情况。因此,对于这些实施例,每一分区的外部监控程序需要在另一分区内运行。在具有主分区的基于系统管理程序的系统中,如本领域的技术人员理解的,这暗示至少一个分区(主分区)不能具有外部监控程序,且由此,对于这些实施例,主分区只能依赖于由虚拟化器(系统管理程序)提供的默认截取处理。另一方面,对于作为主机的系统(具有主机操作系统)的某些替换实施例,外部监控程序可运行在主机OS和所有分区内,因为关于循环依赖性和死锁情况的同一问题不会应用于实际的主机操作系统。
替换实施例如先前所提到的,截取可被划分成两个类别,即存储器截取和处理器截取。存储器截取尤其用于虚拟化不如正常RAM那样运作的存储器区域,诸如存储器映射的寄存器、ROM以及平面VRAM,且可用于以下(尽管不限于此)读(1到16字节);写(1到16字节);锁定的读/修改/写逻辑运算AND、OR、XOR(1、2、4或8字节);锁定的读/修改/写算术运算ADD、SUB(1、2、4或8字节);以及锁定的比较运算XCHG、CMPXCHG(1、2、4或8字节)。相反,处理器截取尤其可用于以下HLT、PAUSE和CPUID指令;对控制寄存器(CR)、调试寄存器(DR)、模型专用寄存器(MSR)的访问;特定异常;外部中断;对I/O端口的访问(IN/OUT指令);以及致命异常(例如,三重错误)。
另外,对于本发明的某些实施例,截取可在客机指令的中间被报告给外部监控程序。例如,单个指令可访问具有相关联的截取的两个存储器地址。在这一情况下,两个截取都需要在客机指令完成之前被处理。这些截取被串行地检测和处理,且对于某些实施例,虚拟化器负责执行指令完成。例如,CPUID返回寄存器EAX、EDZ、EBX和ECX中关于处理器的信息,且虚拟化器可选择两种方式来向外部监控程序报告CPUID截取(a)外部监控程序完成CPUID指令,将值写回适当的寄存器并将EIP(指令指针)递增到超过CPUID指令;或者外部监控程序返回它希望CPUID指令提供的值。在前一情况下,虚拟化器传递指令间截取。从外部监控程序的观点来看,虚拟化的处理器尚未执行CPUID指令,且当外部监控程序完成处理截取时,CPUID指令的执行完成。另一方面,在后一情况下,虚拟化器负责将这些值写回到适当的寄存器中,并将EIP递增到超过CPUID指令的末端。该方法在虚拟化器传递指令中间的截取时导致较简单的外部监控程序和较好的性能,且从外部监控程序的观点来看,虚拟化的处理器开始执行CPUID指令。当外部监控程序完成处理截取时,虚拟化器完成CPUID指令。另外,某些实施例在可能时就支持指令中间的截取,因为它们导致较简单的外部监控程序接口,而仍提供指令间截取,诸如异常上的截取和本质上在指令边界上发生的截取。
此外,如上所述,基层监控程序为每一截取类型定义了“默认”(通常是简单的)处理。例如,CPUID指令默认地返回物理处理器通常会返回的同一CPU信息,而致命异常(例如,x86体系结构上的三重错误)默认地导致分区被终止。然而,对于若干实施例,外部监控程序可通过调用底层的虚拟化器来指定它希望覆盖哪些截取以覆盖特定截取类的默认行为,而同时未覆盖的截取仍以默认的方式来处理。
大多数虚拟化器也允许客机软件通过定义良好的机制与虚拟化器通信。对于本发明的某些实施例,这可以通过使用合成MSR(模型专用寄存器)来完成。通过允许外部监控程序覆盖这些MSR访问的行为,外部监控程序可使其看似不存在任何虚拟化器。它们也可模拟具有不同版本的系统管理程序或VMM的存在。这允许递归虚拟化,即系统管理程序或VMM可在运行在另一系统管理程序或VMM之上的分区内运行。这对于制作系统管理程序/VMM的新版本的原型、提供与较老版本的后向兼容性、或提供与第三方实现的兼容性是有用的。
对于涉及基层虚拟化器和外部监控程序两者的设计,需要一种在发生截取时发信号通知外部监控程序,且可任选地传递与截取有关的参数的方式。由于外部监控程序运行在当前正忙于执行其它代码的另一分区中,因此某些实施例要求异步机制来传递这一信号。在一个实现中,该信号可作为合成中断来传递(见本文中先前列出的交叉引用的专利申请)。尽管传统处理器中断机制涉及向应于特定的中断源来执行中断处理程序,然而合成中断控制器扩展了这一机制,并允许参数被传递到中断处理程序。在截取的情况下,这些参数指示关于待决截取的信息,且外部监控程序可使用该信息来有效地处理截取。
结论此处所描述的各种系统、方法和技术可结合硬件或软件来实现,或在适当时以两者的组合来实现。由此,本发明的方法和装置或其某些方面或部分可采用包含在诸如软盘、CD-ROM、硬盘或任何其它机器可读存储介质等有形介质中的程序代码(即,指令)的形式,其中,当程序代码被加载到诸如计算机等机器中并由其执行时,该机器变为用于实施本发明的装置。在可编程计算机上的程序代码执行的情况下,计算装置一般包括处理器、处理器可读的存储介质(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备以及至少一个输出设备。一个或多个程序较佳地用高级过程语言或面向对象的编程语言来实现,以与计算机系统通信。然而,如有需要,程序可以用汇编语言或机器语言来实现。在任何情况下,语言可以是已编译或已解释语言,并与硬件实现相组合。
本发明的方法和装置也可通过以程序代码的形式实施的通信来实现,该程序代码通过某一传输介质来发送,如通过电线或电缆、通过光纤或通过任一其它形式的传输,其中,当程序代码由诸如EPROM、门阵列、可编程逻辑器件(PLD)、客户机计算机等的机器接收被装载到其中由其执行时,该机器变为用于实施本发明的装置。当在通用处理器上实现时,程序代码与处理器相结合,以提供用于执行本发明的索引功能的唯一装置。
尽管本发明是结合各附图的较佳实施例来描述的,然而可以理解,可以使用其它类似的实施例或可以对所描述的实施例作出修改和添加,来执行本发明的相同的功能而不脱离本发明。例如,尽管本发明的示例性实施例是在仿真个人计算机的功能的数字设备的上下文中描述的,但本领域的技术人员可以认识到,本发明不限于这样的数字设备,如所描述的,本申请可应用于任何数量的现有或新兴的计算设备或环境,诸如游戏控制台、手持式计算机、便携式计算机等,无论它们是有线还是无线的,且本申请可应用于通过通信网络连接,并通过网络交互的任何数量的这样的计算设备。此外,应当强调,此处构想了各种计算机平台,包括手持式设备操作系统和其它应用专用硬件/软件接口系统,尤其是当无线联网的设备的数目持续增长的时候。因此,本发明不应限于任何单个实施例,而是依照所附权利要求书的宽度和范围来解释。
最后,此处所揭示的实施例可适用于其它处理器体系结构、基于计算机的系统或系统虚拟化,且这些实施例由此处所公开的内容明确地预想,由此,本发明不应限于此处所描述的具体实施例,而是应更宽泛地解释。同样,为除处理器虚拟化之外的目的而对合成指令的使用也由此处所公开的内容所预想,且在除处理器虚拟化之外的上下文中任何这样的合成指令的使用应当被宽泛地包含在此处所公开的内容之中。
权利要求
1.一种用于在虚拟机环境中处理对分区的截取的系统,所述虚拟机环境包括虚拟化器和至少一个分区,所述系统包括第一分区中的第一外部监控程序,用于解决至少一个截取事件;以及将所述第一截取事件转发到所述第一外部监控程序的虚拟化器。
2.如权利要求1所述的系统,其特征在于,所述虚拟化器可解决默认截取,而无需将所述截取事件转发到所述第一外部监控程序。
3.如权利要求1所述的系统,其特征在于,所述至少一个截取事件是来自由以下事件构成的组中的事件读;写;锁定的读/修改/写逻辑运算AND、OR或XOR;锁定的读/修改/写算术运算ADD或SUB;锁定的比较运算XCHG和CMPXCHG;HLT、PAUSE或CPUID指令;对控制寄存器(CR)、调试寄存器(DR)、模型专用寄存器(MSR)的访问;特定异常;外部中断;对I/O端口的访问;以及致命异常。
4.如权利要求1所述的系统,其特征在于,所述至少一个截取事件是处理器截取类型或存储器截取类型,且所述至少一个截取的类型是由所述第一分区独立地指定给所述虚拟化器的。
5.如权利要求1所述的系统,其特征在于,包括所述虚拟化器和所述第一外部监控程序的多级截取系统来处理指令中间的截取和指令间截取两者。
6.如权利要求1所述的系统,其特征在于,所述第一分区使用合成中断将所述至少一个截取传递到所述虚拟化器。
7.一种用于在虚拟机环境中处理对分区的截取的方法,所述虚拟机环境包括虚拟化器和至少一个分区,所述方法包括虚拟化器将第一截取事件转发到第一分区中的第一外部监控程序;以及所述第一外部监控程序解决至少一个截取事件。
8.如权利要求7所述的方法,其特征在于,所述虚拟化器可解决默认截取,而无需将所述截取事件转发到所述第一外部监控程序。
9.如权利要求7所述的方法,其特征在于,所述至少一个截取事件是来自由以下事件构成的组中的事件读;写;锁定的读/修改/写逻辑运算AND、OR或XOR;锁定的读/修改/写算术运算ADD或SUB;锁定的比较运算XCHG和CMPXCHG;HLT、PAUSE或CPUID指令;对控制寄存器(CR)、调试寄存器(DR)、模型专用寄存器(MSR)的访问;特定异常;外部中断;对I/O端口的访问;以及致命异常。
10.如权利要求7所述的方法,其特征在于,所述至少一个截取事件是处理器截取类型或存储器截取类型,且其中,所述至少一个截取的类型是由所述第一分区独立于所述虚拟化器来指定的。
11.如权利要求7所述的方法,其特征在于,包括所述虚拟化器和所述第一外部监控程序的多级截取系统处理指令中间的截取和指令间截取两者。
12.如权利要求7所述的方法,其特征在于,所述第一分区使用合成中断将所述至少一个截取传递到所述虚拟化器。
13.一种包括用于实现如权利要求7所述的元素的装置的硬件控制设备。
14.一种包括用于在虚拟机环境中处理对分区的截取的计算机可读指令的计算机可读介质,所述虚拟机环境包括虚拟化器和至少一个分区,所述计算机可读指令包括用于以下各项的指令虚拟化器将第一截取事件转发到第一分区中的第一外部监控程序;以及所述第一外部监控程序解决至少一个截取事件。
15.如权利要求14所述的计算机可读介质,其特征在于,还包括指令,其中,所述虚拟化器可解决默认截取,而无需将所述截取事件转发到所述第一外部监控程序。
16.如权利要求14所述的计算机可读介质,其特征在于,还包括指令,其中,所述至少一个截取事件是来自由以下事件构成的组中的事件读;写;锁定的读/修改/写逻辑运算AND、OR或XOR;锁定的读/修改/写算术运算ADD或SUB;锁定的比较运算XCHG和CMPXCHG;HLT、PAUSE或CPUID指令;对控制寄存器(CR)、调试寄存器(DR)、模型专用寄存器(MSR)的访问;特定异常;外部中断;对I/O端口的访问;以及致命异常。
17.如权利要求14所述的计算机可读介质,其特征在于,还包括指令,其中,所述至少一个截取事件是处理器截取类型或存储器截取类型,且其中,所述至少一个截取的类型是由所述第一分区独立地指定给所述虚拟化器的。
18.如权利要求14所述的计算机可读介质,其特征在于,还包括指令,其中,包括所述虚拟化器和所述第一外部监控程序的多级截取系统来处理指令中间的截取和指令间截取两者。
19.如权利要求14所述的计算机可读介质,其特征在于,还包括指令,其中所述第一分区使用合成中断将所述至少一个截取传递到所述虚拟化器。
20.一种包括如权利要求14所述的计算机可读指令的电子载波信号。
全文摘要
本发明的各实施例针对被设计成从基层虚拟化器(存在于每一分区的外部)中移除大多数截取相关功能,而是将大多数这样的功能直接结合到每一分区中的多级虚拟化器。对于若干实施例,某些截取处理功能由运行在分区内且响应于特定截取事件的“外部监控程序”来执行,且基层虚拟化器将这些外部监控程序安装在每一分区内,且之后为单分区和跨分区截取事件管理外部监控程序。截取处理的这一分布式方法允许较不复杂的虚拟化器,且将截取功能向上移至每一分区中,其中每一外部监控程序使用该分区中的对应客机操作系统的资源来解决截取事件。
文档编号G06F9/455GK1831775SQ20061000447
公开日2006年9月13日 申请日期2006年2月13日 优先权日2005年3月11日
发明者E·P·特罗特, R·A·维加, J·甘古利 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1