以Intel CPU為例開啟VMX的步驟如下:
(1)使用CPUID檢測CPU是否支持VMX,如CPUID.1:ECX.VMX[bit 5]=1,表示CPU支持VMX 。
(2)檢測CPU支持的VMX的能力 , 通過讀取與VMX相關的MSR寄存器完成 。寄存器值包括:表示基本VMX能力的IA32_VMX_BASIC,表示VMCS區域中VM-execution相關區域能夠設置值得IA32_VMX_PINBASED_CTLS和IA32_VMX_PROCBASED_CTLS 。
(3)分配一段4KB對齊的內存作為VMXON區域 , 通過讀取IA32_VMX_BASICMSR寄存器的值獲取該區域大小 。
(4)初始化VMXON區域的版本標識 , 這個標識也是通過MSR寄存器報告的 。
(5)確保當前CPU運行模式的CR0寄存器符合進入VMX的條件,如CR0.PE=1,CR0.PG=1,其他需要滿足的設置通過IA32_VMX_CR0_FIXED0和IA32_VMX_CR0_FIXED1寄存器報告 。
(6)通過設置CR4.VMXE為1來開啟VMX模式 , 其他CR4需要滿足的設置通過IA32_VMX_CR4_FIXED0和IA32_VMX_CR4_FIXED1報告 。
(7)確保IA32_FEATURE_CONTROL寄存器被正確設置,其鎖定位(0位)為1,這個MSR寄存器通常由BIOS編程 。
(8)使用VMXON區域的物理地址作為操作數調用VMXON指令,執行完成后 , 如果RFLAGS.CF=0表示VMXON指令執行成功 。
進入VMX模式后,在VMX root的CPL=0時,執行VMXOFF指令,RFLAGS.CF和RFLAGS.ZF均為0則表示CPU關閉了VMX模式 。

【虛擬化之路-CPU虛擬化(VMX開啟 cpu虛擬化怎么開啟教程)】
