Intel VT-x入门
笔者笔记本是amd的cpu(悲)
mov eax,0
cpuid
vt支持检测
- cpuid指令
- eax置1 指向cpuid
- 查看ecx第五位,为1支持,0不支持
- MSR address 3AH:IA32_FEATURE_CONTROL ==1
- CR0 PE(Protection Enable bit 0),PG(Paging bit 31),NE(Numeric Error bit 5) 开启
- CR4 VMXE位
- 表示系统是否进入VT模式,进入VT模式前需要手动置1,否则会触发保护异常,且退出VT模式前无法更改该标志位。
大致流程
VMXON:启动vmx模式,此时cpu处于root模式(Hypervisor模式)
VMClear:使一块vmcs变为非激活状态,更新当前vmcs指针为空
VMPtrld:激活一块vmcs,将当前处理器vmcs指针设置为该物理地址
VMLaunch: 从root模式到non-root模式,转到Guest Os #VMEntry
产生Hypervisor感兴趣事件/GuestOs调用VMCALL指令会#VMExit到root模式
VMResume:Hypervisor处理完调用VMResume #VMEntry到 non-root模式下的Gusest Os
VMClear:使一块vmcs变为非激活状态,更新当前vmcs指针为空
VMXOFF:关闭vmx模式
VMCS初始化
virtual-machine control data structures
VMREAD和VMWRITE指令来操作
VMCS区域
- Guest-State Area:#VMentry加载虚拟机处理器信息,#VMExit时保存处理器信息
- Host-State Area :#VMExit时加载处理器信息,#VMentry保存虚拟机信息
- VM-Control Fields
- VM-Execution Control Fields:用于控制虚拟机行为,例如中断方式,是否启用EPT,启用I/O端口,MSR访问限制等等。
- VM-Exit Control Fields:#VMExit发生时需要做的事情
- VM-Entry Information Fields:控制从host进入guest时的行为
- VM-Exit Information Fields:只读区,#VMExit事件相关信息
EPT(Extended Page Table)机制
用于实现内存虚拟化,将guest的物理地址Guest Physical Address, GPA,转换成host的物理地址Host Physical Address, HPA
EPT采用了9-9-9-9-12分页,EPTP字段指向最初的页表基址物理内存
Guest将VA转换GPA时还是要借助CR3寄存器来查各个页表基址,这些基址都是GPA,所以每一次都需要通过EPT基址转换位HPA
参考
https://space.bilibili.com/37877654/channel/seriesdetail?sid=1467294