VT-x有个概念是VCPU,VCPU其实是一个保存在内存中的结构体,包含标识、虚拟寄存器、状态等信息。在创建虚拟CPU的的时候会先创建并初始化对应的VCPU。VCPU的执行依据一定的调度算法。VT-x尽量减少上下文切换(例如浮点寄存器),并做了指令优化(例如避免陷入)
VCPU可以分为两部分:
1)VMCS,由硬件使用和更新,主要是虚拟寄存器;
2)VMCS以外的部分,由VMM使用和更新。
虚拟寄存器:保存在内存中,当Guest OS访问一些关键资源时会陷入到VMM进行指令模拟。
上下文:引入VMM后,GuestOS没有管理物理处理器的权利,GuestOS需要负责虚拟处理器上下文切换;虚拟处理器上下文比物理处理器上下文切换包含更多的寄存器(敏感指令访问的一些资源)
虚拟处理器:从VMM的角度来说,虚拟处理器可以由物理处理器和VMM共同完成,对于非敏感指令,物理处理器直接解码处理其请求,并将相关的效果直接反应到物理寄存器上:而对于敏感指令,VMM负责陷入再模拟,从程序的角度也就是一组数据结构与相关代码的集合。数据结构用于存储虚拟寄存器的内容,而相关的代码负责按照物理处理器的行为将效果反映到虚拟寄存器上。