intel VMX架构笔记

VMX概要

两类软件:VMM(虚拟机监视器)和客户软件(VM客户机)

VMX模式中的两种VMX cpu操作级别:vmx root 和vmx non-root,两种级别之间的称为VMX转换(VMX Transition).

VM entries:从vmx root级别切到vmx non-root级别

VMX模式与非VMX模式的区别:可以使用VMX指令,并且特定控制寄存器的值的加载有限制

对客户机来说,没有软件可见的方法来判断是否处理vmx non-root模式中,这样使得客户机不知道自己是否运行一个虚拟机中。

VMX模式指令:VMXON VMXOFF VMXLAUNCH VMXRESUME……

VMCS(虚拟机控制结构体):通过一个64bit的指向VMCS的指针管理,读写指针指令:VMPTRST,VMPTRLD,读写结构体指令:VMREAD,VMWRITE,VMCLEAR. 多CPU的虚拟机可以为每一个CPU创建一个VMCS。

检测是否支持vmx架构:cpuid.1:ecx.vmx[bit5] = 1

vmx特性(能力集):通过检查VMX capability MSRs, 

启用vmx:CR4.VMXE[bit 13] = 1, IA32_FEATURE_CONTROL MSR[bit 0 1 2] = 1


一个逻辑处理器与一个内存区(4k-aligned)和响应的VMCS关联。该内存区叫做VMCS region。软件使用一个64位的物理地址指针引用VMCS region。

一个逻辑处理器可以维护多个处于active状态的VMCS。在特定的时间,只有一个active的VMCS是current VMCS. VMLAUNCH, VMREAD, VMRESUME, VMWRITE指令进仅当前的VMCS进行操作。

VMCS的状态:active/inactive, current/non-current, launched/clear, 【具体查看状态变迁图】

VMCS结构的组织:前32bit为VMCS revision identifier,紧接着是32bit的vmx-abort indicator,后面是VMCS数据(不同的实现组织方式不一样)

VMCS data分为6个组成部分:

1. 客户机状态区。cpu状态保存在这里,进入时加载,退出时保存。

2. 宿主机状态区。退出客户机时从这里恢复宿主机的状态信息。

3. VM-excution 控制域。

4. VM-exit 控制域。

5. VM-entry 控制域。

6. VM-exit 信息域。该域描述了vm-exit的情况和原因,只读。

3,4,5有时候合起来叫VMX controls


VMX架构定义了两种控制切换:VM entries、VM exits,合起来称为VMX转换。

分页细节:

VMX转换同时修改CR0, CR4, IA32_EFER状态寄存器,所以可以在不同的分页模型中切换。

--  VM entries允许从IA-32分页直接迁移到其他32-bit分页模型,或者PAE分页

--  VM exits反过来,允许其他32-bit分页、PAE分页切换到IA-32分页

VMX转换变成PAE分页的时候,会加载PDPTE寄存器

--  VM entries从CR3寄存器里的地址或者从VMCS(虚拟机控制结构)里加载PDPTE寄存器值

--  VM exits从CR3寄存器里的地址加载PDPTE寄存器

VMX转换会使TLB无效、分页结构体(paging-structure)缓存无效,这通常基于特定的控制设置。


VMX对地址转换的支持,与分页直接关联的有两种特性:VPIDs(虚拟处理器id),EPT(扩展页表)

VPIDs提供一种为软件提供了一种方法来区分不同‘虚拟处理器’的地址空间,处理器可以用该方法来同时维护TLB中多个地址空间的信息和分页结构体的缓存。

使用EPT时,分页结构体里的地址不直接用于访问物理内存或者内存映射的IO地址。它们被当成客户机的物理地址,通过一堆EPT分页结构体来转换一下产生实际的物理地址

EPT可以设置自己的内存类型和页面的权限设置。


你可能感兴趣的:(intel VMX架构笔记)