zoukankan      html  css  js  c++  java
  • 全虚拟化和半虚拟化(转)

    CPU通过Ring级别进行访问控制的。Ring0是最高级别,Ring1、Ring2、Ring依次降低。

    以Linux X86为例,操作系统(内核)的代码运行在Ring0上,可以使用特权指令,控制中断、修改页表、访问控制等。

    应用程序的代码运行在最低级别Ring3上,不能做受控操作。如果需要访问磁盘、写文件,需要通过执行系统调用(函数),执行系统调用时,CPU的运行级别从Ring3到Ring0依次切换,并跳转到系统调用对应的内核代码位置执行,由内核完成设备访问,之后再从Ring0返回Ring3,实现用户态和内核态的切换。

    基于二进制的全虚拟化:

    因为宿主操作系统工作在Ring0,客户操作系统不能运行在Ring0,当客户操作系统执行特权指令时,就会发生错误。

    虚拟机管理程序(VMM)就是负责客户操作系统和内核交互的驱动程序,运行在Ring0上,以驱动程序的形式体现(驱动程序工作在Ring0,否则不能驱动设备)。

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

    通过复杂的异常处理过程,性能损耗比较大。

    半虚拟化(准虚拟化):

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

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

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

    这也是XEN这种半虚拟化架构的优势,也是为什么XEN只支持Linux的虚拟化,不能虚拟化Windows的原因(微软不开源)。

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

    随着CPU厂商开始支持虚拟化,以X86 CPU为例,推出了支持Intel-VT的CPU,有VMX root operation和VMX non-root operation两种模式,两种模式都支持CPU运行的四个级别。

    这样,VMM可以运行在root operation模式下,客户操作系统运行在non-root operation模式下。

    通过硬件层做出区分,这样,在全虚拟化技术下,有些依靠“捕获异常-翻译-模拟”的实现就不需要了。

    而且CPU厂商支持虚拟化的力度在不断加大,靠硬件辅助的虚拟化技术性能逐渐逼近半虚拟化,再加上全虚拟化不需要修改客户操作系统的优势,全虚拟化技术应该是未来的发展趋势。

    全虚拟化技术:KVM、VMWare等。

    半虚拟化技术:XEN等。

    XEN是最典型的半虚拟化技术,不过随着全虚拟化的不断壮大,现在XEN也支持硬件辅助全虚拟化。

    From:http://www.cnblogs.com/xusongwei/archive/2012/07/30/2615592.html

    From:http://www.cnblogs.com/hsqdboke/p/4103415.html

  • 相关阅读:
    PAT Advanced 1067 Sort with Swap(0, i) (25分)
    PAT Advanced 1048 Find Coins (25分)
    PAT Advanced 1060 Are They Equal (25分)
    PAT Advanced 1088 Rational Arithmetic (20分)
    PAT Advanced 1032 Sharing (25分)
    Linux的at命令
    Sublime Text3使用指南
    IntelliJ IDEA创建第一个Groovy工程
    Sublime Text3 安装ftp插件
    Sublime Text3配置Groovy运行环境
  • 原文地址:https://www.cnblogs.com/xiaoerlang/p/7459504.html
Copyright © 2011-2022 走看看