内核虚拟化:CPU虚拟化硬件支持

本文详细介绍了IntelVT-x技术中的VMX操作模式,包括根模式和非根模式,以及它们如何解决虚拟化中的敏感指令问题。文章还重点讲解了VMCS(虚拟机控制结构)在CPU虚拟化中的关键角色,以及VM-Entry和VM-Exit的机制,展示了VT-x在处理器虚拟化中的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Intel VT中的VT-x技术扩展了传统的IA32处理器架构,为IA32架构的处理器虚拟化提供了硬件支持。

首先,VT-x引入了两种操作模式,统称为VMX操作模式。

  • 根操作模式(VMX Root Operation):VMM运行所处的模式,以下简称根模式。

  • 非根操作模式(VMX Non-Root Operation):客户机运行所处的模式,以下简称非根模式。

这两种操作模式与IA32特权级0至特权级3是正交的,即每种操作模式下都有相应的特权级03。故在VT-x使用的情况下,描述程序运行在某个特权级,例如特权级0,还必须指出当前是处在根模式还是非根模式

引入两种操作模式的理由很明显。指令的虚拟化是通过“陷入再模拟”的方式实现的,而IA32架构有19条敏感指令不能通过这种方式处理,导致了虚拟化漏洞。最直观的解决办法,是使得这些敏感指令能够触发异常。可惜这种方法会改变这些指令的语义,导致与原有软件不兼容,这是不可接受的。引入新的模式可以很好地解决问题。非根模式下所有敏感指令(包括19条不能被虚拟化的敏感指令)的行为都被重新定义,使得它们能不经过虚拟化就直接运行或通过“陷入再模拟”的方式来处理;在根模式下,所有指令的行为和传统IA32一样,没有改变,因此原有的软件都能正常运行。

VT-x中,非根模式下敏感指令引起的“陷入”被称为VM-Exit。VM-Exit发生时,CPU自动从非根模式切换为根模式。相应地,VT-x也定义了VM-Entry,该操作由VMM发起,通常是调度某个客户机运行,此时CPU从根模式切换成为非根模式。

其次,为了更好地支持CPU虚拟化,VT-x引入了VMCS(Virtual-Machine Control Structure,虚拟机控制结构)。VMCS保存虚拟CPU需要的相关状态,例如CPU在根模式和非根模式下的特权寄存器的值。VMCS主要供CPU使用,CPU在发生VM-Exit和VM-Entry时都会自动查询和更新VMCS。VMM可以通过指令来配置VMCS,进而影响CPU的行为。

最后,VT-x还引入了一组新的指令,包括VMLAUCH/VMRESUME用于发起VM-Entry,VMREAD/VMWRITE用于配置VMCS等。

VMCS

VMCS的概念和虚拟寄存器的概念类似,可以看作是虚拟寄存器概念上在硬件上的应用。虚拟寄存器的操作和更改完全由软件执行,但VMCS却主要由CPU操作。VMCS是保存在内存中的数据结构,包含了虚拟CPU的相关寄存器的内容和虚拟CPU相关的控制信息,每个VMCS对应一个虚拟CPU。

VMCS在使用时需要与物理CPU绑定。在任意给定时刻,VMCS与物理CPU是一对一的绑定关系,即一个物理CPU只能绑定一个VMCS,一个VMCS也只能与一个物理CPU绑定。VMCS在不同的时刻可以绑定到不同的物理CPU,例如在某个VMCS先和物理CPU1绑定,并在某一个时刻解除绑定关系,并重新绑定到物理CPU2。这种绑定关系的变化被称为VMCS的迁移(Migration)。

VT-x提供了两条指令用于VMCS的绑定与解除绑定。

  • VMPTRLD<VMCS地址>:将指定的VMCS与执行该指令的物理CPU绑定。

  • VMCLEAR:将执行该指令的物理CPU与它的VMCS解除绑定。该指令会将物理CPU缓存中的VMCS结构同步到内存中去,从而保证VMCS和新的物理CPU绑定时,内存中的值是最新的。

VMCS的一次迁移过程如下:

  1. 在CPU1上执行VMCLEAR,解除绑定。

  2. 在CPU2上执行VMPTRLD,进行新的绑定。

VT-x定义了VMCS的具体

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值