在恢复虚拟机的操作时将中断或异常转向的制作方法

文档序号:6493881阅读:140来源:国知局
专利名称:在恢复虚拟机的操作时将中断或异常转向的制作方法
领域一般来说,本发明的实施例涉及虚拟机,更具体来说,涉及处理虚拟机环境中的故障。
背景传统的虚拟机监控器(VMM)通常在计算机上运行,以及为其它软件提供一个或多个虚拟机的抽象。各虚拟机可用作独立平台,运行它自己的“客户操作系统”(即VMM接管的操作系统(OS))和其它软件,它们统称为客户软件。客户软件预期工作起来好像它在专用计算机而不是虚拟机上运行。也就是说,客户软件预期将控制各种事件,以及有权访问硬件资源。硬件资源可包括处理器驻留资源(例如控制寄存器)、驻留在存储器中的资源(例如描述符表)以及驻留在基础硬件平台上的资源(例如输入输出装置)。事件可包括内部中断、外部中断、异常、平台事件(例如初始化(INIT)或系统管理中断(SMI))等。在虚拟机环境中,VMM应当能够具有对如前面部分所述的这些事件和硬件资源的最终控制,以便提供在虚拟机上运行的客户软件的适当操作,以及提供对虚拟机上运行的客户软件及它们之间的防范。为了实现这个目的,当客户软件访问受保护资源时,或者当其它事件(例如中断或异常)出现时,VMM通常接收控制。例如,当VMM支持的虚拟机中的操作使系统装置产生中断时,当前运行的虚拟机被中断,以及处理器的控制被传递给VMM。然后,VMM接收该中断,并且自行处理中断或者调用适当的虚拟机,并把中断传递给那个虚拟机。
附图概述通过参照用来说明本发明的实施例的以下描述和附图,可以最佳地理解本发明。附图包括

