VT VMCS结构信息

熟悉Intel VT的人都知道. 使用VT的过程, 基本上就是操作VMCS结构的过程. 这个结构非常的大. 非常复杂, 基本上和VT有关的东西都在这里.

*这里是按照Intel 手册描述的VMCS的数据区组成部分依次填写 详细信息参考[开发日志2].VMCS数据区总共6个组成部分. 分别是
1.客户区状态域(Guest State Area)
2.宿主机状态域(Host State Area )
3.虚拟机运行控制域( VM-Execuction Control Fields )
4.VMEntry行为控制域( VM-Entry Control Fields )
5.VMExit行为控制域( VM-Exit Control Fields )
6.VMExit相关信息域( VM-Exit Information Fields )(只读)

1.客户区状态域(Guest State Area):

1.1客户机寄存器状态内容(Guest Register State )
控制寄存器: CR0, CR3, CR4
调试寄存器: DR7
Esp, Eip, 和Eflags
CS, SS, DS, ES, FS, GS, LDTR, TR选择子, 基址, 段长, 属性
GDTR, IDTR, 基址, 段长
一些MSR寄存器的值, IA32_DEBUGCTL, IA32_SYSENTER_CS, IA32_SYSENTER_ESP,
IA32_SYSENTER_EIP,IA32_PERF_GLOBAL_CTRL, IA32_PAT, IA32_EFER

1.2客户机非寄存器状态内容(Guest Non-Register State )

活动性状态(Activity State):活跃的(Active), 中断的(hlt), 关闭的(Shutdown), 等待SIPI中断(Wait-for-SIPI)只有活跃的可以自行Guest指令, 其他都表示发生错误

中断能力状态

推迟调试异常

VMCS连接指针(保留)

VMX抢占计时器

PDPTE项(开启了EPT模式会用到此域)PDPTE0-PDPTE3

2.宿主机状态域(Host State Area ):
这个域只存储Hypervisor的寄存器信息, 在发生#VMExit事件的时候恢复到相应寄存器
控制寄存器: CR0, CR3, CR4
Esp,Eip
CS, SS, DS, ES, FS, GS和TR寄存器, 选择子
FS, GS, TR, GDTR, IDTR信息, 基址
一些MSR寄存器, IA32_SYSENTER_CS, IA32_SYSENTER_ESP,
IA32_SYSENTER_EIP,IA32_PERF_GLOBAL_CTRL, IA32_PAT, IA32_EFER

3.虚拟机运行控制域(VM-Execution Control Fields ):
这个域用来控制CPU在Non-Root模式下运行行为, 控制某条指令是否产生VM-Exit,还有异常
和中断的配置, 可以看出来, 这个地方很重要了. 要控制什么指令.中断, 异常.产生异常,就是配置这里

3.1基于针脚的虚拟机执行控制(Pin-Based VM-Execution Controls ):
管理中断等异步事件, 如果启用抢占计时器就是在这个域中设置的.
设置要参考IA32_VMX_PINBASED_CTLS和IA32_VMX_TRUE_PINBASED_CTLS两个MSR寄存器的值

3.2基于处理器的虚拟机执行控制(Processor-Based VM-Exection Controls ):
这里就是配置一些指令是否产生#VM-Exit事件的地方了, 还有师傅开启EPT地址翻译
开启VPID, 开启虚拟APIC

3.3异常位图(Exception Bitmap):
该域32位长, 每一位代表当某种异常发生时, 硬件会自动产生#VM-Exit时间, 如果某位
为0, 表示这个异常会通过IDT表正常处理. 要捕获异常就是这里了.当然缺页在另外地方配置

3.4IO位图地址(IO Bitmap Addresses ):
64位长的物理地址, 指向两块IO位图, 只有在Primary Processor-Based VM-Execution Controls.Use I/O
Bitmaps[bit 25]=1的情况下才会被使用. 在处理IO指令时根据位图相应产生#VM-Exit.地址要4K对齐

3.5时间戳计数器偏移(Time-Stamp Counter Offset ):
当Guest 利用RDTSC TDTSCP指令或者访问IA32_TIME_STAMP_COUNTER MSR寄存器的时候, 得到的结果是
真实的值+上这个偏移量的和

