欢迎光临
我们一直在努力

cpu虚拟化是干嘛的,CPU虚拟化的实现原理

计算机的三大分类

大型机 大型主机,使用专用的处理器指令集、操作系统和应用软件通常体积都是很大,处理能力也很大 小型机 采用精简指令集处理器,性能和价格介于PC服务器和大型主机之间的一种高性能 64 位计算机 x86服务器 我们目前使用的笔记本、服务器都是x86服务器采用CISC架构处理器,复杂指令集

特权指令和非特权指令

指令:计算机CPU能理解并执行指令之中相应的操作

在计算机之中,有的指令是”人畜无害”的,比如加法指令
但是有的指令却十分危险,比如内存清零指令,所以就针对指令做了权限分类

特权指令:由操作系统使用的指令非特权指令:由用户程序使用的指令

CPU的内核态和用户态

CPU怎么判断当前程序是否执行特权还是非特权呢,就引入了cpu的2种状态

内核态:当应用程序需要执行自己无法完全的权限时,由系统帮助切换到内核态用户态:大部分应用运行在用户态层

谈的更多的虚拟化都是针对x86服务器来说的,那么传统的针对服务器是怎么实现虚拟化的呢

VMM:也叫虚拟化监视器,由VMM中间件来管理系统和硬件资源

在OS中加入一个虚拟化层(VMM),虚拟化层可以对下层(HostOS)硬件资源(物理CPU、内存、磁盘、网卡、显卡等)进行封装、隔离,抽象为另一种形式的逻辑资源,再提供给上层(GuestOS)使用

特权解除和陷入模拟

虚拟化场景下,要求将GuestOS内核的特权解除,从原来的0降低到1或者3。这部分特权指令在Guest OS中发生的时候,就会产生Trap,被VMM捕获,从而由VMM完成。

敏感指令

敏感指令是指操作特权资源的指令。包括修改虚拟机的运行模式或者下面物理机的状态。
根据Popek和勤恳的龙猫的定义,指令集支持虚拟化的前提是:所有敏感指令都是特权指令。很可惜x86指令集不能满足这个要求

x86架构非特权指令里就包含19条敏感指令,那么现虚拟的架构就存在了一个问题,怎么把非特权的敏感指令交由VMM管理

解决方案:

全虚拟化:特权和非特权指令全部交由VMM

全虚拟化的VMM会将一个OS所能够操作的CPU、内存、外设等物理设备逻辑抽象成为虚拟CPU、虚拟内存、虚拟外设等虚拟设备后,再交由GuestOS来操作使用。这样的GuestOS会将底层硬件平台视为自己所有的,但是实际上,这些都是VMM为GuestOS制造了这种假象

当客户操作系统执行特权指令时,会触发异常(CPU机制,没权限的指令,触发异常),VMM捕获这个异常,在异常处做翻译、模拟,返回处理结构到客户操作系统内。客户操作系统认为自己的特权指令工作正常,继续运行。

缺点:性能损耗比较大

半虚拟化:修改操作系统针对敏感指令

通过修改客户操作系统代码(内核),将原来在物理机上执行的一些敏感指令,修改成可以和VMM直接交互的方式,实现操作系统的定制化。

半虚拟化技术XEN,就是通过为客户操作系统定制一个专门的内核版本,和X86、MIPS、ARM这些内核版本等价。

这样,就不会有捕获异常、翻译和模拟的过程,性能损耗比较少。

缺点:

只能针对开源的系统源代码进行修改,windows系统就不行了各厂商兼容性不好,很难大规模使用

基于硬件辅助的全虚拟化:

Guest OS的敏感指令可以直接下达到计算机系统硬件执行,而不需要经过VMM。当Guest OS执行到敏感指令的时候,系统会切换到VMM,让VMM来处理特殊指令
目前主流趋势都是基于硬件虚拟化技术

硬件虚拟化技术
Intel公司:Intel VT
AMD公司:AMD-V
安装虚拟软件的时候,记得开启硬件虚拟化
参考:Intel VT 和AMD-V

22052117

赞(0)
【声明】:本博客不参与任何交易,也非中介,仅记录个人感兴趣的主机测评结果和优惠活动,内容均不作直接、间接、法定、约定的保证。访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。