图1说明本发明的一些实施例在其中可工作的虚拟机环境的一个实施例;图2是用于处理虚拟机环境中的故障的过程的一个实施例的流程图;图3说明存储故障标识信息的VMCS字段的示范格式;图4是用于采用VMM提供的故障信息来处理虚拟机环境中的故障的过程的一个实施例的流程图。
实施例的描述描述用于采用VMM提供的故障信息来处理虚拟机环境中的故障的方法及设备。在以下描述中,为了说明的目的,陈述了许多具体细节。然而,本领域的技术人员十分清楚,即使没有这些具体细节,也可以实施本发明的实施例。按照对计算机系统的寄存器或存储器中的数据位的操作的算法和符号表示来提供以下详细说明的一些部分。这些算法描述和表示是数据处理领域的技术人员用来向本领域的其它技术人员最有效地传达其工作实质的方式。算法在此以及一般被认为是产生预期结果的独立操作序列。操作是要求物理量的物理处理的那些操作。这些量通常但不一定采取电或磁信号的形式,它们能够被存储、传送、组合、比较或者以其它方式处理。主要为了一般使用的原因,将这些信号称作位、值、元素、符号、字符、项、数等,已经证明有时便利。但应当记住,所有这些及类似的术语均与适当的物理量关联,并且只是应用于这些量上的便捷标签。若没有明确说明,从以下论述中应当知道,采用诸如“处理”或“计算”或“运算”或者“确定”等术语的论述可表示计算机系统或类似电子计算装置的动作和过程,其中所述计算机系统或类似电子计算装置处理表示为计算机系统的寄存器和存储器中的物理(电子)量的数据并将其转换为同样表示为计算机系统存储器或寄存器或者其它这种信息存储、传送或显示装置中的物理量的其它数据。在对实施例的以下详细描述中,参照附图,附图举例说明可实现本发明的特定实施例。附图中,相似的标号描述若干视图中基本上相似的组件。对这些实施例进行充分详细的描述,使本领域的技术人员能够实施本发明。可采用其它实施例,并且可进行结构、逻辑以及电气变更,而没有背离本发明的范围。此外,要理解,本发明的各种实施例虽然有所不同,但不一定是相互排斥的。例如,在一个实施例中描述的特定功能、结构或特征可包含在其它实施例中。虽然以下实例可能在执行单元和逻辑电路的上下文中描述本发明的实施例,但是,本发明的其它实施例也可通过软件来实现。例如,在一些实施例中,本发明可作为计算机程序产品或软件来提供,它可包括其中已存储指令的机器或计算机可读介质,这些指令可用于对计算机(或其它电子装置)编程以执行根据本发明的过程。在其它实施例中,本发明的步骤可由包含用于执行步骤的硬连线逻辑的特定硬件组件来执行,或者由编程计算机组件和定制硬件组件的任何组合来执行。因此,机器可读介质可包括用于存储或传送机器(例如计算机)可读形式的信息的任何机构,但不限于软盘、光盘、小型盘只读存储器(CD-ROM)以及磁光盘、只读存储器(ROM)、随机存取存储器(RAM)、可擦可编程只读存储器(EPROM)、电可擦可编程只读存储器(EEPROM)、磁或光卡、闪速存储器、基于因特网的传输、电、光、声或其它形式的传播信号(例如载波、红外信号、数字信号等)等等。此外,设计可经过各种阶段,从创建到模拟直到制造。
表示设计的数据可通过许多方式来表示设计。首先,如在模拟中有用的那样,硬件可采用硬件描述语言或者另一种功能描述语言来表示。另外,采用逻辑和/或晶体管门电路的电路级模型可在设计过程的某些阶段产生。此外,在某个阶段,大部分设计达到表示硬件模型中的各种装置的物理设置的数据级。在使用传统半导体制造技术的情况中,表示硬件模型的数据可能是指定用来产生集成电路的掩模的不同掩模层上的各种特征是否存在的数据。在设计的任何表示中,数据可通过任何形式的机器可读介质来存储。经调制或者以其它方式产生以便传送这种信息的光或电波、存储器或者磁或光存储装置、如盘可能是机器可读介质。这些介质的任一种可“携带”或“表明”设计或软件信息。传送表明或携带代码或设计的电载体以便执行电信号的复制、缓冲或重传时,制作新的副本。因此,通信提供商或网络提供商可制作体现本发明的技术的产品(载体)的副本。图1说明本发明的一些实施例在其中可工作的虚拟机环境100。在虚拟机环境100中,裸平台硬件110包括计算平台,它可以例如能够运行标准操作系统(0S)和/或虚拟机监控器(VMM)、如VMM 112。VMM 112虽然通常以软件来实现,但可模拟裸机接口并将其导出到高级软件。这种高级软件可包括标准或实时OS,可以是具有有限操作系统功能性的高度剥离的操作环境,或者可能不包括传统的OS工具。或者,例如,VMM 112可以在另一个VMM之中或之上运行。VMM及其典型特征和功能性是本领域的技术人员熟知的,并且可能例如以软件、固件、硬件或通过各种技术的组合来实现。平台硬件110包括处理器118和存储器120。处理器118可以是能够运行软件的任何类型的处理器,例如微处理器、数字信号处理器、微控制器等等。虽然在图1中仅示出一个处理器118,但是,平台硬件110可包括一个或多个这类处理器。存储器120可能是任何类型的可记录/不可记录介质(例如,随机存取存储器(RAM)、只读存储器(ROM)、磁盘存储介质、光存储介质、闪速存储装置等),以及电、光、声或其它形式的传播信号(例如载波、红外信号、数字信号等),以上装置的任何组合,或者处理器118可读的其它任何类型的机器介质。存储器120可存储用于执行本发明的方法实施例的运行的指令。平台硬件110可能是个人计算机(PC)、大型计算机、手持装置、便携计算机、机顶盒或其它任何计算系统的。VMM112为其它软件(即“客户”软件)提供一个或多个虚拟机(VM)的抽象,它可向各种客户提供相同或不同抽象。图1表示三个VM 130、140和150。在各VM上运行的客户软件可包括诸如客户OS 154、160或170等客户OS以及各种客户软件应用程序152、162和172。客户OS 154、160和170预期将访问客户OS正在其中运行的相应VM(例如VM 130、140和150)中的物理资源(例如处理器寄存器、存储器和输入-输出(I/O)装置)以及执行其它功能。例如,根据VM中提供的处理器和平台的体系结构,客户OS预期将有权访问所有寄存器、高速缓存、结构、I/O装置、存储器等。可由客户软件访问的资源可分类为“特许”或者“非特许”。对于特许资源,VMM112有助于客户软件所需的功能性,同时保持对这些特许资源的最终控制。非特许资源不需要由VMM 112控制,并且可由客户软件访问。此外,每个客户OS预期将处理诸如异常(例如页面故障、一般保护故障等)、中断(例如硬件中断、软件中断)以及平台事件(例如初始化(INIT)和系统管理中断(SMI))之类的各种故障事件。这些故障事件的一部分是“特许的”,因为它们必须由VMM 112来处理,以便确保VM 130至150的正确操作,以及用于对客户软件及其之间的防范。当特许故障事件出现或者客户软件尝试访问特许资源时,控制可被转移到VMM 112。控制从客户软件到VMM 112的转移在本文称作VM出口。在帮助资源访问或者适当地处理事件之后,VMM 112可把控制返回给客户软件。控制从VMM 112到客户软件的转移称作VM入口。在一个实施例中,VMM 112通过执行VM入口指令来请求处理器118执行VM入口。在一个实施例中,处理器118根据虚拟机控制结构(VMCS)126中存储的数据来控制VM 130、140和150的操作。VMCS126是一种可包含客户软件的状态、VMM 112的状态、表明VMM 112如何希望控制客户软件的操作的运行控制信息、控制VMM 112与VM之间转变的信息等的结构。在一个实施例中,VMCS存储在存储器120中。在一些实施例中,多个VMCS结构用来支持多个VM。当特许故障事件出现时,VMM 112可自行处理故障,或者判定故障是否需要通过适当的VM来处理。如果VMM 112判定故障要由VM来处理,则VMM 112请求处理器118调用这个VM并且把故障传递给这个VM。在一个实施例中,VMM 112通过把故障指示符设定到传递值并且产生VM入口请求来实现这个目的。在一个实施例中,故障指示符存储在VMCS 126中。在一个实施例中,处理器118包括故障传递逻辑124,它接收VMM 112对于VM入口的请求,并确定VMM 122是否已经请求向VM的故障传递。在一个实施例中,故障传递逻辑124根据VMCS 126中存储的故障指示符的当前值来进行这个确定。如果故障传递逻辑124确定VMM已请求向VM的故障传递,则在把控制转到这个VM时,它把故障传递给VM。在一个实施例中,故障的传递涉及搜索与所传递的故障关联的入口的重定向结构,从这个入口中提取被指定为处理这个故障的例程的位置的描述符,以及采用描述符跳转到例程的开始。被指定为处理相应中断、异常或其它任何故障的例程称作句柄。在一些指令集体系结构(ISA)中,某些故障与在跳转到句柄的开始之前可能需要入栈(或者在硬件寄存器中或经由其它方式来提供)的错误代码相关联。在故障传递期间,处理器118可执行一个或多个地址转换,把地址从虚拟形式转换为物理形式。例如,中断表的地址或者关联句柄的地址可能是虚拟地址。处理器还可能需要在故障传递期间执行各种校验。例如,处理器可执行一致性校验,例如分段寄存器和访问地址的验证(产生极限违反故障、段不存在故障、栈故障等)、可能产生保护故障(例如一般保护故障)的许可级校验等。故障转向期间的地址转换和校验可能产生各种故障,例如页面故障、一般保护故障等。在当前故障的传递过程中出现的一些故障可能引起VM出口。例如,如果VMM 112要求VM在页面故障上存在以便保护物理存储器并且使其虚拟化,则在到VM的当前故障的传递过程中出现的页面故障将产生VM出口。在一个实施例中,故障传递逻辑124通过校验当前故障的传递是否成功来解决上述可能的附加故障的出现。如果故障传递逻辑124确定传递不成功,则进一步确定所得附加故障是否引起VM出口。如果是的话,则故障传递逻辑124产生VM出口。如果不是的话,则故障传递逻辑124把附加故障传递给VM。图2是用于处理虚拟机环境中的故障的过程200的一个实施例的流程图。该过程可通过可包括硬件(例如电路、专用逻辑、可编程逻辑、微码等)、软件(例如运行于通用计算机系统或专用机器的软件)或者它们两者的组合的处理逻辑来执行。在一个实施例中,过程200由图1的故障传递逻辑124来执行。参照图2,过程200从处理逻辑接收把控制从VMM转到VM的请求(处理框202)开始。在一个实施例中,经由VMM执行的VM入口指令来接收转移控制的请求。在判定框204,处理逻辑确定VMM是否已请求向将被调用的VM的故障传递。故障可能是内部中断(例如软件中断)、外部中断(例如硬件中断)、异常(例如页面故障)、平台事件(例如初始化(INIT)或者系统管理中断(SMI))或者其它任何故障事件。在一个实施例中,处理逻辑通过读取VMM所保存的故障指示符的当前值来确定VMM是否已请求故障的传递。故障指示符可驻留在VMCS或者VMM和处理逻辑200可访问的其它任何数据结构中。在一个实施例中,当VMM希望让故障传递到VM时,VMM把故障指示符设置到传递值,然后产生把控制转到这个VM的请求。如果在VM入口期间不需要故障传递,则VMM在请求向VM的控制转移之前把故障指示符设置到非传递值。下面将针对图3来论述这个方面。如果处理逻辑确定VMM已请求故障的传递,则处理逻辑把故障传递给VM,同时把控制转到VM(处理框206)。然后,处理逻辑检查故障的传递是否成功(判定框208)。如果是的话,则过程200结束。如果不是的话,则处理逻辑确定所得附加故障是否引起VM出口(判定框210)。如果是的话,则处理逻辑产生VM出口(处理框212)。如果不是的话,则处理逻辑把附加故障传递给VM(处理框214),以及返回到处理框208,检查是否成功传递这个附加故障。如果是的话,则过程200结束。如果不是的话,则处理逻辑返回到判定框210。如果处理逻辑确定VMM没有请求故障的传递,则处理逻辑把控制转到VM,而没有执行任何故障相关操作(处理框218)。在一个实施例中,当处理逻辑需要把故障传递给VM时,它搜索与被传递的故障关联的入口的重定向结构(例如IntelPentium4的指令集体系结构(ISA)中的中断描述符表(在本文称作IA-32ISA)),从这个入口中提取与这个故障关联的句柄的描述符,以及采用该描述符跳转到句柄的开始。中断描述符表可采用故障标识信息、如故障标识符和故障类型(例如外部中断、内部中断、不可屏蔽中断(NMI)、异常等)来搜索。在一个实施例中,某些故障(例如一些异常)与在跳转到句柄的开始之前需要入栈(或者在硬件寄存器中或经由其它方式来提供)的错误代码关联。在一个实施例中,故障标识信息及关联错误代码由VMM采用指定数据结构来提供。在一个实施例中,指定数据结构为VMCS的组成部分。图3说明存储故障标识信息的VMCS字段的示范格式。这个VMCS字段称作故障信息字段。参照图3,在一个实施例中,故障信息字段为32位字段,在其中,前8位存储故障的标识符(例如中断或异常),后2位标识故障的类型(例如外部中断、软件中断、NMI、异常等),位11表明与这个故障关联的错误代码(若有的话)是否要提供给相应的句柄(通过入栈,存储在硬件寄存器中,等等),以及位31是指定故障是否要如上所述传递给VM的故障指示符。如果故障信息字段的位11表明错误代码要提供给句柄,则第二VMCS字段被访问,以便得到与这个故障关联的错误代码。第二VMCS字段称作故障错误代码字段。在一个实施例中,当VMM希望故障被传递给VM时,VMM把故障标识符和故障类型存储在故障信息字段中,并且把故障指示符(位31)设置到传递值(例如位31=1)。另外,如果故障与需要被提供给句柄的错误代码关联,则VMM把位11设置到传递值(例如位11=1),并且把错误代码值存储在VMCS的故障错误代码字段中。图4是用于采用VMM提供的故障信息来处理虚拟机环境中的故障的过程400的一个实施例的流程图。该过程可通过可包括硬件(例如电路、专用逻辑、可编程逻辑、微码等)、软件(例如运行于通用计算机系统或专用机器的)或者它们两者的组合的处理逻辑来执行。在一个实施例中,过程400由图1的故障传递逻辑124来执行。参照图4,过程400从处理逻辑检测由VMM对VM入口指令的执行(处理框402)开始。进行响应,处理逻辑访问VMM控制的故障指示符位(处理框403),并确定故障是否要传递给将被调用的VM(判定框404)。如果不是的话,则处理逻辑忽略其余的故障信息,并执行所请求的VM入口(处理框406)。如果是的话,则处理逻辑从VMCS的故障信息字段中获取故障信息(处理框408),并确定与这个故障关联的错误代码是否要提供给故障的句柄(判定框410)。如果是的话,则处理逻辑从VMCS的故障错误代码字段中获取错误代码(处理框412)。如果不是的话,则处理逻辑直接进入处理框414。在处理框414,处理逻辑把故障传递给VM,同时执行VM入口。然后,处理逻辑检查故障的传递是否成功(判定框416)。如果是的话,则过程400结束。如果不是的话,则处理逻辑确定所得附加故障是否引起VM出口(判定框418)。如果是的话,则处理逻辑产生VM出口(处理框420)。如果不是的话,则处理逻辑把附加故障传递给VM(处理框422),以及返回到处理框416,检查是否成功传递了这个附加故障。如果是的话,则过程400结束。如果不是的话,则处理逻辑返回到判定框418。这样描述了用于处理虚拟机环境中的故障的方法及设备。应当理解,以上描述只是说明性而不是限制性的。通过阅读和理解以上描述,本领域的技术人员将会十分清楚其它许多实施例。因此,本发明的范围应当参照所附权利要求以及这些权利要求涵盖的完整等效范围共同确定。
权利要求
1.一种方法,包括接收把控制从虚拟机监控器(VMM)转到虚拟机(VM)的请求;确定所述VMM是否已请求向所述VM的故障传递;以及如果所述VMM已请求向所述VM的故障传递,则在把控制转到所述VM时,把所述故障传递给所述VM。
2.如权利要求1所述的方法,其特征在于,把控制转到所述VM的所述请求经由所述VMM执行的指令来接收。
3.如权利要求1所述的方法,其特征在于,确定所述VMM是否已请求向所述VM的故障传递包括访问所述VMM保存的故障指示符;以及确定所述故障指示符是否被设置到传递值。
4.如权利要求1所述的方法,其特征在于,还包括确定所述故障的标识符和所述故障的类型;以及确定所述故障是否与要提供给和所述故障关联的句柄的错误代码相关联。
5.如权利要求4所述的方法,其特征在于,还包括如果所述故障要求向与所述故障关联的句柄传递错误代码,则检索所述错误代码并把所述错误代码提供给所述句柄。
6.如权利要求4所述的方法,其特征在于,所述故障指示符、所述故障标识符和所述故障的类型存储在第一字段中;以及所述错误代码存储在第二字段中。
7.如权利要求6所述的方法,其特征在于,所述第一字段和所述第二字段包含在虚拟机控制结构(VMCS)中。
8.如权利要求1所述的方法,其特征在于,还包括确定所述故障的传递是否成功;确定新的故障是否要求控制转到所述VMM;以及如果所述新的故障要求所述转变,则把控制转到所述VMM。
9.如权利要求8所述的方法,其特征在于,还包括确定所述新的故障不要求控制转到所述VMM;以及把所述新的故障传递给所述VM。
10.一种设备,包括虚拟机监控器(VMM);由所述VMM控制的数据结构,所述数据结构存储故障指示符;以及故障传递逻辑,接收把控制从所述VMM转到虚拟机(VM)的请求,采用所述故障指示符来确定所述VMM是否已请求向所述VM的故障传递,以及如果所述VMM已请求向所述VM的故障传递,则在把控制转到所述VM时把故障传递给所述VM。
11.如权利要求10所述的设备,其特征在于,把控制转到所述VM的所述请求经由所述VMM执行的指令来接收。
12.如权利要求10所述的设备,其特征在于,所述故障传递逻辑通过访问所述VMM所保存的所述故障指示符以及确定所述故障指示符是否设置到传递值,确定所述VMM是否已请求向所述VM的故障传递。
13.如权利要求10所述的设备,其特征在于,所述故障传递逻辑还确定所述故障的标识符和所述故障的类型,以及确定所述故障是否与要提供给和所述故障关联的句柄的错误代码相关联。
14.如权利要求13所述的设备,其特征在于,所述故障传递逻辑还检索所述错误代码,以及如果所述故障要求把错误代码传递给与所述故障关联的句柄,则向所述句柄提供所述错误代码。
15.如权利要求13所述的设备,其特征在于所述故障指示符、所述故障标识符和所述故障的类型存储在第一字段中;以及所述错误代码存储在第二字段中。
16.如权利要求15所述的设备,其特征在于,所述第一字段和所述第二字段包含在虚拟机控制结构(VMCS)中。
17.如权利要求10所述的设备,其特征在于,所述故障传递逻辑还确定所述故障的传递不成功,确定新的故障是否要求控制转到所述VMM,以及如果所述新的故障要求所述转变,则把控制转到所述VMM。
18.如权利要求17所述的设备,其特征在于,所述故障传递逻辑还确定所述新的故障不要求控制转到所述VMM,以及把所述新的故障传递给所述VM。
19.一种系统,包括存储器,存储客户软件;以及处理器,耦合到所述存储器,接收把控制从虚拟机监控器(VMM)转到所述客户软件的请求,确定所述VMM是否已请求向所述客户软件的故障传递,以及在把控制转到所述客户软件时,把所述故障传递给所述客户软件。
20.如权利要求19所述的系统,其特征在于,所述处理器还通过访问所述VMM所保存的故障指示符以及确定所述故障指示符是否设置到传递值,确定所述VMM是否已请求向所述VM的故障传递。
21.如权利要求19所述的系统,其特征在于,所述处理器还确定所述故障的标识符和所述故障的类型,以及确定所述故障是否与要提供给和所述故障关联的句柄的错误代码相关联。
22.如权利要求21所述的系统,其特征在于,所述处理器还检索所述错误代码,以及如果所述故障要求把所述错误代码传递给与所述故障关联的所述句柄,则向所述句柄提供所述错误代码。
23.一种机器可读介质,其中包含指令,这些指令由处理系统执行时,使所述处理系统执行一种方法,所述方法包括接收把控制从虚拟机监控器(VMM)转到虚拟机(VM)的请求;确定所述VMM是否已请求向所述VM的故障传递;以及如果所述VMM已请求向所述VM的故障传递,则在把控制转到所述VM时,把所述故障传递给所述VM。
24.如权利要求23所述的机器可读介质,其特征在于,把控制转到所述VM的所述请求经由所述VMM执行的指令来接收。
25.如权利要求23所述的机器可读介质,其特征在于,确定所述VMM是否已请求向所述VM的故障传递包括访问所述VMM保存的故障指示符;以及确定所述故障指示符是否被设置到传递值。
26.如权利要求23所述的机器可读介质,其特征在于,所述方法还包括确定所述故障的标识符和所述故障的类型;以及确定所述故障是否与要提供给和所述故障关联的句柄的错误代码相关联。
全文摘要
在一个实施例中,从虚拟机监控器(VMM)接收把控制转到虚拟机(VM)的请求,以及确定VMM是否已请求向VM的故障传递。如果确定为肯定的,则在控制被转到VM时,故障被传递给VM。
文档编号G06F9/455GK1849586SQ200480026398
公开日2006年10月18日 申请日期2004年9月15日 优先权日2003年9月15日
发明者S·贝内特, A·安德逊, S·耶亚辛, A·卡吉, G·奈格, R·乌利希, M·科祖奇, L·史密斯三世, S·罗杰斯 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1