赞
踩
x86CPU共有ring0~ring3四个运行等级,操作系统的代码运行在ring0,应用程序的代码运行在ring3.当应用程序需要执行一些敏感操作时,需要执行特殊的指令(系统调用)陷入(trap)到系统内核。
特权指令:只能在ring0执行的指令。
非特权指令:能在ring3执行的指令。
敏感指令:会影响整个系统的指令,如读写时钟,读写中断寄存器等。
非敏感指令:只影响自身所在进程的指令。
Intel通过在原来x86 CPU的基础上增加VMX架构来实现CPU的硬件虚拟化。VMX架构下定义了两类软件的角色,即虚拟机监控器(VMM)以及虚拟机(VM)。
VMM将实际CPU(pCPU)抽象为虚拟CPU(vCPU)给VM使用。
为了让CPU支持VMM和VM两种软件,Intel为CPU引入了一种新的模式,叫作VMX operation。VMM执行的模式叫作VMX root operation模式,VM执行的模式叫作VMX non-root operation模式。从VMX root转换到VMX non-root叫作VM Entry,而从VMX non-root转换到VMX root则叫作VM Exit。
在VMX non-root模式中,各种指令是严格受到限制的,执行一些特殊的指令(如之前所说的影响系统全局的指令)或者发生一些特殊的事件都会导致VM Exit,使VM退出到VMM。这样,VMM就有机会控制所有VM的处理器行为
每个虚拟机的VCPU都有一个对应的VMCS区域。VMCS用来管理VMX non-root Operation的转换以及控制VCPU的行为。VMCS区域的大小为4KB,VMCS之于VCPU的作用类似于进程描述符之于进程的作用。VCPU之间会共享物理CPU,VMM负责在多个VCPU之间分配物理CPU,每个VCPU都有自己的描述符,当VMM在切换VCPU运行时需要保存此刻的VCPU状态,从而在下次的VCPU调度中使得VCPU能够从被中断的那个点开始正常运行。(VMCS就是切换CPU时VCPU的上下文)。
在VMCS的格式中,前8个字节是固定的。
第一个4字节的第0位到第30位表示修正标识符,用来标识不同的VMCS版本,VMM必须初始化这个值,第一个4字节的第31
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。