CN117178256A - 用于在虚拟化环境中管理不受支持的指令集体系结构(isa)特征的装置和方法 - Google Patents

用于在虚拟化环境中管理不受支持的指令集体系结构(isa)特征的装置和方法 Download PDF

Info

Publication number
CN117178256A
CN117178256A CN202280025032.XA CN202280025032A CN117178256A CN 117178256 A CN117178256 A CN 117178256A CN 202280025032 A CN202280025032 A CN 202280025032A CN 117178256 A CN117178256 A CN 117178256A
Authority
CN
China
Prior art keywords
type
instruction
virtual machine
processor
microarchitecture
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.)
Pending
Application number
CN202280025032.XA
Other languages
English (en)
Inventor
T·索恩达格
D·谢菲尔德
S·佩迪阿迪塔基
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of CN117178256A publication Critical patent/CN117178256A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/22Microcontrol or microprogram arrangements
    • G06F9/223Execution means for microinstructions irrespective of the microinstruction function, e.g. decoding of microinstructions and nanoinstructions; timing of microinstructions; programmable logic arrays; delays and fan-out problems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/3017Runtime instruction translation, e.g. macros
    • G06F9/30174Runtime instruction translation, e.g. macros for non-native instruction set, e.g. Javabyte, legacy code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)

Abstract

支持被否决的指令的装置和方法。一个实施例包括:多个核心,每个核心包括用于执行指令和处理数据的当前微体系结构,当前微体系结构包括对以第一特权级别运行的管理程序和以第二特权级别运行的一个或多个虚拟机的虚拟执行环境支持,该微体系结构进一步包括对执行与先前微体系结构相关联的被否决的指令的支持。至少一个核心包括:解码器,该解码器用于指定与指令中的每一者对应的一个或多个微操作;执行电路,该执行电路用于执行对应的微操作;其中第一类型或第二类型的虚拟机退出被支持。响应于第一类型的虚拟机退出,管理程序在没有部分硬件支持的情况下执行第一仿真。响应于第二类型的虚拟机退出,管理程序使用部分硬件支持执行第二仿真。

Description

