全虚拟化和半虚拟化的区别

原创 2018年04月17日 17:09:50
cpu运行级别:
ring0是指CPU的最高运行级别,ring1次之,ring2其次…… 拿Linux+x86来说, 操作系统(内核)的代码运行在最高运行级别ring0上,可以使用特权指令,控制中断、修改页表、访问设备等等。应用程序的代码运行在最低运行级别上ring3上,不能做受控操作。如果要做,比如要访问磁盘,写文件,那就要通过执行系统调用(函数),执行系统调用的时候,CPU的运行级别会发生从ring3到ring0的切换,并跳转到系统调用对应的内核代码位置执行,这样内核就为你完成了设备访问,完成之后再从 ring0返回ring3。这个过程也称作用户态和内核态的切换。
那么,虚拟化在这里就遇到了一个难题,因为宿主操作系统是工作在ring0的,客户操作系统就不能也在ring0了,但是它不知道这一点,以前执行什么指令,现在还是执行什么指令,那肯定不行啊,没权限啊。所以这时候虚拟机管理程序(VMM)就要避免这件事情发生。 (VMM在ring0上,一般以驱动程序的形式体现,驱动程序都是工作在ring0上,否则驱动不了设备) 一般是这样做,客户操作系统执行特权指令时,会触发异常(CPU机制,没权限的指令,触发异常),然后VMM捕获这个异常,在异常里面做翻译,模拟,最后返 回到客户操作系统内,客户操作系统认为自己的特权指令工作正常,继续运行。但是这个性能损耗,就非常的大,你想想原来,简单的一条指令,执行完即可,现在却要通过复杂的异常处理过程。
这时候半虚拟化就来了,半虚拟化的思想就是,让客户操作系统知道自己是在虚拟机上跑的,工作在非ring0状态,那么它原先在物理机上执行的一些特权指令,就会修改成其他方式,这种方式是可以和VMM约定好的,这就相当于,我通过修改代码把操作系统移植到一种新的架构上来,就是定制化。所以像XEN 这种半虚拟化技术,客户机操作系统都是有一个专门的定制内核版本,和x86、mips、arm这些内核版本等价。这样以来,就不会有捕获异常、翻译、模拟 的过程了,性能损耗非常低。这就是XEN这种半虚拟化架构的优势。这也是为什么XEN只支持虚拟化Linux,无法虚拟化windows原因,微软是闭源的,不可以代码。
后来,CPU厂商,开始支持虚拟化了,情况又发生变化,拿X86 CPU来说,引入了Intel-VT 技术,支持Intel-VT的CPU,有VMX root operation 和 VMX non-root operation两种模式,两种模式都支持Ring0~Ring3 这4个运行级别。这下好了,VMM可以运行在VMX root operation模式下,客户OS运行在VMX non-root operation模式下。也就说,硬件这层做了些区分,这样全虚拟化下,有些靠“捕获异常-翻译-模拟”的实现就不需要了。而且CPU厂商,支持虚拟化 的力度越来越大,靠硬件辅助的全虚拟化技术的性能逐渐逼近半虚拟化,再加上全虚拟化不需要修改客户操作系统这一优势,全虚拟化技术应该是未来的发展趋势。
XEN是最典型的半虚拟化,不过现在XEN也支持硬件辅助的全虚拟化,毕竟全虚拟化是大趋势。 KVM、VMware一直都是全虚拟化。

Hyper-V 2012 R2虚拟化实战

本课程理论与实战相结合,深入浅出地介绍了Hyper-v 2012 R2的方方面面。
  • 2016年05月17日 02:27

半虚拟化和全虚拟化的区别

全虚拟化(Full virtualization), 也称为原始虚拟化技术, 是另一种虚拟化方法. 该模型使用虚拟机协调客户操作系统和原始硬件(见图2). 这里"协调"是一个关键词, 因为VMM在...
  • qiqijianglu
  • qiqijianglu
  • 2013-11-07 15:07:59
  • 20640

全虚拟化与半虚拟化的区别(xen)

ring0是指CPU的运行级别,ring0是最高级别,ring1次之,ring2更次之……  拿Linux+x86来说,  操作系统(内核)的代码运行在最高运行级别ring0上,可以使用特权指令,...
  • beep_
  • beep_
  • 2016-06-02 16:28:58
  • 2290

全虚拟化与半虚拟化的实现方式

目录目录 全虚拟化 软件辅助的全虚拟化 硬件辅助的全虚拟化 KVM虚拟机 半虚拟化全虚拟化不需要对GuestOS操作系统软件的源代码做任何的修改,就可以运行在这样的VMM中在全虚拟化的虚拟平台中,Gu...
  • Jmilk
  • Jmilk
  • 2016-07-05 01:47:02
  • 8178

虚拟化、(完)全虚拟化、半虚拟化和准虚拟化技术个人总结

虚拟化技术:百度百科中的定义是这样的:虚拟化是一个广义的术语,在计算机方面通常是指计算元件在虚拟的基础上而不是真实的基础上运行。虚拟化技术可以扩大硬件的容量,简化软件的重新配置过程。CPU的虚拟化技术...
  • mayanyun2013
  • mayanyun2013
  • 2016-07-21 14:44:48
  • 367

理解全虚拟化,半虚拟化和硬件辅助

  • 2010年05月05日 10:00
  • 1.4MB
  • 下载

理解全虚拟、半虚拟以及硬件辅助的虚拟化

接触过的一些搞了几年云计算的童鞋,也没明白常见的几种虚拟机技术方案的异同,比如只是记住了半虚拟要在虚拟机装驱动而全虚拟不需要,也不知道有时候为什么需要打开BIOS里的VT项。本人呢,在看了各种讲解虚拟...
  • flyforfreedom2008
  • flyforfreedom2008
  • 2015-04-18 15:23:50
  • 10114

Docker容器 vs 全虚拟化

希云为大家详细介绍Docker容器和全虚拟化之间的区别!
  • sisiy2015
  • sisiy2015
  • 2015-11-27 09:49:08
  • 1363

虚拟化技术比较 PV HVM

很多人看到同样配置的VPS价格相差很大,甚是不理解,其实VPS使用的虚拟技术种类有很多,如OpenVZ、Xen、KVM、Xen和HVM与PV。在XEN中pv是半虚拟化,hvm是全虚拟化,pv只能用于l...
  • blade2001
  • blade2001
  • 2013-11-21 17:51:37
  • 18640

网络I/O虚拟化

为了提升网络I/O性能,虚拟化的网络I/O模型也在不断的演化: 1,全虚拟化网卡(emulation),如VMware中的E1000用来仿真intel 82545千兆网卡,它的功能更完备,如相比...
  • speakingcamp
  • speakingcamp
  • 2014-07-13 15:32:16
  • 579
收藏助手
不良信息举报
您举报文章:全虚拟化和半虚拟化的区别
举报原因:
原因补充:

(最多只允许输入30个字)