首页
社区
课程
招聘
[翻译] Intel手册-VT部分 第24章、关于VMX的介绍
发表于: 2023-9-17 23:10 4790

[翻译] Intel手册-VT部分 第24章、关于VMX的介绍

2023-9-17 23:10
4790

目录

24 虚拟机扩展简介

24.1 概述

本章介绍虚拟机体系结构的基础知识,并概述支持多个软件环境的处理器硬件虚拟化的虚拟机扩展 (VMX)。

有关 VMX 指令的信息,请参阅《英特尔® 64 和 IA-32 架构软件开发人员手册》第 2B 卷。 VMX 的其他方面和系统编程注意事项在《英特尔® 64 和 IA-32 架构软件开发人员手册》第 3C 卷的章节中进行了描述。

24.2 虚拟机架构

虚拟机扩展定义了对 IA-32 处理器上的虚拟机的处理器级支持。支持两类主要的软件:

  • 虚拟机监视器 (VMM) — VMM 充当host并完全控制处理器和其他平台硬件。 VMM 为guest 软件(参见下一段)提供了虚拟处理器的抽象,并允许其直接在逻辑处理器上执行。 VMM 能够保留对处理器资源、物理内存、中断管理和 I/O 的选择性控制。
  • guest 软件 — 每个虚拟机 (VM) 都是一个guest 软件环境,支持由操作系统 (OS) 和应用程序软件组成的堆栈。每个虚拟机都独立于其他虚拟机运行,并使用物理平台提供的相同处理器、内存、存储、图形和 I/O 接口。软件堆栈的行为就像在没有 VMM 的平台上运行一样。在虚拟机中执行的软件必须以降低的权限运行,以便 VMM 可以保留对平台资源的控制。

24.3 VMX 操作简介

处理器对虚拟化的支持是由一种称为 VMX 操作的处理器操作形式提供的。 VMX 操作有两种:VMX root operation和VMX non-root operation。一般来说,VMM 将在 VMX root 操作中运行,而guest 软件将在 VMX non-root 操作中运行。 VMX root operation和 VMX non-root operation之间的转换称为 VMX 转换。 VMX 转换有两种类型。到 VMX non-root operation的转换称为 VM entries。从 VMX non-root operation到 VMX root operation的转换称为 VM Exits。

VMX root operation中的处理器行为与 VMX 操作之外的处理器行为非常相似。主要区别在于有一组新指令(VMX 指令)可用,并且可以加载到某些控制寄存器中的值是有限的(参见第 24.8 节)。

VMX non-root operation中的处理器行为受到限制和修改以促进虚拟化。某些指令(包括新的 VMCALL 指令)和事件导致 VM Exits到 VMM,而不是其普通操作。由于这些VM退出取代了普通行为,因此VMX非root操作中软件的功能受到限制。正是这种限制允许 VMM 保留对处理器资源的控制。

不存在其设置指示逻辑处理器是否处于 VMX non-root operation的软件可见位。这一事实可能允许 VMM 阻止guest 软件确定它正在虚拟机中运行。

由于 VMX 操作甚至对以当前特权级别 (CPL) 0 运行的软件也施加了限制,因此guest 软件可以在其最初设计的特权级别上运行。此功能可以简化 VMM 的开发。

24.4 VMM软件的生命周期

图 24-1 说明了 VMM 及其客户软件的生命周期以及它们之间的交互。以下几项总结了该生命周期:

  • 软件通过执行VMXON指令进入VMX操作
  • 使用 VM entries,VMM 可以将 guest 虚拟机输入到虚拟机中(一次一个)。 VMM使用指令VMLAUNCH和VMRESUME影响VM条目;它使用 VM Exits重新获得控制权。
  • VM退出将控制转移到VMM指定的入口点。 VMM 可以针对 VM Exits的原因采取适当的操作,然后可以使用 VM entries返回到虚拟机。
  • 最终,VMM 可能决定自行关闭并离开 VMX 操作。它通过执行 VMXOFF 指令来实现这一点。

图片描述

24.5 虚拟机控制结构

VMX non-root operation和 VMX 转换由称为虚拟机控制结构 (VMCS) 的数据结构控制。

对 VMCS 的访问是通过称为 VMCS 指针(每个逻辑处理器一个)的处理器状态组件进行管理的。 VMCS指针的值是VMCS的64位地址。 VMCS 指针的读写使用指令 VMPTRST 和 VMPTRLD。 VMM 使用 VMREAD、VMWRITE 和 VMCLEAR 指令配置 VMCS。

VMM 可以为其支持的每个虚拟机使用不同的 VMCS。对于具有多个逻辑处理器(虚拟处理器)的虚拟机,VMM 可以为每个虚拟处理器使用不同的 VMCS。

24.6 发现对 VMX 的支持

在系统软件进入 VMX 操作之前,它必须发现处理器中是否存在 VMX 支持。系统软件可以使用CPUID确定处理器是否支持VMX操作。如果CPUID.1:ECX.VMX[bit 5] = 1,则支持VMX操作。请参阅《英特尔® 64 和 IA-32 架构软件开发人员手册》第 2A 卷第 3 章“指令集参考,AL”。

VMX 架构被设计为可扩展的,以便 VMX 操作中的未来处理器可以支持 VMX 架构的第一代实现中不存在的附加功能。使用一组 VMX 功能 MSR 向软件报告可扩展 VMX 功能的可用性(请参阅附录 A,“VMX 功能报告工具”)。

