1、VMCS的大小为4KB(4096字节),前8个字节是固定的。第一个4字节的0~30位作为修正标识符,用于标识不同的VMCS版本,VMM必须初始化这个值。第一个4字节的31位是shadow-VMCS indicator,VMM需要根据VMCS是一个普通的VMCS,还是一个shadow VMCS来设置shadow-VMCS indicator。VMCS的第二个4字节是VMX-abort indicator,当VM Exit发生错误时,会导致VMX-abort,导致处理器进入关闭状态,处理器写入一个非零值到VMX-abort indicator。
2、VMCS的后4088字节是VMCS的数据区域,它控制着VMX non-root和VMX root之间的转换。VMCS数据区域是有具体实现决定的,VMM通过VMREAD和VMWRITE指令对该区域进行读写。
3、VMCS数据区域包括6区域:Guest-state区域、Host-state区域、VM-execution控制区域、VM-Exit控制区域、VM-Entry控制区域、VM-Exit信息区域。
4、Guest-state区域,VM-Entry时,虚拟机的信息状态从该区域加载。VM-Exit时,虚拟机的状态信息保存到这个区域。
5、Host-state区域,VM-Exit时,需要退出到VMM的上下文运行,从此处加载Host处理器的信息。VM-Entry时,需要进入到VM运行,将Host处理器信息保存到此处。
6、VM-execution控制区域,该区域用来控制处理器在执行VM-Entry后的处理器行为,该区域比较大,包含多种控制行为,如哪些事件会导致VM-Exit,标识哪些异常会导致VM-Exit、APIC的虚拟化控制等。
7、VM-Exit控制区域,该区域用来记录VM-Exit时虚拟机的行为。
8、VM-Entry控制区域,该区域用来记录VM-Entry时虚拟机的行为。
9、VM-Exit信息区域,该区域包含最新产生的VM-Exit信息,典型的信息包括退出的原因及相应的数据,如指令执行的退出等。
此处仅对VMCS进行简单介绍,后续会展开分析。

如若转载,请注明出处:https://www.dasum.com/179530.html