6、虚拟化分类
(1)完全虚拟化
直接将Hypervisor跑在0环内核态,客户机os跑在1环,一旦触发敏感指令,由0环的VMM进行捕获翻译,从而模
拟这些指令。而运行在1环的GuestOS永远都不知道自己是个虚拟机。是完全通过软件来实现的二进制翻译BT(Binary Translation)。也可以说叫基于软件的完全虚拟化。
1)CPU的权限级别分为0、1、2、3,级别依次降低,
2)其中0环跑的是OS,权限最高,可以执行特权指令。1环和2环跑的是驱动程序。3环跑的是应用软件,权限最低。
3)0环主要是内核态,3环是用户态
虚拟化的引入,就发生了变化
特点:虚拟机不知道自己是个虚拟机,所有的敏感指令店铺需要借助VMare(VMM)进行翻译,翻译成宿主机OS能够捕捉到的指令,反应速度很慢。所谓的虚拟机里面的操作,必须跟物理机完全一致就是,虚拟机例如创建文件等操作,需要经过VMM,向宿主机申请磁盘空间。
特权指令:对于一些敏感的管理和读写指令被定位为特权指令,只有处于Ring0才能执行。否则会丢异常
敏感指令:由于虚拟化的引入,由于OS现在处于Ring1所以不能执行特权指令,所以就由Ring0的VMM来执行,
注意:以上的这种叫做VMware BT(Binary Translation:二进制翻译技术),就是所谓的完全虚拟化/基于软件的完全虚拟化
(2)XEN虚拟化(半虚拟化)
虚拟化层位于硬件和0环之间,让guestOS直接跑在0环,并且对guestos操作系统进行修改,以便可以对虚拟化层进行超级调用。虚拟化层可以理解为domain0特权虚拟机,客户机直接跑在了0环,因此,速度要比基于软件的完全虚拟化要快。但是需要修改客户机操作系统,因此不支持windows。
1)需要修改客户机(修改虚拟机操作系统内核),修改的目的是为了提升虚拟机的性能
2)例如el5.1,el5.1xen,domain0是直接运行在操作系统的内核上,所以是本身的OS的一部分,其中特权虚拟机是管理基于XEN的虚拟机
3)ParaVirtualization:半虚拟化 / 类虚拟化
4)XEN不支持Windows,因为Windows是闭源的
5)特点:效率快,是相对于VMware,虚拟机有自知之明,知道自己是个虚拟机,特权指令敏感指令要经过domain0这个特权虚拟机来执行,必须升级内核才能使用。维护庞大的内核,所有内核模块,驱动程序都需要重新编译,重新安装,工作量及其大。一旦升级内核,和内核相关的所有的内核模块,驱动都需要重新编译。意味着要经常维护一套庞大的内核,这就是XEN问题所在。
(3)硬件辅助虚拟化
引入了root级别和非root级别。简单来说,硬件和vmm(hypervisor)都运行在root级别,通过cpu硬件直接捕获敏感指令集,完成虚拟化。包括英特尔虚拟化技术(VT-x)和AMD的AMD-V,它们允许 VMM在环0以下以新的根模式运行。特权和敏感的调用被设置为自动捕获到管理程序,从而消除了二进制转换和 paravirtualization半虚拟化。
总结:
(1)KVM是属于完全虚拟化的范畴
(2)完全虚拟化:基于软件的完全虚拟化方案是VMware,基于硬件的完全虚拟化方案是CPU硬件辅助虚拟化
(3)半虚拟化:XEN
注意:XEN是虚拟化的一种,而不是半虚拟化就是XEN。半虚拟化是为了解决早期的X86架构问题而提出的(因为早期的X86架构限制了CPU的性能),刚好XEN采用的就是。现在的XEN在有CPU硬件辅助的支持下,也支硬件辅助的完全虚拟化