24.7 启用并进入 VMX 操作

在系统软件进入 VMX 操作之前,通过设置 CR4.VMXE[bit 13] = 1 来使能 VMX。然后通过执行 VMXON 指令进入 VMX 操作。如果在 CR4.VMXE = 0 的情况下执行,VMXON 会导致无效操作码异常 (#UD)。一旦进入 VMX 操作,就无法清除 CR4.VMXE(请参见第 24.8 节)。系统软件通过执行VMXOFF指令退出VMX操作。执行 VMXOFF 后,可以在 VMX 操作之外清除 CR4.VMXE。

VMXON 还由 IA32_FEATURE_CONTROL MSR(MSR 地址 3AH)控制。当逻辑处理器复位时,该 MSR 被清零。 MSR的相关位是:

  • 位 0 是锁定位。 如果该位清零,VMXON 会导致一般保护异常。如果锁定位被设置,则对该 MSR 的 WRMSR 会导致一般保护异常;在上电复位条件出现之前,无法修改 MSR。系统 BIOS 可以使用该位为 BIOS 提供设置选项以禁用对 VMX 的支持。要在平台中启用 VMX 支持,BIOS 必须设置位 1、位 2 或两者(见下文)以及锁定位。
  • 位 1 在 SMX 操作中启用 VMXON。 如果该位清零,则在 SMX 操作中执行 VMXON 会导致一般保护异常。尝试在不支持 VMX 操作(请参阅第 24.6 节)和 SMX 操作(请参阅《英特尔® 64 和 IA-32 架构软件开发人员手册》卷中的第 7 章“安全模式扩展参考”)的逻辑处理器上设置该位2D) 导致一般保护异常。
  • 位 2 启用 SMX 操作之外的 VMXON。 如果该位清零,则在 SMX 操作之外执行 VMXON 会导致一般保护异常。尝试在不支持 VMX 操作(请参阅第 24.6 节)的逻辑处理器上设置该位会导致一般保护异常。

在执行 VMXON 之前,软件应分配一个自然对齐的 4 KB 内存区域,逻辑处理器可以使用该区域来支持 VMX 操作。该区域称为 VMXON 区域 。 VMXON 区域的地址(VMXON 指针)在 VMXON 的操作数中提供。第 25.11.5 节“VMXON 区域”详细介绍了软件应如何初始化和访问 VMXON 区域。

24.8 VMX 操作限制

VMX 操作对处理器操作施加限制。这些详细信息如下:

  • 在VMX操作中,处理器可以将CR0和CR4中的某些位固定为特定值并且不支持其他值。如果这些位中的任何一个包含不支持的值,则 VMXON 失败(请参阅第 31 章中的“VMXON — 输入 VMX 操作”)。在 VMX 操作(包括 VMX root operation)中使用任何 CLTS、LMSW 或 MOV CR 指令将这些位之一设置为不受支持的值的任何尝试都会导致一般保护异常。 VM entry或 VM Exits无法将这些位中的任何一个设置为不受支持的值。软件应参考 VMX 功能 MSR IA32_VMX_CR0_FIXED0 和 IA32_VMX_CR0_FIXED1 以确定如何固定 CR0 中的位(请参阅附录 A.7)。对于 CR4,软件应参考 VMX 功能 MSR IA32_VMX_CR4_FIXED0 和 IA32_VMX_CR4_FIXED1(请参阅附录 A.8)。

    仅在分页保护模式(包括 IA-32e 模式)下支持操作。因此,guest 软件不能在未分页保护模式或实地址模式下运行。后来的处理器支持称为“不受限制的guest ”的 VM 执行控制(请参见第 25.6.2 节)。如果此控制为 1,则 CR0.PE 和 CR0.PG 在 VMX non-root operation中可能为 0(即使 MSR IA32_VMX_CR0_FIXED0 功能另有报告)。此类处理器允许guest 软件在未分页保护模式或实地址模式下运行。

  • 如果逻辑处理器处于 A20M 模式,VMXON 将失败(请参阅第 31 章中的“VMXON — 输入 VMX 操作”)。一旦处理器处于 VMX 操作中,A20M 中断就会被阻止。因此,在 VMX 操作中不可能处于 A20M 模式。

  • 只要逻辑处理器处于 VMX root operation中,INIT 信号就会被阻止。在 VMX 非 root 操作中不会被阻止。相反,INIT 会导致 VM Exits(请参见第 26.2 节“VM Exits的其他原因”)。

  • 仅当 IA32_VMX_MISC[14] 读为 1 时,英特尔® 处理器跟踪(英特尔 PT)才能在 VMX 操作中使用(参见附录 A.6)。在支持 Intel PT 但不允许在 VMX 操作中使用它的处理器上,执行 VMXON 会清除 IA32_RTIT_CTL.TraceEn(请参阅第 31 章中的“VMXON—进入 VMX 操作”);在 VMX 操作(包括 VMX root operation)期间尝试写入 IA32_RTIT_CTL 会导致一般保护异常。


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2024-5-6 10:46 被zhang_derek编辑 ,原因:
上传的附件:
收藏
免费 5
支持
分享
最新回复 (1)
雪    币: 3535
活跃值: (31016)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
感谢分享
2023-9-18 08:45
1
游客
登录 | 注册 方可回帖
返回
//