看操作系统虚拟化原理总结篇——硬件虚拟化中的CPU虚拟化

1,回顾

首先回顾下没有Intel -VT的支持的时候如何用软件虚拟化CPU. 之前有三种方法支持CPU的模拟的,解释执行,扫描修补,二进制翻译。具体内容可以参考之前的文章。

其实,软件模拟的时候,最重要的就是对敏感指令的模拟,要使敏感指令能陷入进去,就必须要能把所有的敏感指令都能陷入。而在某些架构中呢,有的指令是不能被陷入的,所以硬件虚拟化出现了,我可以理解这是社会需求么,想起一句话,社会的需要比十所大学产生的生产力更加的巨大。


2,硬件虚拟化中的CPU

先说CPU虚拟化的流程:

1,首先明确每个客户机中的CPU是以VCPU的形式存在的,所以客户机CPU的创建就是创建一个VCPU的一个结构体,同时并分配内存。

2,然后再进一步的将VCPU进行初始化,通常包括如下内容:分配CPU标识符,初始化寄存器组,初始化VCPU的状态信息。

3,现在VCPU已经被创建好了,然后我们该设置每个CPU的相应的控制域了。包括之前提到的客户机状态域,宿主机状态域等等,其实也就是给VMCS填充数据。

4,创建好了,然后就可以运行了。这里,运行的时候主要关注的就是上下文切换了。

这里就是主要的难点,其实也就是硬件虚拟化的精髓。

上下文切换:

先说从VMM切换到客户机吧,首先VMM保存自己的上下文,这里主要保存的是VMCS不保存的寄存器信息,然后将保存在VCPU中的数据加载到物理的CPU上,然后VMM执行VMRESUME/VMLAUNCH等指令触发VMEntry,此时CPU自动将VCPU上下文中的VMCS加载到物理CPU,切换到非根模式。这里切换成功。


然后我们再来说如何切换回来吧,那么我们什么时候需要切换回来呢? 我的印象中只有敏感指令和对IO进行操作,其实还有发生物理中断等等。

这里将陷入的指令做个小结:访问特权资源,对CR MSR寄存器的访问属于这类;客户机执行指令引发异常,如缺页中断;物理中断或者客户机的虚拟设备发生中断。

继续切换,这里发生VMExit后,CPU自动切换一部分上下文,然后在根模式下执行VM_Exit的原因,并分发到对应的物理模块。


3,硬件虚拟化的优势

可能你这里会有疑问,这和软件虚拟化的意思完全一样呀,不急,下面介绍硬件虚拟化特有的优化:

主要有两种:无条件优化:对以往软件在虚拟化下必须陷入到VMM中的敏感指令,可以通过VT技术在客户机中直接运行。

      然后VMM还可以通过修改VMCS中的VM_Execution控制域,可以配置某些敏感指令是否发生VM_Exit而陷入到VMM中,相当于人工干预一样。


具体我们举例来说明:

好吧,不举例了。其实最常用的一点就是通过修改VMCS中的控制域来人工干预。这个挺好。




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值