CN107924321A - 针对虚拟机退出的嵌套虚拟化 - Google Patents
针对虚拟机退出的嵌套虚拟化 Download PDFInfo
- Publication number
- CN107924321A CN107924321A CN201580082651.2A CN201580082651A CN107924321A CN 107924321 A CN107924321 A CN 107924321A CN 201580082651 A CN201580082651 A CN 201580082651A CN 107924321 A CN107924321 A CN 107924321A
- Authority
- CN
- China
- Prior art keywords
- vmm
- vmcs
- control
- field
- visitor
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45566—Nested virtual machines
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/4557—Distribution of virtual machine instances; Migration and load balancing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45591—Monitoring or debugging support
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Hardware Redundancy (AREA)
Abstract
描述了存储器安全技术。一种示例处理设备包括处理器核和存储器控制器,所述存储器控制器耦合到所述处理器核和存储器。所述处理器核可以确定已经出现了将对用于处理器核的资源的控制从第一虚拟机监视器(VMM)转移到第二VMM的退出条件。所述处理器核还可以判定控制虚拟机控制结构(VMCS)链路指针是否有效。所述处理器核还可以判定与所述控制VMCS链路指针相对应的原因值是否被设置。所述处理器核还可以判定所述原因值是否被设置为零。所述处理器核还可以判定与特定异常类型的原因值相对应的异常位是否被设置。所述处理器核还可以将对所述资源的控制从所述第一VMM转移到所述第二VMM。
Description
背景技术
计算设备通常运行可以访问计算设备的硬件资源的单个操作系统(OS)。然而,虚拟化允许在计算设备上运行多个虚拟机(VM)。VM可以是计算环境或OS的软件实例化。在虚拟化中,多个VM被实例化,并且每个VM运行其本身的OS实例。每个VM的OS可以独立于其他VM运行。例如,第一OS可能不知道其在VM内运行,并且其他OS正在同一计算设备的其他VM上运行。管理程序或虚拟机监视器(VMM)可以将计算设备的硬件资源虚拟化,以提供对VM的硬件资源的访问。虚拟化指令集可以允许管理程序在root模式下操作,而访客OS和应用软件可以在非root模式下操作。
附图说明
图1展示了根据一个实施例的用于将访客软件接口连接到处理设备的虚拟机环境。
图2展示了根据一个实施例的用于在虚拟机环境中运行的虚拟机监视器(VMM)的虚拟化指令。
图3示出了根据一个实施例的嵌套虚拟化技术(VT)系统。
图4A展示了根据一个实施例的VT系统的配置。
图4B展示了根据一个实施例的针对嵌套VT环境中的不同数据由VT架构执行的虚拟机(VM)退出事件表。
图5A展示了根据一个实施例的在VT系统中执行的VMM之间的VM退出中继。
图5B展示了根据一个实施例的由VT系统中的VMM直接执行的VM退出。
图6展示描绘了根据一个实施例的用于将资源控制从1级(L1)L1 VMM转移到2级(L2)访客的方法的流程图。
图7展示了根据一个实施例的在将资源控制转移到L2访客之前的虚拟机控制结构(VMCS)。
图8展示描绘了根据一个实施例的用于将资源控制从L2访客切换到L1 VMM或L0VMM的方法的流程图。
图9展示了根据一个实施例的将当前VMCS切换到当已经发生将资源控制从L2访客转移到L1 VMM时的VMCS。
图10示意性地展示了根据一种示例实现方式的系统的框图。
图11示意性地展示了根据一种示例实现方式的处理器的框图。
图12示意性地展示了根据本公开的一个或多个方面操作的示例处理系统的框图。
图13示意性地展示了根据本公开的一个或多个方面的在不退出VMM的情况下使得虚拟机能够执行某些特权操作的示例性方法。
图14示意性地展示了根据本公开的一个或多个方面操作的示例处理系统的框图。
图15示意性地展示了根据本公开的一个或多个方面的虚拟地址转换的示例实现方式。
图16示意性地展示了可以由根据本公开的一个或多个方面操作的处理系统利用的分页结构条目的示例格式。
图17示意性地展示了由根据本公开的一个或多个方面操作的处理系统实现的主机外部中断与访客虚拟外部中断之间的示例功能关系。
图18示意性地展示了根据本公开的一个或多个方面使用虚拟TLB来实现存储器虚拟化的示例方法。
具体实施方式
虚拟机(VM)可以对物理计算设备的架构或功能进行仿真。例如,VM是在具有自身操作系统(OS)的物理计算机器的计算硬件上执行的操作环境。VM可以执行在其对应OS界限内运行的应用。另外,可以在物理计算设备上执行多个VM,其中每个VM处理与在其本身硬件上的执行相关联的开销。这种开销确保了每个VM独立地适当操作。管理程序或虚拟机监视器(virtual machine monitor,VMM)可以将物理计算设备的硬件资源虚拟化,以提供对VM的硬件资源的访问。
嵌套虚拟化允许root VMM支持访客VMM。例如,硬件资源被虚拟化以使root模式VMM能够有效地运行作为访客的非root模式VMM。在一个实施例中,处理设备可以使用捕获和仿真(trap-and-emulate)技术来执行嵌套虚拟化,其中,硬件捕获由访客VMM发出的单独的虚拟化指令,并且root模式管理程序对所述单独的虚拟化指令进行仿真。然而,处理设备的关键代码路径上的高频虚拟化指令使捕获和仿真技术过于缓慢。例如,当VMM必须退出VM以执行地址转换并在地址转换之后返回VM时,退出和返回任务会降低处理设备的性能。在另一个实施例中,处理设备可以使用动态转换技术来执行嵌套虚拟化,其中,特权代码序列被访客VMM转换成安全地限制在访客VM内的指令。然而,动态转换技术是复杂的并且对处理设备的工作负荷具有高度负面的性能影响。
在VM处执行某些指令可能需要从VM退出(在此被称为VM退出),以便适当地处理指令。VM退出是从当前正在运行的并且对计算设备的资源执行控制的VM到VM的对所述资源执行控制的VMM的转换。VM退出响应于虚拟化系统中的某些指令或事件而发生,并且导致性能显著下降。通常,当VM在虚拟化系统中退出时,处理设备将从非root模式切换到root模式。从非root模式切换到root模式导致虚拟机扩展(VMX)转换,这浪费CPU周期并增加性能开销。例如,当发生VM退出时,处理设备保存VM在退出时刻运行时的状态快照。对于处理描述符表的指令,可能发生VM退出。诸如加载全局描述符表(LGDT)寄存器和加载中断描述符表(LIDT)之类的指令需要VM退出,以便适当地处理与VM上下文内的指令相关联的需求。然而,VM退出的处理时间开销很大,并且降低VM的性能。例如,VM退出需要保存处理状态,记录关于VM退出操作的信息,保存描述符表的当前状态等。
本文所描述的实施例通过虚拟化系统解决了以上所提及的缺陷,所述虚拟化系统使得在虚拟机扩展(VMX)root操作中的VMM能够控制哪个VM退出可以在没有VMX转换的情况下由处理设备直接在非root模式下进行处理。控制哪个VM退出可以在没有VMX转换的情况下由处理设备直接在非root模式下进行处理的一个优点是减小了与VM退出相关联的开销。减小的VM退出通过减少虚拟化延迟来提高效率。
图1展示了根据一个实施例的用于将访客软件108、110、112和114接口连接到处理设备102的虚拟机环境100。运行虚拟机环境100的处理设备102可以包括用于虚拟化的硬件辅助支持。VMM 116可以将VM 104和106接口连接到处理设备102。在VM 104内运行的软件可以包括访客OS 110和各种软件应用108。在VM 106内运行的软件可以包括访客OS 114和各种软件应用112。虚拟机环境100可以使用VMX指令,所述VMX指令通过将硬件资源分配给软件程序108和112以及OS 110和114来允许软件程序108和112以及OS 110和114使用同一处理设备和处理设备102的其他硬件资源。
为了将VM 104和106接口连接到处理器设备102的资源,状态和控制信息被修改并且以其他方式通过虚拟机控制结构(VMCS)122内的一组字段进行跟踪。处理器设备102的资源可以包括处理硬件118、寄存器、存储器120、输入/输出(“I/O”)资源等。处理设备102可以使用VMCS 122来传递对VMM 116与VM 104和106之间的处理器设备102的资源的控制和访问。
在一个实施例中,VMM 116可以通过在VMCS 122中设置控制字段或位来逐步通过访客软件108-114。控制字段或位可以是监视陷阱标志(Monitor Trap Flag,MTF)。在VMCS122中设置了MTF位之后,VMM 116可以请求将对处理器设备102的资源的访问或控制转移到访客软件108-114。VMM 116可以通过发出指令来请求对处理器设备102的资源的访问或控制。
图2展示了根据一个实施例的用于在虚拟机环境100中运行的VMM 116(图1中所展示的)的虚拟化指令。虚拟机环境100的虚拟化指令在由VMM 116使用的控制结构中读取或写入数据,以维持VM 104和106的状态。VM 104和106的状态可以支持在VMM 116在其中执行的处理设备的root模式操作与VM 104和106在其中执行的所述处理设备的非root模式之间的转换。
VMX指令可以用于逐步通过(多个)访客软件例程。VMX指令可以包括启用针对VMM116的VMX操作的VMX打开指令(VMXON)202。例如,VMXON 202使处理设备进入VMX root操作并且使用运算数所引用的存储器来支持VMX操作。VMX指令可以包括禁用针对VMM 116的VMX操作的VMX关闭指令(VMXOFF)204。例如,VMXOFF 204使处理设备关机并离开虚拟机环境100。
VMX指令可以包括启动由VMCS 116(图1中所展示的)管理的VM 104或106并且将对处理设备的资源的控制转移到VM 104或106的VM进入事件(VMENTRY)206。在一个示例中,VMENTRY 206可以是用于启动由VMCS 116管理的虚拟机的VM启动事件(VMLAUNCH)。在另一示例中,VMENTRY 206可以是用于恢复由VMCS 116管理的VM的VM恢复事件(VMRESUME)。例如,处理设备的软件通过执行VMXON来进入VMX操作。使用VM进入,VMM 116可以将资源或处理器控制转移到VM 104或106。例如,可以执行VMLAUNCH,以便首次执行VM 104的访客应用。VMRESUME可以用于在初始启动后执行相同的功能。
VMX指令可以包括将对处理设备的资源的控制从VM 104或106转移到VMM 116的VMEXIT事件(VMEXIT)208。VMEXIT 208可以是使处理设备停止VM 104或106的执行并将控制返回到VMM 116的任何事件。所述事件可以包括故障、异常、中断、存储器访问、控制寄存器访问、特殊虚拟化指令等。例如,当在访客软件的执行过程中发生事件(比如异常)时,VMX指令可能容易出错。当发生错误时,VMEXIT 208可以由处理设备发出,以将对处理设备的资源的控制从VM 104或106返回到VMM 116。在另一示例中,在成功执行在VM 104或106的应用108或112(图1中所展示的)内的例程的所有指令时,VMEXIT事件可以发生,并且对处理设备的资源的控制从VM104或106返回到VMM 116。在一个示例中,可以在VMM 116接收到由处理设备的VM处理程序发出的请求时发生VMEXIT事件。
在一个实施例中,“自然”VMEXIT可以是导致不是来自在VM 104或106中运行的软件的显式VMEXIT 208的VMEXIT 208的事件。例如,自然VMEXIT是并非由专门旨在导致VM104或106退出的指令所引起的VMEXIT 208。在一个示例中,VMEXIT 208将控制转移到由VMM116指定的入口点。VMEXIT 208可以是用于从非root模式转换到root模式的VMX转换指令。VMX指令还可以包括:VMPTRLD指令;VMPTRST指令;VMCLEAR指令;VMREAD指令;VMWRITE指令;以及VMCALL指令。
图3示出了根据一个实施例的嵌套虚拟化技术(VT)系统300。嵌套VT架构300可以包括:2级(L2)访客302、VMCS 304、1级(L1)VMM 306、VMCS 308、VMCS 310、0级(L0)VMM 312、以及硬件314。在一个示例中,硬件314可以是处理设备102的硬件,诸如处理器、随机存取存储器(RAM)等。在另一示例中,硬件314可以是耦合到处理设备102(图1中所展示的)的硬件。
虚拟机环境100(图1中所展示的)的虚拟化可以包括在虚拟化下运行的两种模式:root模式318和非root模式316。L0 VMM 312是在root模式318下运行的VMM。L1 VMM 306是在非root模式316下运行于L0 VMM 312顶部的VMM。在一个实施例中,L1 VMM 306作为虚拟化控制软件在非root模式316下运行。非root操作可以由L1 VMM 306来控制。例如,L2访客302中的操作可以由L1 VMM 306来控制。非root操作可以包括VMENTRY事件和VMEXIT事件。
在另一个实施例中,L1 VMM 306作为L0 VMM 312的访客运行。L2访客302是在L1VMM 306之上运行的访客软件,包括应用108和112以及OS 110和114(图1中所展示的)。例如,访客软件可以是诸如 或之类的OS。VMCS 308由L0 VMM 312创建和使用,以运行L1 VMM 306或L2访客302。VMCS 304由L1 VMM 306创建和使用,以运行L2访客302。在另一个示例中,VMCS 304被L1 VMM 306用作存储器存储设备。在此示例中,VMCS 304可能不被VMPTRLD指令加载。VMCS 310是由L0 VMM 312合并以运行L2访客302的VMCS。VMCS 310可以由L0 VMM 312合并,从而将来自VMCS 308和VMCS 304的数据合并到VMCS 310中。VMCS 310可以使用VMCS 310来启动L2访客302。在另一个实施例中,VMCS 310可以启动L1 VMM 306,并且L1 VMM 306可以启动L2访客302。当L1 VMM 306要启动L2访客302时,L1 VMM 306可以调用VMRESUME。在这个实施例中,L0 VMM 312可以拦截VMRESUME。当L0 VMM 312拦截VMRESUME时,L0 VMM 312可以根据VMCS 304和VMCS 308处的数据更新VMCS310处的数据,并且然后代表L1 VMM 306启动L2访客302。
在另一个实施例中,当在L2处发生VMEXIT事件时,VMEXIT事件使处理设备从用于执行访客软件的非root模式切换到root模式。对处理设备的硬件资源的控制可以由L0 VMM312直接处理。在一个示例中,用于将硬件资源控制从L2访客302切换到L0 VMM的VMEXIT事件可以包括:将嵌套VT架构300的当前VMCS从VMCS 310切换到VMCS 308;将VMCS 310的访客字段复制到VMCS 304的访客字段;将VMCS 310的VMEXIT字段复制到VMCS 304的VMEXIT字节;将VMCS 304的主机字段复制到VMCS 308的访客字段;以及调用VMRESUME事件以切换回非root模式。在此示例中,当从VMCS 304的主机字段复制VMCS 308的访客字段时,将执行L1VMM 306的VMEXIT处理程序,就好像从L2访客302接收到已发生的VMEXIT事件一样。
图4A展示了根据一个实施例的VT系统300(图3中所展示的)的配置。VT架构300包括:在非root模式下操作的L2访客402,如操作系统;在非root模式下操作的L1VMM 404,如VMM或管理程序;在非root模式下操作的L1访客406,如操作系统;在root模式下操作的具有嵌套支持的L0 VMM,如内核保护技术(IKGT);以及处理设备的硬件,如处理器、随机存取存储器(RAM)等。
图4B展示了根据一个实施例的针对嵌套VT环境中的不同数据由VT架构300(图4A中所展示的)触发的VMEXIT事件表。表420包括:VMEXIT原因列412,其指示发出VMEXIT的原因;VMEXIT L1或L2列414,其指示VMEXIT是从L2访客402、L1访客406还是L1 VMM 404(图4A中所展示的)发出的;每秒计数(#/s)列416,其指示针对L2访客402或L1访客406的相应VMEXIT原因每秒发生的VMEXIT的数量;以及百分比列418,其指示根据L2访客402和L1访客406的VMEXIT原因的总百分比的不同VMEXIT事件的VMEXIT事件的百分比。在一个示例中,从L2访客402发送的VMEXIT事件的总百分比是36.74%,并且从L1访客406发送的VMEXIT事件的总百分比是63.26%。
图5A展示了根据一个实施例的通过L0 VMM 512中继到在VT系统500中执行的L1VMM 506的VMEXIT。在一个示例中,当针对L2访客502发生VMEXIT事件520时,可以调用L0VMM 512以控制分配给L2访客502的资源。在此示例中,当L0 VMM 512被调用时,L0 VMM 512可以使用VMENTRY 522将对所述资源的控制中继到L1 VMM 506,以将VMEXIT事件模拟到L1VMM 506。当L1 VMM 506完成处理此VMEXIT时,L1 VMM 506可以将VMEXIT 524发送到L0 VMM512。L0 VMM 502可以使用VMRESUME 526将对所述资源的控制中继到L2访客502。当VMRESUME到L2访客502时,对硬件514的控制可以被控制以继续执行。
图5B展示了根据一个实施例的由VT系统500中的L1 VMM 506直接触发的VMEXIT。在一个示例中,当针对L2访客502发生VMEXIT事件520时,可以调用L1 VMM 506以控制分配给L2访客502的资源。在此示例中,当L0 VMM 512被调用时,L0 VMM 512可以使用VMEXIT528将对所述资源的控制直接切换到L1 VMM 506。当L1 VMM 506完成处理此VMEXIT时,L1VMM 506可以将VMRESUME 530发送到L0 VMM 512,并且L0 VMM 502然后使用VMRESUME 526将对资源的控制中继到L2访客502。当VMRESUME 526被发送到L2访客502时,对硬件514的控制可以由L2访客502控制以继续执行L2访客502的应用或OS。在VT系统500中直接执行VMEXIT的一个优点是通过减少用于转移对资源的控制的VMEXIT和VMRESUME的数量来减少用于VT系统500中的VMEXIT的VMX转换时间。
图6展示描绘了根据一个实施例的将资源控制从L1 VMM 306转移到L2访客302(图3中所展示的)的方法600的流程图。方法600可以由计算系统或由计算系统的处理器执行的软件库(如运行时库)执行。方法600和/或其功能、例程、子例程或操作各自可以由执行所述方法的计算机系统的一个或多个物理处理器执行。方法600的两个或更多个功能、例程、子例程或操作可以并行执行、或以可以不同于上述顺序的顺序来执行。在某些实现方式中,方法600可以由单个处理线程执行。可替代地,方法600可以由两个或更多个处理线程执行,每个线程执行所述方法的一个或多个单独的功能、例程、子例程或操作。在说明性示例中,实现方法600的处理线程可以被同步(例如,使用信号量、关键部分和/或其他线程同步机制)。可替代地,实现方法600的处理线程可以相对于彼此异步地执行。
参照图6,方法600可以开始于处理器或由所述处理器执行的软件库(比如运行时库)在L1 VMM 306(图3中所展示的)处接收VMRESUME事件以将对硬件资源的控制转移到L2访客302(610)。所述方法可以包括由L0 VMM 312准备VMCS 310以将资源控制转移到L2访客302(620)。在一个示例中,L0 VMM 312可以通过设置用于L2访客302的当前VMCS 310的数据字段来准备VMCS 310,如在针对图7的接下来的段落中更详细讨论的。
所述方法可以包括当VMCS02已准备就绪时通过L0 VMM 312(630)来设置VMEXIT字段。例如,可以用以下各项来设置VMEXIT字段:具有VMCS 308的地址的控制VMCS链路指针;具有VMCS 304的地址的状态VMCS链路指针;以及原因位图。在一个示例中,所述原因位图可以具有指向128位的存储器地址。在另一个示例中,128位的值可以是0x0FFFFFFF_FFFFFFFD,这指示L0 VMM 312可能仅处理:外部中断或未知原因。在另一示例中,可以通过VMEXIT异常原因来递送不可掩蔽的中断(NMI)VMEXIT。在此示例中,VMEXIT异常原因还可以指示来自L2访客302的访客OS的异常。在一个实施例中,当L0 VMM 312要指定L1 VMM 306来直接处理对从L2访客302的资源控制的转移时,NMI VMEXIT原因的原因为被设置为一。在另一个实施例中,当L0 VMM 312要处理对从L2访客302的资源控制的转移时,NMI VMEXIT原因值被设置为零。还可以用被设置为0xFFFFFFFB的VMEXIT异常位图来设置VMEXIT字段。被设置为0xFFFFFFFB的VMEXIT字段指示只有来自L2访客302的NMI VMEXIT将触发资源控制到L0VMM的转移,并且异常将触发资源控制到L1 VMM 306的转移。例如,NMI的VMEXIT原因420(图4B中所展示的)为零。在此示例中,除了用于NMI的VMEXIT原因420之外,VMEXIT原因420的零可以是来自异常(如页故障)的VMEXIT。当VMEXIT原因420为零时,由L0 VMM 512(图5A中所展示的)处理VMEXIT。另外,对于非零的VMEXIT原因420,当设置了原因位图714(图7中所展示的)中的相应位时,将由L1 VMM 506(图5A中所展示的)处理VMEXIT。
在一个实施例中,当原因位图714中的零位位置为零时,由L0VMM 512处理VMEXIT。在另一个实施例中,当原因位图714中的零位位置为一时,检查异常位图716(图7中所展示的)。当异常位图716的位位置2处的异常ID NMI为二时,由L1 VMM 506处理VMEXIT。当异常位图716的位位置2处的异常ID NMI不为二时,由L0 VMM 512处理VMEXIT。在此示例中,当原因位图714中的位0和异常位图716中的位2都被设置为零时,由L1 VMM 506处理来自L2访客302的NMI VMEXIT。
所述方法可以包括由L0 VMM 312执行VMRESUME(640)。所述方法可以包括由处理器或软件库检查与VMRESUME相关联的VMRESUME数据的有效性(650)。在一个示例中,当字段710、712和714(图7中所展示的)不等于0xFFFFFFFF_FFFFFFFF时VMRESUME数据有效并且当字段710、712和714等于0xFFFFFFFF_FFFFFFFF时无效。当VMRESUME数据检查失败时,VMRESUME失败并且VMRESUME事件未被触发,并且资源控制保持在L0 VMM 312处(680)。当VMRESUME数据检查通过时,处理器或软件库可以检查VMEXIT字段的有效性(660)。例如,在触发VMRESUME事件的过程中,处理器可以检查状态VMCS链路指针、控制VMCS链路指针、原因位图、以及异常位图各自有效还是无效。在一个示例中,当状态VMCS链路指针、控制VMCS链路指针、原因位图、以及异常位图各自有效时,VMRESUME成功并且资源控制被转移到L2访客302。在另一个示例中,当状态VMCS链路指针、控制VMCS链路指针、和原因位图、以及异常位图各自无效时,L0 VMM 312用于处理异常。当状态VMCS链路指针、控制VMCS链路指针712、原因位图714、以及VMEXIT异常位图616中的至少一者有效并且它们中的至少一者无效时,VMRESUME的完整性检查失败(680)。当VMEXIT字段通过时,资源控制可以切换到L2访客302(670)。
图7展示了根据一个实施例在将资源控制转移到L2访客302(图3中所展示的)之前的VMCS 310。VMCS 310可以包括(多个)访客字段702、(多个)主机字段704、(多个)控制字段706、以及(多个)VMEXIT控制字段。在一个示例中,(多个)控制字段可以包括退出控制字段和执行控制字段。VMEXIT控制字段可以包括:VMCS链路指针708、状态VMCS链路指针710、控制VMCS链路指针712、原因位图714、异常位图716、(多个)VMENTRY字段718、以及(多个)VMEXIT字段720。(多个)访客字段702可以包括从VMCS 304的访客字段复制的数据。(多个)主机字段704可以包括从VMCS 308的(多个)主机字段复制的数据。
在一个实施例中,控制字段706可以包括从VMCS 308和VMCS 304合并的数据。在另一个实施例中,在非root模式下操作的不同VMM可以使用数据格式或不同算法,并且VMM312可以合并不同的VMM。
控制字段706可以包括:VMCS链路指针708、状态VMCS链路指针710、控制VMCS链路指针712、原因位图714、以及异常位图716。VMCS链路指针708可以包括到VMCS链路的地址。例如,VMCS链路指针708的地址可以是0xFFFFFFFF_FFFFFFFF,从而指示VMCS链路指针708无效。当L0 VMM 312代表L1 VMM 306启动L2访客302时,状态VMCS链路指针710可以链接到VMCS 304。当恢复到L1 VMM 306状态时,状态VMCS链路指针710应被设置为无效,如(0xFFFFFFFF_FFFFFFFF)。当L0 VMM 312代表L1 VMM 306启动L2访客302时,控制VMCS链路指针712可以链接到VMCS 308。当资源控制被转移到L1 VMM 306时,此字段应被设置为无效,如(0xFFFFFFFF_FFFFFFFF)。当资源控制被转移到L2访客时,原因位图714可以指向存储器地址。在一个示例中,VMEXIT原因可以是VMEXIT原因412(图4B中所展示的)。在一个示例中,存储器地址可以是128位。在另一个示例中,当VMEXIT原因的数量超过127时,存储器地址的大小可能增加到超过128位字段大小,其中原因位图714针对VMEXIT原因在存储器中存储地址。在另一个示例中,当在存储器中设置原因位图714的第n位时,VMEXIT原因n(图4B中所展示的)将使资源转移到L1 VMM 306。当恢复到L1 VMM 306时,原因位图714被设置为无效,如0xFFFFFFFF_FFFFFFFF。
异常位图716是针对可导致VMEXIT的每个异常包含一个位的位字段。在一个示例中,异常位图716是32位字段。在另一个示例中,当原因位图714的位0清除时,不使用VMEXIT异常位图716。例如,当设置了原因位图714的位0并且设置了原因位图714的第n位时,具有向量n的异常将不会导致从L2访客302到L0 VMM 312的资源转移。在此示例中,将发生从L2访客302到L1 VMM 306的资源转移。在另一个示例中,当原因位图中的位0和异常位图中的位2都被设置为一时,VMEXIT由NMI触发,并且将发生从L2访客302到L1 VMM 306的资源转移。在另一个示例中,当恢复到L1 VMM 306时,原因位图714被设置为零,这表明所有VMEXIT导致从L2访客302到L0 VMM 312的资源转移。
在一个实施例中,为了实现从L2访客302到L1 VMM 306的资源转移,在执行VMLAUNCH或VMRESUME之前,状态VMCS链路指针710、控制VMCS链路指针712、以及原因位图714有效。由于在VMENTER或VMRESUME事件中未使用(多个)VMEXIT字段720,因此可以不更新(多个)VMEXIT字段720。在另一个示例中,在VMEXIT事件中使用(多个)VMEXIT字段720。
图8展示描绘了根据一个实施例的用于将资源控制从L2访客302切换到L1 VMM306或L0 VMM 312(图3中所展示的)的方法800的流程图。方法800可以由计算系统或由计算系统的处理器执行的软件库(如运行时库)执行。方法800和/或其功能、例程、子例程或操作各自可以由执行所述方法的计算机系统的一个或多个物理处理器执行。方法800的两个或更多个功能、例程、子例程或操作可以并行执行、或以可以不同于上述顺序的顺序来执行。在某些实现方式中,方法800可以由单个处理线程执行。可替代地,方法800可以由两个或更多个处理线程执行,每个线程执行所述方法的一个或多个单独的功能、例程、子例程或操作。在说明性示例中,实现方法800的处理线程可以被同步(例如,使用信号量、关键部分和/或其他线程同步机制)。可替代地,实现方法800的处理线程可以相对于彼此异步地执行。
参照图8,方法800可以开始于处理器或由所述处理器执行的软件库(如运行时库)确定已经出现了将资源控制从L2访客302转移到L1 VMM 306或L0 VMM 312的VMEXIT条件(810)。所述方法可以包括判定当前VMCS的控制VMCS链路指针是否有效(820)。在一个示例中,当控制VMCS链路指针设置为0xFFFFFFFF_FFFFFFFF时无效,并且否则有效。所述方法可以包括当控制VMCS链路指针无效时将资源控制从L2访客302转移到L0 VMM 312(870)。所述方法可以包括当控制VMCS链路指针有效时判定是否设置了与VMEXIT的当前VMEXIT原因相对应的原因位(830)。例如,如果当前VMEXIT原因是VMEXIT事件420(图4B中所展示的)的表中的第n个VMEXIT原因,则处理设备检查被引用的存储器中的第n个位置中的位,所述存储器由原因位图指针引用。所述方法可以包括当相应的原因位未被设置时将资源控制从L2访客302转移到L0 VMM 312(870)。所述方法可以包括当相应的VMEXIT原因值被设置时判定VMEXIT原因值是否被设置为零(840)。例如,当第n个位置的VMEXIT原因值为零时,则由访客VM中的异常之一来触发VMEXIT事件。
所述方法可以包括当原因位未被设置为0时将资源控制从L2访客302转移到L1VMM 306(860)。所述方法可以进一步包括:当原因位被设置为零时从当前VMCS的VMEXIT信息中检索第n个VMEXIT原因的异常ID(845)。所述方法可以包括判定是否设置了与异常ID的原因位相对应的异常位(850)。在一个示例中,当VMEXIT的原因或触发是异常或NMI(例如,基本退出原因为0)时,VMEXIT由原因零触发。在此示例中,VMEXIT是用异常位图716检查的异常向量(例如,对于NMI为二)。
所述方法可以包括当相应的异常位未被设置时将资源控制从L2访客302转移到L0VMM 312(870)。所述方法可以包括当相应的异常位被设置时将资源控制从L2访客302转移到L1 VMM 306(860)。
图9展示了根据一个实施例的将当前VMCS切换到当已经发生将资源控制从L2访客302转移到L1 VMM 306时的VMCS 304(图3中所展示的)。当前VMCS 900可以包括(多个)访客字段902、(多个)主机字段904、(多个)控制字段906、VMCS链路指针908、状态VMCS链路指针910、控制VMCS链路指针912、原因位图914、异常位图916、(多个)VMENTRY字段918、以及(多个)VMEXIT字段920。
在一个实施例中,当将资源控制从L2访客302转移到L1 VMM 306时,当前VMCS 900的数据字段可能改变。在一个示例中,处理器状态被保存到由状态VMCS链路指针908(图3中所展示的)指向的(多个)访客字段902。在一个示例中,状态VMCS链路指针908可以指向VMCS304。当来自L2访客302的处理器状态被保存到访客字段902时,L1 VMM 306然后可以直接从VMCS 304检索访客字段。在另一个示例中,可以将处理器状态根据处理设备的处理器状态从状态VMCS链路指针所指向的主机字段加载到主机字段904。在一个示例中,处理器状态是处理设备的处理器运行的上下文。处理器状态可以存储在访客字段中,以使字段值可从主机获得。当从主机字段加载处理器状态时,处理器可以在主机模式下运行。
加载到主机字段904的处理器状态可以用于针对L1 VMM 306设置工作上下文并且针对在VMEXIT之后运行的L1 VMM 306设置处理程序代码。在一个示例中,工作上下文是一系列寄存器(如eax、ebx、ecx、edx、esp、ebp、CS、DS、ES、FS、SS、或模型特定寄存器)和由这些寄存器指向的存储器上下文(如由中断描述符表寄存器指向的中断描述符表或由全局描述符表寄存器指向的全局描述符表)。
在一个实施例中,(多个)控制字段906可以包括从由控制VMCS链路指针908指向的VMCS的控制字段复制的数据。例如,通过复制由控制VMCS链路指针912指向的VMCS的控制字段中的数据,可以为当前VMCS900更新(多个)控制字段906。在另一个示例中,当由L1访客302控制资源时,可以根据VMCS 308来配置用于生成VMEXIT的条件。在另一个示例中,可以通过对VMENTRY中断字段的最高位进行清除来用处理器状态更新(多个)VMENTRY字段908。基于不同的VMEXIT原因,可以用处理器状态更新(多个)VMEXIT字段。
在另一个实施例中,可以由处理器更新VMCS链路指针908和控制VMCS链路指针912。在一个示例中,当将资源控制转移到L1 VMM时,用状态VMCS链路指针910中的值来设置当前VMCS 900的VMCS链路指针908。当VMCS链路指针908和控制VMCS链路指针912被更新时,L1 VMM 306可以检索VMCS链路指针908和控制VMCS链路指针912。
在另一个实施例中,状态VMCS链路指针910、控制VMCS链路指针912、原因位图914、以及异常位图916可以通过将这些数据字段中的每一个设置为固定值来禁用,其中,固定值可以被预定义。例如,可以将状态VMCS链路指针910、控制VMCS链路指针912、以及原因位图914设置为0xFFFFFFFF_FFFFFFFF,并且可以将异常位图设置为零。可以禁用状态VMCS链路指针910、控制VMCS链路指针912、原因位图914、以及异常位图916,以避免嵌套。在另一个实施例中,通过复制由状态VMCS链路指针910指向的数据来更新VMENTRY字段918。在另一个实施例中,可以通过使VMENTRY中断信息字段中的有效位清除来更新VMENTRY字段918。VMENTRY字段918的更新可以模拟在资源控制的转移期间VMENTRY字段918的变化。VMCS 304是在资源控制的转移之后已经更新VMCS 900之后的VMCS 900。
在一个示例中,在资源控制转移之后,L1 VMM 306可以在非root模式下执行。L1VMM 306可以直接读取和写入VMCS字段。在另一个示例中,当已经发生违规时,可能发生资源控制从L0 VMM 312到L2访客302的转移。在一个实施例中,违规可能触发VMRESUME事件。
在以下说明中,阐述了许多具体细节(如处理器和系统配置的特定类型的示例、特定硬件结构、特定架构和微架构细节、特定寄存器配置、特定指令类型、特定系统组件、特定测量/高度、特定处理器流水线阶段和操作等),以便于提供对本公开的透彻理解。然而,对本领域技术人员来说将显而易见的是,不需要采用这些特定细节来实践本公开。在其他实例中,未详细描述计算机系统的众所周知的组件或方法,如特定的和替代性处理器架构、针对所描述的算法的特定逻辑电路/代码、特定固件代码、特定互连操作、特定逻辑配置、特定制造技术和材料、特定编译器实现方式、代码中算法的特定表达、特定断电和门控技术/逻辑以及其他特定操作细节,以便避免不必要地模糊本公开。
虽然可以在特定集成电路中(如在计算平台或微处理器中)参照能量节约和能量效率对以下示例实现方式进行描述,但是其他示例实现方式可适用于其他类型的集成电路和逻辑设备。在此所描述的示例实现方式的类似技术和教导可应用于同样可以从更好的能量效率和能量节约中受益的其他类型的电路或半导体器件。例如,所公开的示例实现方式不限于台式计算机系统或UltrabooksTM,并且还可以用于其他设备,如手持式设备、平板计算机、其他薄型笔记本计算机、片上系统(SOC)设备、以及嵌入式应用。手持式设备的一些示例包括:蜂窝电话、互联网协议设备、数码相机、个人数字助理(PDA)、手持式PC。嵌入式应用通常包括:微控制器、数字信号处理器(DSP)、片上系统、网络计算机(NetPC)、机顶盒、网络中枢、广域网(WAN)交换机或可执行以下教导的功能和操作的任何其他系统。此外,本文中所描述的装置、方法和系统不限于物理计算设备,而且还可以涉及用于能量节约和效率的软件优化。如在以下描述中将变得非常明显的是,本文中所描述的方法、装置和系统的示例实现方式(无论是否参照硬件、固件、软件或其组合)对用性能考量均衡的‘绿色科技’未来至关重要。
虽然下面的示例实现方式是参照处理器进行描述的,但是其他示例实现方式适用于其他类型的集成电路和逻辑设备。本公开的示例实现方式的类似技术和教导可以应用于可以从更高的流水线吞吐量和改进的性能受益的其他类型的电路或半导体设备。本公开的示例实现方式的教导适用于执行数据处理的任何处理器或机器。然而,本公开不限于执行512位、256位、128位、64位、32位或16位数据操作的处理器或机器,并且可以应用于在其中执行数据的处理或管理的任何处理器和机器。另外,以下描述提供了示例,并且附图示出了用于说明目的的各种示例。然而,这些示例不应在限制性意义上予以解释,因为它们仅旨在提供本公开的示例实现方式的示例,而不是提供本公开的示例实现方式的所有可能的实现方式的详尽列表。
虽然以下示例描述了在执行单元和逻辑电路的上下文中的指令处理和分配,但是本公开的其他示例实现方式可以通过存储在机器可读有形介质上的数据或指令来实现,所述数据或指令当由机器执行时使机器执行与本公开的至少一种示例实现方式一致的功能。在一种示例实现方式中,在机器可执行指令中将与本公开的示例实现方式相关联的功能具体化。指令可以用于使利用这些指令编程的通用或专用处理器执行本公开中的步骤。本公开的示例实现方式可以作为包括机器或计算机可读介质的计算机程序产品或软件而提供,所述机器或计算机可读介质具有存储于其上的指令,所述指令可以用于对计算机(或其他电子设备)进行编程以便执行根据本公开的示例实现方式的一个或多个操作。可替代地,本公开的示例实现方式的步骤可以由包含用于执行所述步骤的固定功能逻辑的特定硬件组件或者由经编程的计算机组件与固定功能硬件组件的任何组合来执行。
用于对逻辑进行编程以执行本公开的示例实现方式的指令可以存储在系统中的存储器内,例如,DRAM、高速缓存、闪存或其他存储设备。此外,指令可以经由网络或借助于其他计算机可读介质来分配。因此,机器可读介质可以包括用于存储或传输由机器(例如,计算机)可读的形式的信息的任何机制,但是不限于软盘、光盘、只读光盘存储器(CD-ROM)和磁光盘、只读存储器(ROM)、随机存取存储器(RAM)、可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)、磁卡或光卡、闪存、或用于经由电、光、声音、或其他形式的传播信号(例如,载波、红外信号、数字信号等)在互联网上传输信息的有形机器可读存储设备。因此,计算机可读介质包括适用于存储或传输机器(例如,计算机)可读形式的电子指令或信息的任何类型的有形机器可读介质。
设计可以贯穿各个不同的阶段,从产生到仿真到制造。代表设计的数据可以通过许多方式来代表设计。首先,如在仿真中有用的,可以使用硬件描述语言或其他功能描述语言代表硬件。此外,可以在设计过程的一些阶段产生具有逻辑和/或晶体管门的电路等级模型。此外,多数设计在一些阶段处达到的数据水平代表在硬件模型中的不同设备的物理布局。在使用常规半导体制造技术的情况下,代表硬件模型的数据可以是指明在用于产生集成电路的掩膜的不同掩膜层上的各种特征的存在与否的数据。在任何设计表示中,数据可以存储在任何形式的机器可读介质中。存储器或磁存储设备或光存储设备(如,盘)可以是用于存储信息的机器可读介质,所述信息是经由光波或电波来传输的,所述光波或电波被调制或以其他方式被生成以传输这类信息。当指示或携带代码或设计的电载波被传输到执行电信号的复制、缓冲或重传的程度时,进行新的复制。因此,通信提供者或网络提供者可以在有形机器可读介质上至少暂时地存储制品(例如,编码到载波中的信息),从而将本公开的示例实现方式的技术具体化。
在现代处理器中,多个不同的执行单元用来处理和执行各种代码和指令。并非所有的指令都是等同创建的,因为有些指令可能更快地完成,而其他指令则可能花费多个时钟周期来完成。指令的吞吐量越快,处理器的整体性能就越好。因此,尽可能快地执行尽可能多的指令将是有利的。然而,存在具有更高的复杂性并且需要更多的执行时间和处理器资源的某些指令。例如,存在浮点指令、加载/存储操作、数据移动等。
随着更多的计算机系统被用于互联网、文本以及多媒体应用,已经随时间推移引入了附加处理器支持。在一种示例实现方式中,指令集可以与一个或多个计算机架构相关联,包括数据类型、指令、寄存器架构、寻址模式、存储器架构、中断和异常处置、以及外部输入和输出(I/O)。
在一种示例实现方式中,指令集架构(ISA)可以由一个或多个微架构来实现,所述一个或多个微架构包括用于实现一个或多个指令集的处理器逻辑和电路。因此,具有不同微架构的处理器可共享公共指令集的至少一部分。例如,Pentium 4处理器、CoreTM处理器、以及来自加利福尼亚州桑尼威尔(Sunnyvale)的超微半导体有限公司(AdvancedMicroDevices,Inc.)的处理器实现几乎相同版本的x86指令集(在更新的版本中已加入了一些扩展),但具有不同的内部设计。类似地,由其他处理器开发公司(诸如ARM控股有限公司、MIPS或它们的授权方或兼容方)所设计的处理器可以共享公共指令集的至少一部分,但可以包括不同的处理器设计。例如,ISA的相同寄存器架构在不同的微架构中可以使用新的或已知的技术以不同的方式来实现,包括专用物理寄存器、使用寄存器重命名机制(例如,使用寄存器别名表(RAT)、重排序缓冲器(ROB)以及引退寄存器堆)的一个或多个动态分配物理寄存器。在一种示例实现方式中,寄存器可以包括:一个或多个寄存器、寄存器架构、寄存器堆、或可以或可以不由软件程序员寻址的其他寄存器集合。
在一种示例实现方式中,指令可以包括一个或多个指令格式。在一种示例实现方式中,指令格式可以指示各个字段(位的数量、位的位置等)以便在其他事物中指明待执行的操作以及在其上待执行的那个操作的(多个)运算数。一些指令格式可以进一步由指令模板(或子格式)所进一步细分定义。例如,给定指令格式的指令模板可以被定义为具有指令格式字段的不同子集和/或被定义为具有不同解释的给定字段。在一种示例实现方式中,指令使用指令格式(并且,如果定义过,则以所述指令格式的一个给定指令模板)来表示,并且指明或指示操作以及所述操作将进行操作的运算数。
科学、财务、自动向量化通用目的、RMS(识别、挖掘和综合)以及视觉和多媒体应用(例如,2D/3D图形、图像处理、视频压缩/解压缩、语音识别算法和音频处理)可能需要对大量数据项执行相同的操作。在一种示例实现方式中,单指令多数据(Single InstructionMultiple Data,SIMD)指代使处理器对多个数据元素执行运算的指令类型。SIMD技术可以用于能够在逻辑上将寄存器中的位划分成多个固定大小或可变大小的数据元素的处理器,每个数据元素代表单独的值。例如,在一种示例实现方式中,64位寄存器中的位可以被组织为包含四个单独的16位数据元素的源运算数,其中每个数据元素代表单独的16位值。这种数据类型可以被称为紧缩数据类型或向量数据类型,并且这种数据类型的运算数被称为紧缩数据运算数或向量运算数。在一种示例实现方式中,紧缩数据项或向量可以是存储在单个寄存器内的紧缩数据元素的序列,并且紧缩数据运算数或向量运算数可以是SIMD指令(或紧缩数据指令或向量指令)的源或目的地运算数。在一种示例实现方式中,SIMD指令指定用来对两个源向量运算数执行的单个向量操作,以生成相同或不同大小的目的地向量运算数(也称为结果向量运算数),具有相同或不同数量的数据元素,并且具有相同或不同的数据元素顺序。
SIMD技术(如具有包括x86、MMXTM、流式SIMD扩展(SSE)、SSE2、SSE3、SSE4.1和SSE4.2指令的指令集的CoreTM处理器所采用的技术)、ARM处理器(如具有包括向量浮点(VFP)和/或NEON指令的指令集的ARM处理器族)、以及MIPS处理器(如由中国科学院计算技术研究所(ICT)开发的龙芯族处理器)已经实现了应用性能的显著提高(CoreTM和MMXTM是加利福尼亚州圣克拉拉的英特尔公司的注册商标或商标)。
在一种示例实现方式中,目的地和源寄存器/数据是用于表示相应的数据或操作的源和目的地的通用术语。在一些示例实现方式中,目的地和源寄存器/数据可以通过寄存器、存储器或具有与所描绘的名称或功能不同的名称或功能的其他存储区域来实现。例如,在一种示例实现方式中,“DEST1”可以是临时存储寄存器或其他存储区域,而“SRC1”和“SRC2”可以是第一源存储寄存器和第二源存储寄存器或其他存储区域等。在其他示例实现方式中,SRC和DEST存储区域中的两个或更多个可以与同一存储区域内的不同数据存储元件(例如,SIMD寄存器)相对应。在一种示例实现方式中,所述源寄存器中的一个源寄存器还可以用作目的地寄存器,通过例如将对第一源数据和第二源数据执行的操作的结果写回到这两个源寄存器中的一个源寄存器中,从而用作目的地寄存器。
转到图10,示例性计算机系统的框图形成有包括用于执行指令的处理单元的处理器,其中,展示了根据本公开的一种示例实现方式的互连中的一个或多个实现了一个或多个特征。根据本公开,如在本文所描述的示例实现方式中,系统1000包括如处理器1002之类的组件,所述处理器用于采用包括逻辑的执行单元以执行算法来对数据进行处理。系统1000代表基于可从美国加利福尼亚州圣克拉拉市的英特尔公司获得的PENTIUM IIITM、PENTIUM 4TM、XeonTM、Itanium、XScaleTM和/或StrongARMTM微处理器的处理系统,不过也可使用其他系统(包括具有其他微处理器的PC、工程工作站、机顶盒等)。在一种示例实现方式中,样本系统1000执行可从美国华盛顿州雷蒙德市的微软公司获得的WINDOWSTM操作系统的一个版本,不过也可使用其他操作系统(例如,UNIX和Linux)、嵌入式软件、和/或图形用户界面。因此,本公开的示例实现方式不限于硬件电路系统和软件的任何具体组合。
示例实现方式不限于计算机系统。本公开的替代性示例实现方式可用于其他设备,如手持式设备和嵌入式应用。手持式设备的一些示例包括:蜂窝电话、互联网协议设备、数码相机、个人数字助理(PDA)、手持式PC。嵌入式应用可包括:微控制器、数字信号处理器(DSP)、芯片上系统、网络计算机(NetPC)、机顶盒、网络中枢、广域网(WAN)交换机、或可执行根据至少一种示例实现方式的一个或多个指令的任何其他系统。
在这个展示的示例实现方式中,处理器1002包括一个或多个执行单元1008,以实现用于执行至少一个指令的算法。在单处理器桌面或服务器系统的背景下描述了一种示例实现方式,但替代性示例实现方式可包括在多处理器系统中。系统1000是“中枢”系统架构的示例。计算机系统1000包括用于处理数据信号的处理器1002。如一个说明性示例,处理器1002包括复杂指令集计算机(CISC)微处理器、精简指令集计算(RISC)微处理器、超长指令字(VLIW)微处理器、实现指令集组合的处理器或任合其他处理器设备(例如,如数字信号处理器)。处理器1002耦合至处理器总线1010,所述处理器总线在处理器1002与系统1000内的其他组件之间传输数据信号。系统1000的元件(例如,图形加速器1012、存储器控制器中枢1016、存储器1020、I/O控制器中枢1024、无线收发器1026、闪存BIOS 1028、网络控制器1034、音频控制器1036、串行扩展端口1038、I/O控制器1040等)执行其常规功能,所述常规功能对熟悉本领域的人而言是众所周知的。
在一种示例实现方式中,处理器1002包括1级(L1)内部高速缓存存储器1004。取决于架构,处理器1002可具有单个内部高速缓存或多级内部高速缓存。其他示例实现方式取决于特定实现方式和需要而包括内部高速缓存和外部高速缓存两者的组合。寄存器堆1006用于将不同类型的数据存储在不同的寄存器中,包括整数寄存器、浮点寄存器、向量寄存器、分组寄存器、影子(Shadow)寄存器、检查点寄存器、状态寄存器以及指令指针寄存器。
执行单元1008(包括用于执行整数运算和浮点运算的逻辑)也位于处理器1002中。在一种示例实现方式中,处理器1002包括用于存储微代码的微代码(u码)ROM,所述微代码当被执行时用于执行针对某些宏指令的算法或者处理复杂的场景。在此,微代码潜在地可更新用于为处理器1002处理逻辑错误/修理。对于一种示例实现方式,执行单元1008包括用于处理紧缩指令集1009的逻辑。通过将紧缩指令集1009包括在通用处理器1002的指令集内,连同用于执行所述指令的相关联的电路系统,可使用通用处理器1002中的紧缩数据来执行许多多媒体应用所使用的操作。因此,通过将处理器数据总线的全带宽用于对紧缩数据进行操作,许多多媒体应用可被加速并更为有效率地执行。这潜在地消除了跨处理器数据总线传送更小数据单元以一次对一个数据元素执行一个或多个操作的需要。
执行单元1008的替代性示例实现方式也可用于微控制器、嵌入式处理器、图形设备、DSP以及其他类型的逻辑电路。系统1000包括存储器1020。存储器1020包括动态随机存取存储器(DRAM)设备、静态随机存取存储器(SRAM)设备、闪存设备或其他存储器设备。存储器1020存储由数据信号表示的待由处理器1002执行的指令和/或数据。
系统逻辑芯片1016耦合到处理器总线1010和存储器1020。所展示的示例实现方式中的系统逻辑芯片1016是存储器控制器中枢(MCH)。处理器1002可以经由处理器总线1010与MCH 1016进行通信。MCH 1016向存储器1020提供高带宽存储器路径1018,以用于指令和数据存储以及用于存储图形命令、数据和纹理。MCH 1016用于在处理器1002、存储器1020、以及系统1000中的其他组件之间引导数据信号,并且在处理器总线1010、存储器1020、以及系统I/O 1022之间桥接数据信号。在一些示例实现方式中,系统逻辑芯片1016可以提供用于耦合到图形控制器1012的图形端口。MCH 1016通过存储器接口1018耦合到存储器1020。图形卡1012通过加速图形端口(AGP)互连1014耦合到MCH 1016。
系统1000使用专用中枢接口总线1022将MCH 1016耦合到I/O控制器中枢(ICH)1030。ICH 1030通过本地I/O总线提供到一些I/O设备的直接连接。本地I/O总线是用于将外围设备连接到存储器1020、芯片组和处理器102的高速I/O总线。一些示例是音频控制器、固件中枢(闪存BIOS)128、无线收发器126、数据存储设备124、包含用户输入和键盘接口的传统I/O控制器、串行扩展端口(如通用串行总线USB)以及网络控制器134。数据存储设备124可以包括硬盘驱动器、软盘驱动器、CD-ROM设备、闪存设备、或其他大容量存储设备。
对于系统的另一种示例实现方式,根据一种示例实现方式的指令可以与片上系统一起使用。片上系统的一种示例实现方式包括处理器和存储器。一个这样的系统的存储器是闪存。闪存可以位于与处理器和其他系统组件相同的裸片上。另外,诸如存储器控制器或图形控制器之类的其他逻辑块也可以位于片上系统上。
图11是用于处理器1100的微架构的框图,所述处理器包括用于执行根据本公开的一种示例实现方式的指令的逻辑电路。在一些示例实现方式中,可以实现根据一种示例实现方式的指令来对具有字节、字、双字、四字等大小以及诸如如单倍和双倍精度整数和浮点数据类型等数据类型的数据元素进行操作。在一种示例实现方式中,有序前端1101是处理器1100的获取待执行的指令并将其准备于稍后在处理器流水线中使用的部分。前端1101可以包括若干个单元。在一种示例实现方式中,指令获取器1126从存储器获取指令并将其馈送给指令解码器1128,所述指令解码器进而对指令进行解码或解释。例如,在一种示例实现方式中,解码器将接收到的指令解码成机器可以执行的被称为“微指令”或“微运算”(也称为微op或uop)的一个或多个运算。在其他示例实现方式中,根据一种示例实现方式,解码器将指令解析为运算码和相应的数据以及被微架构用于执行运算的控制字段。在一种示例实现方式中,跟踪高速缓存1130采用经解码的uop并且将其组合为程序有序序列或在uop队列1134中跟踪用于执行。当跟踪高速缓存1130遇到复杂指令时,微代码ROM1132提供完成运算所需的uop。
一些指令被转换为单个微op,而其他指令需要若干个微op来完成完整的运算。在一种示例实现方式中,如果完成指令需要多于四个微op,则解码器1128访问微代码ROM1132以执行指令。对于一种示例实现方式,指令可以被解码成用于在指令解码器1128处进行处理的少量的微ops。在另一种示例实现方式中,如果需要多个微op来完成运算,则指令可以存储在微代码ROM1132内。跟踪高速缓存1130引用入口点可编程逻辑阵列(PLA),以确定用于从微代码ROM 1132读取微代码序列的正确微指令指针以便根据一种示例实现方式完成一个或多个指令。在微代码ROM 1132完成用于指令的排序微op之后,机器的前端1101从跟踪高速缓存1130重新获取微op。
乱序执行引擎1103是指令准备执行的地方。乱序执行逻辑具有多个缓冲器,所述多个缓冲器用于使指令流平滑并重新排序,以在指令流顺着流水线进行并被调度用于执行时优化性能。分配器逻辑分配每个uop执行所需的机器缓冲器和资源。寄存器重命名逻辑将逻辑寄存器重命名到寄存器堆中的条目上。在指令调度器:存储器调度器、快速调度器1102、慢速/通用浮点调度器1104和简单浮点调度器1106的前面,分配器还为两个uop队列(一个用于存储器运算,一个用于无存储器运算)中的一个uop队列的每个uop分配条目。uop调度器1102、1104、1106基于其依赖输入寄存器运算数源的准备状态以及uop完成其运算所需的执行资源的可用性来确定uop是否准备好执行。一种示例实现方式的快速调度器1102可以在主时钟周期的每一半上进行调度,而其他调度器可以仅每个主处理器时钟周期调度一次。调度器仲裁分派端口以调度uop用于执行。
寄存器堆1108、1110位于调度器1102、1104、1106与执行块1111中的执行单元1112、1114、1116、1118、1120、1122、1124之间。存在分开的寄存器堆1108、1110,分别用于整数运算和浮点运算。一种示例实现方式的每个寄存器堆1108、1110还包括旁路网络,所述旁路网络可以仅绕过或转发尚未被写入到寄存器堆中的已完成结果到新的依赖uop。整数寄存器堆1108和浮点寄存器堆1110还能够与其他寄存器堆进行数据通信。对于一种示例实现方式,整数寄存器堆1108被分成两个分开的寄存器堆,一个寄存器堆用于数据的低阶32位,并且第二寄存器堆用于数据的高阶32位。一种示例实现方式的浮点寄存器堆1110具有128位宽的条目,因为浮点指令通常具有宽度为从64位至128位的运算数。
执行块1111包含实际上执行指令的执行单元1112、1114、1116、1118、1120、1122、1124。这个部分包括寄存器堆1108、1110,所述寄存器堆存储微指令需要执行的整数数据运算数值和浮点数据运算数值。一种示例实现方式的处理器1100由多个执行单元组成:地址生成单元(AGU)1112、AGU 1114、快速ALU 1116、快速ALU 1118、慢速ALU 1120、浮点ALU1122、浮点移动单元1124。对于一种示例实现方式,浮点执行块1122、1124执行浮点、MMX、SIMD和SSE、或其他运算。一种示例实现方式的浮点ALU 1122包括用于执行除法、平方根和剩余微op的64位乘64位浮点除法器。对于本公开的示例实现方式,涉及浮点值的指令可以用浮点硬件来处理。在一种示例实现方式中,ALU运算前往高速ALU执行单元1116、1118。一种示例实现方式的快速ALU 1116、1118能够以半个时钟周期的有效等待时间执行快速运算。对于一种示例实现方式,大多数复杂整数运算前往慢速ALU 1120,因为慢速ALU 1120包括用于长等待时间类型的运算的整数执行硬件,例如乘法、移位、标志逻辑、以及分支处理。存储器加载/存储运算由AGU 1112、1114执行。对于一种示例实现方式,在对64位数据运算数执行整数运算的上下文中描述了整数ALU 1116、1118、1120。在替代性示例实现方式中,ALU 1116、1118、1120可以被实现为支持包括16、32、128、256等的各种数据位。类似地,可以实现浮点单元1122、1124以支持具有各种宽度位的运算数范围。对于一种示例实现方式,浮点单元1122、1124可以与SIMD和多媒体指令结合地对128位宽的紧缩数据运算数进行运算。
在一种示例实现方式中,uop调度器1102、1104、1106在父加载完成执行之前分派不独立运算。在处理器1100中推测性地调度和执行uop时,处理器1100还包括用于处理存储器未命中的逻辑。如果数据高速缓存中的数据加载未命中,则可能存在流水线中飞行的已经因暂时不正确数据而离开调度器的不独立运算。重放机制跟踪并重新执行使用不正确数据的指令。仅仅不独立运算需要被重放,并且允许完成独立运算。处理器的一种示例实现方式的调度器和重放机制还被设计成捕获用于文本串比较运算的指令序列。
术语“寄存器”可以指代被用作指令的一部分以标识运算数的机载处理器存储位置。换言之,寄存器可以是从处理器外部(从程序员的角度来看)可用的寄存器。然而,示例实现方式的寄存器不应限于特定类型的电路的意义。而是,示例实现方式的寄存器能够存储和提供数据,并且执行本文所描述的功能。本文所描述的寄存器可以由处理器内的电路系统使用任何数量的不同技术来实现,如专用物理寄存器、使用寄存器重命名的动态分配物理寄存器、专用和动态分配的物理寄存器的组合等。在一种示例实现方式,整数寄存器存储三十二位整数数据。一种示例实现方式的寄存器堆还包含用于紧缩数据的八个多媒体SIMD寄存器。对于下面的讨论,寄存器被理解为被设计成保持紧缩数据的数据寄存器,比如,利用来自加利福尼亚州圣克拉拉的英特尔公司的MMX技术实现的微处理器中的64位宽MMXTM寄存器(在某些情况下也被称为“mm”寄存器)。以整数形式和浮点形式两者都可用的这些MMX寄存器可以利用伴随SIMD和SSE指令的紧缩数据元素进行操作。类似地,与SSE2、SSE3、SSE4或更高版本(通常称为“SSEx”)技术有关的128位宽XMM寄存器也可以用于保持这样的紧缩数据运算数。在一种示例实现方式中,在存储紧缩数据和整数数据时,寄存器不需要对这两种数据类型进行区分。在一种示例实现方式中,整数和浮点包含在同一寄存器堆或不同的寄存器堆中。此外,在一种示例实现方式中,浮点数据和整数数据可以存储在不同的寄存器或同一寄存器中。
根据本公开的一个或多个方面,处理系统(如处理系统)可以包括耦合到架构上受保护的存储器的一个或多个处理核。在某些实现方式中,处理系统可以实现软件防护扩展(SGX),所述软件防护扩展是允许应用对受保护容器(被称为飞地)进行实例化的一组架构的扩展。
现在参照图12,示出了根据本公开的一个或多个方面的示例处理系统的框图。如图12中所示,处理系统1200可以包括一个或多个处理核1211,每个处理核1211具有与其相关联的本地第一级(L1)高速缓存1215。L1高速缓存1215可以通信地耦合到共享末级高速缓存(LLC)1217。在说明性示例中,包括L1高速缓存1215和LLC 1217的高速缓存层次结构可以被配置为包含性高速缓存层次结构,以使得存储在L1高速缓存1215中的信息的至少一部分也可以存储在LLC 1217中。
根据本公开的一个或多个方面,处理系统1200可以包括架构上受保护的存储器。处理核1211可以包括处理逻辑,所述处理逻辑被配置成通过执行驻留在受保护存储器中的指令并访问驻留在受保护存储器中的数据而同时防止对受保护存储器的未经授权访问(甚至由特权应用)来实现安全飞地,如在此下文中更详细描述的。
活动的安全飞地可以被划分成加密部分和解密部分。加密部分可以驻留在未受保护的存储器(如主存储器或盘)中。解密部分驻留在飞地页面高速缓存(EPC)1282中。EPC是处理系统用来当飞地页面未被加密保护时临时存储所述飞地页面的受保护存储器。
支持SGX并在受加密保护的平台存储器中实现EPC的处理系统支持BIOS保留被称为处理器保留存储器(PRM)的一(多)系列存储器的能力。BIOS通过配置一组范围寄存器(统称为PRMRR)来分配PRM。在PRM内分配EPC。CPU存储器保护机制通过将这种访问视为对不存在的存储器的引用来物理阻止从所有外部代理(DMA、图形引擎等)对PRM的访问。
EPC可以被划分成预定大小的页面,其可被称为EPC页面。EPC受保护以免受驻留在飞地外的软件的任何访问。此外,未授权方将无法读取或修改通过直接硬件攻击加载到EPC中的属于飞地的纯文本数据。EPC位于处理系统的物理地址空间内,但只能使用用于构建和启用飞地、进入/退出飞地、管理EPC、以及执行各种其他操作的特权或非特权飞地指令进行访问。
存在实现EPC的若干种机制。EPC可以实现为裸片上静态随机存取存储器(SRAM)或动态随机存取存储器(DRAM)。可替代地,EPC可以通过隔离CPU末级高速缓存的方式来构建。实现EPC的另一种机制是存储器加密引擎(MEE)。本文中MEE应指硬件实现的处理逻辑,所述处理逻辑对处理器封装与平台DRAM之间的流量进行加密,从而提供使用平台DRAM创建受加密保护的易失性存储的机制。MEE可以拦截所尝试的存储器访问并将这些访问路由到密码控制器,所述密码控制器可以牲畜对平台DRAM的一个或多个存储器访问以获取密文、处理所述密文以生成明文、并且满足原始存储器访问请求。
再次参照图12,L1高速缓存1215可以将数据传输到LLC 1220和从所述LLC传输数据。存储器控制器1250可以连接到末级高速缓存1220和MEE 1280。存储器控制器1250可以访问驻留在物理地址空间1288内的后备存储设备1286上的EPC 1282。
飞地页面高速缓存映射(EPCM)是处理系统用来跟踪EPC内容的受保护结构。EPCM1284可以包括多条条目,其中,每条条目与EPC中的页面相对应。每条EPCM条目可以以依赖于实现方式的格式保持以下信息:EPC页面是有效或还是无效;拥有所述页面的飞地实例的标识符;所述页面的类型(REG、TCS、VA、SECS);飞地被允许通过其来访问所述页面的虚拟地址;读取/写入/执行所述页面的权限;所述页面是否可访问(BLOCKED或UNBLOCKED)。
处理系统可以在地址转换流程中使用EPCM 1284以对加载到EPC中的飞地页面强制实施访问控制。从逻辑上讲,除了“传统”分段机制、分页表机制和扩展分页表机制之外,所述EPCM还提供了附加的访问控制安全层。
EPC、EPCM和各种其他实现方式特定的数据结构可以被映射到架构上受保护的存储器内的位置。当生成访问EPC的请求时,处理系统1200可以将所述请求重新映射到包含加密EPC数据的后备存储位置,并且检索所述数据。
各种飞地相关的功能可以在微代码中实现,由MEE的硬件实现方式和实现飞地功能的处理逻辑支持。在某些实现方式中,处理逻辑可以经由转换后备缓冲器(TLB)1264和页未命中处理程序(PMH)1268来控制对EPC 1282的访问。
在说明性示例中,可以将TLB实现为将虚拟地址映射到物理地址的表。“TLB命中”是指在TLB中存在所请求的虚拟地址时的情形。“TLB未命中”是指相反的情形:当TLB中中不存在所请求的虚拟地址时,地址转换可以通过查找页表来进行。在确定物理地址之后,虚拟地址到物理地址的映射可以被输入到TLB中。
每条TLB条目可以包括指示标识拥有由TLB条目所引用的存储器位置的飞地的一个或多个位。可替代地,如果没有提供这些位,则在退出安全飞地时需要TLB冲刷,以防止对EPC进行未经授权的访问。在说明性示例中,如果发生TLB未命中,则额外的查找可以从多次存储器引用上的EPC映射中获取数据。PMH可以执行EPC映射的查找。
图13示意性地展示了使用EPTP切换VM功能(例如,VMFUNC 0)来使得虚拟机能够在不退出到VMM的情况下执行某些特权操作(例如,访问分配给对等虚拟机的主机存储器以便与对等虚拟机进行无退出通信)。如图13所示意性地展示的,VMM可以为虚拟机创建若干个存储器视图,以使得第一存储器视图(“默认视图”1310)将允许虚拟机执行访客代码并访问访客数据,而第二存储器视图(“替代视图”1320)将允许虚拟机执行某些受保护代码(例如,访问分配给对等虚拟机的主机存储器以便与对等虚拟机进行无退出通信)。VMM可以进一步创建与上述引用视图相对应的若干个存储器页,以使得每个存储器页将在相应视图中至少具有执行权限。可从默认视图1310执行的第一存储器页1330可以包括未受保护的(即,访客可修改的)访客可执行代码和访客数据。可从替代视图1320执行的第二存储器页1340可以包括可用来执行某些任务(例如,与对等虚拟机的无退出通信)的受保护的访客可执行代码。
扩展页表机制(EPT)是可用于支持物理存储器的虚拟化的特征。当使用EPT时,通常被视为物理地址(并用于访问存储器)的某些地址反而被视为访客物理地址。通过遍历一组EPT分页结构来转换访客物理地址,以产生用于访问存储器的物理地址。
当设置“启用EPT”VM执行控制时,使用EPT。所述EPT对VMX非root操作中使用的访客物理地址以及针对事件注入的VM进入所使用的地址进行转换。从访客物理地址到物理地址的转换由一组EPT分页结构来确定。EPT分页结构与处理器处于IA-32e模式时用于转换线性地址的分页结构类似。
图14示意性地展示了根据本公开的一个或多个方面操作的示例处理系统100的框图。如图14中所示,处理系统1400可以包括经由共享互连1415耦合到存储器1420的一个或多个处理核1411。处理系统100可以实现硬件辅助的虚拟化机制,所述虚拟化机制允许在最高特权执行模式(也被称为VMX root执行模式)下运行的VMM 1417的控制下在较低特权执行模式(也被称为VMX非root执行模式)下执行一个或多个虚拟机,如在此下文中更详细描述的。在说明性示例中,VMM可以被配置成创建和管理执行由相应的访客操作系统控制的各种软件应用的一个或多个虚拟机1431。在某些实现方式中,处理系统1400还可以包括图14中未示出的各种其他组件。
由虚拟机1431执行的软件应用可以使用访客虚拟地址(例如,由相应虚拟机的线性地址空间中的访客线性地址表示的)来引用存储器位置。响应于接收到存储器访问请求,处理器可以使用访客OS页表(OS PT)1433将所引用的访客虚拟地址转换成访客物理地址。处理系统100然后可以使用扩展页表(EPT)1439进一步将访客物理地址转换成相应的主机物理地址。
在某些实现方式中,处理系统100可以利用转换后备缓冲器(TLB)1435来将访客虚拟地址的多个最新映射高速缓存到相应的主机物理地址。
图15示意性地展示了根据本公开的一个或多个方面的虚拟地址转换的示例实现方式。响应于未能使用TLB来解析访客虚拟地址,可以调用页未命中处理程序(PMH)1537,以使用用于将访客虚拟地址转换成相应的访客物理地址的OS PT 1533并且然后使用用于将访客物理地址转换成相应的主机物理地址的EPT 1539来执行页表遍历。
当“启用EPT”VM执行控制为1时,访客物理地址的标识取决于CR0.PG的值。如果CR0.PG=0,则每个线性地址都被视为访客物理地址。如果CR0.PG=1,则访客物理地址是从控制寄存器CR3和访客分页结构的内容推导出的地址。(这包括PDPTE的值,PDPTE的逻辑处理器存储在内部非架构寄存器中)。访客分页结构包括(在页表条目中和位7-PS-为1的其他分页结构条目中)由访客分页结构将线性地址转换成的地址。
如果CR0.PG=1,则线性地址到物理地址的转换需要使用EPT来多次转换访客物理地址。例如,假设CR4.PAE=CR4.PSE=0。然后,32位线性地址的转换如下进行操作:
线性地址的位31:22选择位于CR3中的访客物理地址处的访客页目录中的条目。通过EPT转换访客页目录条目(PDE)的访客物理地址,以确定访客PDE的物理地址。
线性地址的位21:12选择位于访客PDE中的访客物理地址处的访客页表中的条目。通过EPT转换访客页表条目(PTE)的访客物理地址,以确定访客PTE的物理地址。
线性地址的位11:0是位于访客PTE中的访客物理地址处的页帧中的偏移量。通过EPT来转换由此偏移量确定的访客物理地址,以确定原始线性地址转换到的物理地址。
图16示意性地展示了可以由根据本公开的一个或多个方面操作的处理系统利用的分页结构条目的示例格式。这样的分页结构条目可以包括引用各种大小的存储器页的页表条目,以及4级页映射(PML4)条目、EPT页目录指针表条目、和引用EPT的页目录条目。在图16中,“M”是处理器(MAXPHYADDR)值支持的最大物理地址的缩写,“R”指示对由相应条目引用的页的读访问特权,“W”指示对由相应条目引用的页的写访问特权,并且“X”指示对由相应条目引用的页的执行访问特权。
在某些实现方式中,根据本公开的一个或多个方面操作的处理系统支持普通分页结构条目中的被访问标志和脏标志。某些处理器还支持EPT分页结构条目中的相应标志。对于在访客物理地址转换期间使用的任何EPT分页结构条目,位8是被访问标志。对于映射页面的EPT分页结构条目(与引用另一EPT分页结构相反),位9是脏标志。每当处理器使用EPT分页结构条目作为访客物理地址转换的一部分时,处理器就会在此条目中设置被访问标志(如果尚未设置的话)。每当存在对访问物理地址的写入时,处理器就会在EPT分页结构条目中设置脏标志(如果尚未设置的话),所述脏标志标识访客物理地址(EPT PTE或者位7为1的EPT分页结构条目)的最终物理地址。
当启用EPT的被访问标志和脏标志时,处理器对访客分页结构条目的访问被视为写入。因此,这种访问将导致处理器在EPT分页结构条目中设置标识访客分页结构条目的最终物理地址的脏标志。(这不适用于通过MOV到CR指令分页的PAE的PDPTE寄存器的加载。这些访客PDPTE的加载被视为读取,并且不会导致处理器在任何EPT分页结构条目中设置脏标志。)这些标志是“粘性的”,这意味着一旦设置,处理器不会清除它们;只有软件可以清除它们。
处理器可以高速缓存来自TLB和分页结构高速缓存中的EPT分页结构条目的信息。这一事实暗示了如果软件将被访问标志或脏标志从1更改为0,则处理器可能不会使用受影响的访客物理地址在后续访问中设置存储器中的相应位。
如上文所指出的,在某些实现方式中,根据本公开的一个或多个方面操作的处理系统可以通过高速缓存来自控制地址转换过程的存储器中的结构的处理器数据来加速所述地址转换过程。用于VMX操作的架构的VPID和EPT特征增强了这种高速缓存架构。EPT限定访客物理地址空间,并且限定(从线性地址空间)到此地址空间的转换和从此地址空间(到物理地址空间)的转换。这两个特征都对逻辑处理器可以创建和使用从分页结构中高速缓存的信息的方式进行控制。
根据本公开的一个或多个方面操作的处理系统可以支持可以由逻辑处理器高速缓存的两种类型的转换相关信息:转换,其是从线性页码到物理页帧的映射;以及分页结构高速缓存,其将线性页码的高位映射到来自用于转换与那些高位匹配的线性地址的分页结构条目的信息。
当使用VPID和EPT时,可以高速缓存相同类型的信息。逻辑处理器可以基于其功能来高速缓存和使用这样的信息。具有不同功能的信息标识如下:
线性映射包括线性转换(这些线性转换各自是从线性页码到其所转换到的物理页帧的映射,以及关于访问权限和存储器分类的信息)以及线性分页结构高速缓存条目(这些条目各自是从线性地址的上部到用于转换线性地址空间的相应区域的分页结构的物理地址的映射,以及关于访问特权的信息。例如,线性地址的位47:39将映射到相关页目录指针表的地址)。
访客物理映射包括访客物理转换(这些访客物理转换各自是从访客物理页码到其所转换到的物理页帧的映射,以及关于访问权限和存储器分类的信息)以及访客物理分页结构高速缓存条目(这些条目各自是从访客物理地址的上部到用于转换访客物理地址空间的相应区域的EPT分页结构的物理地址的映射,以及关于访问特权的信息)。
如上文所指出的,在某些实现方式中,根据本公开的一个或多个方面操作的处理系统可以同时支持外部中断的主机控制和访客控制。尽管外部中断的访客控制可能适用于分区使用(分区到独立虚拟机的不同的CPU核/线程和I/O设备),但基于VMX构建的一些VMM可以利用外部中断的主机控制。通过外部中断的主机控制,VMM(或主控VMM模型中的主机OS)管理平台中的物理中断控制器以及通过所述物理中断控制器生成的中断。VMM将软件仿真的虚拟中断控制器设备(如PIC和APIC)暴露给每个访客虚拟机实例。
在某些实现方式中,根据本公开的一个或多个方面操作的处理系统使用8位向量,所述向量的224(20H-FFH)可用于外部中断。向量用于在中断描述符表(IDT)中选择适当的条目。VMX操作允许每个访客控制其本身的IDT。主机向量是指在中断确认周期期间由平台递送到处理器的向量。访客向量是指由访客编程以在其访客IDT中选择条目的向量。取决于由VMM设计支持的I/O资源管理模型,访客向量空间可以或可以不与底层主机向量空间重叠。
来自虚拟设备的中断:对于被递送到代表仿真虚拟设备的访客的虚拟中断的访客向量数与来自它们仿真的物理设备的中断的主机向量数没有直接关系。通过访客操作环境分配给虚拟设备的访客向量由VMM保存,并且在代表虚拟设备注入虚拟中断时被利用。
来自所分配的物理设备的中断:针对I/O设备分配的硬件支持允许将主机平台中的物理I/O设备分配(直接映射)到VM。对于来自直接映射的物理设备的中断,访问向量占用与主机向量空间等效的空间,并且要求VMM执行对于中断的主机向量到访客向量的映射。
图17示意性地展示了由根据本公开的一个或多个方面操作的处理系统实现的主机外部中断与访客虚拟外部中断之间的示例功能关系。在图17的说明性示例中,设备1710A由主机拥有并且生成具有主机向量X的外部中断。主机IDT 1720被设置为使得设备驱动程序1730A的中断服务例程(ISR)照常挂接到主机向量X。VMM在生成到具有访客预期向量P的VM的虚拟中断的软件中仿真(通过设备1710A)虚拟设备1710C。设备1710B被分配给VM 1740并且生成具有主机向量Y的外部中断。主机IDT 1720被编程以针对向量Y的所分配的设备挂接VMM中断服务例程(ISR),并且VMM处理程序向VM 1740注入具有访客向量Q的虚拟中断。访客操作系统对访客进行编程以将适当的访客驱动器的ISR挂接到向量P和Q。
对于执行中断虚拟化,VMM可以取得平台中的物理中断和各种中断控制器的所有权。物理中断的VMM控制可以通过“外部中断退出”VM执行控制的主机控制设置来启用。为了取得平台中断控制器的所有权,VMM可以将虚拟中断控制器设备暴露给虚拟机,并且限制访客对平台中断控制器的访问。
在某些实现方式中,根据本公开的一个或多个方面操作的处理系统可以支持以下类型的外部中断控制机制中的一个或多个:可编程中断控制器(Programmable InterruptControllers,PIC)、高级可编程中断控制器(Advanced Programmable InterruptControllers,APIC)、以及消息信号中断(Message Signaled Interrupts,MSI)。
PIC使能的平台实现方式可以支持级联为主控制器和从控制器的双8259中断控制器。所述中断控制器可以支持多达15个可能的中断输入。8259控制器通过经由特定I/O端口访问的初始化命令字(ICWx)和操作命令字(OCWx)进行编程。通过中断请求、中断服务例程和中断掩蔽寄存器在PIC中捕获各种中断线状态。可以通过激活访客控制的VMCS中的I/O位图(VM执行控制字段中的激活I/O位图位设置为1)并且将I/O位图物理地址指向有效的位图区域来限制访客对PIC I/O端口的访问。可以将与PIC I/O端口相对应的位清除,以使对这些端口进行访客访问时VM退出。
如果VMM不支持从访客对任何I/O端口的直接访问,则可以在VM执行控制字段中设置无条件I/O退出,而不是激活I/O位图。VM退出信息中的退出原因字段允许由于I/O访问引起的VM退出的标识,并且可以提供退出限制以标识关于导致VM退出的访客I/O操作的细节。
在各种说明性示例中,VMM PIC虚拟化可以仿真平台PIC功能,包括中断优先级、掩码、请求和服务状态、以及PIC操作的特定访客编程模式。
虽然标准PIC旨在用于单处理器系统,但APIC可以用于单处理器系统或多处理器系统。基于APIC的中断控制包括两个物理组件:与处理器集成的中断接受单元(本地APIC),以及作为I/O子系统的一部分的中断递送单元(I/O APIC)。APIC虚拟化涉及保护平台的本地APIC和I/O APIC并且针对访客对它们进行仿真。
本地APIC负责本地中断源、中断接受、向逻辑处理器分配中断、以及生成处理器间中断。软件通过读取和写入其存储器映射的寄存器与本地APIC进行交互,所述寄存器驻留在4KB的未高速缓存的存储器区域内,所述存储器区域具有存储在IA32_APIC_BASE MSR中的基地址。由于本地APIC寄存器是存储器映射的,因此VMM可以利用存储器虚拟化技术(比如页表虚拟化)来捕获访客对主控虚拟本地APIC寄存器的页帧的访问。
VMM中的本地APIC虚拟化可以仿真各种本地APIC操作和寄存器,诸如:APIC标识/格式化寄存器、本地向量表(LVT)、中断命令寄存器(ICR)、中断捕获寄存器(TMR、IRR和ISR)、任务和处理器优先级寄存器(TPR、PPR)、EOI寄存器以及APIC定时器寄存器。由于本地APIC被设计成与非特定EOI一起操作,所以本地APIC仿真还可以针对电平触发的虚拟中断来仿真向访客的虚拟I/O APIC的EOI广播。
本地APIC允许两个电平下的中断掩蔽:在用于本地中断的本地向量表条目中的掩码位,并且通过TPR寄存器提高处理器优先级以掩蔽较低优先级的外部中断。除了访客虚拟处理器可中断性状态(当将APIC路由的外部虚拟中断注入访客VM时)之外,VMM可以包含如由访客编程的这些虚拟本地APIC掩码设置。
VMX提供了帮助VMM将本地APIC虚拟化的若干特征。以下这些特征允许在没有到VMM的VM退出的情况下发生许多访客TPR访问(仅使用CR8):
VMCS包含“虚拟APIC地址”字段。此64位字段是4KB虚拟APIC页面的物理地址(4KB对齐)。虚拟APIC页面包含可由MOV CR8指令访问的TPR影子。TPR影子包括虚拟APIC页面的字节80H中的位7:4。
TPR阈值:此32位字段的位3:0确定TPR影子不能落到其之下的阈值。在执行使TPR影子降低到低于此值的MOV CR8之后,将发生VM退出。
基于处理器的VM执行控制字段包含“使用TPR影子”位和“CR8存储退出”位。如果“使用TPR影子”VM执行控制是1并且“CR8存储退出”VM执行控制是0,则来自CR8的MOV从TPR影子中读取。如果“CR8存储退出”VM执行控制是1,则来自CR8的MOV导致VM退出;在这种情况下,“使用TPR影子”VM执行控制被忽略。
基于处理器的VM执行控制字段包含“CR8加载退出”位。如果设置了“使用TPR影子”VM执行控制并且“CR8加载退出”VM执行控制被清除,则到CR8的MOV写入“TPR影子”。在此写入之后,如果写入的值低于TPR阈值,则VM将退出。如果设置了“CR8加载退出”VM执行控制,则到CR8的MOV导致VM退出;在这种情况下,“使用TPR影子”VM执行控制被忽略。
如上文所指出的,在某些实现方式中,根据本公开的一个或多个方面操作的处理系统可以支持I/O APIC虚拟化。I/O APIC寄存器可以被映射到1MB区域,其中,每个I/OAPIC在此范围内分配一个4K地址窗口。VMM可以利用物理存储器虚拟化来捕获访客对虚拟I/O APIC存储器映射的寄存器的访问。I/O APIC虚拟化可以仿真各种I/O APIC操作和寄存器,诸如标识/版本寄存器、间接I/O访问寄存器、EOI寄存器、以及I/O重定向表。I/O APIC虚拟化还可以仿真由访客编程的各种重定向表条目设置(如递送模式、目的地模式、递送状态、极性、掩蔽、以及触发模式)并且在访客EOI写入到各种虚拟本地APIC时跟踪远程IRR状态。
如上文所指出的,在某些实现方式中,根据本公开的一个或多个方面操作的处理系统可以支持消息信号中断(MSI)虚拟化。
PCI本地总线规范(修订版2.2)引入了消息信号中断(MSI)的概念。通过将系统指定的消息写入系统指定的地址,MSI使得PCI设备能够请求服务。事务地址指定消息目的地,而事务数据指定中断向量、触发模式以及递送模式。预期系统软件会在MSI设备配置期间配置消息数据和地址,从而将一个或多个非共享消息分配给具有MSI能力的设备。虽然MSI对于常规PCI设备是可选的,但是它是PCI-Express设备的优选中断机制。
由于MSI地址和数据是通过PCI配置空间来配置的,因此为了控制这些物理中断,VMM可以夺取PCI配置空间的所有权。这允许VMM捕获具有MSI能力的虚拟的和所分配的访客设备的消息地址和数据的访客配置。由软件通过如在PCI本地总线规范中定义的标准CONFIG_ADDRESS/CONFIG_DATA寄存器机制(CFCH/CF8H端口)或者如在PCI-Express基本规范(修订版1.0a)中定义的增强型平面存储器映射(MEMCFG)配置机制来生成PC兼容系统上的PCI配置事务。
在说明性示例中,对于主机拥有的I/O设备,中断设备由VMM(或主控VMM中的主控OS)拥有。在此模型中,在ISR完成时,调用VMM/主机驱动器中的中断服务例程并且照常执行到相应的中断控制器的适当写入序列(TPR更新、EOI等)。如果由驱动器指示的工作完成暗示了虚拟设备活动,则VMM运行虚拟设备仿真。取决于设备类别,物理设备活动可以暗示映射在设备上的多个虚拟设备的活动。对于每个受影响的虚拟设备,VMM将虚拟外部中断事件注入到相应的访客虚拟机。访客驱动器与所仿真的虚拟设备进行交互以处理虚拟中断。VMM中的中断控制器仿真支持对VMM的虚拟中断控制器的各种访客访问。
在另一说明性示例中,对于访客分配的I/O设备,VMM使用软件代理或者其可以直接将物理设备映射到所分配的VM。在这两种情况下,服务于物理设备上的中断条件由在访客VM内部运行的驱动器启动。通过外部中断的主机控制,因为到VMM的VM退出以及通过主机IDT的向量化,中断从所分配的物理设备到已寄存的VMM中断处理程序。对于解除阻止其他低优先级平台中断的递送,VMM中断处理程序可以掩蔽中断源(用于电平触发的中断)并且发出适当的EOI写入序列。
如上文所指出的,在某些实现方式中,根据本公开的一个或多个方面操作的处理系统可以支持各种存储器虚拟化方法。VMM控制物理存储器以确保VM隔离,并且重新映射主机物理地址空间中的访客物理地址以进行虚拟化。存储器虚拟化允许VMM强制控制物理存储器,并且还支持访客OS对管理存储器地址转换的期望。
存储器虚拟化可以促进各种处理器操作模式下的访客执行。这包括:使用分页的受保护模式、不使用分页的受保护模式、实模式以及任何其他瞬态执行模式。VMX允许启用分页的受保护模式和虚拟8086模式(启用分页)下的访客操作以支持访客实模式执行。在瞬态操作模式下的访客执行(比如,在具有大于64KB的一个或多个段限制的实模式下)可以由VMM仿真。
由于VMX操作涉及在使用分页的受保护模式下的处理器执行(通过CR0固定位和CR4固定位),所以VMM可以利用分页结构来支持存储器虚拟化。为了支持访客实模式执行,VMM可以建立访客到主机物理地址的线性映射的简单平面页表。存储器虚拟化算法还可以捕获其他访客操作条件(如访客执行A20M#地址掩蔽)以映射所产生的20位有效访客物理地址。
存储器虚拟化为访客软件提供了从零开始并延伸到访客虚拟处理器物理地址宽度所支持的最大地址的连续访客物理地址空间。VMM利用访客物理地址到主机物理地址映射来定位主机存储器中全部或部分访客物理地址空间。VMM负责此映射的策略和算法,所述策略和方法可能会考虑主机系统物理存储器映射以及由VMM暴露给访客的虚拟化物理存储器映射。存储器虚拟化算法需要适应各种访客存储器的用途(诸如:访问DRAM、访问虚拟设备的存储器映射的寄存器或核逻辑功能等)。
在说明性示例中,为了支持访客DRAM访问,VMM需要将DRAM支持的访客物理地址映射到主机DRAM区域。VMM还要求访客到主机存储器映射处于页粒度。
在另一个说明性示例中,由VMM仿真的虚拟设备(I/O设备或平台核逻辑)可以要求访客物理地址空间中的特定区域来定位存储器映射的寄存器。访客对这些虚拟寄存器的访问可以被配置成通过将这些区域标记为始终不存在而导致页错误引起的VM退出。VMM可以通过调用适当的虚拟设备仿真代码来处理这些VM退出。
在某些实现方式中,访客软件可以被允许自由修改访客页表层次结构而不会对VMM造成陷阱。由于这一点,活动页表层次结构可能并不总是与访客层次结构一致。为了允许访客软件自由访问页目录和页表,可以将陷阱设置为在CR3访问和执行INVLPG时发生。陷阱在必要时也会发生,以确保访客对转换结构的修改实际生效。支持这种方法的软件机制统称为虚拟TLB,因为它们仿真了处理器的物理TLB的功能。
虽然页表层次结构定义了物理地址与线性地址之间的关系,但它并不直接控制每个存储器访问的地址转换。相反,所述转换可以由TLB来控制,TLB有时由处理器填充有从页表层次结构导出的转换。通过虚拟TLB,由访客软件(具体地说,访客操作系统)建立的页表层次结构不直接或间接地控制转换。相反,所述转换由处理器(通过TLB)并由VMM(通过其维护的页表层次结构)来控制。
在说明性示例中,VMM可以维护替代性页表层次结构,所述替代性页表层次结构有效地高速缓存从由访客软件维护的层次结构导出的转换。前者可以被称为活动页表层次结构(因为其被CR3引用并且可以被处理器用来加载其TLB),并且后者可以被称为访客页表层次结构(因为其由访客软件维护)。活动层次结构中的条目可能在某些方面类似于访客层次结构中的相应条目,并且在其他方面可以不同。
图18示意性地展示了根据本公开的一个或多个方面使用虚拟TLB来实现存储器虚拟化的示例方法。如上文所指出的,VMM为其支持的每个虚拟机维护活动页表层次结构1810A。VMM还为每台机器维护所述机器期望用于控制寄存器CR0、CR2、CR3和CR4(它们控制地址转换)的值。这些值被称为访客控制寄存器。一般而言,VMM选择分配给访客软件的物理地址空间。术语“访客地址”是指由访客软件安装在访客CR3 1820B中的地址、访客页目录1830B中的地址(作为页表基地址或页基地址)、或访客页表1840B中的地址(作为页基地址)。虽然访客软件认为这些地址是特定的物理地址,但VMM可以以不同的方式映射它们。当访客软件首次启用分页时,VMM创建无效的对齐4KB活动页目录(所有条目都标记为不存在)。这个无效的目录类似于空的TLB。
页故障可能由于各种原因而发生。在一些情况下,页故障会警告VMM在活动的页表层次结构1810A与访客页表层次结构1810B之间存在不一致。在这种情况下,VMM可以更新活动页表层次结构1810A并且重新执行故障指令。在其他情况下,层次结构已经一致,并且故障应由访客操作系统处理。VMM可以检测到这一点,并且使用已建立的机制向访客软件提出页故障。
_________________________
虽然已经关于有限数量的示例实现方式对本公开进行了描述,但是本领域的技术人员将理解来自其中的许多修改和变体。旨在使得所附权利要求书覆盖如落在本发明的真实精神和范围内的所有这种修改和变体。
设计可以贯穿各个不同的阶段,从产生到仿真到制造。代表设计的数据可以通过许多方式来代表设计。首先,如在仿真中有用的,可以使用硬件描述语言或其他功能描述语言代表硬件。此外,可以在设计过程的一些阶段产生具有逻辑和/或晶体管门的电路等级模型。此外,多数设计在一些阶段处达到的数据水平代表在硬件模型中的不同设备的物理布局。在使用常规半导体制造技术的情况下,代表硬件模型的数据可以是指明在用于产生集成电路的掩膜的不同掩膜层上的各种特征的存在与否的数据。在任何设计表示中,数据可以存储在任何形式的机器可读介质中。存储器或磁存储设备或光存储设备(如,盘)可以是用于存储经由光波或电波传输的信息的机器可读介质,所述光波或电波被调制或另外产生以用于传输这种信息。当指示或携带代码或设计的电载波被传输到执行电信号的复制、缓冲或重传的程度时,进行新的复制。因此,通信提供者或网络提供者可以在有形机器可读介质上至少暂时地存储制品(例如,编码到载波中的信息),从而将本公开的示例实现方式的技术具体化。
本文中使用的模块指的是硬件、软件和/或固件的任意组合。作为示例,模块包括与非暂态介质关联的硬件(例如,微控制器),从而存储被配置成由该微控制器执行的代码。因此,在一种示例实现方式中,对模块的引用指硬件,所述硬件具体被配置成识别和/或执行有待保持在非暂态介质中的代码。此外,在另一种示例实现方式中,模块的使用指包括代码的非暂态介质,所述代码具体地被适配成由微控制器执行以执行预定操作。并且如可以推断的,在又另一种示例实现方式中,术语“模块”(在此示例中)可以指微控制器与非暂态介质的组合。通常,被展示为分开的模块边界通常会有所变化并且可能重叠。例如,第一和第二模块可共享硬件、软件、固件或其组合,同时可能保留一些独立的硬件、软件或固件。在一种示例实现方式中,术语“逻辑”的使用包括诸如晶体管、寄存器之类的硬件或诸如可编程逻辑设备之类的其他硬件。
短语‘配置成’的使用在一种示例实现方式中指的是安排、汇编、制造、提供销售、导入和/或设计装置、硬件、逻辑或元件,从而执行指定或确定的任务。在此示例中,未运行的装置或其元件如果被设计、被耦合和/或被互连用于执行所述指定任务则仍被‘配置成’执行指定的任务。仅作为说明性示例,逻辑门在运行过程中可以提供0或1。但是‘配置成’为时钟提供使能信号的逻辑门不包括可以提供1或0的每个可能的逻辑门。相反,逻辑门是以某种方式耦合的,从而使得在运行过程中,1或0输出用于启用时钟。再次注意,术语‘配置成’的使用不要求运行,而是关注于装置、硬件和/或元件的潜在状态,其中,在潜在状态中,装置、硬件和/或元件被设计成用于当装置、硬件和/或元件正在运行时执行特定的任务。
此外,短语‘用于’、‘能够/能够用于’和或‘能操作以’的使用在一种示例实现方式中指的是一些装置、逻辑、硬件和/或元件被设计的方式使得能够以指定方式使用该装置、逻辑、硬件和/或元件。注意,在一种示例实现方式中,如以上‘用于(to)’、‘能够用于(capable to)’或‘能操作以(operable to)’的使用是指装置、逻辑、硬件和/或元件的潜在状态,其中,所述装置、逻辑、硬件和/或元件未在运行但是被设计,其方式使得能够以特定的方式使用装置。
如本文中使用的值包括数字、装置、逻辑状态或二进制逻辑状态的任何已知表示。经常,逻辑电平、逻辑值或逻辑的值的使用也称为简单地代表二进制逻辑状态的1和0。例如,1是指高逻辑电平,而0是指低逻辑电平。在一种示例实现方式中,如晶体管或闪存单元(cell)的存储单元可以能够保持单个逻辑值或多个逻辑值。然而,计算机系统中值的其他表示已被使用。例如,十进制数字十也可以表示为二进制值1010和十六进制字母A。因此,值包括能够在计算机系统中保持的信息的任何表示。
此外,状态可以由值或一部分值来代表。作为示例,第一值(例如逻辑一)可以代表默认或初始状态,而第二值(例如逻辑零)可以代表非默认状态。此外,在一种示例实现方式中,术语重置和设置分别是指默认的和更新的值或状态。例如,默认值可能包括高逻辑值(即,重置),而更新值可能包括低逻辑值(即,设置)。注意,可利用值的任意组合来表示任意数量的状态。
以上阐述的方法、硬件、软件、固件或代码的示例实现方式可经由存储在机器可访问的、机器可读的、计算机可访问的或计算机可读的介质上的可被处理元件执行的代码或指令来实现。非暂态机器可访问/可读介质包括提供(即,存储和/或传输)具有由机器(如,计算机或电子系统)可读的形式的信息的任何机制。例如,非暂态机器可访问介质包括:随机存取存储器(RAM),如静态RAM(SRAM)或动态RAM(DRAM);ROM;磁存储介质或光存储介质;闪存设备;电存储设备;光存储设备;声学存储设备;用于保存从暂态(传播)信号(例如,载波、红外信号、数字信号)接收到的信息的其他形式的存储设备等,所述介质与可以从其中接收信息的非暂态介质进行区分。
用于对逻辑进行编程以执行本公开的示例实现方式的指令可以存储在系统中的存储器内,例如,DRAM、高速缓存、闪存或其他存储设备。此外,指令可以经由网络或借助于其他计算机可读介质来分配。因此,机器可读介质可以包括用于存储或传输由机器(例如,计算机)可读的形式的信息的任何机制,但是不限于软盘、光盘、只读光盘存储器(CD-ROM)和磁光盘、只读存储器(ROM)、随机存取存储器(RAM)、可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)、磁卡或光卡、闪存、或用于经由电、光、声音、或其他形式的传播信号(例如,载波、红外信号、数字信号等)在互联网上传输信息的有形机器可读存储设备。因此,计算机可读介质包括用于存储或传输机器(例如,计算机)可读形式的电子指令或信息的任何类型的有形机器可读介质。
贯穿本说明书提到“一种示例实现方式”或“示例实现方式”指结合本示例实现方式所述的具体特征、结构或特性包含在本公开的至少一种示例实现方式中。因此,贯穿本说明书,短语“在一种示例实现方式中”或“在示例实现方式中”在各种场合中的出现未必都是指同一示例实现方式。此外,在一种或多种示例实现方式中,可以以任何适当的方式来组合特定特征、结构或特性。
在上述说明书中,已经参照具体示例实现方式给出了详细说明。然而,在不偏离所附权利要求中阐述的本公开的更广精神和范围的情况下,将显然的是可对其进行各种修改和改变。因此,说明书和附图被认为是说明性意义的,而不是限制性意义的。此外,示例实现方式和其他示范性语言的上述使用不一定指同一示例实现方式或同一示例,而是可指不同且有区别的示例实现方式,以及可能指同一示例实现方式。
Claims (20)
1.一种处理设备,包括:
处理器核;以及
存储器控制器,耦合在所述处理器核与存储器之间,其中,所述处理器核用于执行以下各项:
确定已经出现了将所述处理器核的资源控制从第一虚拟机监视器(VMM)转移到第二VMM的退出条件;
确定用于所述第一VMM的虚拟机控制结构(VMCS)的控制VMCS链路指针有效;
响应于所述控制VMCS链路指针有效而确定与所述控制VMCS链路指针相对应的原因值何时被设置;
响应于所述原因值被设置而确定所述原因值被设置为零;
响应于所述原因值被设置为零而确定与所述原因值相对应的异常位被设置;以及
响应于所述异常位被设置而将对资源的控制从所述第一VMM转移到所述第二VMM。
2.如权利要求1所述的处理设备,其特征在于,所述第一VMM在非root模式下操作,并且所述第二VMM在所述非root模式下操作。
3.如权利要求1所述的处理设备,其特征在于,所述处理器核用于响应于以下各项中的至少一项将所述资源控制从所述第一VMM转移到第三VMM:
所述控制VMCS链路指针无效;
所述原因值未被设置;或者
所述异常位未被设置。
4.如权利要求3所述的处理设备,其特征在于,所述第一VMM在非root模式下操作,并且所述第三VMM在root模式下操作。
5.如权利要求1所述的处理设备,其特征在于,所述处理器核用于响应于所述原因值未被设置为零而将所述资源控制从所述第一VMM转移到所述第二VMM。
6.如权利要求1所述的处理设备,其特征在于,
所述VMCS包括:访客字段;主机字段;控制字段;VM进入字段;以及VM退出字段,以及
所述控制字段包括:VMCS链路指针;状态VMCS链路指针;控制VMCS链路指针;原因位图;以及异常位图。
7.如权利要求6所述的处理设备,其特征在于,所述处理器核用于:
将由所述状态VMCS链路指针指向的第一处理器状态保存到所述访客字段;
将由所述状态VMCS链路指针指向的第二处理器状态加载到所述主机字段;
将来自由所述控制VMCS链路指针指向的第二VMCS的控制字段的数据复制到所述控制字段;以及
将所述VM进入字段的VM进入中断信息字段处的有效性位清除。
8.如权利要求6所述的处理设备,其特征在于,所述处理器核用于:
将所述状态VMCS链路指针设置为第一预定义固定值以禁用所述状态VMCS链路指针;
将所述控制VMCS链路指针设置为第二预定义固定值以禁用所述控制VMCS链路指针;
将所述原因位图设置为预定义固定值以禁用所述原因位图;以及
将所述异常位图设置为零以禁用所述异常位图。
9.如权利要求1所述的处理设备,其特征在于,所述处理器核用于:
确定所述第二VMM已经完成了与所述退出条件相关联的事件;以及
将所述资源控制从所述第一VMM转移到在root模式下操作的第三VMM。
10.一种处理设备,包括:
处理器核;以及
存储器控制器,耦合在所述处理器核与存储器之间,其中,所述处理器核用于响应于从第一虚拟机监视器(VMM)接收到恢复指令而执行以下各项:
针对第二VMM的第一虚拟机控制结构(VMCS)设置数据字段;
由所述第二VMM设置所述第一VMCS的虚拟机(VM)退出字段;
由所述第二VMM执行所述恢复指令;
验证与所述恢复指令相关联的数据有效;
响应于与所述恢复指令相关联的所述数据有效而验证所述VM退出字段的有效性;以及
响应于所述VM退出字段有效而将对资源的控制从所述第一VMM转移到第三VMM。
11.如权利要求10所述的处理设备,其特征在于:
所述第一VMCS包括:访客字段;主机字段;控制字段;VM进入字段;以及VM退出字段;以及
所述控制字段包括:VMCS链路指针;状态VMCS链路指针;控制VMCS链路指针;原因位图;以及异常位图。
12.如权利要求11所述的处理设备,其特征在于,为了设置所述数据字段,所述处理器核进一步用于:
将来自第二VMCS的访客字段的数据复制到所述第一VMCS的所述访客字段;
将来自第三VMCS的主机字段的数据复制到所述第一VMCS的所述主机字段;
合并来自所述第二VMCS和所述第三VMCS的所述控制字段的数据;
将所合并数据复制到所述第一VMCS的所述控制字段;以及
将来自所述第二VMCS的VM进入字段的数据复制到所述第一VMCS的所述VM进入字段。
13.如权利要求10所述的处理设备,其特征在于,为了设置所述VM退出字段,所述处理器核进一步用于使用具有第二VMCS的地址的控制VMCS链路指针、具有第三VMCS的地址的状态VMCS链路指针、以及原因位图来设置所述VM退出字段。
14.如权利要求10所述的处理设备,其特征在于,所述处理器核用于响应于以下各项中的至少一项来维持对所述第一VMM处的所述资源的控制:
与所述恢复指令相关联的数据无效;或者
所述VM退出字段无效。
15.如权利要求10所述的处理设备,其特征在于:
所述第一VMM在非root模式下操作;
所述第二VMM在root模式下操作;以及
所述第三VMM在所述非root模式下操作。
16.一种方法,包括:
确定已经出现了将对用于处理器核的资源的控制从第一虚拟机监视器(VMM)转移到第二VMM的退出条件;
确定控制虚拟机控制结构(VMCS)链路指针有效;
响应于控制VMCS链路指针有效而确定与所述控制VMCS链路指针相对应的原因值被设置;
响应于所述原因值被设置而确定所述原因值被设置为零;
响应于所述原因值被设置为零而确定与特定异常类型的原因值相对应的异常位被设置;以及
响应于所述异常位被设置而将对所述资源的控制从所述第一VMM转移到所述第二VMM。
17.如权利要求16所述的方法,其特征在于,所述第一VMM在非root模式下操作,并且所述第二VMM在所述非root模式下操作。
18.如权利要求16所述的方法,其特征在于,进一步包括响应于以下各项中的至少一项将对所述资源的所述控制从所述第一VMM转移到第三VMM:
所述控制VMCS链路指针无效;
所述原因值未被设置;或者
所述异常位未被设置。
19.如权利要求18所述的方法,其特征在于,所述第一VMM在非root模式下操作,并且所述第三VMM在root模式下操作。
20.如权利要求16所述的方法,其特征在于,进一步包括响应于所述原因值未被设置为零而将对所述资源的所述控制从所述第一VMM转移到所述第二VMM。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2015/090706 WO2017049584A1 (en) | 2015-09-25 | 2015-09-25 | Nested virtualization for virtual machine exits |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107924321A true CN107924321A (zh) | 2018-04-17 |
CN107924321B CN107924321B (zh) | 2022-01-18 |
Family
ID=58385739
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201580082651.2A Active CN107924321B (zh) | 2015-09-25 | 2015-09-25 | 针对虚拟机退出的嵌套虚拟化 |
Country Status (4)
Country | Link |
---|---|
US (2) | US10146570B2 (zh) |
CN (1) | CN107924321B (zh) |
DE (1) | DE112015006934T5 (zh) |
WO (1) | WO2017049584A1 (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109634721A (zh) * | 2018-12-17 | 2019-04-16 | 广东浪潮大数据研究有限公司 | 一种虚拟机与主机的启动通信方法及相关装置 |
CN110554905A (zh) * | 2019-08-28 | 2019-12-10 | 北京奇艺世纪科技有限公司 | 一种容器的启动方法及装置 |
CN113032103A (zh) * | 2021-04-14 | 2021-06-25 | 中南大学 | 基于高速网卡sr-iov功能的vf资源动态调度方法 |
Families Citing this family (29)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107924321B (zh) * | 2015-09-25 | 2022-01-18 | 英特尔公司 | 针对虚拟机退出的嵌套虚拟化 |
US10846117B1 (en) | 2015-12-10 | 2020-11-24 | Fireeye, Inc. | Technique for establishing secure communication between host and guest processes of a virtualization architecture |
US10447728B1 (en) | 2015-12-10 | 2019-10-15 | Fireeye, Inc. | Technique for protecting guest processes using a layered virtualization architecture |
US10108446B1 (en) | 2015-12-11 | 2018-10-23 | Fireeye, Inc. | Late load technique for deploying a virtualization layer underneath a running operating system |
US20210026950A1 (en) * | 2016-03-07 | 2021-01-28 | Crowdstrike, Inc. | Hypervisor-based redirection of system calls and interrupt-based task offloading |
US20170329622A1 (en) * | 2016-05-11 | 2017-11-16 | Microsoft Technology Licensing, Llc | Shared virtual data structure of nested hypervisors |
US10083129B2 (en) * | 2016-08-29 | 2018-09-25 | Red Hat Israel, Ltd. | Code loading hardening by hypervisor page table switching |
US10191861B1 (en) * | 2016-09-06 | 2019-01-29 | Fireeye, Inc. | Technique for implementing memory views using a layered virtualization architecture |
US11405177B2 (en) * | 2017-01-24 | 2022-08-02 | Microsoft Technology Licensing, Llc | Nested enclave identity |
US10496425B2 (en) * | 2017-02-21 | 2019-12-03 | Red Hat, Inc. | Systems and methods for providing processor state protections in a virtualized environment |
US10599461B2 (en) * | 2017-09-19 | 2020-03-24 | Microsoft Technology Licensing, Llc | Nested hypervisor memory virtualization |
US10268595B1 (en) * | 2017-10-24 | 2019-04-23 | Red Hat, Inc. | Emulating page modification logging for a nested hypervisor |
US10629104B2 (en) | 2018-03-15 | 2020-04-21 | Benjamin Elias Blumenthal | Devices for providing ground-based advertising in a parking lot setting |
US11016798B2 (en) * | 2018-06-01 | 2021-05-25 | The Research Foundation for the State University | Multi-hypervisor virtual machines that run on multiple co-located hypervisors |
US10997083B2 (en) * | 2018-09-04 | 2021-05-04 | Arm Limited | Parallel page table entry access when performing address translations |
US11237860B2 (en) * | 2018-12-21 | 2022-02-01 | Red Hat, Inc. | Command-based processing of real-time virtualized jobs |
US10877788B2 (en) * | 2019-03-12 | 2020-12-29 | Intel Corporation | Processing vectorized guest physical address translation instructions |
US11003484B2 (en) * | 2019-06-28 | 2021-05-11 | Intel Corporation | Inter-processor interrupt virtualization with pass-through of local interrupt controller |
US11500550B2 (en) * | 2019-08-27 | 2022-11-15 | Red Hat, Inc. | Inhibiting memory accesses to executable modules |
US11449434B2 (en) | 2020-04-13 | 2022-09-20 | Red Hat, Inc. | Reverse shadow page tables for firewalled nested encrypted virtual machines |
US11698806B2 (en) * | 2020-05-04 | 2023-07-11 | Red Hat, Inc. | Hypercall acceleration for nested virtual machines |
US11880704B2 (en) | 2020-06-24 | 2024-01-23 | Red Hat, Inc. | Nested virtual machine support for hypervisors of encrypted state virtual machines |
US11550612B2 (en) | 2020-06-26 | 2023-01-10 | Red Hat, Inc. | Support for encrypted memory in nested virtual machines |
US11748136B2 (en) * | 2020-07-30 | 2023-09-05 | Red Hat, Inc. | Event notification support for nested virtual machines |
US20220100871A1 (en) * | 2020-09-26 | 2022-03-31 | Intel Corporation | Scalable multi-key memory encryption |
CN112286635B (zh) * | 2020-10-29 | 2022-10-25 | 卓尔智联(武汉)研究院有限公司 | 一种热迁移的方法、装置及电子设备 |
WO2022266989A1 (en) * | 2021-06-25 | 2022-12-29 | Intel Corporation | Exitless guest to host notification |
US11983555B2 (en) | 2021-08-03 | 2024-05-14 | Red Hat, Inc. | Storage snapshots for nested virtual machines |
US20230325222A1 (en) * | 2022-04-07 | 2023-10-12 | Vmware, Inc. | Lifecycle and recovery for virtualized dpu management operating systems |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006510120A (ja) * | 2002-12-19 | 2006-03-23 | インテル コーポレイション | バーチャルマシン動作においてマシン状態を管理する方法及びシステム |
US20070028238A1 (en) * | 2005-07-27 | 2007-02-01 | Bennett Steven M | Virtualization event processing in a layered virtualization architecture |
US20090007112A1 (en) * | 2007-06-22 | 2009-01-01 | Hitachi, Ltd. | Method for controlling a virtual machine and a virtual machine system |
CN102103517A (zh) * | 2009-12-22 | 2011-06-22 | 英特尔公司 | 高效嵌套虚拟化 |
US20140013326A1 (en) * | 2011-10-28 | 2014-01-09 | Gilbert Neiger | Instruction-Set Support for Invocation of VMM-Configured Services without VMM Intervention |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8079034B2 (en) * | 2003-09-15 | 2011-12-13 | Intel Corporation | Optimizing processor-managed resources based on the behavior of a virtual machine monitor |
US8151264B2 (en) | 2007-06-29 | 2012-04-03 | Intel Corporation | Injecting virtualization events in a layered virtualization architecture |
JP4982347B2 (ja) * | 2007-12-11 | 2012-07-25 | 株式会社東芝 | 画像情報の更新を検出するプログラム、方法および画像処理装置 |
JP5405799B2 (ja) * | 2008-10-30 | 2014-02-05 | 株式会社日立製作所 | 仮想計算機の制御方法、仮想化プログラム及び仮想計算機システム |
US8479196B2 (en) * | 2009-09-22 | 2013-07-02 | International Business Machines Corporation | Nested virtualization performance in a computer system |
US8578080B2 (en) * | 2011-07-01 | 2013-11-05 | Intel Corporation | Secure handling of interrupted events utilizing a virtual interrupt definition table |
US20130326519A1 (en) * | 2011-12-30 | 2013-12-05 | Andrew V. Anderson | Virtual machine control structure shadowing |
US9753863B2 (en) * | 2014-12-27 | 2017-09-05 | Intel Corporation | Memory protection with non-readable pages |
CN107924321B (zh) * | 2015-09-25 | 2022-01-18 | 英特尔公司 | 针对虚拟机退出的嵌套虚拟化 |
-
2015
- 2015-09-25 CN CN201580082651.2A patent/CN107924321B/zh active Active
- 2015-09-25 WO PCT/CN2015/090706 patent/WO2017049584A1/en active Application Filing
- 2015-09-25 US US15/118,844 patent/US10146570B2/en not_active Expired - Fee Related
- 2015-09-25 DE DE112015006934.8T patent/DE112015006934T5/de not_active Withdrawn
-
2018
- 2018-10-01 US US16/148,245 patent/US10963281B2/en active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006510120A (ja) * | 2002-12-19 | 2006-03-23 | インテル コーポレイション | バーチャルマシン動作においてマシン状態を管理する方法及びシステム |
US20070028238A1 (en) * | 2005-07-27 | 2007-02-01 | Bennett Steven M | Virtualization event processing in a layered virtualization architecture |
US20170052832A1 (en) * | 2005-07-27 | 2017-02-23 | Intel Corporation | Virtualization event processing in a layered virtualization architecture |
US20090007112A1 (en) * | 2007-06-22 | 2009-01-01 | Hitachi, Ltd. | Method for controlling a virtual machine and a virtual machine system |
CN102103517A (zh) * | 2009-12-22 | 2011-06-22 | 英特尔公司 | 高效嵌套虚拟化 |
US20140013326A1 (en) * | 2011-10-28 | 2014-01-09 | Gilbert Neiger | Instruction-Set Support for Invocation of VMM-Configured Services without VMM Intervention |
CN104137056A (zh) * | 2011-10-28 | 2014-11-05 | 英特尔公司 | 在没有vmm介入的情况下对调用vmm配置的服务的指令集支持 |
Non-Patent Citations (1)
Title |
---|
王晓睿等: "基于VT-x的处理器模式转换机制研究", 《计算机工程与设计》 * |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109634721A (zh) * | 2018-12-17 | 2019-04-16 | 广东浪潮大数据研究有限公司 | 一种虚拟机与主机的启动通信方法及相关装置 |
CN109634721B (zh) * | 2018-12-17 | 2023-10-10 | 广东浪潮大数据研究有限公司 | 一种虚拟机与主机的启动通信方法及相关装置 |
CN110554905A (zh) * | 2019-08-28 | 2019-12-10 | 北京奇艺世纪科技有限公司 | 一种容器的启动方法及装置 |
CN113032103A (zh) * | 2021-04-14 | 2021-06-25 | 中南大学 | 基于高速网卡sr-iov功能的vf资源动态调度方法 |
CN113032103B (zh) * | 2021-04-14 | 2023-07-04 | 中南大学 | 基于高速网卡sr-iov功能的vf资源动态调度方法 |
Also Published As
Publication number | Publication date |
---|---|
WO2017049584A1 (en) | 2017-03-30 |
US10146570B2 (en) | 2018-12-04 |
DE112015006934T5 (de) | 2018-06-14 |
US10963281B2 (en) | 2021-03-30 |
US20190108051A1 (en) | 2019-04-11 |
CN107924321B (zh) | 2022-01-18 |
US20170262306A1 (en) | 2017-09-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107924321A (zh) | 针对虚拟机退出的嵌套虚拟化 | |
CN111930644B (zh) | 用于支持对受保护容器的实时迁移的处理器、方法、系统和指令 | |
TWI574207B (zh) | 非異動儲存指令 | |
CN105474227B (zh) | 安全存储器重新分区 | |
CN109960665A (zh) | 用于在分页期间逆转页阻止的解除阻止指令 | |
CN104714778B (zh) | 操作微处理器的方法 | |
CN109508555A (zh) | 使用可信域在虚拟化系统中提供隔离 | |
CN102906692B (zh) | 修改适配器功能参数的指令的方法和系统 | |
CN107667372A (zh) | 用于保护影子栈的处理器、方法、系统和指令 | |
CN109690484A (zh) | 在虚拟机进入时转换 | |
CN108463826A (zh) | 用于在环转变期间保护栈的处理器扩展 | |
CN102906720B (zh) | 启用/禁用计算环境的适配器 | |
CN111353164A (zh) | 用于信任域创建和摧毁的方法和装置 | |
US9569212B2 (en) | Instruction and logic for a memory ordering buffer | |
CN108351839A (zh) | 用来挂起/恢复安全飞地页面高速缓存中飞地的迁移的指令和逻辑 | |
CN109564552A (zh) | 增强基于每页当前特权等级的存储器访问许可 | |
CN109643293B (zh) | 检测总线上锁条件并且避免总线锁 | |
CN117931376A (zh) | 信任域架构内的信任域内部的可缩放虚拟机操作 | |
TW201413593A (zh) | 異動處理 | |
TWI742120B (zh) | 用以識別及避免在虛擬機器監控器與客端虛擬機器之間追蹤衝突的處理器延伸的處理系統、晶片上系統及方法 | |
CN110162380A (zh) | 用来防止软件侧通道的机制 | |
US20160092371A1 (en) | Method and Apparatus For Deterministic Translation Lookaside Buffer (TLB) Miss Handling | |
CN108292273A (zh) | 用于子页写入保护的方法和装置 | |
US20190156015A1 (en) | Smm protection utilizing ring separation and smi isolation | |
CN104969199A (zh) | 实施黑名单分页结构指示值的处理器、方法,以及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |