第四章 CPU虚拟化

4.1 CUP虚拟化介绍

x86CPU共有ring0~ring3四个运行等级,操作系统的代码运行在ring0,应用程序的代码运行在ring3.当应用程序需要执行一些敏感操作时,需要执行特殊的指令(系统调用)陷入(trap)到系统内核。
特权指令:只能在ring0执行的指令。
非特权指令:能在ring3执行的指令。
敏感指令:会影响整个系统的指令,如读写时钟,读写中断寄存器等。
非敏感指令:只影响自身所在进程的指令。

VMX架构简介

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的处理器行为

VMCS介绍

每个虚拟机的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位是shadow-VMCS indicator,VMM需要根据VMCS是一个普通的VMCS还是一个shadow VMCS来设置shadow-VMCS indicator。
VMCS的第二个4字节是VMX-abort indicator,当VM Exit发生错误时,会产生VMX-abort,导致处理器进入关闭状态,处理器写入一个非零值到VMX-abort indicator。
剩下的就是VMCS数据区了,它控制着VMX non-root和VMX root之间的转换。这个区域的格式是由实现决定的,VMM通过VMREAD和VMWRITE指令在这里读写。VMCS数据区总共有6个区域,下面对每个区域做简单介绍。
1)Guest-state区域。进行VM Entry时,虚拟机处理器的状态信息从这个区域加载,进行VM Exit时,虚拟机的当前状态信息写入到这个区域。在这个区域中,典型的有各个寄存器的状态以及一些处理器的状态。
在这里插入图片描述
2)Host-state区域。当发生VM Exit的时候,需要切换到VMM的上下文运行,此时处理器的状态信息从这个区域加载。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值