接前一篇文章:
本文内容参考:
《 QEMU /KVM》源码解析与应用 —— 李强,机械工业出版社
特此致谢!
一、CPU虚拟化介绍
3. VMCS介绍
上一回初步讲解了VMCS区域的内容,如下图所示:
上一回讲解了前8个字节(0~7),本回对于从第8个字节开始的VMCS数据区进行详细介绍。
VMCS数据区总共有6个区域,下面对每个区域分别做简要介绍。
(1)Guest-state区域
进行VM Entry时, 虚拟机 处理器的状态信息从这个区域加载;进行VM Exit时,虚拟机的当前状态信息写入到这个区域。在这个区域中,典型的有各个寄存器的状态以及一些处理器的状态。
完整的Guest-state区域如下表所示:
CR0 | CR3 | CR4 | ||
DR7 | ||||
RSP | RIP | RPLAGS | ||
CS | Selector | Base Address | Segment Limit | Access Right |
SS | Selector | Base Address | Segment Limit | Access Right |
DS | Selector | Base Address | Segment Limit | Access Right |
ES | Selector | Base Address | Segment Limit | Access Right |
FS | Selector | Base Address | Segment Limit | Access Right |
GS | Selector | Base Address | Segment Limit | Access Right |
LDTR | Selector | Base Address | Segment Limit | Access Right |
TR | Selector | Base Address | Segment Limit | Access Right |
GDTR | Base Address | Segment Limit | ||
IDTR | Base Address | Segment Limit | ||
IA32_DEBUGCTL | IA32_SYSENTER_CS | IA32_SYSENTER_ESP | IA32_SYSENTER_EIP | |
IA32_PERF_GLOBAL_CTRL | IA32_PAT | IA32_EFER | IA32_BNDCFGS | |
SMBASE | ||||
Activity state | Interruptibility | |||
Pending debug exceptions | ||||
VMCS link pointer | ||||
VMX-preemption timer value | ||||
Page-directory-pointer-table entries | PDTE0 | PDTE1 | PDTE2 | PDTE3 |
Guest interrupt status | ||||
PML index |
(2)Host-state区域
当发生VM Exit的时候,需要切换到VMM的上下文运行,此时处理器的状态信息从这个区域加载。
完整的Host-state区域如下表所示:
CR0 | CR3 | CR4 |
RSP | RIP | |
CS | Selector | |
SS | Selector | |
DS | Selector | |
ES | Selector | |
FS | Selector | Base Address |
GS | Selector | Base Address |
TR | Selector | Base Address |
GDTR | Base Address | |
IDTR | Base Address | |
IA32_SYSENTER_CS | IA32_SYSENTER_ESP | IA32_SYSENTER_EIP |
IA32_PERF_GLOBAL_CTRL | IA32_PAT | IA32_EFER |
(3)VM-execution控制区域
这个区域用来控制处理器在进入VM Entry之后的处理器行为。这个区域很庞大,包含了多种控制,如哪些事件会引起VM Exit,一个异常位图指示哪些异常会发生VM Exit,APIC的虚拟化控制等。
完整的VM-execution control区域如下图所示:
VMCS数据区余下区域的介绍请看下回。