首页 / 用于多级虚拟化的技术

用于多级虚拟化的技术有效专利 发明

技术内容

用于多级虚拟化的技术 相关申请的交叉引用 [0001] 本申请要求于2015年9月25日提交的名称为“TECHNOLOGIES FOR MULTI-LEVEL VIRTUALIZATION(用于多级虚拟化的技术)”的美国实用新型专利申请序列号14/866,187的优先权。 背景技术 [0002] 典型的计算机处理器包括对虚拟化操作的硬件支持。软件虚拟化包括从主机操作系统、管理程序或虚拟机监测程序(VMM)内透明地执行一个或多个访客操作系统。硬件虚拟化特征可以包括扩展特权模型、对虚拟存储器寻址的硬件辅助支持、对扩展存储器权限的支持以及其他虚拟化特征。 [0003] 某些计算设备包括用于监测或检查主机操作系统完整性的瘦管理程序。然而,包括瘦管理程序的计算系统可能难以在仍然维持安全的同时另外执行管理程序或VMM,比如由主机操作系统主控的VMM。例如,被主控的VMM通常在主机操作系统中具有可能潜在地危及主机操作系统安全的特权部件。可替代地,为了保护主机操作系统的安全断言,瘦管理程序可以使硬件虚拟化特征对被主控的VMM不可用,和/或针对被主控的VMM对硬件特征进行虚拟化,并以嵌套和/或非特权模式运行被主控的VMM。 [0004] 在使用嵌套虚拟化的系统中,瘦管理程序对每个虚拟机(VM)退出进行虚拟化,这可能导致瘦管理程序与被主控VMM之间的大量附加VM退出。由 公司制造的某些处理器包括可以减少VM退出数量的硬件特征,如虚拟机控制结构(VMCS)shadowing。然而,在这些实施例中,瘦管理程序仍然针对每个VM退出执行嵌套VM退出处理。 附图说明 [0005] 在附图中通过示例的方式而不是通过限制的方式来展示了本文中所描述的概念。 为了说明的简单和清楚起见,附图中所展示的元件不一定按比例绘制。在认为适当的情况下,在附图当中已经重复了参考标号以表示相应或相似的元件。 [0006] 图1是用于多级虚拟化的计算设备的至少一个实施例的简化框图; [0007] 图2是图1的计算设备的环境的至少一个实施例的简化框图; [0008] 图3是可由图1至图2的计算设备建立的管理程序环境的至少一个实施例的简化框图; [0009] 图4是可由图1至图3的计算设备执行的用于根虚拟化的方法的至少一个实施例的简化流程图; [0010] 图5是可由图1至图3的计算设备执行的用于虚拟机退出处理的方法的至少一个实施例的简化流程图; [0011] 图6是可由图1至图3的计算设备执行的用于非根管理程序半虚拟化的方法的至少一个实施例的简化流程图;并且 [0012] 图7是可由图1至图3的计算设备执行的用于非根回调处理的方法的至少一个实施例的简化流程图。 具体实施方式 [0013] 虽然本公开的概念易于经历各种修改和替代形式,但是在附图中已经通过示例的方式示出了其特定实施例并且将在本文中对其进行详细描述。然而,应当理解的是,并不意在将本公开的概念限制于所公开的特定形式,而相反,意图是覆盖与本公开和所附权利要求书一致的所有修改形式、等效形式和替代形式。 [0014] 在说明书中提到“一个实施例(one embodiment)”、“实施例(an embodiment)”、“示意性实施例(an illustrative embodiment)”等表明所描述的实施例可以包括特定特征、结构或特性,但每一个实施例可以或可以不一定包括所述特定特征、结构或特性。而且,这种短语不一定指相同的实施例。进一步地,当关于实施例而描述了特定特征、结构或特性时,应当认为的是,无论是否进行了明确描述,结合其他实施例来实现这种特征、结构或特性都在本领域的技术人员的知识内。另外,应理解的是,包括在采用“至少一个A、B和C”形式的列表中的项可意指(A);(B);(C);(A和B);(A和C);(B和C);或(A、B和C)。类似地,采用“A、B或C中的至少一项”的形式列出的项可以意指(A);(B);(C);(A和B);(A和C);(B和C);或(A、B和C)。 [0015] 在一些情况下,可以在硬件、固件、软件或其任何组合中实施所公开的实施例。还可以将所公开的实施例实施为由暂态或非暂态机器可读(例如,计算机可读)存储介质承载或者存储在其上的可由一个或多个处理器来读取和执行的指令。机器可读存储介质可以实施为任何存储设备、机制、或用于存储或传输采用机器可读形式的信息的其他物理结构(例如,易失性或非易失性存储器、介质盘或其他介质设备)。 [0016] 在附图中,可以采用特定安排和/或排序来示出一些结构特征或方法特征。然而,应当理解的是,可以不需要这种特定的安排和/或排序。相反,在一些实施例中,可以采用与在说明性附图中所示出的方式和/或顺序不同的方式和/或顺序来安排这种特征。此外,在具体的图中包括结构特征或方法特征并不意指暗示在所有实施例中都需要这种特征,并且在一些实施例中,可以不包括这种特征或者这种特征可以与其他特征组合。 [0017] 现在参照图1,用于安全虚拟机间共享存储器通信的说明性计算设备100包括处理器120,所述处理器支持在根虚拟化模式和非根虚拟化模式下执行。在操作中,如以下进一步描述的,计算设备100建立在根虚拟化模式下执行的根管理程序和在非根虚拟化模式下执行的非根管理程序。根管理程序可以执行安全操作和性能密集型操作,比如用于虚拟机退出的通用处理程序。非根管理程序可以向根管理程序注册一个或多个回调处理程序和相关联的触发条件。响应于虚拟机退出,如果满足触发条件,则根管理程序可以切换至非根虚拟化模式并执行经注册回调处理程序。因此,计算设备100可以在无需嵌套虚拟化或软件仿真的情况下使能实现两级虚拟化,并且因此可以大大提高虚拟化性能。例如,与嵌套虚拟化相比,通过处理根管理程序中的虚拟机退出并仿真触发条件,计算设备100可以避免执行许多虚拟机退出。另外,计算设备100可以批处理或以其他方式复用虚拟化操作,并使用虚拟化支持对象的更新列表来避免所有虚拟化支持对象的完全虚拟化。与传统虚拟机监测程序或管理程序相比,通过在非根管理程序中包括更高级的功能,根管理程序可以具有更小的代码基,并且因此计算设备100还可以具有减小的可信代码基。 [0018] 计算设备100可以被实施为能够执行多级虚拟化并且以其他方式执行本文中所描述的功能的任何类型的设备。例如,计算设备100可以被实施为(而不限于)工作站、服务器计算机、分布式计算系统、多处理器系统、膝上型计算机、笔记本计算机、平板计算机、智能电话、移动计算设备、可穿戴计算设备、计算机、台式计算机、消费者电子设备、智能家电、和/或能够虚拟机间共享存储器通信的任何其他计算设备。如在图1中所示出的,说明性计算设备100包括处理器120、I/O子系统126、存储器128、和数据存储设备130。当然,在其他实施例中,计算设备100可以包括其他或附加部件,如笔记本计算机中常见的部件(例如,各种输入/输出设备)。此外,在一些实施例中,说明性部件中的一个或多个说明性部件可以结合在另一部件中,或以其他方式形成另一部件的一部分。例如,在一些实施例中,可以将存储器128或者其部分结合到处理器120中。 [0019] 处理器120可以被实施为能够执行在本文中所描述的功能的任何类型的处理器。 例如,处理器120可以实施为(多个)单核或多核处理器、数字信号处理器、微控制器、或者其他处理器或处理/控制电路。另外,尽管被展示为包括单个处理器120,但应当理解,在一些实施例中,计算设备100可以包括多个处理器120。处理器120包括对虚拟化的基于硬件的、硬件辅助的或硬件加速的支持。具体地,处理器120包括虚拟机扩展(VMX)支持122和扩展页表(EPT)支持124。VMX支持122通过提供以下两种执行模式来支持操作系统和其他访客的虚拟化执行:VMX根模式和VMX非根模式。VMX根模式允许执行软件具有对计算设备100及其硬件资源的广泛控制。因此,根管理程序可以在VMX根模式下执行。VMX非根模式限制访问某些硬件指令,同时仍实施处理器120的普通环/特权系统。由此,非根管理程序和一个或多个访客虚拟机(VM)和/或操作系统(OS)可以在VMX非根模式下执行。某些硬件指令和某些其他系统事件的执行可能会触发到VMX根模式的硬件辅助转变。这些硬件辅助转变通常被称为虚拟机退出(VMExit)或超级调用。在遇到VMExit时,处理器120可以将情境从访客VM或非根管理程序切换至根管理程序以便处理VMExit。因此,在一些实施例中,VMExit可以对虚拟化代码施加性能损害。VMX支持122可以被实施为例如 VT-x技术。 [0020] EPT支持124支持硬件辅助的第二级页地址转换。对于非虚拟化工作负荷(或当在VMX根模式下操作时),处理器120可以在虚拟存储器地址(也被称为线性地址)与物理存储器地址之间提供硬件辅助转换。处理器120可以使用存储在存储器128中并由主机操作系统、管理程序或VMM管理的一个或多个页表结构来转换存储器地址。对于虚拟化工作负荷(或当在VMX非根模式下操作时),处理器120支持虚拟存储器地址(例如,由在访客VM内执行的应用所使用的)与访客物理存储器地址之间的硬件辅助转换。访客OS可以维护存储器128中的一个或多个页表结构以管理到访客物理存储器地址的转换。然而,访客物理存储器地址可能不与存储器128内的实际物理存储器地址相对应。EPT支持124在访客物理存储器地址与物理存储器地址(也被称为主机物理存储器地址)之间提供硬件辅助转换。EPT支持124可以使用存储在存储器128中并由根管理程序管理的一个或多个扩展页表结构来转换存储器地址。在不使用EPT支持124的情况下,访客物理存储器地址与物理存储器地址之间的转换可能需要一个或多个VMExit。EPT支持124还可以支持将访问权限(例如,读、写和/或执行权限)与每个访客物理页和/或物理页相关联。权限违规(其被称为EPT违规)可能生成允许根管理程序处理EPT违规的VMExit。EPT支持124可以被实施为例如 VT-x技术。 [0021] 存储器128可以被实施为能够执行本文描述的功能的任何类型的易失性或非易失性存储器或数据存储设备。在操作中,存储器128可以存储在对计算设备100的操作期间所使用的各种数据和软件,比如操作系统、应用、程序、库、和驱动程序。存储器128还可以包括可用于控制处理器120的虚拟化功能的一个或多个虚拟化支持对象。例如,存储器128可以包括一个或多个虚拟机控制结构(VMCS),所述虚拟机控制结构可以用于配置并以其他方式控制由计算设备100执行的虚拟机。作为另一示例,存储器128可以包括一个或多个扩展页表(EPT)。如以下进一步描述的,存储器128还可以包括由非根管理程序管理的一个或多个虚拟虚拟化支持对象。 [0022] 存储器128经由I/O子系统126通信地耦合至处理器120,所述I/O子系统可以被实施为用于促进与计算设备100的处理器120、存储器128、以及其他部件的输入/输出操作的电路系统和/或部件。例如,I/O子系统126可以被实施为或以其他方式包括用于促进输入/输出操作的存储器控制器中枢、输入/输出控制中枢、固件设备、通信链路(即,点到点链路、总线链路、线、电缆、光导、印刷电路板迹线等)和/或其他部件和子系统。在一些实施例中,I/O子系统126可以形成片上系统(SoC)的一部分并且可以与计算设备100的处理器120、存储器128以及其他组件一起结合在单个集成电路芯片上。 [0023] 数据存储设备130可以被实施为被配置成对数据进行短期或长期存储的任何类型的一种或多种设备,如例如,存储器设备和电路、存储器卡、硬盘驱动器、固态驱动器或其他数据存储设备。在一些实施例中,计算设备100还可以包括一个或多个外围设备132。外围设备132可以包括任何数量的附加输入/输出设备、接口设备和/或其他外围设备。例如,在一些实施例中,外围设备132可以包括显示器、触摸屏、图形电路系统、键盘、鼠标、扬声器系统、网络适配器、通信电路系统、和/或其他输入/输出设备、接口设备、和/或外围设备。 [0024] 现在参照图2,在说明性实施例中,计算设备100在操作期间建立环境200。说明性实施例200包括VMX根模块202和VMX非根模块212。如所示出的,VMX根模块202包括虚拟机退出模块204、回调管理模块206、更新管理模块208和完整性模块210。VMX非根模块212包括回调模块216和半虚拟化模块218。环境200的各个模块可以被实施为硬件、固件、软件或其组合。例如,环境200的模块、逻辑和其他部件中的每一者可以形成计算设备100的处理器120或其他硬件部件的一部分或以其他方式由所述计算设备的所述处理器或所述其他硬件部件建立。这样,在一些实施例中,环境200的模块中的任何一个或多个模块可以被实施为电气设备的电路或集合(例如,虚拟机退出电路204、回调电路216等)。 [0025] 虚拟机退出模块204被配置成:由根管理程序接收由计算设备100的虚拟机生成的虚拟机退出。如以下进一步描述的,虚拟机由计算设备100的非根管理程序主控。虚拟机退出模块204被配置成:在处理器120的根虚拟化模式(如VMX根模式)下操作。虚拟机退出模块 204可以进一步被配置成:在确定未针对虚拟机退出的退出原因注册回调处理程序之后由处于根虚拟化模式下的根管理程序来处理虚拟机退出。虚拟机退出模块204可以进一步被配置成:在处理虚拟机退出之后或者在确定未满足与回调处理程序相关联的触发条件之后恢复虚拟机的执行。 [0026] 回调管理模块206被配置成:由处于根虚拟化模式下的根管理程序判定是否针对虚拟机退出的退出原因注册了非根管理程序的回调处理程序。回调管理模块206进一步被配置成:如果确定注册了回调处理程序则由处于根虚拟化模式下的根管理程序判定是否满足与回调处理程序相关联的触发条件。 [0027] 更新管理模块208被配置成:由处于根虚拟化模式下的根管理程序响应于执行回调处理程序而判定是否已经修改了非根管理程序的虚拟虚拟化支持对象。虚拟虚拟化支持对象可以被实施为例如虚拟虚拟机控制结构(VMCS)或虚拟扩展页表(EPT)。更新管理模块 208进一步被配置成:由处于根虚拟化模式下的根管理程序响应于确定已经修改了虚拟虚拟化支持对象而基于虚拟虚拟化支持对象来更新所述计算设备100的虚拟化支持对象。类似地,虚拟化支持对象可以被实施为VMCS或EPT。更新管理模块208进一步被配置成:由根管理程序响应于更新虚拟化支持对象而恢复虚拟机的执行。在一些实施例中,更新虚拟化支持对象可以包括:由根管理程序来验证虚拟虚拟化支持对象的有效性。在一些实施例中,更新管理模块208可以进一步被配置成:在接收到虚拟机退出并由处于根虚拟化模式下的根管理程序生成可以被提供至非根管理程序的虚拟化支持对象的变化列表之后,由处于根虚拟化模式下的根管理程序来修改虚拟化支持对象。 [0028] 完整性模块210被配置成:由处于根虚拟化模式下的根管理程序监测非根管理程序的执行。在一些实施例中,完整性模块210可以进一步被配置成:由处于根虚拟化模式下的根管理程序监测计算设备100的主机操作系统的执行。如以下所描述的,主机操作系统可以主控非根管理程序。 [0029] 回调模块216被配置成:如果确定满足触发条件则执行非根管理程序的回调处理程序。在一些实施例中,回调模块216可以被配置成:在处理器120的非根虚拟化模式下执行回调处理程序。回调模块216可以进一步被配置成:由非根管理程序基于虚拟化支持对象来更新虚拟虚拟化支持对象。回调模块216可以进一步被配置成:使用由根管理程序提供的虚拟化支持对象的变化列表。回调模块216可以进一步被配置成:在执行回调处理程序的同时由非根管理程序来修改虚拟虚拟机支持对象,并且用于由非根管理程序生成虚拟虚拟机支持对象的变化列表。 [0030] 半虚拟化模块218被配置成:由非根管理程序判定非根管理程序是否是在非根虚拟化模式下执行的。半虚拟化模块218进一步被配置成:在确定非根管理程序是在非根虚拟化模式下执行的之后,由非根管理程序向根管理程序注册回调处理程序和相关联的触发条件。半虚拟化模块218进一步被配置成:在确定非根管理程序不是在非根虚拟化模式下执行的之后,由处于根虚拟化模式下的非根管理程序来主控虚拟机。 [0031] 现在参照图3,在使用时,计算设备100可以建立管理程序环境300。如所示出的,说明性管理程序环境300包括主机操作系统302、一个或多个虚拟机304、非根管理程序306和根管理程序320。主机操作系统302可以被实施为任何操作系统或计算设备100的其他控制结构。如所示出的,主机操作系统302在VMX非根模式下执行。 [0032] 根管理程序320(也被称为零级或L0管理程序)可以被实施为管理程序、虚拟机监测程序(VMM)或在VMX根模式下执行的计算设备100的其他控制结构。根管理程序320可以是“瘦(thin)”的;也就是说,根管理程序320可以具有相对较小的代码基。例如,根管理程序 320可以仅提供硬件虚拟化抽象和隔离,而无需提供访客的完全虚拟化。如所示出的,根管理程序320可以包括用于监测和/或完整性检查主机操作系统302和/或非根管理程序306的完整性检查程序322。 [0033] 非根管理程序306(也被称为一级或L1管理程序)可以被实施为被主控VMM、管理程序或可以在VMX非根模式下执行的计算设备100的其他控制结构。非根管理程序306可以提供访客(例如,虚拟机304)的完全虚拟化并且因此可以具有相对较大的代码基。因为非根管理程序306可能不在VMX根模式下执行,因此非根管理程序306不必是计算设备100的可信代码基的一部分。 [0034] 如图3中所示出的并且如以下进一步描述的,根管理程序320对包括例如一个或多个虚拟机控制结构(VMCS)328和/或扩展页表(EPT)330的VMX对象326的集合进行维护。如以下进一步描述的,VMX对象326可以包括由处理器120使用以控制虚拟化代码的执行的任何存储器中结构。类似地,非根管理程序306对包括例如一个或多个虚拟VMCS 310和/或虚拟EPT312的虚拟VMX对象308的集合进行维护。如以下进一步描述的,对虚拟VMX对象308的更新可以传播到VMX对象326,并且反之亦然。如图3中所示出的,更新可以使用非根管理程序更新列表314和根管理程序更新列表324来传播,所述非根管理程序更新列表和根管理程序更新列表可以分别指示由非根管理程序306对虚拟VMX对象308做出的改变以及由根管理程序320对VMX对象326做出的改变。 [0035] 根管理程序320进一步建立一个或多个虚拟机(VM)退出/进入处理程序332。VM退出/进入处理程序332可以被实施为任何函数、方法、向量、或者可以由处理器120响应于虚拟机退出和/或虚拟机进入而调用的其他例程。非根管理程序306进一步包括一个或多个回调处理程序316,所述回调处理程序可以被实施为任何函数、方法、向量或可以由根管理程序320例如响应于VM退出而调用的其他例程。如以下进一步描述的,根管理程序320可以估计一个或多个触发条件334以判定是否调用回调处理程序316。 [0036] 如所示出的,计算设备100进一步包括由根管理程序320提供的根管理程序应用编程接口(API)318。根管理程序API 318可以被实施为任何函数调用、超级调用、虚拟机退出、专用处理器指令、或可以由非根306使用来与根管理程序320通信的其他接口元件。因此,在一些实施例中,根管理程序306可以是半虚拟化的;也就是说,非根管理程序306可以能够例如通过访问根管理程序API 318来确定其是在根管理程序320的监督下执行的。 [0037] 例如,根管理程序API 318可以包括用于针对每个VM退出原因配置VM退出处理的超级调用,如VmExitHandle()超级调用。VmExitHandle()超级调用可以指定VM退出的原因、指向回调处理程序316的指针、(原因特定的)触发条件334、指向虚拟VMX对象308(例如,虚拟VMCS 310或虚拟EPT 312)的指针、L1更新列表314、L0更新列表324和/或其他数据。作为另一示例,根管理程序API 318可以包括用于处理虚拟VMCS 310和/或虚拟EPT 312的超级调用(例如,以便执行无效化或其他任务)。根管理程序API 318可以包括用于请求根管理程序320更新VMCS 328的指定虚拟VMCS 310和非根管理程序更新列表314的UpdateVMCS()超级调用,并且根管理程序API 318可以包括用于请求根管理程序320更新EPT 330的指定虚拟EPT 312和非根管理程序更新列表314的UpdateEPT()超级调用。在一些实施例中,API  318可以允许非根管理程序306执行一个或多个专用处理器指令以便在无需生成超级调用的情况下访问处理器120的硬件虚拟化功能。例如,在一些实施例中,非根管理程序306可以执行VMFUNC处理器指令以访问L0更新列表324、VMX对象326、或已经由根管理程序320指定的其他数据。 [0038] 现在参照图4,在使用时,计算设备100可以执行用于根虚拟化的方法400。方法400可以通过根管理程序320来执行,并且因此可以在完全访问计算设备100的VMX根模式下执行。方法400开始于框402,在所述框中,计算设备100为虚拟化执行准备VMX对象326。VMX对象326可以包括由处理器120使用以便控制虚拟化代码的执行的任何存储器中结构。例如,VMX对象326可以包括一个或多个虚拟机控制结构(VMCS)328和/或一个或多个扩展页表(EPT)330。所准备的特定VMX对象326可以取决于处理器120的虚拟化能力以及计算设备100的特定虚拟化工作负荷。例如,根管理程序320可以为每个虚拟CPU准备VMCS 328并为每个虚拟机304准备EPT 330。 [0039] 在框404中,计算设备100启动主机操作系统302的执行。主机操作系统302可以在VMX非根模式下执行。例如,根管理程序320可以执行到主机操作系统302中的VM进入操作以便启动主机操作系统302的执行。在一些实施例中,在框406中,根管理程序320可以对主机操作系统302进行监测和/或完整性检查。根管理程序320可以识别并监测某些关键可执行图像、数据结构、或其他存储器位置(例如通过验证关键存储器位置的校验和)。根管理程序 320可以使用任何适当的技术对主机操作系统302进行监测或完整性检查,包括使用处理器 120的虚拟化特征。例如,根管理程序320可以通过监测VM退出、通过设置对一个或多个EPT  330的权限、或者通过使用其他虚拟化特征来监测对存储器中的某些位置的修改。 [0040] 在框408中,计算设备100启动非根管理程序306的执行。非根管理程序306可以在VMX非根模式下执行。主机操作系统302可以在VMX非根模式下执行作为普通进程的非根管理程序306。另外地或可替代地,根管理程序320可以在VMX非根模式下启动非根管理程序 306的执行。在一些实施例中,在框410中,根管理程序320可以对非根管理程序306进行监测和/或完整性检查。根管理程序320可以识别并监测某些关键可执行图像、数据结构、或其他存储器位置(例如通过验证关键存储器位置的校验和)。根管理程序320可以使用任何适当的技术对非根管理程序306进行监测或完整性,包括使用处理器120的虚拟化特征。例如,根管理程序320可以通过监测VM退出、通过设置对一个或多个EPT 330的权限、或者通过使用其他虚拟化特征来监测对存储器中的某些位置的修改。 [0041] 在框412中,计算设备100的根管理程序320注册由非根管理程序306提交的一个或多个回调处理程序316和相关联触发条件334。每个回调处理程序316可以被实施为任何函数、方法、向量或可以由根管理程序320调用的非根管理程序306的其他例程。根管理程序 320可以针对一个或多个潜在VM退出原因注册回调处理程序316。每个触发条件334可以被实施为任何策略、过滤器或可以由根管理程序320估计的其他条件测试。如以下进一步描述的,触发条件334被估计成判定是否调用相关联回调处理程序316。根管理程序320可以响应于对根管理程序应用编程接口(API)318的一个或多个调用而注册回调处理程序316和触发条件334。例如,非根管理程序306可以调用一个或多个函数调用、超级调用、虚拟机退出、或用于注册回调处理程序316和/或触发条件334的API 318的其他接口元件。当注册回调处理程序316时,非根管理程序306还可以供应附加信息,诸如指向虚拟VMX对象308的指针或待由根管理程序320进行的所请求的VMCS 328字段更新的列表。 [0042] 在框414中,计算设备100的根管理程序320监测从VMX非根模式中生成的VM退出。 VM退出可以由例如主机操作系统302、虚拟机304和/或非根管理程序306中的一项或多项生成。根管理程序320可以使用任何技术来监测VM退出。例如,在一些实施例中,根管理程序 320可以休眠、让步(yield)或以其他方式停止处理,并等待处理器120响应于VM退出而调用VM退出处理程序332。在根管理程序320监测VM退出时,方法400完成,但主机操作系统302、虚拟机304和非根管理程序306可以继续在计算设备100上执行。 [0043] 现在参照图5,在使用时,计算设备100可以执行用于虚拟机退出处理的方法500。 方法500可以通过根管理程序320来执行,并且因此可以在完全访问计算设备100的VMX根模式下执行。方法500开始于框502,在所述方框中,计算设备100处理虚拟机退出。如上所述,处理器120的虚拟化支持可以响应于VM退出而调用根管理程序320的VM退出处理程序332。 VM退出处理程序332在VMX根模式下执行。 [0044] 在框504中,计算设备100判定是否已经针对当前VM退出的VM退出原因注册了回调处理程序316。计算设备100可能由于许多原因(诸如中断、故障、软件中断、EPT违规、快速VM退出命令或其他VM退出原因)而生成VM退出。如以上结合框412所描述的,非根管理程序306可以针对特定VM退出原因向根管理程序320注册回调处理程序316。计算设备100可以使用任何技术来确定当前VM退出的退出原因。例如,计算设备100可以读取VMCS 328的一个或多个字段。在框506中,计算设备100检查是否注册了回调处理程序316。如果是,则方法500前进至框510,如以下所描述的。如果未注册回调处理程序316,则方法500分支到框508。 [0045] 在框508中,计算设备100的根管理程序320处理VM退出。根管理程序320可以对VM退出执行任何适当的处理,包括修改VMX对象326或执行其他虚拟化任务。在一些实施例中,根管理程序320可以执行通用或默认VM退出处理操作。因此,根管理程序320可以在没有非根管理程序306的参与的情况下处理某些VM退出。例如,在一些实施例中,由执行CPUID指令而导致的VM退出可以由根管理程序320进行处理而无需调用非根管理程序306。在处理VM退出之后,方法500向前分支到框530,在所述框中,根管理程序320执行到VMX非根模式的VM进入,例如恢复主机操作系统302、虚拟机304和/或非根管理程序306的执行。 [0046] 返回参照框506,如果针对VM退出的退出原因注册了回调处理程序316,则方法500前进至框510,在所述框中,根管理程序320处理VM退出。如上所述,根管理程序320可以对VM退出执行任何适当的处理,包括通用或默认VM退出处理。在一些实施例中,在框512中,根管理程序320可以修改一个或多个VMX对象326(例如,VMCS 328和/或EPT 330)并且创建由根管理程序320执行的更新列表324。根管理程序更新列表324可以识别特定的VMX对象326、字段或由根管理程序320修改的其他数据。例如,列表324可以被实施为识别已经被根管理程序320修改的VMCS 328和/或EPT 330的特定字段的位图。类似地,在一些实施例中,在框514中,根管理程序320可以访问已经由非根管理程序306针对其请求更新的一个或多个VMX对象326。如以上结合图4的框412所描述的,非根管理程序306可以请求针对特定VMX对象326、字段或其他VMX数据的更新。根管理程序320可以包括所请求的VMX对象326、字段或根管理程序更新列表324中的其他数据。根管理程序320可以设置与所请求数据相关联的一个或多个位、复制所请求数据、或以其他方式使所请求数据对非根管理程序306可用。 [0047] 在框516中,计算设备100的根管理程序320对与针对当前VM退出原因而注册的回调处理程序316相关联的一个或多个触发条件334进行估计。如上所述,每个触发条件334可以被实施为任何策略、过滤器或可以由根管理程序320估计的其他条件测试。由于触发条件 334是由非根管理程序306指定但由根管理程序320估计的,所以触发条件334允许将来自非根管理程序306的策略决策授权给根管理程序320。在框518中,根管理程序320判定是否已经满足(多个)触发条件334。若否,则方法500向前分支到框530,在所述框中,根管理程序 320执行到VMX非根模式的VM进入,例如恢复主机操作系统302、虚拟机304和/或非根管理程序306的执行。如果已经满足(多个)触发条件334,则方法500前进至框520。 [0048] 在框520中,在一些实施例中,计算设备100切换至VMX非根模式。例如,根管理程序 320可以执行VM进入或以其他方式切换至VMX非根模式。切换至VMX非根模式可以允许根管理程序320在如以下所描述地执行回调处理程序316的同时维持计算设备100的安全性和/或完整性。另外地或可替代地,在一些实施例中,如果根管理程序320受非根管理程序306信任,则计算设备100可以在执行回调处理程序316的同时保持在VMX根模式下,这可以改善性能。在框522中,计算设备100执行非根管理程序306的回调处理程序316。在回调处理程序 316执行时,回调处理程序316可以修改一个或多个虚拟VMX对象308。下面结合图7进一步描述回调处理程序316的一个潜在实施例。 [0049] 在完成回调处理程序316的执行之后,在框524中在VMX根模式下恢复方法500的执行。在框524中,计算设备100检查在回调处理程序316的执行期间由非根管理程序306对虚拟VMX对象308(例如,虚拟VMCS 310和/或虚拟EPT 312)执行的任何更新。计算设备100可以使用任何技术来判定是否已经更新了虚拟VMX对象308。例如,根管理程序320可以从自非根管理程序306接收非根管理程序更新列表314。类似于根管理程序更新列表324,非根管理程序更新列表314识别虚拟VMX对象308、字段或已经由非根管理程序306修改的虚拟VMX对象 308的其他数据。列表314可以被实施为由非根管理程序306修改的虚拟VMCS 310和/或虚拟EPT 312的所识别字段的位图。在框526中,计算设备100判定虚拟VMX对象308是否被非根管理程序306修改。若否,则方法500向前分支到框530,在所述框中,根管理程序320执行到VMX非根模式的VM进入,例如恢复主机操作系统302、虚拟机304和/或非根管理程序306的执行。 如果虚拟VMX对象308被修改,则方法500前进至框528。 [0050] 在框528中,计算设备100将来自虚拟VMX对象308的更新复制到VMX对象326。计算设备100可以仅复制那些虚拟VMX对象308、字段或例如使用非根管理程序更新列表314而已经改变的其他数据。在计算设备100复制更新数据时(或者在复制更新数据之前),根管理程序320可以检查包括在虚拟VMX对象308中的数据的有效性。因此,通过仅复制有效数据,根管理程序320可以维持计算设备100的虚拟化环境的安全性和完整性。在将更新复制到VMX对象326之后,方法500前进至框530,在所述框中,根管理程序320执行到VMX非根模式的VM进入,例如恢复主机操作系统302、虚拟机304和/或非根管理程序306的执行。在进入非根模式之后,方法500完成。 [0051] 现在参照图6,在使用时,计算设备100可以执行用于非根管理程序半虚拟化的方法600。例如,当启动、发起或以其他方式开始执行非根管理程序306时,可以执行方法600。 方法600开始于框602,在所述框中,计算设备100判定非根管理程序306是否是在根管理程序320的控制下的VMX非根模式下执行。例如,在图3的管理程序环境300和图4的方法400中,由主机操作系统302和/或根管理程序320在VMX非根模式下启动非根管理程序306。然而,在其他实施例中,非根管理程序306可以在不存在根管理程序320的情况下执行。例如,当根管理程序320不活动时,非根管理程序306可以由主机操作系统302主控,或者非根管理程序 306可以作为计算设备100的硬件上的“裸机(bare metal)”管理程序来执行。非根管理程序 306可以使用任何技术来判定非根管理程序306是否在根管理程序320的控制下的VMX非根模式下执行。例如,非根管理程序306可以判定根管理程序API 318是否可用,或者非根管理程序306可以调用一个或多个函数、超级调用或用于判定根管理程序320是否活动的根管理程序API 318的其他例程。 [0052] 在框604中,计算设备100检查非根管理程序306是否在根管理程序320的控制下的VMX非根模式下执行。若否,则方法600前进至框606,在所述框中,非根管理程序306可以在VMX根模式下主控一个或多个虚拟机304。因此,在一些实施例中,非根管理程序306可以充当作为计算设备100的可信计算基础的一部分的传统主控管理程序。返回参照框604,如果非根管理程序306在根管理程序320的控制下的VMX非根模式下执行,则方法600前进至框 608。 [0053] 在框608中,计算设备100准备虚拟VMX对象308(例如,虚拟VMCS 310和/或虚拟EPT  312)。非根管理程序306可以准备虚拟VMX对象308,就好像它们是由处理器120的虚拟化支持所使用的实际VMX对象326。例如,非根管理程序306可以为每个虚拟CPU准备虚拟VMCS  310并为每个虚拟机304准备虚拟EPT 312。 [0054] 在框610中,计算设备100向根管理程序320注册一个或多个回调处理程序316和触发条件334。如上所述,每个回调处理程序316可以被实施为任何函数、方法、向量或可以由根管理程序320调用的非根管理程序306的其他例程。非根管理程序306可以针对一个或多个潜在VM退出原因而注册回调处理程序316。每个触发条件334可以被实施为任何策略、过滤器或可以由根管理程序320估计的其他条件测试。如以下进一步描述的,触发条件334被估计成判定是否调用相关联回调处理程序316。非根管理程序306可以通过对根管理程序API 318进行一个或多个调用来注册回调处理程序316和触发条件334。例如,非根管理程序 306可以例如通过提交与每个回调处理程序316相关联的函数指针、指向虚拟VMX对象308(例如,指向虚拟VMCS 310和/或虚拟EPT 312)的指针或其他数据来调用一个或多个函数调用、超级调用、虚拟机退出或用于注册回调处理程序316和/或触发条件334的API 318的其他接口元件。 [0055] 在框612中,非根管理程序306可以请求来自根管理程序320的VMX对象326和/或VMX对象字段更新。例如,当注册回调处理程序316时,非根管理程序306还可以供应附加信息,如待由根管理程序320进行的所请求VMCS 328字段更新的列表。如以上结合图5所描述的,在处理VM退出时,根管理程序320可以复制或以其他方式使所请求VMX对象326、字段或其他数据对非根管理程序306可用。 [0056] 在框614中,非根管理程序306在VMX非根模式下主控虚拟机304。非根管理程序306可以使用任何适当的技术来启动虚拟机304的执行。例如,非根管理程序306可以执行VM进入,所述VM进入可以由根管理程序320进行处理以便启动虚拟机304。在启动虚拟机304的执行之后,方法600完成。如上所述,在虚拟机304的执行期间,根管理程序320可以处理由虚拟机304生成的任何VM退出,并且进而可以调用一个或多个回调处理程序316,如以下结合图7进一步描述的。 [0057] 现在参照图7,在使用时,计算设备100可以执行用于非根回调处理的方法700。方法700可以通过非根管理程序306来执行,并且可以在有限访问计算设备100的VMX非根模式下执行。方法700开始于框702,在所述方框中,计算设备100调用回调处理程序316。如以上结合图5的框520、522所描述的,根管理程序320可以切换至VMX非根模式并且然后在VMX非根模式下调用回调处理程序316。 [0058] 在框704中,计算设备100判定根管理程序320是否已经生成了对VMX对象326(例如,VMCS 328和/或EPT 330)的任何更新。计算设备100可以使用任何技术来判定是否已经更新了VMX对象326。例如,非根管理程序306可以接收或以其他方式访问来自根管理程序 320的根管理程序更新列表324。如上所述,根管理程序更新列表324识别VMX对象326、字段或已经由根管理程序320修改的VMX对象326的其他数据。列表324还可以识别或以其他方式包括VMX对象326、字段或非根管理程序306请求根管理程序320更新的其他数据。列表324可以被实施为识别由根管理程序320修改的VMCS 328和/或EPT 330的字段的位图。在框706中,计算设备100检查是否已经更新了任何VMX对象326。若否,则方法700向前分支到框710,如下所述。如果已经更新了VMX对象326,则方法700前进至框708。 [0059] 在框708中,计算设备100将来自VMX对象326的更新复制到虚拟VMX对象308。计算设备100可以仅复制那些VMX对象326、字段或例如使用根管理程序更新列表324已经改变的其他数据。在一些实施例中,非根管理程序306可以通过对根管理程序API 318进行一个或多个调用来从VMX对象326复制数据。另外地或可替代地,在一些实施例中,可以通过根管理程序320例如通过执行专用处理器指令(如VMFUNC)来授权非根管理程序306对VMX对象326进行访问。 [0060] 在框710中,计算设备100执行VM退出的非根管理程序306处理。非根管理程序306可以执行VM退出的任何适当的处理。非根管理程序306可以使用虚拟VMX对象308来处理VM退出,就好像非根管理程序306是在VMX根模式下执行的。在一些实施例中,在框712中,非根管理程序306可以在VM退出的处理期间修改一个或多个虚拟VMX对象308(例如,虚拟VMCS  310和/或虚拟EPT 312)。 [0061] 在框714中,在处理VM退出之后,计算设备100判定非根管理程序306是否已经更新了任何虚拟VMX对象308。在框716中,计算设备100检查是否已经更新了虚拟VMX对象308。若否,则方法700向前分支到框720,在所述框中,计算设备100退出回调处理程序316并恢复使用根管理程序320的执行,例如恢复在图5的框524处的执行。返回参照框716,如果已经更新了虚拟VMX对象308,则方法700前进至框718,在所述框中,计算设备100创建识别虚拟VMX对象308、字段或由非根管理程序306修改的其他数据的非根管理程序更新列表314。例如,列表314可以被实施为识别已经被非根管理程序306修改的虚拟VMCS 310和/或虚拟EPT 312的特定字段的位图。在准备列表314之后,方法700前进至框720,在所述框中,计算设备100退出回调处理程序316,并且恢复使用根管理程序320的执行,如上所述。例如,在一些实施例中,计算设备100可以执行虚拟机进入以退出回调处理程序316并且返回到处于VMX根模式下的根管理程序320。在恢复使用根管理程序320的执行之后,方法700完成。 示例 [0062] 以下提供了在本文中所公开的技术的说明性示例。所述技术的实施例可以包括以下所描述的示例中的任何一个或多个示例及其任何组合。 [0063] 示例1包括一种用于多级虚拟化的计算设备,所述计算设备包括:处理器,具有根虚拟化模式支持和非根虚拟化模式支持;以及一个或多个存储器设备,具有存储在其中的多条指令,所述指令当由所述处理器执行时使所述计算设备:由所述计算设备的根管理程序接收由所述计算设备的虚拟机生成的虚拟机退出,其中,所述虚拟机由所述计算设备的非根管理程序主控;由处于所述根虚拟化模式下的所述根管理程序响应于接收到所述虚拟机退出而判定是否针对所述虚拟机退出的退出原因注册了所述非根管理程序的回调处理程序;由处于所述根虚拟化模式下的所述根管理程序响应于确定注册了所述回调处理程序而判定是否满足与所述回调处理程序相关联的触发条件;并且响应于确定满足所述触发条件而执行所述非根管理程序的所述回调处理程序。 [0064] 示例2包括如示例1所述的主题,并且其中,所述多条指令当由所述处理器执行时进一步使所述计算设备:由处于所述根虚拟化模式下的所述根管理程序响应于确定未针对所述虚拟机退出的所述退出原因注册所述非根管理程序的回调处理程序而处理所述虚拟机退出;并且由所述根管理程序响应于处理所述虚拟机退出而恢复所述虚拟机的执行。 [0065] 示例3包括如示例1和2中任一项所述的主题,并且其中,所述多条指令当由所述处理器执行时进一步使所述计算设备:由所述根管理程序响应于确定未满足所述触发条件而恢复所述虚拟机的执行。 [0066] 示例4包括如示例1至3中任一项所述的主题,并且其中,所述多条指令当由所述处理器执行时进一步使所述计算设备:由处于所述根虚拟化模式下的所述根管理程序响应于接收到所述虚拟机退出而修改所述虚拟化支持对象;并且由处于所述根虚拟化模式下的所述根管理程序响应于所述虚拟化支持对象的修改而生成所述虚拟化支持对象的变化列表; 其中,执行所述非根管理程序的所述回调处理程序包括向所述非根管理程序提供所述虚拟化支持对象的所述变化列表。 [0067] 示例5包括如示例1至4中任一项所述的主题,并且其中,所述多条指令当由所述处理器执行时进一步使所述计算设备:由所述非根管理程序基于所述虚拟化支持对象使用所述虚拟化支持对象的所述变化列表来更新所述虚拟虚拟化支持对象。 [0068] 示例6包括如示例1至5中任一项所述的主题,并且其中,所述虚拟化支持对象包括虚拟机控制结构(VMCS);并且所述虚拟虚拟化支持对象包括虚拟VMCS。 [0069] 示例7包括如示例1至6中任一项所述的主题,并且其中,所述虚拟化支持对象包括扩展页表;并且所述虚拟虚拟化支持对象包括虚拟扩展页表。 [0070] 示例8包括如示例1至7中任一项所述的主题,并且其中,所述多条指令当由所述处理器执行时进一步使所述计算设备:由处于所述根虚拟化模式下的所述根管理程序响应于执行所述回调处理程序而判定是否已经修改了所述非根管理程序的虚拟虚拟化支持对象; 由处于所述根虚拟化模式下的所述根管理程序响应于确定已经修改了所述虚拟虚拟化支持对象而基于所述虚拟虚拟化支持对象来更新所述计算设备的虚拟化支持对象;并且由所述根管理程序响应于所述虚拟化支持对象的更新而恢复所述虚拟机的执行。 [0071] 示例9包括如示例1至8中任一项所述的主题,并且其中,更新所述虚拟化支持对象进一步包括由所述根管理程序验证所述虚拟虚拟化支持对象的有效性。 [0072] 示例10包括如示例1至9中任一项所述的主题,并且其中,所述多条指令当由所述处理器执行时进一步使所述计算设备:由所述非根管理程序响应于所述回调处理程序的执行而修改所述虚拟虚拟化支持对象;并且由所述非根管理程序响应于所述虚拟虚拟化支持对象的修改而生成所述虚拟虚拟化支持对象的变化列表;其中,判定是否已经修改所述非根管理程序的所述虚拟虚拟化支持对象包括由所述根管理程序判定是否已经基于所述虚拟虚拟化支持对象的所述变化列表修改了所述虚拟虚拟化支持对象。 [0073] 示例11包括如示例1至10中任一项所述的主题,并且其中,所述虚拟化支持对象包括虚拟机控制结构(VMCS);并且所述虚拟虚拟化支持对象包括虚拟VMCS。 [0074] 示例12包括如示例1至11中任一项所述的主题,并且其中,所述虚拟化支持对象包括扩展页表;并且所述虚拟虚拟化支持对象包括虚拟扩展页表。 [0075] 示例13包括如示例1至12中任一项所述的主题,并且其中,执行所述非根管理程序的所述回调处理程序包括在所述处理器的所述非根虚拟化模式下执行所述非根管理程序的所述回调处理程序。 [0076] 示例14包括如示例1至13中任一项所述的主题,并且其中,所述多条指令当由所述处理器执行时进一步使所述计算设备:由所述非根管理程序判定所述非根管理程序是否是在所述非根虚拟化模式下执行的;并且由所述非根管理程序响应于确定所述非根管理程序是在所述非根虚拟化模式下执行的而向所述根管理程序注册所述回调处理程序和所述相关联的触发条件。 [0077] 示例15包括如示例1至14中任一项所述的主题,并且其中,所述多条指令当由所述处理器执行时进一步使所述计算设备:由处于所述根虚拟化模式下的所述非根管理程序响应于确定非根管理程序不是在所述非根虚拟化模式下执行的而主控所述虚拟机。 [0078] 示例16包括如示例1至15中任一项所述的主题,并且其中,所述多条指令当由所述处理器执行时进一步使所述计算设备:由处于所述根虚拟化模式下的所述根管理程序监测所述非根管理程序的执行。 [0079] 示例17包括如示例1至16中任一项所述的主题,并且其中,所述多条指令当由所述处理器执行时进一步使所述计算设备:由处于所述根虚拟化模式下的所述根管理程序监测所述计算设备的主机操作系统的执行,其中,所述主机操作系统主控所述非根管理程序。 [0080] 示例18包括一种用于多级虚拟化的方法,所述方法包括:由计算设备的根管理程序接收由所述计算设备的虚拟机生成的虚拟机退出,其中,所述虚拟机由所述计算设备的非根管理程序主控;由处于所述计算设备的处理器的根虚拟化模式下的所述根管理程序响应于接收到所述虚拟机退出而判定是否针对所述虚拟机退出的退出原因注册了所述非根管理程序的回调处理程序;由处于所述根虚拟化模式下的所述根管理程序响应于确定注册了所述回调处理程序而判定是否满足与所述回调处理程序相关联的触发条件;以及由所述计算设备响应于确定满足所述触发条件而执行所述非根管理程序的所述回调处理程序。 [0081] 示例19包括如示例18所述的主题,并且由处于所述根虚拟化模式下的所述根管理程序响应于确定未针对所述虚拟机退出的所述退出原因注册所述非根管理程序的回调处理程序而处理所述虚拟机退出;以及由所述根管理程序响应于处理所述虚拟机退出而恢复所述虚拟机的执行。 [0082] 示例20包括如示例18和19中任一项所述的主题,并且进一步包括:由所述根管理程序响应于确定未满足所述触发条件而恢复所述虚拟机的执行。 [0083] 示例21包括如示例18至20中任一项所述的主题,并且进一步包括:由处于所述根虚拟化模式下的所述根管理程序响应于接收到所述虚拟机退出而修改虚拟化支持对象;以及由处于所述根虚拟化模式下的所述根管理程序响应于修改所述虚拟化支持对象而生成所述虚拟化支持对象的变化列表;其中,执行所述非根管理程序的所述回调处理程序包括向所述非根管理程序提供所述虚拟化支持对象的所述变化列表。 [0084] 示例22包括如示例18至21中任一项所述的主题,并且进一步包括:由所述非根管理程序基于所述虚拟化支持对象使用所述虚拟化支持对象的所述变化列表来更新虚拟虚拟化支持对象。 [0085] 示例23包括如示例18至22中任一项所述的主题,并且其中,所述虚拟化支持对象包括虚拟机控制结构(VMCS);并且所述虚拟虚拟化支持对象包括虚拟VMCS。 [0086] 示例24包括如示例18至23中任一项所述的主题,并且其中,所述虚拟化支持对象包括扩展页表;并且所述虚拟虚拟化支持对象包括虚拟扩展页表。 [0087] 示例25包括如示例18至24中任一项所述的主题,并且进一步包括:由处于所述根虚拟化模式下的所述根管理程序响应于执行所述回调处理程序而判定是否已经修改了所述非根管理程序的虚拟虚拟化支持对象;由处于所述根虚拟化模式下的所述根管理程序响应于确定已经修改了所述虚拟虚拟化支持对象而基于所述虚拟虚拟化支持对象来更新所述计算设备的虚拟化支持对象;以及由所述根管理程序响应于更新所述虚拟化支持对象而恢复所述虚拟机的执行。 [0088] 示例26包括如示例18至25中任一项所述的主题,并且其中,更新所述虚拟化支持对象进一步包括由所述根管理程序验证所述虚拟虚拟化支持对象的有效性。 [0089] 示例27包括如示例18至26中任一项所述的主题,并且进一步包括:由所述非根管理程序响应于执行所述回调处理程序而修改所述虚拟虚拟化支持对象;以及由所述非根管理程序响应于修改所述虚拟虚拟化支持对象而生成所述虚拟虚拟化支持对象的变化列表; 其中,判定是否已经修改所述非根管理程序的所述虚拟虚拟化支持对象包括由所述根管理程序判定是否已经基于所述虚拟虚拟化支持对象的所述变化列表修改了所述虚拟虚拟化支持对象。 [0090] 示例28包括如示例18至27中任一项所述的主题,并且其中,所述虚拟化支持对象包括虚拟机控制结构(VMCS);并且所述虚拟虚拟化支持对象包括虚拟VMCS。 [0091] 示例29包括如示例18至28中任一项所述的主题,并且其中,所述虚拟化支持对象包括扩展页表;并且所述虚拟虚拟化支持对象包括虚拟扩展页表。 [0092] 示例30包括如示例18至29中任一项所述的主题,并且其中,执行所述非根管理程序的所述回调处理程序包括在所述计算设备的所述处理器的所述非根虚拟化模式下执行所述非根管理程序的所述回调处理程序。 [0093] 示例31包括如示例18至30中任一项所述的主题,并且进一步包括:由所述非根管理程序判定所述非根管理程序是否是在所述计算设备的所述处理器的所述非根虚拟化模式下执行的;以及由所述非根管理程序响应于确定所述非根管理程序是在所述非根虚拟化模式下执行的而向所述根管理程序注册所述回调处理程序和所述相关联的触发条件。 [0094] 示例32包括如示例18至31中任一项所述的主题,并且进一步包括:由处于所述根虚拟化模式下的所述非根管理程序响应于确定非根管理程序不是在所述非根虚拟化模式下执行的而主控所述虚拟机。 [0095] 示例33包括如示例18至32中任一项所述的主题,并且进一步包括:由处于所述根虚拟化模式下的所述根管理程序监测所述非根管理程序的执行。 [0096] 示例34包括如示例18至33中任一项所述的主题,并且进一步包括:由处于所述根虚拟化模式下的所述根管理程序监测所述计算设备的主机操作系统的执行,其中,所述主机操作系统主控所述非根管理程序。 [0097] 示例35包括一种计算设备,所述计算设备包括:处理器;以及存储器,具有存储于其中的多条指令,所述指令当由所述处理器执行时使所述计算设备执行如示例18至34中任一项所述的方法。 [0098] 示例36包括一种或多种机器可读存储介质,包括存储于其上的多条指令,所述指令响应于被执行而使计算设备执行如示例18至34中任一项所述的方法。 [0099] 示例37包括一种计算设备,包括用于执行如示例18至34中任一项所述的方法的装置。 [0100] 示例38包括一种用于多级虚拟化的计算设备,所述计算设备包括:用于由所述计算设备的根管理程序接收由所述计算设备的虚拟机生成的虚拟机退出的装置,其中,所述虚拟机由所述计算设备的非根管理程序主控;用于由处于所述计算设备的处理器的根虚拟化模式下的所述根管理程序响应于接收到所述虚拟机退出而判定是否针对所述虚拟机退出的退出原因注册了所述非根管理程序的回调处理程序的装置;用于由处于所述根虚拟化模式下的所述根管理程序响应于确定注册了所述回调处理程序而判定是否满足与所述回调处理程序相关联的触发条件的装置;以及用于响应于确定满足所述触发条件而执行所述非根管理程序的所述回调处理程序。 [0100] 示例39包括如示例38所述的主题,并且进一步包括:用于由处于所述根虚拟化模式下的所述根管理程序响应于确定未针对所述虚拟机退出的所述退出原因注册所述非根管理程序的回调处理程序而处理所述虚拟机退出的装置;以及用于由所述根管理程序响应于处理所述虚拟机退出而恢复所述虚拟机的执行的装置。 [0101] 示例40包括如示例38和39中任一项所述的主题,并且进一步包括:用于由所述根管理程序响应于确定未满足所述触发条件而恢复所述虚拟机的执行的装置。 [0102] 示例41包括如示例38至40中任一项所述的主题,并且进一步包括:用于由处于所述根虚拟化模式下的所述根管理程序响应于接收到所述虚拟机退出而修改虚拟化支持对象的装置;以及用于由处于所述根虚拟化模式下的所述根管理程序响应于修改所述虚拟化支持对象而生成所述虚拟化支持对象的变化列表的装置;其中,所述用于执行所述非根管理程序的所述回调处理程序的装置包括用于向所述非根管理程序提供所述虚拟化支持对象的所述变化列表的装置。 [0103] 示例42包括如示例38至41中任一项所述的主题,并且进一步包括:用于由所述非根管理程序基于所述虚拟化支持对象使用所述虚拟化支持对象的所述变化列表来更新虚拟虚拟化支持对象的装置。 [0104] 示例43包括如示例38至42中任一项所述的主题,并且其中,所述虚拟化支持对象包括虚拟机控制结构(VMCS);并且所述虚拟虚拟化支持对象包括虚拟VMCS。 [0105] 示例44包括如示例38至43中任一项所述的主题,并且其中,所述虚拟化支持对象包括扩展页表;并且所述虚拟虚拟化支持对象包括虚拟扩展页表。 [0106] 示例45包括如示例38至44中任一项所述的主题,并且进一步包括:用于由处于所述根虚拟化模式下的所述根管理程序响应于执行所述回调处理程序而判定是否已经修改了所述非根管理程序的虚拟虚拟化支持对象的装置;用于由处于所述根虚拟化模式下的所述根管理程序响应于确定已经修改了所述虚拟虚拟化支持对象而基于所述虚拟虚拟化支持对象来更新所述计算设备的虚拟化支持对象的装置;以及用于由所述根管理程序响应于更新所述虚拟化支持对象而恢复所述虚拟机的执行的装置。 [0107] 示例46包括如示例38至45中任一项所述的主题,并且其中,所述用于更新所述虚拟化支持对象的装置进一步包括用于由所述根管理程序验证所述虚拟虚拟化支持对象的有效性的装置。 [0108] 示例47包括如示例38至46中任一项所述的主题,并且进一步包括:用于由所述非根管理程序响应于执行所述回调处理程序而修改所述虚拟虚拟化支持对象的装置;以及用于由所述非根管理程序响应于修改所述虚拟虚拟化支持对象而生成所述虚拟虚拟化支持对象的变化列表的装置;其中,所述用于判定是否已经修改所述非根管理程序的所述虚拟虚拟化支持对象的装置包括用于由所述根管理程序判定是否已经基于所述虚拟虚拟化支持对象的所述变化列表修改了所述虚拟虚拟化支持对象的装置。 [0109] 示例48包括如示例38至47中任一项所述的主题,并且其中,所述虚拟化支持对象包括虚拟机控制结构(VMCS);并且所述虚拟虚拟化支持对象包括虚拟VMCS。 [0110] 示例49包括如示例38至48中任一项所述的主题,并且其中,所述虚拟化支持对象包括扩展页表;并且所述虚拟虚拟化支持对象包括虚拟扩展页表。 [0111] 示例50包括如示例38至49中任一项所述的主题,并且其中,所述用于执行所述非根管理程序的所述回调处理程序的装置包括用于在所述计算设备的所述处理器的所述非根虚拟化模式下执行所述非根管理程序的所述回调处理程序的装置。 [0112] 示例51包括如示例38至50中任一项所述的主题,并且进一步包括:用于由所述非根管理程序判定所述非根管理程序是否是在所述计算设备的所述处理器的所述非根虚拟化模式下执行的装置;以及用于由所述非根管理程序响应于确定所述非根管理程序是在所述非根虚拟化模式下执行的而向所述根管理程序注册所述回调处理程序和所述相关联的触发条件的装置。 [0113] 示例52包括如示例38至51中任一项所述的主题,并且进一步包括:用于由处于所述根虚拟化模式下的所述非根管理程序响应于确定非根管理程序不是在所述非根虚拟化模式下执行的而主控所述虚拟机的装置。 [0114] 示例53包括如示例38至52中任一项所述的主题,并且进一步包括:用于由处于所述根虚拟化模式下的所述根管理程序监测所述非根管理程序的执行的装置。 [0115] 示例54包括如示例38至53中任一项所述的主题,并且进一步包括:用于由处于所述根虚拟化模式下的所述根管理程序监测所述计算设备的主机操作系统的执行的装置,其中,所述主机操作系统主控所述非根管理程序。

相关技术
用于虚拟相关技术
虚拟化相关技术
J·中岛发明人的其他相关专利技术