用于在虚拟化环境中管理不受支持的指令集体系结构(ISA) 特征的装置和方法
技术领域
本发明的实施例总体上涉及计算机处理器领域。更具体地,实施例涉及用于在虚拟化环境中管理指令集体系结构(instruction set architecture,ISA)的不受支持/被否决的特征的装置和方法。
背景技术
出于各种原因,否决ISA特征是符合期望的,各种原因包括但不限于减少攻击面、简化验证空间和减少实施工作量。然而,如果现有软件使用这些被否决的特征,则这些软件将不再在新的指令集体系结构(ISA)上工作。因此,否决ISA特征可能是一项具有挑战性的任务。
附图说明
结合以下附图,从以下具体实施方式可获得对本发明更好的理解,其中:
结合以下附图,从以下具体实施方式可获得对本发明更好的理解,其中:
图1图示出示例计算机系统体系结构;
图2图示出包括多个核心的处理器;
图3A图示出处理管线的多个阶段;
图3B图示出核心的一个实施例的细节;
图4图示出根据一个实施例的执行电路;
图5图示出寄存器体系结构的一个实施例;
图6图示出指令格式的一个示例;
图7图示出根据一个实施例的寻址技术;
图8图示出指令前缀的一个实施例;
图9A-图9D图示出如何使用前缀的R、X和B字段的实施例;
图10A-图10B图示出第二指令前缀的示例;
图11图示出指令前缀的一个实施例的有效载荷字节;
图12图示出指令转换和二进制变换实现方式;
图13图示出可以在其上实现本发明的实施例的虚拟化环境的一个示例;
图14图示出本公开的、包括被否决的指令处理器的一个实施例;
图15图示出与指令集体系结构内的某些指令的执行相关的时序数据;
图16A图示出与在较低特权级别与较高特权级别之间转变关联的操作;
图16B图示出与在较高特权级别与较低特权级别和较低特权级别与较高特权级别之间转变相关联的操作;以及
图17图示出根据本发明的一个实施例管理的被否决的状态结构;
图18A-图18I图示出根据本发明的一个实施例的程序代码。
具体实施方式
在以下描述中,出于解释的目的,阐述了众多特定细节以提供对下文所描述的本发明的实施例的透彻理解。然而,对本领域技术人员将显而易见的是,可在没有这些特定细节中的一些细节的情况下实施本发明的实施例。在其他实例中,以框图形式示出公知的结构和设备,以避免使本发明的实施例的根本性原理变得模糊。
示例性计算机体系结构
下面详细描述示例性计算机体系结构。本领域中已知的用于膝上型电脑、桌面型电脑、手持PC、个人数字助理、工程工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(digital signal processor,DSP)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持设备、以及大量各种其他电子设备的其他系统设计和配置也是适当的。总之,能够包含本文公开的处理器和/或其他执行逻辑的各种系统或电子设备一般都是适当的。
图1图示了实施例性系统的实施例。多处理器系统100是一种点对点互连系统,并包括多个处理器,其中包括经由点到点互连150耦合的第一处理器170和第二处理器180。在一些实施例中,第一处理器170和第二处理器180是同构的。在一些实施例中,第一处理器170和第二处理器180是异构的。
处理器170和180被示为分别包括集成存储器控制器(integrated memorycontroller,IMC)单元电路172和182。处理器170还包括作为其互连控制器单元的部分的点到点(point-to-point,P-P)接口176和178;类似地,第二处理器180包括P-P接口186和188。处理器170、180可以利用点到点(P-P)接口电路178、188经由P-P互连150交换信息。IMC 172和182将处理器170、180耦合到各自的存储器,即存储器132和存储器134,这些存储器可以是在本地附接到各个处理器的主存储器的一部分。
处理器170、180可以各自利用点到点接口电路176、194、186、198,经由各个P-P互连152、154来与芯片组190交换信息。芯片组190可以可选地经由高性能接口192与协处理器138交换信息。在一些实施例中,协处理器138是专用处理器,例如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器,等等。
共享缓存(未示出)可以被包括在任一处理器170、180中,或者在两个处理器之外但经由P-P互连与这些处理器相连接,从而使得:如果一处理器被置于低功率模式,任一个或两个处理器的本地缓存信息也可以被存储在该共享缓存中。
芯片组190可以经由接口196耦合到第一互连116。在一些实施例中,第一互连116可以是外围组件互连(Peripheral Component Interconnect,PCI)互连,或者是诸如PCI快速(PCI Express)互连或者另一I/O互连之类的互连。在一些实施例中,这些互连中的一个耦合到功率控制单元(power control unit,PCU)117,PCU 117可以包括电路、软件和/或固件来执行关于处理器170、180和/或协处理器138的功率管理操作。PCU 117向电压调节器提供控制信息,以使得电压调节器生成适当的调节电压。PCU 117还提供控制信息以控制所生成的操作电压。在各实施例中,PCU 117可以包括各种功率管理逻辑单元(电路)来执行基于硬件的功率管理。这种功率管理可以是完全由处理器控制的(例如,由各种处理器硬件控制,并且可以由工作负载和/或功率约束、热约束或其他处理器约束所触发),和/或功率管理可以响应于外部源而被执行(例如平台或功率管理源或系统软件)。
PCU 117被图示为作为与处理器170和/或处理器180分开的逻辑而存在。在其他情况下,PCU 117可以在处理器170或180的核心(未示出)中给定的一个或多个核心上执行。在一些情况下,PCU 117可以被实现为微控制器(专用的或通用的)或者其他控制逻辑,其被配置为执行其自己的专用功率管理代码(有时称为P代码)。在另外的其他实施例中,PCU 117要执行的功率管理操作可以被实现在处理器外部,例如借由单独的功率管理集成电路(power management integrated circuit,PMIC)或者在处理器外部的另一组件来实现。在另外的其他实施例中,PCU 117要执行的功率管理操作可被实现在BIOS或其他系统软件内。
各种I/O设备114以及互连(总线)桥118可以耦合到第一互连116,互连(总线)桥118将第一互连116耦合到第二互连120。在一些实施例中,一个或多个额外的处理器115被耦合到第一互连116,例如协处理器、高吞吐量MIC处理器、GPGPU、加速器(诸如例如图形加速器或数字信号处理(digital signal processing,DSP)单元)、现场可编程门阵列(fieldprogrammable gate array,FPGA)、或者任何其他处理器。在一些实施例中,第二互连120可以是低引脚数(low pin count,LPC)互连。各种设备可以耦合到第二互连120,这些设备例如包括键盘和/或鼠标122、通信设备127、以及存储单元电路128。存储单元电路128可以是盘驱动器或者其他大容量存储设备,其在一些实施例中可包括指令/代码和数据130。另外,音频I/O 124可以耦合到第二互连120。注意,除了上述的点到点体系结构以外其他体系结构也是可能的。例如,诸如多处理器系统100之类的系统可以实现多点分支(multi-drop)互连或者其他这种体系结构,而不是点到点体系结构。
示例性核心体系结构、处理器和计算机体系结构
处理器核心可以按不同的方式、为了不同的目的、在不同的处理器中实现。例如,这些核心的实现方式可以包括:1)通用有序核心,针对通用计算目的;2)高性能通用乱序核心,针对通用计算目的;3)专用核心,主要针对图形和/或科学(吞吐量)计算目的。不同处理器的实现方式可以包括:1)CPU,包括针对通用计算目的的一个或多个通用有序核心和/或针对通用计算目的的一个或多个通用乱序核心;以及2)协处理器,包括主要针对图形和/或科学(吞吐量)目的的一个或多个专用核心。这些不同处理器导致不同的计算机系统体系结构,这些体系结构可以包括:1)协处理器与CPU在分开的芯片上;2)协处理器与CPU在同一封装中分开的管芯上;3)协处理器与CPU在同一管芯上(在此情况下,这种协处理器有时被称为专用逻辑,例如集成图形和/或科学(吞吐量)逻辑,或者被称为专用核心);以及4)片上系统,其可以在与所描述的CPU(有时称为(一个或多个)应用核心或者(一个或多个)应用处理器)同一管芯上包括上述的协处理器以及另外的功能。接下来描述示例性核心体系结构,然后是对示例性处理器和计算机体系结构的描述。
图2图示了处理器200的实施例的框图,该处理器200可以具有多于一个的核心,可以具有集成存储器控制器,并且可以具有集成图形器件。实线框图示的处理器200具有单个核心202(A)、系统代理210和一组一个或多个互连控制器单元电路216,而可选地添加的虚线框将替代性处理器200图示为具有多个核心202(A)-(N)、系统代理单元电路210中的一组一个或多个集成存储器控制单元电路214、专用逻辑208以及一组一个或多个互连控制器单元电路216。注意,处理器200可以是图1的处理器170或180或者协处理器138或115之一。
从而,处理器200的不同实现方式可以包括:1)CPU,其中专用逻辑208是集成图形和/或科学(吞吐量)逻辑(可以包括一个或多个核心,未示出),核心202(A)-(N)是一个或多个通用核心(例如,通用有序核心、通用乱序核心、或这两者的组合);2)协处理器,其中核心202(A)-(N)是主要针对图形和/或科学(吞吐量)目的的大量专用核心;以及3)协处理器,其中核心202(A)-(N)是大量的通用有序核心。从而,处理器200可以是通用处理器、协处理器或者专用处理器,例如网络或通信处理器、压缩引擎、图形处理器、GPGPU(通用图形处理单元电路)、高吞吐量集成众核(many integrated core,MIC)协处理器(包括30个或更多个核心)、嵌入式处理器,等等。该处理器可被实现在一个或多个芯片上。处理器200可以是一个或多个衬底的一部分和/或可以使用多种工艺技术中的任何技术来实现在一个或多个衬底上,这些工艺技术例如BiCMOS、CMOS、或者NMOS。
存储器层次体系包括核心202(A)-(N)内的一级或多级缓存单元电路204(A)-(N)、一组一个或多个共享缓存单元电路206、以及耦合到该组集成存储器控制器单元电路214的外部存储器(未示出)。该组一个或多个共享缓存单元电路206可以包括一个或多个中间级别缓存,例如第2级(L2)、第3级(L3)、第4级(L4)或者其他级别的缓存,例如最后一级缓存(last level cache,LLC),和/或这些的组合。虽然在一些实施例中基于环的互连网络电路212对专用逻辑208(例如,集成图形逻辑)、该组共享缓存单元电路206和系统代理单元电路210进行互连,但替代性实施例使用任何数目的公知技术来对这些单元进行互连。在一些实施例中,在共享缓存单元电路206中的一个或多个电路与核心202(A)-(N)之间维持一致性。
在一些实施例中,核心202(A)-(N)中的一个或多个具有多线程能力。系统代理单元电路210包括对核心202(A)-(N)进行协调和操作的那些组件。系统代理单元电路210可以包括例如功率控制单元(power control unit,PCU)电路和/或显示单元电路(未示出)。PCU可以是(或者可以包括)对核心202(A)-(N)和/或专用逻辑208(例如,集成图形逻辑)的功率状态进行调节所需的逻辑和组件。显示单元电路用于驱动一个或多个在外部连接的显示器。
核心202(A)-(N)就体系结构指令集而言可以是同构的或者异构的;也就是说,核心202(A)-(N)中的两个或更多个核心可能能够执行同一指令集,而其他核心可能能够只执行该指令集的子集或者能够执行一不同的ISA。
示例性核心体系结构
有序和乱序核心框图
图3(A)的框图图示了根据本发明的实施例的示例性有序管线和示例性寄存器重命名、乱序发出/执行管线两者。图3(B)的框图图示了根据本发明的实施例,要被包括在处理器中的有序体系结构核心的示例性实施例和示例性寄存器重命名、乱序发出/执行体系结构核心两者。图3(A)-图3(B)中的实线框图示了有序管线和有序核心,而可选地添加的虚线框图示了寄存器重命名、乱序发出/执行管线和核心。考虑到有序方面是乱序方面的子集,将描述乱序方面。
在图3(A)中,处理器管线300包括取得阶段302、可选的长度解码阶段304、解码阶段306、可选的分配阶段308、可选的重命名阶段310、调度(也称为调遣或发出)阶段312、可选的寄存器读取/存储器读取阶段314、执行阶段316、写回/存储器写入阶段318、可选的异常处置阶段322、以及可选的提交阶段324。在这些处理器管线阶段的每一者中可以执行一个或多个操作。例如,在取得阶段302期间,从指令存储器取得一个或多个指令,在解码阶段306期间,可以对取得的一个或多个指令进行解码,可以生成使用转发寄存器端口的地址(例如,加载存储单元(load store unit,LSU)地址),并且可以执行分支转发(例如,立即数偏移或者链接寄存器(link register,LR))。在一个实施例中,解码阶段306和寄存器读取/存储器读取阶段314可以被组合到一个管线阶段中。在一个实施例中,在执行阶段316期间,可以执行经解码的指令,可以执行到高级微控制器总线(Advanced Microcontroller Bus,AMB)接口的LSU地址/数据管线化,可以执行乘法和加法操作,可以执行具有分支结果的算术操作,等等。
作为示例,示例性寄存器重命名、乱序发出/执行核心体系结构可以通过以下方式实现管线300:1)指令取得338执行取得和长度解码阶段302和304;2)解码单元电路340执行解码阶段306;3)重命名/分配器单元电路352执行分配阶段308和重命名阶段310;4)(一个或多个)调度器单元电路356执行调度阶段312;5)(一个或多个)物理寄存器堆单元电路358和存储器单元电路370执行寄存器读取/存储器读取阶段314;执行集群360执行执行阶段316;6)存储器单元电路370和(一个或多个)物理寄存器堆单元电路358执行写回/存储器写入阶段318;7)在异常处置阶段322中可能涉及各种单元(单元电路);并且8)引退单元电路354和(一个或多个)物理寄存器堆单元电路358执行提交阶段324。
图3(B)示出了处理器核心390包括耦合到执行引擎单元电路350的前端单元电路330,并且两者都耦合到存储器单元电路370。核心390可以是精简指令集计算(reducedinstruction set computing,RISC)核心、复杂指令集计算(complex instruction setcomputing,CISC)核心、超长指令字(very long instruction word,VLIW)核心、或者混合或替代性核心类型。作为另外一个选项,核心390可以是专用核心,例如网络或通信核心、压缩引擎、协处理器核心、通用计算图形处理单元(general purpose computing graphicsprocessing unit,GPGPU)核心、图形核心,等等。
前端单元电路330可以包括分支预测单元电路332,该分支预测单元电路耦合到指令缓存单元电路334,该指令缓存单元电路耦合到指令转译后备缓冲器(translationlookaside buffer,TLB)336,该指令TLB耦合到指令取得单元电路338,该指令取得单元电路耦合到解码单元电路340。在一个实施例中,指令缓存单元电路334被包括在存储器单元电路370中,而不是前端单元电路330中。解码单元电路340(或解码器)可以对指令解码,并且生成一个或多个微操作、微代码入口点、微指令、其他指令或其他控制信号作为输出,这些微操作、微代码入口点、微指令、其他指令或其他控制信号是从原始指令解码来的,或者以其他方式反映原始指令,或者是从原始指令得出的。解码单元电路340还可以包括地址生成单元电路(address generation unit,AGU,未示出)。在一个实施例中,AGU使用经转发的寄存器端口来生成LSU地址,并且可以进一步执行分支转发(例如,立即数偏移分支转发,LR寄存器分支转发,等等)。可以利用各种不同的机制来实现解码单元电路340。适当机制的示例包括但不限于查找表、硬件实现方式、可编程逻辑阵列(programmable logic array,PLA)、微代码只读存储器(read only memory,ROM),等等。在一个实施例中,核心390包括微代码ROM(未示出)或其他介质,其存储用于某些宏指令的微代码(例如,在解码单元电路340中或者以其他方式在前端单元电路330内)。在一个实施例中,解码单元电路340包括微操作(micro-op)或操作缓存(未示出),以保存/缓存在处理器管线300的解码或其他阶段期间生成的经解码的操作、微标记或微操作。解码单元电路340可以耦合到执行引擎单元电路350中的重命名/分配器单元电路352。
执行引擎电路350包括重命名/分配器单元电路352,其耦合到引退单元电路354和一组一个或多个调度器电路356。调度器电路356代表任意数目个不同调度器,包括预留站、中央指令窗口,等等。在一些实施例中,(一个或多个)调度器电路356可以包括算术逻辑单元(arithmetic logic unit,ALU)调度器/调度电路、ALU队列、地址生成单元(addressgeneration unit,AGU)调度器/调度电路、AGU队列,等等。(一个或多个)调度器电路356耦合到(一个或多个)物理寄存器堆电路358。(一个或多个)物理寄存器堆电路358的每一者代表一个或多个物理寄存器堆,这些物理寄存器堆中的不同物理寄存器堆存储一个或多个不同的数据类型,例如标量整数、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点、状态(例如,指令指针,即要执行的下一指令的地址),等等。在一个实施例中,(一个或多个)物理寄存器堆单元电路358包括向量寄存器单元电路、写入掩码寄存器单元电路、以及标量寄存器单元电路。这些寄存器单元可以提供体系结构式向量寄存器、向量掩码寄存器、通用寄存器,等等。(一个或多个)物理寄存器单元堆电路358被引退单元电路354(也称为引退队列)重叠,以展示可以用来实现寄存器重命名和乱序执行的各种方式(例如,利用(一个或多个)重排序缓冲器(reorder buffer,ROB)和(一个或多个)引退寄存器堆;利用(一个或多个)未来的堆、(一个或多个)历史缓冲器、以及(一个或多个)引退寄存器堆;利用寄存器图谱和寄存器的池;等等)。引退单元电路354和(一个或多个)物理寄存器堆电路358耦合到(一个或多个)执行集群360。(一个或多个)执行集群360包括一组一个或多个执行单元电路362和一组一个或多个存储器访问电路364。执行单元电路362可以对各种类型的数据(例如,标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点)执行各种算术、逻辑、浮点或其他类型的操作(例如,移位、加法、减法、乘法)。虽然一些实施例可以包括专用于特定功能或功能集合的若干个执行单元或执行单元电路,但其他实施例可以只包括一个执行单元电路或者全部执行所有功能的多个执行单元/执行单元电路。(一个或多个)调度器电路356、(一个或多个)物理寄存器堆单元电路358以及(一个或多个)执行集群360被示为可能是多个,因为某些实施例为某些类型的数据/操作创建单独的管线(例如,标量整数管线、标量浮点/紧缩整数/紧缩浮点/向量整数/向量浮点管线和/或存储器访问管线,它们各自具有其自己的调度器电路、(一个或多个)物理寄存器堆单元电路和/或执行集群——并且在单独的存储器访问管线的情况下,所实现的某些实施例中只有该管线的执行集群具有(一个或多个)存储器访问单元电路364)。还应当理解,在使用分开的管线的情况下,这些管线中的一个或多个可以是乱序发出/执行,而其余是有序的。
在一些实施例中,执行引擎单元电路350可以执行到高级微控制器总线(AMB)接口(未示出)的加载存储单元(LSU)地址/数据管线化,以及地址阶段和写回、数据阶段加载、存储、以及分支。
一组存储器访问电路364耦合到存储器单元电路370,该存储器单元电路包括数据TLB单元电路372,该数据TLB电路耦合到数据缓存电路374,该数据缓存电路耦合到第2级(L2)缓存电路376。在一个示例性实施例中,存储器访问单元电路364可以包括加载单元电路、存储地址单元电路、以及存储数据单元电路,它们中的每一者耦合到存储器单元电路370中的数据TLB电路372。指令缓存电路334进一步耦合到存储器单元电路370中的第2级(L2)缓存单元电路376。在一个实施例中,指令缓存334和数据缓存374被组合成L2缓存单元电路376、第3级(L3)缓存单元电路(未示出)和/或主存储器中的单个指令和数据缓存(未示出)。L2缓存单元电路376耦合到一个或多个其他级别的缓存并且最终耦合到主存储器。
核心390可以支持一个或多个指令集(例如,x86指令集(带有已随着更新版本添加的一些扩展);MIPS指令集;ARM指令集(带有可选的额外扩展,例如NEON)),该指令集包括本文描述的(一个或多个)指令。在一个实施例中,核心390包括支持紧缩数据指令集扩展(例如,AVX1、AVX2)的逻辑,从而允许利用紧缩数据来执行被许多多媒体应用使用的操作。
示例性的(一个或多个)执行单元电路
图4图示了(一个或多个)执行单元电路的实施例,例如图3(B)的(一个或多个)执行单元电路362。如图所示,(一个或多个)执行单元电路362可以包括一个或多个ALU电路401、向量/SIMD单元电路403、加载/存储单元电路405、和/或分支/跳转单元电路407。ALU电路401执行整数算术和/或布尔操作。向量/SIMD单元电路403对紧缩数据(例如SIMD/向量寄存器)执行向量/SIMD操作。加载/存储单元电路405执行加载和存储指令,以将数据从存储器加载到寄存器中,或者从寄存器存储到存储器。加载/存储单元电路405也可以生成地址。分支/跳转单元电路407取决于指令而引起到某个存储器地址的分支或跳转。浮点单元(floating-point unit,FPU)电路409执行浮点算术。(一个或多个)执行单元电路362的宽度取决于实施例而有所不同,并且可以在从16比特到1024比特的范围中。在一些实施例中,两个或更多个更小的执行单元被逻辑地组合以形成更大的执行单元(例如,两个128比特执行单元被逻辑组合以形成256比特执行单元)。
示例性寄存器体系结构
图5是根据一些实施例的寄存器体系结构500的框图。如图所示,存在向量/SIMD寄存器510,其宽度从128比特到1024比特不等。在一些实施例中,向量/SIMD寄存器510在物理上是512比特的,并且取决于映射,只有一些低位比特被使用。例如,在一些实施例中,向量/SIMD寄存器510是512比特的ZMM寄存器:低位256比特被用于YMM寄存器,并且低位128比特被用于XMM寄存器。因此,存在寄存器的覆盖。在一些实施例中,向量长度字段在最大长度和一个或多个其他更短的长度之间作出选择,其中每个这种更短长度是前一长度的一半长度。标量操作是对ZMM/YMM/XMM寄存器中的最低阶数据元素位置执行的操作;更高阶数据元素位置或者被保持为与其在该指令之前相同,或者被归零,这取决于实施例。
在一些实施例中,寄存器体系结构500包括写入掩码/谓词(predicate)寄存器515。例如,在一些实施例中,有8个写入掩码/谓词寄存器(有时称为k0至k7),它们各自的大小是16比特、32比特、64比特或128比特。写入掩码/谓词寄存器515可以允许合并(例如,允许目的地中的任何元素集合在任何操作的执行期间被保护免于更新)和/或归零(例如,归零向量掩码允许目的地中的任何元素集合在任何操作的执行期间被归零)。在一些实施例中,给定的写入掩码/谓词寄存器515中的每个数据元素位置对应于目的地的数据元素位置。在其他实施例中,写入掩码/谓词寄存器515是可缩放的,并且由针对给定向量元素的设定数目个使能比特组成(例如,给每个64比特向量元素8个使能比特)。
寄存器体系结构500包括多个通用寄存器525。这些寄存器可以是16比特、32比特、64比特等等,并能够被用于标量操作。在一些实施例中,这些寄存器用名称RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP以及R8至R15来称呼。
在一些实施例中,寄存器体系结构500包括标量浮点寄存器545,它被用于使用x87指令集扩展对32/64/80比特浮点数据进行标量浮点操作,或者作为MMX寄存器,来对64比特紧缩整数数据执行操作,以及针对在MMX和XMM寄存器之间执行的一些操作保存操作对象。
一个或多个标志寄存器540(例如,EFLAGS,RFLAGS,等等)存储状态和控制信息,用于算术、比较和系统操作。例如,一个或多个标志寄存器540可以存储条件代码信息,例如进位、奇偶性、辅助进位、零、符号、以及溢出。在一些实施例中,一个或多个标志寄存器540被称为程序状态和控制寄存器。
段寄存器520包含用于访问存储器的段点。在一些实施例中,这些寄存器由名称CS、DS、SS、ES、FS和GS来称呼。
机器特定寄存器(machine-specific register,MSR)535对处理器性能进行控制和报告。大多数MSR 535处置与系统有关的功能,并且是应用程序不可访问的。机器检查寄存器560由用于对硬件错误进行检测和报告的控制、状态和错误报告MSR组成。
一个或多个指令指针寄存器530存储指令指针值。(一个或多个)控制寄存器555(例如,CR0-CR4)确定处理器(例如,处理器170、180、138、115和/或200)的操作模式和当前在执行的任务的特性。调试寄存器550控制并允许监视处理器或核心的调试操作。
存储器管理寄存器565指定用于保护模式存储器管理中的数据结构的位置。这些寄存器可以包括GDTR、IDTR、任务寄存器、以及LDTR寄存器。
本发明的替代性实施例可以使用更宽或更窄的寄存器。此外,本发明的替代性实施例可以使用更多、更少或不同的寄存器堆和寄存器。
指令集
指令集体系结构(instruction set architecture,ISA)可以包括一个或多个指令格式。给定的指令格式可以定义各种字段(例如,比特的数目、比特的位置)来指定要执行的操作(例如,操作码)和要被执行该操作的(一个或多个)操作对象和/或其他(一个或多个)数据字段(例如,掩码),等等。一些指令格式通过指令模板(或子格式)的定义被进一步分解。例如,给定的指令格式的指令模板可以被定义为具有该指令格式的字段的不同子集(所包括的字段通常是按相同顺序的,但至少一些具有不同的比特位置,因为所包括的字段更少)和/或被定义为具有以不同方式解读的给定字段。从而,ISA的每个指令是利用给定的指令格式来表达的(并且如果定义了的话,则以该指令格式的指令模板中的一个给定指令模板来表达),并且包括用于指定操作和操作对象的字段。例如,示例性ADD指令具有特定的操作码和指令格式,该指令格式包括操作码字段来指定该操作码,并且包括操作对象字段来选择操作对象(源1/目的地和源2);并且这个ADD指令在指令流中的出现将在选择特定操作对象的操作对象字段中具有特定内容。
示例性指令格式
可以按不同的格式来实现本文描述的(一个或多个)指令的实施例。此外,下文详述了示例性系统、体系结构和管线。(一个或多个)指令的实施例可以在这些系统、体系结构和管线上被执行,但不限于详述的那些。
图6图示了指令格式的实施例。如图所示,指令可以包括多个成分,这些成分包括但不限于用于以下项的一个或多个字段:一个或多个前缀601、操作码603、寻址信息605(例如,寄存器标识符、存储器寻址信息,等等)、位移值607、和/或立即数609。注意,一些指令利用了该格式的一些或所有字段,而其他指令可能只使用操作码603的字段。在一些实施例中,图示的顺序是这些字段要被编码的顺序,然而应当明白,在其他实施例中,这些字段可以被按另外的顺序来编码、被组合,等等。
(一个或多个)前缀字段601在被使用时对指令进行修改。在一些实施例中,一个或多个前缀被用于重复字符串指令(例如,0xF0、0xF2、0xF3,等等)、提供节超控(sectionoverride)(例如,0x2E、0x7、0x3E、0x26、0x64、0x65、0x2E、0x3E,等等)、执行总线锁定操作、和/或改变操作对象(例如,0x66)和地址大小(例如,0x67)。某些指令要求强制性的前缀(例如,0x66、0xF2、0xF3,等等)。这些前缀中的某些可以被认为是“传统”前缀。其他前缀(本文详述了其一个或多个示例)指示出和/或提供了进一步的能力,例如指定特定的寄存器等等。这些其他前缀通常跟随在“传统”前缀之后。
操作码字段603被用于至少部分地定义在指令的解码时要执行的操作。在一些实施例中,在操作码字段603中编码的主操作码的长度为1个、2个或3个字节。在其他实施例中,主操作码可以是其他的长度。额外的3比特操作码字段有时被编码在另一个字段中。
寻址字段605被用于对指令的一个或多个操作对象进行寻址,例如存储器中的位置或者一个或多个寄存器。图7图示了寻址字段605的实施例。在这个图示中,示出了可选的MOD R/M字节702和可选的缩放、索引、基址(Scale,Index,Base,SIB)字节704。MOD R/M字节702和SIB字节704被用来编码指令的最多两个操作对象,每个操作对象是直接寄存器或有效存储器地址。注意,这些字段中的每一者是可选的,即,不是所有的指令都包括这些字段中的一个或多个。MOD R/M字节702包括MOD字段742、寄存器字段744、以及R/M字段746。
MOD字段742的内容区分存储器访问和非存储器访问模式。在一些实施例中,当MOD字段742具有值b11时,利用寄存器直接寻址模式,否则使用寄存器间接寻址。
寄存器字段744可以编码目的地寄存器操作对象或者源寄存器操作对象,或者也可以编码操作码扩展而不被用于编码任何指令操作对象。寄存器索引字段744的内容直接指定或者通过地址生成来指定源或目的地操作对象的位置(在寄存器中或者在存储器中)。在一些实施例中,寄存器字段744得到来自前缀(例如,前缀601)的额外比特的补充,以允许更大的寻址。
R/M字段746可以用来编码引用了存储器地址的指令操作对象,或者可以用来编码目的地寄存器操作对象或源寄存器操作对象。注意,在一些实施例中,R/M字段746可以被与MOD字段742相组合以规定寻址模式。
SIB字节704包括缩放字段752、索引字段754、以及基址字段756,以用于地址的生成。缩放字段752指示缩放因子。索引字段754指定要使用的索引寄存器。在一些实施例中,索引字段754得到来自前缀(例如,前缀601)的额外比特的补充,以允许更大的寻址。基址字段756指定了要使用的基址寄存器。在一些实施例中,基址字段756得到来自前缀(例如,前缀601)的额外比特的补充,以允许更大的寻址。在实践中,缩放字段752的内容允许缩放索引字段754的内容以进行存储器地址生成(例如,对于使用2缩放*索引+基址的地址生成)。
一些寻址形式利用位移值来生成存储器地址。例如,可以根据
2缩放*索引+基址+位移、索引*缩放+位移、r/m+位移、指令指针(RIP/EIP)+位移、寄存器+位移等等来生成存储器地址。该位移可以是1字节、2字节、4字节等等的值。在一些实施例中,位移字段607提供这个值。此外,在一些实施例中,位移因子的使用被编码在寻址字段605的MOD字段中,它指示出压缩位移方案,对于该方案,位移值通过disp8与基于向量长度确定的缩放因子N、b比特的值、以及指令的输入元素大小相结合地相乘来计算。位移值被存储在位移字段607中。
在一些实施例中,立即数字段609为指令指定立即数。立即数可以被编码为1字节值、2字节值、4字节值等等。
图8图示了第一前缀601(A)的实施例。在一些实施例中,第一前缀601(A)是REX前缀的实施例。使用这个前缀的指令可以指定通用寄存器、64比特紧缩数据寄存器(例如,单指令多数据(SIMD)寄存器或向量寄存器)、和/或控制寄存器和调试寄存器(例如,CR8-CR15和DR8-DR15)。
使用第一前缀601(A)的指令可以使用3比特字段指定最多三个寄存器,这取决于格式:1)使用MOD R/M字节702的reg字段744和R/M字段746;2)使用MOD R/M字节702与SIB字节704,包括使用reg字段744以及基址字段756和索引字段754;或者3)使用操作码的寄存器字段。
在第一前缀601(A)中,比特位置7:4被设置为0100。比特位置3(W)可以被用于确定操作对象大小,但不能单独确定操作对象宽度。因此,当W=0时,操作对象大小由代码段描述符(code segment descriptor,CS.D)决定,而当W=1时,操作对象大小为64比特。
注意,添加另一个比特允许对16(24)个寄存器进行寻址,而单独的MOD R/M reg字段744和MOD R/M的R/M字段746各自只能寻址8个寄存器。
在第一前缀601(A)中,比特位置2(R)可以是MOD R/M的reg字段744的扩展,并且当该字段编码了通用寄存器、64比特紧缩数据寄存器(例如,SSE寄存器)或者控制或调试寄存器时,可被用来修改MOD R/M的reg字段744。当MOD R/M字节702指定其他寄存器或定义扩展操作码时,R被忽略。
比特位置1(X)X比特可以修改SIB字节索引字段754。
比特位置B(B)B可以修改MOD R/M的R/M字段746或SIB字节基址字段756中的基址;或者它可以修改用于访问通用寄存器(例如,通用寄存器525)的操作码寄存器字段。
图9(A)-图9(D)图示了如何使用第一前缀601(A)的R、X和B字段的实施例。图9(A)图示了当SIB字节704不被用于存储器寻址时,来自第一前缀601(A)的R和B被用来扩展MODR/M字节702的reg字段744和R/M字段746。图9(B)图示了当不使用SIB字节704时,来自第一前缀601(A)的R和B被用来扩展MOD R/M字节702的reg字段744和R/M字段746(寄存器-寄存器寻址)。图9(C)图示了当SIB字节704被用于存储器寻址时,来自第一前缀601(A)的R、X和B被用于扩展MOD R/M字节702的reg字段744以及索引字段754和基址字段756。图9(D)图示了当寄存器被编码在操作码603中时,来自第一前缀601(A)的B被用来扩展MOD R/M字节702的reg字段744。
图10(A)-图10(B)图示了第二前缀601(B)的实施例。在一些实施例中,第二前缀601(B)是VEX前缀的实施例。第二前缀601(B)编码允许指令具有多于两个操作对象,并且允许SIMD向量寄存器(例如,向量/SIMD寄存器510)长于64比特(例如,128比特和256比特)。第二前缀601(B)的使用提供了三操作对象(或更多)的语法。例如,先前的两操作对象指令执行诸如A=A+B之类的操作,这覆写了源操作对象。对第二前缀601(B)的使用使得操作对象能够执行非破坏性操作,比如A=B+C。
在一些实施例中,第二前缀601(B)有两种形式——两字节形式和三字节形式。两字节的第二前缀601(B)主要被用于128比特、标量和一些256比特指令;而三字节的第二前缀601(B)提供了3字节操作码指令和第一前缀601(A)的紧凑替换。
图10(A)图示了第二前缀601(B)的两字节形式的实施例。在一个示例中,格式字段1001(字节0 1003)包含值C5H。在一个示例中,字节1 1005在比特[7]中包括“R”值。这个值是第一前缀601(A)的同一值的补码。比特[2]被用来规定向量的长度(L)(其中0的值是标量或者128比特向量,而1的值是256比特向量)。比特[1:0]提供等同于一些传统前缀的操作码扩展性(例如,00=无前缀,01=66H,10=F3H,并且11=F2H)。被示为vvvv的比特[6:3]可以被用于:1)编码第一源寄存器操作对象,该操作对象以反转(反码)形式指定,并且对于具有2个或更多个源操作对象的指令有效;2)编码目的地寄存器操作对象,该操作对象以反码形式指定,用于某些向量移位;或者3)不编码任何操作对象,该字段被保留并且应当包含某个值,例如1111b。
使用这个前缀的指令可以使用MOD R/M的R/M字段746,以编码引用存储器地址的指令操作对象,或者编码目的地寄存器操作对象或源寄存器操作对象。
使用这个前缀的指令可以使用MOD R/M的reg字段744,以编码目的地寄存器操作对象或者源寄存器操作对象,被作为操作码扩展来对待而不被用于编码任何指令操作对象。
对于支持四个操作对象的指令语法,vvvv、MOD R/M的R/M字段746和MOD R/M的reg字段744编码了四个操作对象中的三个。然后立即数609的比特[7:4]被用来编码第三源寄存器操作对象。
图10(B)图示了第二前缀601(B)的三字节形式的实施例。在一种示例中,格式字段1011(字节0 1013)包含值C4H。字节1 1015在比特[7:5]中包括“R”、“X”和“B”,它们是第一前缀601(A)的这些值的补码。字节1 1015的比特[4:0](示为mmmmm)包括根据需要来对一个或多个隐含的前导操作码字节进行编码的内容。例如,00001意味着0FH前导操作码,00010意味着0F9H前导操作码,00011意味着0F3AH前导操作码,等等。
字节2 1017的比特[7]的使用与第一前缀601(A)的W类似,包括帮助确定可提升的操作对象大小。比特[2]被用来规定向量的长度(L)(其中0的值是标量或者128比特向量,而1的值是256比特向量)。比特[1:0]提供等同于一些传统前缀的操作码扩展性(例如,00=无前缀,01=66H,10=F3H,并且11=F2H)。被示为vvvv的比特[6:3]可以被用于:1)编码第一源寄存器操作对象,该操作对象以反转(反码)形式指定,对于具有2个或更多个源操作对象的指令有效;2)编码目的地寄存器操作对象,该操作对象以反码形式指定,用于某些向量移位;或者3)不编码任何操作对象,该字段被保留并且应当包含某个值,例如1111b。
使用这个前缀的指令可以使用MOD R/M的R/M字段746,以编码引用存储器地址的指令操作对象,或者编码目的地寄存器操作对象或源寄存器操作对象。
使用这个前缀的指令可以使用MOD R/M的reg字段744,以编码目的地寄存器操作对象或者源寄存器操作对象,或者被作为操作码扩展来对待而不被用于编码任何指令操作对象。
对于支持四个操作对象的指令语法,vvvv、MOD R/M的R/M字段746和MOD R/M的reg字段744编码了四个操作对象中的三个。然后立即数609的比特[7:4]被用来编码第三源寄存器操作对象。
图11图示了第三前缀601(C)的实施例。在一些实施例中,第一前缀601(A)是EVEX前缀的实施例。第三前缀601(C)是四字节前缀。
第三前缀601(C)能够在64比特模式中编码32个向量寄存器(例如,128比特、256比特和512比特寄存器)。在一些实施例中,利用写入掩码/操作掩码(参见对于先前图中的寄存器的论述,例如图5)或谓词的指令利用这个前缀。操作掩码寄存器允许条件处理或选择控制。操作掩码指令——其源/目的地操作对象是操作掩码寄存器并且将操作掩码寄存器的内容视为单个值——是使用第二前缀601(B)而被编码的。
第三前缀601(C)可以编码特定于指令类别的功能(例如,具有“加载+操作”语义的紧缩指令可以支持嵌入式广播功能,具有舍入语义的浮点指令可以支持静态舍入功能,具有非舍入算术语义的浮点指令可以支持“抑制所有异常”功能,等等)。
第三前缀601(C)的第一字节是格式字段1111,它在一种实施例中具有62H的值。随后的字节被称为有效载荷字节1115-1119,并且共同形成P[23:0]的24比特值,以(本文中详述的)一个或多个字段的形式提供特定的能力。
在一些实施例中,有效载荷字节1119的P[1:0]与低位的两个mm比特相同。在一些实施例中,P[3:2]被保留。比特P[4](R')在与P[7]和MOD R/M的reg字段744相组合时允许访问高16向量寄存器集合。当不需要SIB类型寻址时,P[6]也可以提供对高16向量寄存器的访问。P[7:5]由R、X和B构成,它们是针对向量寄存器、通用寄存器、存储器寻址的操作对象指定符修饰符比特,并且当与MOD R/M寄存器字段744和MOD R/M的R/M字段746相组合时,允许访问超出低8个寄存器的下一组8个寄存器。P[9:8]提供等同于一些传统前缀的操作码扩展性(例如,00=无前缀,01=66H,10=F3H,并且11=F2H)。P[10]在一些实施例中是固定值1。被示为vvvv的P[14:11]可以被用于:1)编码第一源寄存器操作对象,该操作对象以反转(反码)形式指定,对于具有2个或更多个源操作对象的指令有效;2)编码目的地寄存器操作对象,该操作对象以反码形式指定,用于某些向量移位;或者3)不编码任何操作对象,该字段被保留并且应当包含某个值,例如1111b。
P[15]类似于第一前缀601(A)和第二前缀601(B)的W,并且可以作为操作码扩展比特或操作对象大小提升。
P[18:16]指定操作掩码(写入掩码)寄存器(例如,写入掩码/谓词寄存器515)中的寄存器的索引。在本发明的一个实施例中,特定值aaa=000具有特殊行为,暗示着没有操作掩码被用于这个特定的指令(这可以通过多种方式实现,包括使用硬连线到全一的操作掩码或者绕过掩蔽硬件的硬件)。当合并时,向量掩码允许目的地中的任何元素集合在(由基本操作和增强操作指定的)任何操作的执行期间被保护免于更新;在另一实施例中,保留目的地的每个元素的旧值(如果相应的掩码比特具有0值)。与之不同,当归零时,向量掩码允许目的地中的任何元素集合在(由基本操作和增强操作指定的)任何操作的执行期间被归零;在一个实施例中,目的地的元素在相应掩码比特具有0值时被设置到0。这个功能的子集是对于正被执行的操作的向量长度(即,被修改的元素的跨度,从第一个到最后一个)进行控制的能力;然而,被修改的元素不一定要连续。从而,操作掩码字段允许了部分向量操作,包括加载、存储、算术、逻辑,等等。虽然在描述的本发明的实施例中,操作掩码字段的内容选择若干个操作掩码寄存器中包含要使用的操作掩码的那一个(从而操作掩码字段的内容间接标识了要执行的掩蔽),但替代地或附加地,替代性实施例允许掩码写入字段的内容直接指定要执行的掩蔽。
P[19]可以与P[14:11]相组合,来以非破坏性源语法编码第二源向量寄存器,该语法可以利用P[19]来访问高16个向量寄存器。P[20]编码多种功能,这些功能在不同类别的指令中有所不同,并且可以影响向量长度/舍入控制指定符字段(P[22:21])的含义。P[23]指示出对合并-写入掩蔽的支持(例如,当被设置为0时)或者对归零和合并-写入掩蔽的支持(例如,当被设置为1时)。
下面的表格详述了在使用第三前缀601(C)的指令中对寄存器的编码的示例性实施例。
表格1:64比特模式中的32寄存器支持
表格2:在32比特模式中编码寄存器指定符
[2:0] 寄存器类型 通常用途
REG MOD R/M reg k0-k7
VVVV vvvv k0-k7 第2源
RM MOD R/M R/M k0-k7 第1源
{k1] aaa k01-k7 操作掩码
表格3:操作掩码寄存器指定符编码
程序代码可被应用到输入指令以执行本文描述的功能并且生成输出信息。输出信息可以按已知的方式被应用到一个或多个输出设备。对于本申请而言,处理系统包括任何具有处理器的系统,处理器例如是数字信号处理器(digital signal processor,DSP)、微控制器、专用集成电路(application specific integrated circuit,ASIC)、或者微处理器。
可以用面向过程或面向对象的高级编程语言来实现程序代码以与处理系统进行通信。如果希望,也可以用汇编或机器语言来实现程序代码。实际上,本文描述的机制在范围上不限于任何特定的编程语言。在任何情况下,该语言可以是编译语言或者解释语言。
本文公开的机制的实施例可以用硬件、软件、固件或者这些实现途径的组合来实现。本发明的实施例可以被实现为计算机程序或程序代码,在包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备和至少一个输出设备的可编程系统上执行。
至少一个实施例的一个或多个方面可以由被存储在机器可读介质上的代表性指令来实现,这些指令代表处理器内的各种逻辑,这些指令当被机器读取时,使得该机器制作用于执行本文所述技术的逻辑。这些表现形式被称为“IP核”,可以被存储在有形机器可读介质上并被提供给各种客户或制造设施,以加载到实际上制作该逻辑或处理器的制作机器中。
这些机器可读存储介质可包括——但不限于——由机器或设备制造或形成的物品的非暂态有形布置形式,包括存储介质,例如:硬盘,任何其他类型的盘(包括软盘、光盘、致密盘只读存储器(compact disk read-only memory,CD-ROM)、可重写致密盘(compactdisk rewritable,CD-RW)、以及磁光盘),半导体器件(例如,只读存储器(read-onlymemory,ROM),诸如动态随机访问存储器(dynamic random access memory,DRAM)、静态随机访问存储器(static random access memory,SRAM)之类的随机访问存储器(randomaccess memory,RAM),可擦除可编程只读存储器(erasable programmable read-onlymemory,EPROM),闪速存储器,电可擦除可编程只读存储器(electrically erasableprogrammable read-only memory,EEPROM),相变存储器(phase change memory,PCM)),磁卡或光卡,或者适合用于存储电子指令的任何其他类型的介质。
因此,本发明的实施例还包括非暂态有形机器可读介质,这些介质包含指令或者包含定义本文描述的结构、电路、装置、处理器和/或系统特征的设计数据,例如硬件描述语言(Hardware Description Language,HDL)。这种实施例也可以被称为程序产品。
仿真(包括二进制转译、代码变形,等等)
在一些情况下,指令转换器可以被用于将指令从源指令集转换到目标指令集。例如,指令转换器可以将指令转译(例如,利用静态二进制转译、包括动态编译的动态二进制转译)、变形、仿真或者以其他方式转换到要被核心处理的一个或多个其他指令。可以用软件、硬件、固件或者其组合来实现指令转换器。指令转换器可以在处理器上、在处理器外、或者一部分在处理器上而一部分在处理器外。
图12图示根据本发明的实施例的对照使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。在图示的实施例中,指令转换器是软件指令转换器,但可替代地,可以用软件、固件、硬件或者其各种组合来实现指令转换器。图12示出了高级语言1202的程序可以被利用第一ISA编译器1204编译以生成第一ISA二进制代码1206,该代码可以由具有至少一个第一ISA指令集核心的处理器1216原生执行。具有至少一个第一ISA指令集核心的处理器1216代表任何这样的处理器:这种处理器能够通过兼容地执行或以其他方式处理(1)第一ISA指令集核心的指令集的实质部分或者(2)以在具有至少一个第一ISA指令集核心的处理器上运行为目标的应用或其他软件的目标代码版本,来执行与具有至少一个第一ISA指令集核心的Intel处理器基本上相同的功能,以便实现与具有至少一个第一ISA指令集核心的处理器基本上相同的结果。第一ISA编译器1204代表可操作来生成第一ISA二进制代码1206(例如,目标代码)的编译器,该第一ISA二进制代码在进行或不进行额外的链接处理的情况下能够在具有至少一个第一ISA指令集核心的处理器1216上被执行。
类似地,图12示出了高级语言1202的程序可以被利用替代性指令集编译器1208来编译以生成替代性指令集二进制代码1210,该代码可以由没有第一ISA核心的处理器1214原生执行。指令转换器1212被用来将第一ISA二进制代码1206转换成可以由没有第一ISA指令集核心的处理器1214原生执行的代码。这种转换后的代码可能不会与替代性指令集二进制代码1210相同,这是因为能够进行这一点的指令转换器难以制作;然而,转换后的代码将实现总的操作,并由来自该替代性指令集的指令构成。从而,指令转换器1212代表软件、固件、硬件或它们的组合,其通过仿真、模拟或任何其他过程,允许不具有第一ISA指令集处理器或核心的处理器或其他电子设备执行第一ISA二进制代码1206。
用于在虚拟化环境中管理不受支持的指令集体系结构(ISA)特征的装置和方法
出于各种原因,否决ISA特征是符合期望的,各种原因包括但不限于减少攻击面、简化验证空间和减少实施工作量。然而,考虑到依赖于这些特征的现有软件可能不再工作,对ISA特征的移除可能是具有挑战性的。
为了缓解这个问题,本发明的实施例为各种被否决的ISA特征提供了虚拟化支持。作为示例而非限制,在x86实现方式中,被否决的特征包括传统中断描述符表(interruptdescriptor table,IDT)、全局描述符表(global descriptor tables,GDT)、本地描述符表(local descriptor table,LDT)和任务状态段(task-state segment,TSS)。在一个实施例中,虚拟机(virtual machine,VM)被配置有操作模式,在该操作模式中,某些被否决的指令和利用这些被否决的特征的指令触发虚拟机退出(VMEXIT)并且被管理程序仿真。可以在虚拟机控制结构(virtual machine control structure,VMCS)中保持少量的传统状态,该VMCS包括例如LDT、IDT、GDT、任务寄存器(task register,TR)和代码段(code segment,CS)/段选择符(segment selector,SS)。
1.示例虚拟化体系结构
处理器虚拟化已被用于减少攻击面。然而,使用处理器虚拟化来减少攻击面通常需要执行虚拟机(VM)操作,VM操作包括VM退出、VM上下文切换和VM恢复。这些VM操作可与昂贵的开销相关联。随着代码的粒度越来越精细,与上下文切换相关联的的频繁VM退出操作成为高性能计算的瓶颈。
操作系统的内核(主机的操作系统或虚拟机的宾客操作系统)可包括一个或多个组件,这些组件提供服务,诸如存储器管理、任务调度、进程管理、I/O管理、驱动程序(例如,文件系统和卷驱动程序、大容量存储装置驱动程序和总线驱动程序)、以及用于软件应用的代码完整性管理服务。存储器管理服务可使用一个或多个页表来提供宾客虚拟地址空间与和宾客物理地址空间之间的存储器地址映射。内核可包括易受页表本身未授权修改的组件。本公开的实施例向虚拟机控制结构(VMCS)添加可用于防止宾客页表攻击的扩展。VMCS是包含宾客VM和主机的操作状态的数据结构(被存储在主机物理地址(host physicaladdress,HPA)空间中)。操作状态可包括控制寄存器、指令指针和栈指针的状态。存储在VMCS中的数据可以被组织成不同的组,包括宾客状态区域、主机状态区域和与VM执行控制、VM退出控制、VM进入控制和VM退出信息相关的其他字段。处理器状态(诸如存储在处理器的控制寄存器、指令指针寄存器和栈指针寄存器中的内容)可以在进入VM时从宾客状态区域加载,并在退出VM时被保存到宾客状态区域中,而处理器状态可以在VM退出时从主机状态区域加载。因此,VM与当前VMCS相关联。扩展可以帮助保护宾客页表,从而保护宾客虚拟地址空间与宾客物理地址空间之间的映射,并且可以允许宾客存储器地址映射的快速切换(即,改变对应的页表)而不触发VM退出操作,其中宾客存储器地址映射的切换包括更新用于存储宾客存储器地址映射的页表。VM退出是响应于检测到触发事件中的一者(诸如对执行某个特权指令或访问某个存储器地址的尝试)而从宾客执行模式到VMM执行模式的硬件强制的转变。
在一些处理器实现方式中,页表的基址(称为根)被存储在与处理器相关联的控制寄存器(例如,CR3)中。例如,CR3可用于将头部条目的物理地址存储在页表中。为了使用硬件辅助的虚拟化特征来保护宾客虚拟地址空间与宾客物理地址空间之间的映射,处理器可以:
1).通过VMM在由当前上下文使用的宾客物理地址空间的部分上的增强型页表(enhanced page tables,EPT)设置中(例如,通过设置页表中的页的写入保护标志)设置写入保护,以及在VMCS中设置VMEXIT控制标志。该步骤确保页表层次结构中的非根页表不会受到来自任何无意修改的修改的影响。
2).在VMCS中设置CR3加载VMEXIT控制标志。该步骤确保不会发生宾客对寄存器指令(例如,mov cr3,<寄存器(register)>)的任何无意执行。
以上步骤中的两者都确保了在没有VMM的干预的情况下,宾客虚拟到宾客物理的寻址映射不能被修改。然而,这些步骤中的两者都触发VMEXIT操作并因此可引入性能。
CR3加载VMEXIT控制标志的设置迫使在从CR3控制寄存器加载宾客页表的根之前发起VM退出操作(VMEXIT)。在从CR3控制寄存器加载页表的根之后,处理器可以执行VM进入操作(VMENTRY或VMRESUME)以恢复对虚拟机的执行。然而,这种方法通过为宾客操作系统加载的每个CR3控制寄存器添加VMEXIT和VMENTRY的往返时间,增加了在不同存储器地址映射之间切换的总等待时间。
本公开的实施例提供了虚拟机(VM)宾客控制模式(由VMCS中的VMX_GUEST_CR3_LOAD_CONTROL_BIT指示)。在VM宾客控制模式下(例如,当VMX_GUEST_CR3_LOAD_CONTROL_BIT被置位时),如果宾客操作系统能够提供与VMM取回的对应根值匹配的索引值和根值,则宾客操作系统可以请求存储器地址映射之间的切换而不触发VM退出操作。在没有VM宾客控制模式的情况下,宾客操作系统的切换存储器地址映射请求将触发VM退出操作。此外,VMCS可以被扩展为包括用于在物理地址空间中存储链接到主机物理存储器页的引用(例如,地址指针)的控制字段。在一个实施例中,主机物理存储器页可以通过物理地址空间中的页边界来对齐。主机存储器页可包含阵列数据结构(VMX_CR3_TARGET_ARRAY,称为CR3目标阵列)。CR3目标阵列可包含条目,其中每个条目可以由索引值标识,并且包括一定数量的比特(例如,64比特)。虚拟机监测器可以使用CR3目标阵列的条目来存储与虚拟机的上下文(或进程)相关联的页表的根。上下文是由任务(例如,进程或线程)使用的、被保存在寄存器(或存储器)中的数据集合,该数据集合允许任务在中断后恢复。VM的上下文是允许VM从中断恢复的数据集合。每当宾客操作系统需要在宾客虚拟地址空间与宾客物理地址空间之间切换存储器映射时(例如,由于上下文切换),宾客操作系统就可以向虚拟机监测器既提供页表的索引值又提供页表的根。虚拟机监测器可以取回存储在由索引值标识的CR3目标阵列条目中的页表的根值,并将取回的根值与宾客操作系统提供的根值进行比较。如果两个根值不匹配,则虚拟机监测器可以触发退出原因为“控制寄存器访问退出(0x1c)”的VMEXIT操作,并报告访问CR3寄存器的通常退出资格(如当前在现有体系结构中定义的)。由于该特征与CR3退出的现有VMEXIT控制设置互斥,因此可以在没有修改的情况下使用现有退出原因和退出资格。
图13图示出根据本公开的实施例的用于存储器地址映射的高效切换的系统1300。处理器可以从执行第一任务(第一进程)改变为执行第二任务(第二进程)。任务的变化导致对应上下文的切换。系统1300可包括主机1302,诸如例如服务器计算机或支持虚拟化的任何合适的计算设备。主机1302可以进一步包括处理器1304和存储器1306。在一个实施例中,处理器1304和存储器1306可以在片上系统(system-on-a-chip,SoC)1307上实现。
处理器1304可以是硬件处理器,诸如中央处理单元(central processing unit,CPU),该CPU包括可被配置成用于执行系统软件和用户应用软件的一个或多个处理核心(未示出)。存储器1306可以是用于存储软件应用的指令和与软件应用相关联的数据的合适类型的存储设备。存储器1306可以根据在主机物理地址(HPA)空间1318中定义的存储器地址来被寻址。
处理器1304可进一步包括用于执行指令的执行单元1308和用于存储数据的寄存器1310。在一个实施例中,处理器1304的执行单元1308可包括逻辑电路1309,该逻辑电路1309被实现用于支持虚拟化指令集合(虚拟机扩展(virtual-machine extension,VMX))的执行,以提供对在主机1302上移植的一个或多个虚拟化环境的支持。VMX可以为虚拟机提供处理器级别的支持。在一个实施例中,VMX可指与生成虚拟机监测器(VMM)1320的指令对应的硬件特征,VMM 1320是允许一个或多个执行环境(或虚拟机(VM))在主机1302上运行的主机程序。参考图13,VMM 1320可创建并支持虚拟机(VM)1322的操作。替代地,执行单元1308可以执行VMX指令以直接生成VM 1322,而不需要VMM 1320。
VM 1322可以表现得与包括虚拟CPU(virtual CPU,vCPU)1329的常规计算设备类似。与VM 1322相关联的vCPU 1329可执行相应的宾客操作系统(宾客OS)1324。宾客应用1328可在宾客操作系统1324的环境内运行。宾客操作系统1328(包括内核)可包括多个宾客OS组件(或内核组件),以向宾客应用1328提供包括存储器地址管理的多个服务。
VM 1322可通过一系列存储器空间映射来访问存储器1306。每个VM 1322可以为VM1322构造可以被映射到对应的宾客物理地址(GPA)空间1331的宾客虚拟地址(GVA)空间1326。与处理器1304相关联的控制寄存器(例如,CR3)1330可包含页目录的基址,该基址可用于针对VM 1322计算GVA空间1326与对应的GPA空间1331之间的映射。在一个实现方式中,控制寄存器1330可以是虚拟化的控制寄存器,该虚拟化的控制寄存器对应于与主机处理器1304相关联的物理控制寄存器。VM 1322的GPA空间1331可以进一步被映射到主机系统1302的主机物理地址(HPA)空间1381。从VM 1322的GPA空间1331到主机的HPA空间的映射可以经由与在处理器1304上运行的当前VMCS相关联的扩展页表(EPT)来转换。在一些实现方式中,GPA空间1331和HPA空间1318可以是相同的,因此GVA空间1326可以直接被映射到HPA空间1318。
可以通过执行适当的VMX指令来创建VM以及从主机1302移除VM。处理器1304的执行单元1308经由逻辑电路1309可执行VMX指令以实现VMM软件和相关联的VM的生命周期。图2图示出根据本公开的实施例的VMM 1320和相关联的VM 1322的生命周期。如图2中所示,由处理器1304上的执行单元1308执行的主机软件应用可通过执行VMX启动指令(例如,VMXON)以启动VMM 1320来进入VMX操作。在VMX操作下,VMM 1320随后可以通过执行VM进入指令(例如,VMLAUNCH或VMRESUME)来进入VM 1322。终端用户可以使用创建的VM来运行宾客应用。宾客应用可与第一上下文(C0)相关联,该第一上下文可以通过上下文切换进程切换到第二上下文(C1)。在使用VM之后,VMM 1320可以使用将使VM停止的VM退出指令来重新获得控制。
因此,VMX操作被划分为VMM在其下运行的根操作和宾客软件(例如,VM和宾客OS)在其下运行的非根操作。因此,存在两种类型的VMX转变:从根操作到VMX非根操作(VM进入)的转变,以及从VMX非根操作到VM根操作(VM退出)的转变。
主机1302的处理器1304可使用虚拟机控制结构(VMCS)来控制非根操作和VMX转变。VMCS是包含宾客VM和主机的操作状态的数据结构(被存储在HPA空间中)。操作状态可包括控制寄存器(例如,CR3)、指令指针和栈指针的状态。VMM 1320可使用存储在寄存器1310中的VMCS指针(每个虚拟处理器或逻辑处理器一个)来管理对VMCS的访问。VMM 1320可使用VMX操作(例如,VMREAD、VMWRITE和VMCLEAR)来配置VMCS。VMCS是包括用于存储与主机1302所支持的VM的VM上下文(C0、C1)相关联的参数的数据字段的数据结构。因此,VM 1322可以基于存储在VMCS中的第一参数集合在作为活跃上下文的第一VM上下文(C0)下运行,并且随后基于存储在VMCS中的第二参数集合切换到作为活跃上下文的第二VM上下文(C1)。VMM1320可以经由HPA访问存储在存储器1306中的多个活跃VMCS,如图13中所示。在给定时间,一个VMCS是当前的,并且用于指定当前运行的VM相对于一个虚拟处理器的VM上下文。
在一个实施例中,如图13中所示,存储器1306可包括用于存储活跃VMCS 1312的一个或多个区域(称为VMCS区域)。例如,每个VMCS区域可包含与一个VMCS相关联的、可用于指定VM上下文的参数。响应于接收对VM进入的请求,VMM 1320可基于该请求来确定当前VMCS,并使用当前VMCS来指定VM上下文。处理器1304可包括寄存器1310或与寄存器1310相关联,以存储指向当前VMCS(例如,如图13中所示,VMCS 1312)的VMCS指针。寄存器1310可存储对当前VMCS 1312被存储的位置的引用(例如,HPA空间1318中的存储器地址)。
存储在VMCS 1312中的参数值可以被组织成不同的组,包括宾客状态区域、主机状态区域和与VM执行控制、VM退出控制、VM进入控制和VM退出信息相关的其他字段。处理器状态(诸如存储在处理器的控制寄存器、指令指针寄存器和栈指针寄存器中的内容)可以在进入VM时从宾客状态区域加载,并在退出VM时保存到宾客状态区域中,而处理器状态可以在VM退出时从主机状态区域加载。因此,VM与当前VMCS相关联。
在一个实施例中,VMCS 1312的宾客状态区域可进一步包括用于存储处理器状态的字段,该处理器状态在对应VM的每次VM进入时从这些字段加载并在每次VM退出时保存到这些字段中。这些字段可存储但不限于:可用于计算从VM的宾客虚拟地址(GVA)到宾客物理地址(GPA)的映射的控制寄存器(例如,CR3)的内容、指令指针寄存器(RIP)的内容和栈指针寄存器(RSP)的内容。这些字段可以可选地包括用于存储指向扩展页表(EPTP)的指针的字段,该指针可用于计算从VM的宾客物理地址(GPA)空间到主机物理地址(HPA)空间的映射。主机状态区域可包括用于在VM退出时存储处理器状态的类似的字段。
宾客操作系统(包括内核)1324可以向宾客应用1328提供不同的服务,以及管理与这些应用1328相关联的不同进程。每个进程可与GVA空间1326中指定的对应上下文(C0、C1等)相关联。在一些实现方式中,vCPU 1329可执行与当前上下文(处于活跃状态)相关联的一个进程,而其他上下文处于空闲状态。页表中的一个或多个页可包含存储器地址映射,该存储器地址映射用于将与GVA空间1326中的当前上下文相关联的地址转译到GPA空间1331。宾客OS 1324可以使用引用页表中的一个或多个页的基址(或根),该页表用于确定当前存储器地址映射。在一些实现方式中,宾客OS 1324可以将根存储在CR3控制寄存器1330中的一者中。当宾客OS 1324从当前进程切换到另一进程时,宾客OS 1322可能需要更新页表中的、用于提供当前存储器地址映射的页。例如,宾客OS 1324可能需要从CR3控制寄存器中的一者加载页表中页的新根,以提供新激活进程的存储器地址映射。
如上所讨论,为了防止宾客应用的恶意存储器地址攻击,宾客OS 1324可以写入保护存储宾客页表的存储器页。可以通过设置与这些页相关联的写入防止比特来实现写入保护。在一些实现方式中,为了确保存储在CR3控制寄存器中的根的安全性,处理器1304可以在从CR3控制寄存器加载根之前进一步执行VM退出操作(VMEXIT),并且在从CR3控制寄存器加载根之后执行VM进入指令(VMENTRY)。因此,当前减少攻击面的方法需要频繁切换整个VMCS(即,VM退出),这在计算上可能是昂贵的。
为了减少与执行与加载CR3控制寄存器相关联的VMEXIT和VMENTRY相关联的开销,本公开的实施例提供了CR3加载控制模式,在该CR3加载控制模式下,VMM 1320可确定CR3控制寄存器的内容是否是受信任的。如果VMM 1320确定CR3控制寄存器可以被信任(例如,它没有被宾客应用篡改),则VMM 1320可以允许宾客OS 1324加载与页表中的页相关联的根值,而不触发VM退出指令,其中根值可以引用与新上下文相关联的下一存储器地址映射。
在一个实施例中,VMCS 1312可包括用于指示VM宾客控制模式是否被启用的CR3负载控制比特(比特标志)。当CR3负载控制比特被置位为“1”时,VMM 1320进入VM宾客控制模式。VMCS 1312可进一步包含用于存储对CR3目标阵列1316的引用的CR3控制字段1314。CR3目标阵列1316可被存储在可由HPA空间1318中的主机物理地址引用的主机存储器中。由于CR3目标阵列1316被存储在HPA空间1318中并且在HPA空间1318中被访问,所以宾客OS 1324不能直接访问CR3目标阵列1316。相反,宾客OS 1324需要采用VMM 1320和/或主机操作系统来访问HPA空间1318。因此,VMM 1320可以将受信任值存储在CR3目标阵列1316中。在一个实施例中,VMM 1320可将CR3目标阵列1316存储在主机物理存储器页中,其中对CR3目标阵列1316的引用与页边界对齐。因此,可根据HPA空间1318中的页号来引用CR3目标阵列1316。
在一个实施例中,CRE目标阵列1316的条目可以由相应的索引值引用。由唯一索引值标识的每个条目可包括用于存储标志和CR3根的一定数量的比特(例如,64个比特)。图3图示出根据本公开的实施例的CR3目标阵列。如图3中所示,存储器的主机物理空间300可包含虚拟机控制结构(VMCS)302和页对齐的CR3目标阵列304。VMCS 302可包含用于存储对CR3目标阵列304的引用的控制字段306。CR3目标阵列可进一步包括由索引号标识的条目。
例如,如图3中所示,CR3目标阵列304可包括由索引_1、索引_2、……、索引_N标识的64比特条目308A、308B、……、308N。每个条目可包括用于指示该条目是否是有效条目的第一比特(V,在比特位置63处)。例如,如果V被置位为“1”,则该条目是有效的;否则,该条目无效。每当处理器1302使用存储在条目308A、308B、……、308N中的索引值和根值切换存储器地址映射而不触发VM退出操作时,该条目可包括由处理器1302置位为“1”的第二比特(A,在比特位置62处)。在确定根值匹配之后置位A比特。例如,A置位为“1”意味着请求的CR3值和存储在条目中的CR3值匹配,并且CR3加载已经进行。条目可进一步包括应当被清除的保留的比特(比特52-61)。该条目可进一步包括用于存储CR3值的CR3字段(比特0-51)。存储在CR3字段中的CR3值由VMM信任,并用于与宾客OS提供的CR3值匹配。在一个实施例中,CR3目标阵列可包括512个条目。
在一个实施例中,VMM可使用存储在条目308A、308B、……、308N中的索引值(索引_1、索引_2、……、索引_N)和CR3值来验证宾客应用的完整性。参考图13,当宾客OS 1324创建新的GVA空间(例如,结合创建新进程)时,宾客OS 1322可以向VMM 1320发出超级调用,以请求VMM 1320存储页表的根,该页表存储GVA空间到GPA空间之间的存储器地址映射。超级调用是由宾客OS 1324向VMM 1320发出以请求特权操作(诸如更新页表)的软件陷阱。根值可被存储在与VM 1322相关联的CR3控制寄存器1330中。响应于接收包括指示VMM 1320已成功地将新值存储在CR3目标阵列中并向宾客OS返回索引值的状态的超级调用,宾客OS可以在不触发VM退出操作的情况下发出mov CR3<值(value)>指令。在接收超级调用之前,由宾客OS发出的mov CR3<值>会触发VM退出操作。响应于确定CR3控制比特被置位为“1”,VMM1320可以将接收到的根值存储在CR3目标阵列1316中的条目中,其中该条目由索引值标识。响应于将CR3值存储在条目中(并将V比特置位为有效),VMM 1320可以将索引值返回到宾客OS 1324。宾客OS 1324可将索引值存储在VM私有的数据结构中。
当宾客操作系统1324需要(通过切换存储用于GVA空间与GPA空间之间映射的根的CR3控制寄存器)切换GVA空间时,宾客OS 1324可能需要向VMM 1320提供存储在CR3控制寄存器中的根值和索引值以供验证。VMM 1320可以将从宾客OS 1324接收的根值与存储在由接收到的索引值标识的条目中的根值进行比较。如果它们匹配,则VMM 1320可以允许GVA空间切换(通过切换CR3控制寄存器)而不触发VM退出操作,从而允许安全、快速的切换。在一个实施例中,处理器1304可以将A比特(称为访问状态比特)置位为“1”,以通过确保存储在条目中的根值与由宾客OS 1324提供的根值匹配来指示处理器1304在没有VM退出操作的情况下执行了CR3切换。
当宾客OS 1324删除GVA空间(或对应的进程)时,宾客OS 1326可以毁坏存储GVA空间和GPA空间之间的存储器地址映射的页。宾客OS 1324可进一步向VMM 1320进行另一超级调用(如上所定义),以向VMM 1320通知与索引值相关联的GVA空间的毁坏。VMM 1320可以移除由索引值标识的条目。在一个实施例中,VMM 1320可以将V比特置位为“0”。
在一个实施例中,CR3目标阵列1316中的每个条目的访问状态比特(A比特)可用于指示该条目已在CR3目标阵列1316中的时间。
因此,每当处理器1304确定请求中的根值与CR3目标阵列1316中存储的根值匹配时,A比特都会被置位。在一个实施例中,VMM 1320可以与私有数据结构相关联,以存储与CR3目标阵列1316中的对应条目相关联的年龄计数(“AgeCount”)。VMM 1320可以周期性地扫描CR3目标阵列中的所有条目。如果VMM 1320确定条目的A比特被置位(意味着处理器1304最近切换到存储器地址空间),则VMM 1320可以递增与对应条目相关联的AgeCount。如果VMM 1320确定条目的A比特被清除(意味着处理器1304最近切换离开存储器地址空间),则VMM 1320可以递减与对应条目相关联的AgeCount。在CR3目标阵列1316的每次扫描之后,VMM 1320可以清除所有A比特,使得VMM 1320可确定自上次扫描以来是否已经置位了A比特。因此,访问状态比特可用于实现最近最少使用(Least Recently Used,LRU)算法。在CR3目标阵列中的所有512个条目都已用完的情况下,LRU算法可以选择最近最少使用的条目来驱逐并为新条目腾出空间。
在另一实施例中,现有指令可被修改以实现没有VM退出的宾客存储器地址空间切换。例如,寄存器的操作对象mov CR3<寄存器操作对象(register operand)>指令的某些比特(例如,比特52-62)可用于存储标识目标阵列中的对应条目的索引值。因此,响应于执行mov CR3<寄存器操作对象>,处理器可以首先确定存储在VMCS中的CR3加载控制比特是否被置位。响应于确定CR3加载控制比特未被置位,处理器可以发起VM退出操作。响应于确定CR3加载控制比特被置位,处理器可以从操作对象(例如,比特52-62)取回索引值,并且基于索引值取回存储在目标阵列的对应条目中的根值。所取回的目标值可与操作对象中经编码的根值进行比较,以确定是否可以在不发起VM退出操作的情况下切换宾客存储器地址映射。在一个实施例中,经修改的mov CR3<寄存器操作对象>指令可以独立于VM宾客控制模式是否被设置来执行。在另一实施例中,经修改的mov CR3<寄存器操作对象>指令仅当VM宾客控制模式被设置时被执行。
在另一实施例中,新的虚拟化支持指令可被添加到VMX,以进行没有VM的退出宾客存储器地址空间切换。新的虚拟化指令可包括对用于存储索引值的寄存器的第一引用和对CR3控制寄存器的第二引用。当CR3加载控制比特被置位时,新的虚拟化指令可被启用;当CR3加载控制比特未被置位时,新的虚拟化指令可被禁用。宾客OS可触发新的虚拟化指令以发起没有VM退出的宾客存储器地址空间切换。
2.利用虚拟化管理不受支持的ISA特征
在一个实施例中,对于不被新体系结构的模式(例如,虚拟机扩展(VMX))支持的所有传统指令,微代码被执行以处置常见情况下的传统行为。如果传统行为需要复杂的系统交互,诸如本文提供的示例,则执行VMEXIT,并且管理程序仿真复杂行为。极不常见的情况(诸如引导通常需要的真实和受保护模式执行)可由管理程序以可接受的开销进行解释。
图14中示出了其中虚拟化技术被用来仿真传统行为的一个实施例。具体而言,响应于检测到传统指令,虚拟机1422根据以下选项执行VMEXIT 1426、1427:
选项1:该选项在不修改现有微体系结构的情况下实现,但提供较低的性能。响应于检测到被否决的指令或对被否决的状态的访问,无效/未定义的操作码异常(#UD)触发第一类型的VMEXIT 1426。被否决的指令处理器1425检测可能需要复杂系统交互的第一类型的VMEXIT 1426,并且仿真器1435仿真复杂行为。虽然这种方法受限于性能,但由于不需要对SoC 1407微体系结构进行体系结构改变,因此它没有成本。
选项2:在一个实施例中,针对某些传统指令执行第二类型的VMEXIT指令1427,这些传统指令为与对传统体系结构状态的部分硬件支持相结合的指令提供附加信息。在该实施例中,管理程序1420的被否决的指令处理器1425依赖于由SoC 1407提供的微体系结构组件1435来高效地处理这些类型的传统指令。在一个实现方式中,被否决的指令处理器1425执行一个或多个特权指令,这些特权指令使用由VMEXIT 1427指示的参数访问微体系结构组件1435,并将结果返回到虚拟机1422(其接着可将结果返回至更新相关执行上下文(例如,C0、C1)的宾客OS 1324)。替代地或附加地,管理程序1420验证VMEXIT 1427,该VMEXIT由微体系结构组件1425直接执行,并将结果直接返回到虚拟机1422。
在两种类型的VMEXIT 1426、1427中,管理程序1420的被否决的指令处理器1425仿真被否决的指令和与被否决的状态相关的操作,并将执行返回到VM 1422。如果需要这些VMEXIT 1426、1427的指令不频繁,则它们将不会导致传统VM 1422的较差性能。未被否决的指令和不与被否决的状态交互的指令将以原生性能操作,无论其频率如何。
为了降低管理程序1420的复杂性并提高其性能,在一个实施例中,当传统指令被执行时,新类型的异常被递送给管理程序1420。取代递送一般的“无效操作码”异常,更具体的异常被传递,该异常为被否决的指令处理器1425提供用于处置传统指令的“快速路径”,而不是考虑可能生成#UD异常的所有可能性。
为了证明这种方法的可行性,对在不同操作系统上运行的若干传统64b工作负载进行概况分析。使用全系统仿真器,在非虚拟化模式下对新微体系结构中不支持的指令(例如,传统OS指令)的出现进行计数。
图15图示出结果,示出了64比特长模式下相关指令的频率(每千条指令(“per-thousand instructions,PKI”))。破折号意指指令从未被观察到(在一些情况下,在长模式下,这是非法的)。这些结果指示,被否决的指令中的大多数很少被执行,这进一步验证了本文描述的陷阱和仿真方法。这些概况分析实验表明,传统状态交互和指令中的大多数发生在环转变期间。
下面图16A-图16B中的两个表1601-1602分别列举了在环0到环3转变和环3到环0转变时修改的状态。这些表涵盖了64比特长模式操作。表1601的第一列1610指示用于环0到环3转变的转变操作的类型,并且表1602的第一列1601指示用于环0到环3转变的返回操作的类型。
表1601-1602中的附加列表示在每个相应的转变操作中被修改的体系结构状态,其中单元格值表示修改后的值来自哪里。当SYSCALL和SYSRET与传统状态交互时,与调用门、异常、中断或IRET指令相比,行为与少得多的传统状态进行交互。来自MSR的SYSCALL和SYSRET加载分段状态值很容易被处置。调用门不频繁发生,并且可利用陷阱和仿真方法进行处置。IRETQ指令因其频繁得多地被执行而引人注目。IRETQ呈现了更具挑战性的情况,因为它潜在地与大量的分段状态交互,并且目前在现有机器上利用复杂的微代码流来实现。
由于IRET和传统中断递送通常在传统工作负载中执行,因此两者的实现都需要是高性能的。在一个实施例中,它是在VMX模式下利用“启发性微代码”处理的。在这种方法中,常见情况下的行为根据需要使用最少的传统状态在微代码中执行。需要与分段状态进行广泛交互的非常见情况行为,微代码导致VMEXIT。本发明的实施例可包括用于系统体系结构的新机制,保持相对少量的传统寄存器支持。
图17图示出一个实施例中包括的这种传统状态支持的示例。所图示的状态包括:存储指向中断描述符表1740的指针的中断描述符表寄存器(IDTR)1705、用于存储指向GDT1720的指针的全局描述符表(GDT)寄存器1735、存储指向GDT 1720中的段描述符的指针的段选择器1730,以及用于存储指向GDT 1720中的任务状态段(TSS)条目的指针的任务寄存器1725。另外,本地描述符表寄存器(LDTR)1710存储指向本地描述符表(LDT)1715的指针,并且调用门段选择器1750包括指向LDT 1715中的调用门条目的指针。IDT 1740、GDT 1720和LDT 1715指向各种数据结构,包括代码、数据或栈段1757、任务状态段(TSS)1756、中断处置程序1760A-1760B、异常处置程序1760C和受保护过程1760D。
基于该状态,VMEXIT将被要求支持传统行为以执行传统中断传递和执行IRETQ指令的情况已被评估。图18A-图18I中所示的程序代码反映了仿真这些操作,同时仅在虚拟化模式下依赖于少量传统寄存器的一个实施例。这些寄存器可被实现为MSR、可从VMCS中的固定偏移被加载、或者在逻辑中直接被支持。在一个实施例中,所图示程序代码流中的其他操作依赖于由SoC微体系结构1407直接执行的传统计算微操作(例如,加载、添加等)。
一个实现方式还包括用于虚拟化实现的计数器(例如,一个实施例中的QEMU),以对现有的传统操作系统进行概况分析。这提供了关于由于事件递送和IRETQ中的复杂传统行为而导致的退出的频率的信息。在下面示出的示例代码序列中,在中断流的函数“do_interrupt64”和IRETQ的函数helper_iret_protected/helper_ret_protected中,计数器“int_exit_cases”和“iret_exit_cases”记录特定的退出条件。这些计数器对应于SoC微体系结构需要执行VMEXIT以仿真复杂行为的情况。
如今,引导处理器(例如,x86 CPU)通常需要使用真实模式和受保护模式,这些模式大量使用作为否决的目标的特征,包括增加由ISA暴露的攻击面、需要复杂验证的特征,并且通常使引入新特征变得具有挑战性,同时几乎不提供价值。在本发明的一个实施例中,在这些状态(例如,在引导期间执行的真实和受保护模式代码)期间,管理程序1420中的被否决的指令处理器1425根据需要(例如,使用指令解释器或类似技术)仿真/解释这些少量的指令。
在前述的说明书中,已经参考本发明的特定示例性实施例描述了本发明的实施例。然而,将显而易见的是,可对这些实施例作出各种修改和改变,而不背离如所附权利要求所述的本发明的更宽泛的精神和范围。因此,说明书和附图应被认为是说明性而非限制性意义的。
示例
以下是本发明的不同实施例的示例实现方式。
示例1。一种处理器,包括:多个核心,每个核心包括用于执行指令和处理数据的当前微体系结构,当前微体系结构包括对虚拟执行环境的硬件支持,该虚拟执行环境包括以第一特权级别运行的管理程序和各自以第二特权级别运行的一个或多个虚拟机,该微体系结构进一步包括对执行与先前微体系结构相关联的被否决的指令的部分硬件支持;该多个核心中的至少一个核心包括:解码器,该解码器用于对指令进行解码,该解码器用于指定与指令中的每一者对应的一个或多个微操作;执行电路,该执行电路用于执行对应的微操作;其中响应于在第一虚拟机中检测到被否决的指令而执行第一类型或第二类型的虚拟机退出,其中响应于第一类型的虚拟机退出,管理程序用于在不依赖于部分硬件支持的情况下执行对先前微体系结构的第一仿真,并且其中响应于第二类型的虚拟机退出,管理程序用于依赖于部分硬件支持来执行对先前微体系结构的第二仿真。
示例2。示例1的处理器,其中部分硬件支持包括微代码,该微代码包括用于在执行电路上执行被否决的指令的一个或多个仿真微操作。
示例3。示例1的处理器,其中第一类型的虚拟机退出包括第一类型的异常或由第一类型的异常触发。
示例4。示例2的处理器,其中硬件支持包括一个或多个微体系结构组件,该一个或多个微体系结构组件包括用于存储状态值的一个或多个寄存器和/或用于执行仿真微操作的执行电路。
示例5。示例4的处理器,其中第二类型的虚拟机退出用于指定与被否决的指令相关联的参数,该参数用于执行仿真微操作。
示例6。示例5的处理器,其中,在完成第一仿真或第二仿真时,管理程序用于提供结果并将控制返回到第一虚拟机。
示例7。示例3的处理器,其中第一类型的异常包括无效或未定义的操作码异常。
示例8。示例7的处理器,其中第二类型的虚拟机退出包括第二类型的异常或由第二类型的异常触发,该第二类型的异常用于指定与被否决的指令相关联的参数。
示例9。一种方法,包括:在多个核心中的至少一个核心上执行指令,每个核心均具有包括对虚拟执行环境的硬件支持的当前微体系结构,虚拟执行环境包括以第一特权级别运行的管理程序和各自以第二特权级别运行的一个或多个虚拟机,该微体系结构进一步包括对执行与先前微体系结构相关联的被否决的指令的部分硬件支持;响应于在第一虚拟机中检测到被否决的指令而执行第一类型或第二类型的虚拟机退出;响应于第一类型的虚拟机退出,由管理程序在不依赖于部分硬件支持的情况下执行对先前微体系结构的第一仿真;以及响应于第一类型的虚拟机退出,由管理程序依赖于部分硬件支持来执行对先前微体系结构的第二仿真。
示例10。示例9的方法,其中部分硬件支持包括微代码,该微代码包括用于在执行电路上执行被否决的指令的一个或多个仿真微操作。
示例11。示例9的方法,其中第一类型的虚拟机退出包括第一类型的异常或由第一类型的异常触发。
示例12。示例10的方法,其中硬件支持包括一个或多个微体系结构组件,该一个或多个微体系结构组件包括用于存储状态值的一个或多个寄存器和/或用于执行仿真微操作的执行电路。
示例13。示例12的方法,其中第二类型的虚拟机退出用于指定与被否决的指令相关联的参数,该参数用于执行仿真微操作。
示例14。示例13的方法,其中,在完成第一仿真或第二仿真时,管理程序用于提供结果并将控制返回到第一虚拟机。
示例15。示例11的方法,其中第一类型的异常包括无效或未定义的操作码异常。
示例16。示例15的方法,其中第二类型的虚拟机退出包括第二类型的异常或由第二类型的异常触发,该第二类型的异常用于指定与被否决的指令相关联的参数。
示例17。一种机器可读介质,具有存储于其上的程序代码,该程序代码当由机器执行时,使机器执行以下操作:在多个核心中的至少一个核心上执行指令,每个核心各具有包括对虚拟执行环境的硬件支持的当前微体系结构,虚拟执行环境包括以第一特权级别运行的管理程序和各自以第二特权级别运行的一个或多个虚拟机,该微体系结构进一步包括对执行与先前微体系结构相关联的被否决的指令的部分硬件支持;响应于在第一虚拟机中检测到被否决的指令而执行第一类型或第二类型的虚拟机退出;响应于第一类型的虚拟机退出,由管理程序在不依赖于部分硬件支持的情况下执行对先前微体系结构的第一仿真;以及响应于第一类型的虚拟机退出,由管理程序依赖于部分硬件支持来执行对先前微体系结构的第二仿真。
示例18。示例17的机器可读介质,其中部分硬件支持包括微代码,该微代码包括用于在执行电路上执行被否决的指令的一个或多个仿真微操作。
示例19。示例17的机器可读介质,其中第一类型的虚拟机退出包括第一类型的异常或由第一类型的异常触发。
示例20。示例18的机器可读介质,其中硬件支持包括一个或多个微体系结构组件,该一个或多个微体系结构组件包括用于存储状态值的一个或多个寄存器和/或用于执行仿真微操作的执行电路。
示例21。示例20的机器可读介质,其中第二类型的虚拟机退出用于指定与被否决的指令相关联的参数,该参数用于执行仿真微操作。
示例22。示例21的机器可读介质,其中,在完成第一仿真或第二仿真时,管理程序用于提供结果并将控制返回到第一虚拟机。
示例23。示例19的机器可读介质,其中第一类型的异常包括无效或未定义的操作码异常。
示例24。示例23的机器可读介质,其中第二类型的虚拟机退出包括第二类型的异常或由第二类型的异常触发,该第二类型的异常指定与被否决的指令相关联的参数。
本发明的实施例可包括上文已经描述的各步骤。这些步骤可以被具体化为机器可执行指令,这些机器可执行指令可以用于使通用或专用处理器执行这些步骤。替代地,这些步骤可由包含用于执行这些步骤的硬接线逻辑的特定硬件部件来执行,或者由经编程的计算机组件和定制硬件组件的任何组合来执行。
如本文中所描述,指令可以指代诸如专用集成电路(ASIC)之类的硬件的特定配置,该专用集成电路被配置成用于执行某些操作或者具有预定功能或存储在被具体化在非暂态计算机可读介质中的存储器中的软件指令。因此,可以使用在一个或多个电子设备(例如,端站、网络元件等)上存储并执行的代码和数据来实现附图中示出的技术。此类电子设备使用计算机机器可读介质(在内部和/或通过网络与其他电子设备)存储和传送代码和数据,计算机机器可读介质诸如非暂态计算机机器可读存储介质(例如,磁盘;光盘;随机存取存储器;只读存储器;闪存设备;相变存储器)以及暂态计算机机器可读通信介质(例如,电、光、声或其他形式的传播信号——诸如,载波、红外信号、数字信号等)。此外,此类电子设备典型地包括耦合到一个或多个其他组件(诸如,一个或多个存储设备(非暂态机器可读存储介质)、用户输入/输出设备(例如,键盘、触摸屏和/或显示器)、以及网络连接)的一个或多个处理器的集合。处理器的集合与其他组件的耦合典型地通过一个或多个总线和桥接器(也被称为总线控制器)。承载网络通信量的存储设备和信号分别表示一个或多个机器可读存储介质和机器可读通信介质。由此,给定电子设备的存储设备典型地存储用于在该电子设备的一个或多个处理器的集合上执行的代码和/或数据。当然,可以使用软件、固件、和/或硬件的不同组合来实现本发明的实施例的一个或多个部分。贯穿此具体实施方式,出于解释的目的,阐述了众多特定细节以便提供对本发明的透彻理解。然而,对于本领域的技术人员而言将显而易见的是,可以在没有这些特定细节中的一些细节的情况下实现本发明。在某些实例中,未详细地描述公知结构和功能以避免使本发明的主题模糊。因此,本发明的范围和精神应当根据所附权利要求来判定。

Claims (24)

1.一种处理器,包括:
多个核心,每个核心包括用于执行指令和处理数据的当前微体系结构,所述当前微体系结构包括对虚拟执行环境的硬件支持,所述虚拟执行环境包括以第一特权级别运行的管理程序和各自以第二特权级别运行的一个或多个虚拟机,所述微体系结构进一步包括对执行与先前微体系结构相关联的被否决的指令的部分硬件支持;
所述多个核心中的至少一个核心包括:
解码器,所述解码器用于对所述指令进行解码,所述解码器用于指定与所述指令中的每一者对应的一个或多个微操作;
执行电路,所述执行电路用于执行对应的微操作;
其中响应于在第一虚拟机中检测到被否决的指令而执行第一类型或第二类型的虚拟机退出,
其中响应于所述第一类型的虚拟机退出,所述管理程序用于在不依赖于所述部分硬件支持的情况下执行对所述先前微体系结构的第一仿真,以及
其中响应于所述第二类型的虚拟机退出,所述管理程序用于依赖于所述部分硬件支持来执行对所述先前微体系结构的第二仿真。
2.如权利要求1所述的处理器,其特征在于,所述部分硬件支持包括微代码,所述微代码包括用于在所述执行电路上执行所述被否决的指令的一个或多个仿真微操作。
3.如权利要求1所述的处理器,其特征在于,所述第一类型的虚拟机退出包括第一类型的异常或由所述第一类型的异常触发。
4.如权利要求2所述的处理器,其特征在于,所述硬件支持包括一个或多个微体系结构组件,所述一个或多个微体系结构组件包括用于存储状态值的一个或多个寄存器和/或用于执行所述仿真微操作的执行电路。
5.如权利要求4所述的处理器,其特征在于,所述第二类型的虚拟机退出用于指定与所述被否决的指令相关联的参数,所述参数用于执行所述仿真微操作。
6.如权利要求5所述的处理器,其特征在于,在完成所述第一仿真或所述第二仿真时,所述管理程序用于提供结果并将控制返回到所述第一虚拟机。
7.如权利要求3所述的处理器,其特征在于,所述第一类型的异常包括无效或未定义的操作码异常。
8.如权利要求7所述的处理器,其特征在于,所述第二类型的虚拟机退出包括第二类型的异常或由所述第二类型的异常触发,所述第二类型的异常用于指定与所述被否决的指令相关联的参数。
9.一种方法,包括:
在多个核心中的至少一个核心上执行指令,每个核心各自具有包括对虚拟执行环境的硬件支持的当前微体系结构,所述虚拟执行环境包括以第一特权级别运行的管理程序和各自以第二特权级别运行的一个或多个虚拟机,所述微体系结构进一步包括对执行与先前微体系结构相关联的被否决的指令的部分硬件支持;
响应于在第一虚拟机中检测到被否决的指令而执行第一类型或第二类型的虚拟机退出,
响应于所述第一类型的虚拟机退出,由所述管理程序在不依赖于所述部分硬件支持的情况下来执行对所述先前微体系结构的第一仿真,以及
响应于所述第一类型的虚拟机退出,由所述管理程序依赖于所述部分硬件支持来执行对所述先前微体系结构的第二仿真。
10.如权利要求9所述的方法,其特征在于,所述部分硬件支持包括微代码,所述微代码包括用于在所述执行电路上执行所述被否决的指令的一个或多个仿真微操作。
11.如权利要求9所述的方法,其特征在于,所述第一类型的虚拟机退出包括第一类型的异常或由所述第一类型的异常触发。
12.如权利要求10所述的方法,其特征在于,所述硬件支持包括一个或多个微体系结构组件,所述一个或多个微体系结构组件包括用于存储状态值的一个或多个寄存器和/或用于执行所述仿真微操作的执行电路。
13.如权利要求12所述的方法,其特征在于,所述第二类型的虚拟机退出用于指定与所述被否决的指令相关联的参数,所述参数用于执行所述仿真微操作。
14.如权利要求13所述的方法,其特征在于,在完成所述第一仿真或所述第二仿真时,所述管理程序用于提供结果并将控制返回到所述第一虚拟机。
15.如权利要求11所述的方法,其特征在于,所述第一类型的异常包括无效或未定义的操作码异常。
16.如权利要求15所述的方法,其特征在于,所述第二类型的虚拟机退出包括第二类型的异常或由所述第二类型的异常触发,所述第二类型的异常用于指定与所述被否决的指令相关联的参数。
17.一种机器可读介质,具有存储于其上的程序代码,所述程序代码当由机器执行时,使所述机器执行以下操作:
在多个核心中的至少一个核心上执行指令,每个核心各具有包括对虚拟执行环境的硬件支持的当前微体系结构,所述虚拟执行环境包括以第一特权级别运行的管理程序和各自以第二特权级别运行的一个或多个虚拟机,所述微体系结构进一步包括对执行与先前微体系结构相关联的被否决的指令的部分硬件支持;
响应于在第一虚拟机中检测到被否决的指令而执行第一类型或第二类型的虚拟机退出,
响应于所述第一类型的虚拟机退出,由所述管理程序在不依赖于所述部分硬件支持的情况下执行对所述先前微体系结构的第一仿真,以及
响应于所述第一类型的虚拟机退出,由所述管理程序依赖于所述部分硬件支持来执行对所述先前微体系结构的第二仿真。
18.如权利要求17所述的机器可读介质,其特征在于,所述部分硬件支持包括微代码,所述微代码包括用于在所述执行电路上执行所述被否决的指令的一个或多个仿真微操作。
19.如权利要求17所述的机器可读介质,其特征在于,所述第一类型的虚拟机退出包括第一类型的异常或由所述第一类型的异常触发。
20.如权利要求18所述的机器可读介质,其特征在于,所述硬件支持包括一个或多个微体系结构组件,所述一个或多个微体系结构组件包括用于存储状态值的一个或多个寄存器和/或用于执行所述仿真微操作的执行电路。
21.如权利要求20所述的机器可读介质,其特征在于,所述第二类型的虚拟机退出用于指定与所述被否决的指令相关联的参数,所述参数用于执行所述仿真微操作。
22.如权利要求21所述的机器可读介质,其特征在于,在完成所述第一仿真或所述第二仿真时,所述管理程序用于提供结果并将控制返回到所述第一虚拟机。
23.如权利要求19所述的机器可读介质,其特征在于,所述第一类型的异常包括无效或未定义的操作码异常。
24.如权利要求23所述的机器可读介质,其特征在于,所述第二类型的虚拟机退出包括第二类型的异常或由所述第二类型的异常触发,所述第二类型的异常指定与所述被否决的指令相关联的参数。
CN202280025032.XA 2021-03-26 2022-03-24 用于在虚拟化环境中管理不受支持的指令集体系结构(isa)特征的装置和方法 Pending CN117178256A (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US17/214,572 US20220308867A1 (en) 2021-03-26 2021-03-26 Apparatus and method for managing unsupported instruction set architecture (isa) features in a virtualized environment
US17/214,572 2021-03-26
PCT/US2022/021770 WO2022204418A1 (en) 2021-03-26 2022-03-24 Apparatus and method for managing unsupported instruction set architecture (isa) features in a virtualized environment

Publications (1)

Publication Number Publication Date
CN117178256A true CN117178256A (zh) 2023-12-05

Family

ID=83363337

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202280025032.XA Pending CN117178256A (zh) 2021-03-26 2022-03-24 用于在虚拟化环境中管理不受支持的指令集体系结构(isa)特征的装置和方法

Country Status (4)

Country Link
US (1) US20220308867A1 (zh)
EP (1) EP4315051A1 (zh)
CN (1) CN117178256A (zh)
WO (1) WO2022204418A1 (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20220413884A1 (en) * 2021-06-29 2022-12-29 Red Hat, Inc. Reducing latency for nested virtual machines

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8984478B2 (en) * 2011-10-03 2015-03-17 Cisco Technology, Inc. Reorganization of virtualized computer programs
US9405551B2 (en) * 2013-03-12 2016-08-02 Intel Corporation Creating an isolated execution environment in a co-designed processor
US9182990B1 (en) * 2014-07-01 2015-11-10 Google Inc. Method and apparatus for detecting execution of unsupported instructions while testing multiversioned code
US9672354B2 (en) * 2014-08-18 2017-06-06 Bitdefender IPR Management Ltd. Systems and methods for exposing a result of a current processor instruction upon exiting a virtual machine
US9274823B1 (en) * 2014-12-24 2016-03-01 Parallels IP Holdings GmbH Thin hypervisor for native execution of unsafe code
US10691575B2 (en) * 2017-10-19 2020-06-23 Dynatrace Llc Method and system for self-optimizing path-based object allocation tracking
US10268595B1 (en) * 2017-10-24 2019-04-23 Red Hat, Inc. Emulating page modification logging for a nested hypervisor
US10949207B2 (en) * 2018-09-29 2021-03-16 Intel Corporation Processor core supporting a heterogeneous system instruction set architecture
US11106481B2 (en) * 2019-04-19 2021-08-31 Red Hat, Inc. Safe hyper-threading for virtual machines
WO2022225507A1 (en) * 2021-04-20 2022-10-27 Assured Information Security, Inc. Memory access control in a virtualization environment

Also Published As

Publication number Publication date
WO2022204418A1 (en) 2022-09-29
EP4315051A1 (en) 2024-02-07
US20220308867A1 (en) 2022-09-29

Similar Documents

Publication Publication Date Title
TWI769595B (zh) 用以保護影子堆疊之處理器、方法、系統和指令
EP3885901B1 (en) Apparatuses, methods, and systems for instructions to compartmentalize code
EP4092530A1 (en) Virtualization of interprocessor interrupts
CN115904649A (zh) 用户级处理器间中断
US20220283813A1 (en) Flexible return and event delivery
US20180067731A1 (en) Apparatus and method for efficient call/return emulation using a dual return stack buffer
CN117178256A (zh) 用于在虚拟化环境中管理不受支持的指令集体系结构(isa)特征的装置和方法
US11656873B2 (en) Shadow stack ISA extensions to support fast return and event delivery (FRED) architecture
NL2031072B1 (en) Apparatus and method to implement shared virtual memory in a trusted zone
EP4020274A1 (en) Apparatuses, methods, and systems for instructions to allow trusted execution environments to react to asynchronous exits
US20240103870A1 (en) Far jump and interrupt return
US20230409699A1 (en) Method for adding security features to sgx via patch on platforms that support patch rollback
US20240103869A1 (en) Fast segmentation
US20240103871A1 (en) Cpuid enumerated deprecation
WO2023141811A1 (en) Host to guest notification
WO2022266989A1 (en) Exitless guest to host notification
US20240220621A1 (en) Methods and apparatuses for instructions for a trust domain implemented by a processor
EP4239470A1 (en) Software-controlled flag to require a stack switch during execution
CN114647441A (zh) 用于微代码修补的装置和方法
CN116340033A (zh) 受信任执行环境中的高效异常处置
CN116893894A (zh) 同步微线程化
CN116917860A (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