3.6虚拟机/Hypervisor屏蔽和 CR0/CR4访问隐藏设置:
这个域主要对CR0/CR4进行保护, 虚拟机/Hypervisor屏蔽中置位1的部分说明会产生#VM-Exit事件.

3.7 CR3访问控制.
包含最多4个CR3目标值, 如果是这几个CR3中的一个那么赋值CR3的时候不产生#VM-Exit

3.8 APIC访问控制:

VT技术对APIC的虚拟化, 这边先不管

3.9 MSR 位图地址(MSR Bitmap Address ):
指向MSR位图区域的物理地址, 当Primary Processor-Based VM-Execution Controls.Use MSR Bitmaps[bit 28 ] = 1
使用, MSR位图4K大小, 当配置好时, 相应的MSR访问会产生#VM-Exit.

3.10 执行体VMCS指针(Executive-VMCS Pointer ):
64位, 用于VT技术对系统管理中断(SMI)和系统管理模式(SMM)进行监管.

3.11 EPT指针( Extended Page Table Pointer ):
指向EPT页表的基地址(EPML4级页表的物理地址)以及一些EPT的配置信息.
当Secondary Processor-Based VM-Execution Controls.Enable EPT[bit 1]=1时启用.

3.12 虚拟机标识符(Virtual Processor Identifier, VPID):
虚拟机标识符16位长, 当Secondary Processor-Based VM-Execution Controls.Enable EPT[bit 5]=1时启用

4.VMEntry行为控制域( VM-Entry Control Fields ) :
定义在#VM-Entry事件发生后, 硬件要立即做的事情

4.1 #VM-Entry 基本操作控制设置
1.加载调试寄存器内容, (DR7, IA32_DEBUGCTL MSR 寄存器.
2.虚拟机是否进入x64模式, x86用于为0
3.进入系统管理模式
4.关闭Dual-Monitor Treatment
5.加载IA32_PERF_GLOBAL_CTRL MSR寄存器
6.加载IA32_PAT MSR寄存器
7.加载IA32_EFER MSR寄存器

4.2 #VM-Entry MSR寄存器操作控制设置
这个域可以配置在进入#VM-Entry的时候加载一些有关虚拟机状态的MSR寄存器.

4.3 #VM-Entry 注入事件控制设置
#VM-Entry可以在所有虚拟机状态恢复完毕后, 通过客户机IDT表触发一个中断.通过这个域配置

5.VMExit行为控制域( VM-Exit Control Fields ):
定义在#VM-Exit事件发生后, 硬件要立即做的事情.

5.1 #VM-Exit 基本操作控制设置
1.保存调试寄存器内容, (DR7, IA32_DEBUGCTL MSR 寄存器.
2.Hypervisor地址空间大小(x86永远为0)
3.加载IA32_PERF_GLOBAL_CTRL MSR 寄存器
4.VMExit保留外部中断原因信息(Acknowledge Interrupt on Exit )
5.保存IA32_PAT MSR寄存器
6.加载IA32_PAT MSR寄存器
7.保存IA32_EFER MSR寄存器
8.加载IA32_EFER MSR寄存器
9.保存VMX抢占计时器值.

5.2 #VM-Exit MSR寄存器操作控制设置
和#VM-Entry类似

6.VMExit相关信息域(只读区域)

6.1 #VM-Exit事件基本信息区(Basic VM-Exit Information):
1. 退出原因( Exit Reason)
2. 退出条件( Exit Qualification )
3. 客户机线性地址( Guest-Linear Address )
4. 客户机物理地址( Guest-Physical Address )

6.2 向量化事件 #VM-Exit 信息区(VM Exits Due to Vectored Events ):
1. #VM-Exit中断信息
2. #VM-Exit中断异常号

6.3 事件分发时#VM-Exit信息区(VM Exits Occur During Event Delivery):
1. IDT向量表信息
2. IDT向量表异常号

6.4 指令执行时VMExit信息区(VM Exits Due to Instruction Execution ):
1. VMExit指令长度
2. VMExit指令信息
6.5 VM指令错误信息区(VM Instruction Error Field ):
描述了执行虚拟机操作指令, 发生的最后一个Non-Faulting 错误的信息


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值