VMCS结构存放在一个物理地址区域里, 这个区域被称为"VMCS region".

VMCS区域需要对齐在4K边界上. VMCS区域的大小由IA32_VMX_BASIC[44:32]域里得到(见2.5.4节), 以KB为单位, 最高4KB.

IA32_VMX_BASIC[53:50]域报告了VMCS区域支持的cache类型, 支持UC与WB类型.

执行 VMCLEARVMPTRLD 指令时, 需要提供目标 VMCS 区域物理指针作为操作数. 而 VMREAD、VMWRITE、VMLAUNCH、VMRESUME 及 VMPTRST 指令隐式地使用 current-VMCS pointer 作为目标 VMCS 指针.

前面提到, 使用 VMCLEAR 指令对 current-VMCS 指针进行初始化时, current-VMCS 指针值变成 FFFFFFFF_FFFFFFFFh. 这时, 执行上面隐式使用 current-VMCS pointer的指令, 会产生 VMfailInvalid 失败.

1. VMXON 区域

2. Executive-VMCS 与 SMM-transfer VMCS

在 SMM 双重监控处理机制下, 还有两类 VMCS, 分别是: Executive-VMCS 与 SMM transfer VMCS. Executive-VMCS 对应 VMM 在 VMX operation 模式(包括 root 与 non-root )下的 VMCS, 而 SMM-transfer VMCS 对应 VMM 进入 SMM 模式时使用的 VMCS .

3. VMCS 区域格式

VMCS 区域寄存在物理地址空间, 有一个 8 字节的头部和 VMCS 数据区域, 如图 3-1 所示.

2. VMCS区域

2. VMCS区域

注: DWORD, 双字, 四字节

3.1. VMCS ID

VMCS 的首 DWORD 值是 VMCS ID, 这个 VMCS ID 值需要在初始化 VMCS 区域时写入, 必须等于 IA32_VMX_BASIC[31:0] 值(见2.5.4). 注意, VMXON 区域的首 DWORD 值也是 VMCS ID, 也必须等于 IA32_VMX_BASIC[31:0] 值.

3.2. VMX-abort ID

接下来的 DWORD 值是 VMX-abort ID. 当进行 VM-exit 操作遇到一个错误时, 会产生 "VMX-abort". VMX-abort 导致处理器进入 shutdown 状态, 处理器会写入一个非零值current-VMCS 的 VMX-abort ID 字段(见5.17)

3.3. VMCS data

VMCS 数据区包括 6 个区域, 每个区域有若干字段, 如下.

(1) guest-state 区域: 在 VM-entry 时, 处理器的状态信息从 guest-state 区域中加载. 在 VM-exit 时, 处理器的当前状态信息保存在 guest-state 区域.

(2) host-state 区域: 在 VM-exit 时, 处理器的状态信息从 host-state 区域中加载.

(3) VM-execution 控制区域: 在进入 VM 后, 处理器的行为由 VM-execution 控制区域中的字段控制. 例如, 可以设置某些条件使得在 guest 执行中产生 VM-exit.

(4) VM-exit 控制区域: 控制处理器在处理 VM-exit 时的行为, 也影响返回 VMM 后处理器的某些状态.

(5) VM-entry 控制区域: 控制处理器在处理 VM-entry 时的行为, 也决定进入 VM 后处理器的某些状态.

(6) VM-exit 信息区域: 记录引起 VM-exit 事件的原因及相关的明细信息. 也可记录 VMX 指令执行失败后的错误编号.

相关文章:

  • 2022-01-11
  • 2022-01-18
  • 2021-07-07
  • 2021-07-03
  • 2021-05-12
  • 2022-12-23
  • 2022-12-23
  • 2021-04-26
猜你喜欢
  • 2021-04-26
  • 2021-09-11
  • 2021-08-25
  • 2022-12-23
  • 2021-12-01
  • 2021-08-31
  • 2022-12-23
相关资源
相似解决方案