Intel手册 Chapter23 VMX的简单介绍

Posted 极点寸芒

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Intel手册 Chapter23 VMX的简单介绍相关的知识,希望对你有一定的参考价值。

23.2  虚拟机架构

  1: VMX为处理器上的虚拟机定义了处理器级的支持。VMX主要支持两类,VMM和VM

  2:  VMM作为HOST可以完全控制处理器和其他平台硬件。 每个VM都支持一个栈,并且由OS和普通程序组成

 

23.3  VMX操作的介绍

  1: 处理器虚拟化是由VMX操作提供的,主要有两类VMX操作,VMX-ROOT操作和VMX-NON-ROOT操作,通常VMM运行在VMX-ROOT操作,VM运行在VMX-NON-ROOT操作

  2:  VMX-ROOT操作下与VMX操作外有很大不同,主要是在VMX-ROOT操作下,一组新的指令:VMX指令是有效的,并且可以加载进特定的控制器中

  3:  VMX-NON-ROOT模式下处理器行为受了限制,而且某些行为与原来的不同。因为特定的指令和事件会造成VM-EXIT,而且VM-EXIT替换了原来的行为

  4:  并没有软件标志位标识逻辑处理器是否运行在VMX-NON-ROOT模式下,因此这种情况下VMM可以不让客户机软件知道它运行在虚拟机中

  5:  因为VMM运行在R0上,客户机软件在原始特权级上运行,所以这有助于VMM的开发

 

23.4  VMM软件的生命周期

  1:  软件通过VMXON指令进入VMX操作

  2:  使用VMLAUNCH和VMRESUME指令,VMM可以进入到客户机 中,使用VM-EXIT恢复

  3:  VM-EXIT会转移到VMM指定的入口

  4:  VMM可以通过执行VMXOFF指令关闭它自己

 

23.5  虚拟机控制结构

  1:  VMX-NON-ROOT操作和VMX转移都由VMCS控制

  2:  处理器状态中的VMCS指针是用来控制对VMCS访问的,VMCS指针是个64位的地址,对VMCS指针的读写可以使用VMPTRST和VMPTRLD。 VMM通过VMREAD, VMWRITE和VMCLEAR来配置VMCS

  3:  一个VMM可以使用不同的VMCS针对每个虚拟机,对于有多个虚拟处理器的虚拟机,VMM可以使用不同的VMCS针对每个虚拟处理器

 

23.6  检查是否支持VMX

  1:  在进入VMX操作之前,必须检查处理器是否支持VMX,可以通过CPUID.1:ECX.VMX[BIT5] 来检测,如果为1,则代表支持

  2:  VMX结构设计为可扩展,以便于未来的处理器可以支持在第一代处理器架构中不存在的功能,软件可以使用VMX-MSR寄存器来得知扩展后VMX中新的功能  (see Appendix A, “VMX Capability Reporting Facility”)  
  

23.7  开启并且进入VMX操作

  1:  在软件进入VMX操作前,它开启VMX通过设置CR4.VMXE[bit13] = 1,然后通过VMXON指令进入

  2:  如果执行的时候,CR4.VMXE=0,则会发生UD异常(无效的操作码),一旦进入VMX操作中,就不能清除CR4.VMXE。只有执行VMXON指令离开VMX操作后,才能清除

  3:  VMXON指令也受IA32_FEATURE_CONTROL_MSR (3AH) 控制,虚拟处理器被重置的时候,这个MSR会被清零

  4:  Bit0是lock位,如果这个位为0,那么VMXON指令则会发生GP异常,如果这个位是1,对这个MSR进行WRMSR也会造成GP异常,这个MSR不会被修改,直到电源重启

  5:  系统Bios可以使用这个位禁止对VMX的支持,为了开启对VMX的支持,BIOS必须设置Bit1   Bit2,或者这两个都置一

  6:  Bit1代表在SMX操作下执行VMXON,Bit2代表在SMX操作外执行VMXON,如果这两位是0,那么执行VMXON则会造成都会造成GP异常,在为0的情况下,强制这两个位为1,也会造成GP异常

  7:  在执行VMXON之前,软件应该分配一个4KB大小的内存用来支持VMX操作,这个区域被叫做VMXON区域,这个区域的地址就是VMXON指令的操作数

 

23.8  VMX操作中的限制

  1:  在VMX操作下,处理器可以将 CR0 和 CR4 中的某些位固定到特定的值, 而不支持其他的值。如果这些位中包含了不受支持的值,则VMXON失败 (看Chapter 30)

  2:  在VMX操作下,任何设置这些位到不受支持的值,都会造成GP异常,比如CLTS, LMSW, MOV CR指令 

  3:  软件应该通过IA32_VMX_CR0_FIXED0和1    以及IA32_VMX_CR4_FIXD0和4来查询可以设置哪些只 (看附录A.7)

  4:  支持 VMX 操作的第一个处理器要求以下位在 VMX 操作中为 1: CR0.PE  CR0.NE  CR0.PG  CR4.VMXE

  5:  对CR0.PE和CR0.PG的限制,主要代表了VMX操作只能在分页保护模式下进行(保护IA3-2e),因此客户机不能允许在非分页保护模式或者实地址模式下

   6:  如果虚拟处理器在A20M模式下,VMXON也会失败。如果处理器在VMX操作下,A20中断将会被阻塞,因此,不可能既在A20M模式下,又在VMX模式下

   7:  无论什么时候,VMX-ROOT操作都会阻塞INIT信号,只有在VMX-NON-ROOT操作下才不会被阻塞,而且INIT还会造成VM-EXIT

 

 

总结:

  1: 本章所说的VMX操作模式是指VMX-ROOT和VMX-NON-ROOT模式下

  2:  Bios中的MSR.3A[Bit0]为0,CPUID.ECX:VMX[Bit5]为0, CR4.VMXE[Bit13]为0,都会造成VMXON失败,如果这三个条件都通过,VMXON仍然失败,此时就去Chapter30 查看VMXON指令的伪码

 

 

 

 

 

 

 

 

  

 

以上是关于Intel手册 Chapter23 VMX的简单介绍的主要内容,如果未能解决你的问题,请参考以下文章

Intel SDM Chapter 10: APIC

VMX,SVM编程指北——检查系统是否支持 VMX

处理器虚拟化——VMX

Intel开发者手册

Intel汇编指令在线手册

Intel开发手册下载地址