虚拟化指令[OpenStack] 虚拟化原理

查了好多资料,发现还是不全,干脆自己整理吧,至少保证在我的做法正确的,以免误导读者,也是给自己做个记录吧!

    

1、虚拟化观点(Virtualization)

    

虚拟化是值计算机元件在虚拟的基础上运行,用逻辑表现资源,摆脱物理的限制。虚拟化在系统中参加一个虚拟化层,虚拟化层将下层资源封装,抽象为另一种形式的资源,提供给上层应用。虚拟化可以将一份资源抽象为多份,也可以将多份资源抽象成一份(平日为前者)。

    

在虚拟化的天下里,要分清Host和Guest,实在的操作系统称为Host,虚拟的操作系统称为Guest。

    


    

2、虚拟机(Virtual Machine)

    

虚拟机是由虚拟化层提供的高效、独立的计算机系统,具有自己的虚拟硬件(CPU,内存,网络设备,存储设备等),对于上层软件,虚拟机就是实在的计算机,虚拟机监控器(VMM Virtual Machine Monitor)担任Host和Guest之间的通信,其示意图如下:

    

虚拟化和指令

    


    

VM有如下特征:

    


    

  • 同质:量可以不同,但质与物理机实质相同,例如CPU的ISA(指令集架构,Instruction Set Architecture)必须相同;
  • 高效:性能与物理机接近,大多数指令应在硬件直接执行,只有少许由VMM模拟处理),因此wine这类模拟器不是VM
  • 资源可控,VMM对物理机,虚拟机的资源绝对可控;

    

3、完整虚拟化和半虚拟化(Full Virtualization & Paravirtualization)

    

  • 完整虚拟化是指所抽象的 VM 具有完整的物理机特性,OS 在其上运行不须要任何修改,非常便利,但它的缺陷是效率不高(特别是在Intel VT & AMD-V 硬件虚拟化支撑前)。典范的有 VMWare, Virtualbox, Virtual PC, KVM-x86等。
  • 半虚拟化需 OS 协助的 虚拟化,在其上运行OS 须要修改。起初采取主是为了处理 x86 体系结构上完整虚拟化的难题(没有 Intel VT & AMD-V 硬件虚拟化支撑前;且不屑于动态扫描指令修补之方法的性能),后来则重要是为了进步虚拟化效率。典范有 Xen, KVM-PowerPC 等。
之所有会有这两个流派,是因为处理器把指令分为特权态(supervisor mode)和用户态(user mode)(如下图所示),大部分的指令都可以运行在用户态上,但一些敏感指令,如可以读写系统关键资源(影响处理器和设备状态行为的寄存称关键资源或特权资源)的指令,必须运行在特权态上。如果执行特权指令时处理器的状态不在内核态,平日会引发一个异常而交由系统软件来处理这个“合法访问”(陷入)。
虚拟化和指令

    

引入了VMM之后,示意图如下:

    

虚拟化和指令

    从上图可以看出,Guest OS是运行在用户态上,当执行到特权指令时,会陷入到 VMM 模拟执行(陷入-模拟)。从这个角度上来说,完整虚拟化是指当Guest OS运行到特权指令时,VMM将特权指令”翻译“成陷入指令,这个”翻译“进程对系统性能有损耗。而半虚拟化是指事先修改 Guest OS 的代码,防止Guest OS执行特权执行的进程,因此它的性能接近于物理机。

    

    

4、重要虚拟化流派

    了解了完整虚拟化和半虚拟化的实质之后,上去再来看看重要的虚拟化流派。

    每日一道理
即使青春是一枝娇艳的花,但我明白,一枝独放永远不是春天,春天该是万紫千红的天下。 即使青春是一株大地伟岸的树,但我明白,一株独秀永远不是挺拔,成行成排的林木,才是遮风挡沙的绿色长城。即使青春是一叶大海孤高的帆,但我明白,一叶孤帆很难远航,千帆竞发才是大海的壮观。

    

  • 基于二进制翻译的全虚拟化:其重要思惟是在执行时将 VM 上执行的 Guest OS 之指令,翻译成 x86 ISA 的一个子集,其中的特权指令被替换成陷入指令;翻译进程与指令执行交叉进行,不含特权指令的用户态程序可以不经翻译直接执行,该技术为 VMWare Workstation,VMWare ESX Server 早期版本,Virtual PC 以及 QEMU 所采取。
  • 基于扫描和修补的全虚拟化:VMM 会在 VM 运行每块指令之前对其扫描,查找敏感指令;补丁指令块会在 VMM 中动态生成,平日每个须要修补的指令会对应一块补丁指令;特权指令被替换成一个外跳转,从 VM 跳转到 VMM,在 VMM 中执行动态生成的补丁指令块;当补丁指令块执行完后,执行流再跳转回 VM 的下一条指令处继承执行;Oracle 的 Virtualbox 即采取该技术。
  • OS协助的半虚拟化:通过修改 Guest OS 的代码,将含有敏感指令的操作,替换为对 VMM 的超调用 (Hypercall,类似 OS 的系统调用,可将控制权转移到 VMM);该技术的优势在于 VM 的性能能接近于物理机,缺陷在于须要修改 Guest OS;该技术因 Xen 项目而广为人知。
  • 硬件协助的虚拟化:引入新的处理器运行模式和新的指令,使得 VMM 和 Guest OS 运行于不同的模式下,Guest OS 运行于受控模式,本来的一些特权指令在受控模式下全部会陷入 VMM,这样就处理了部分非特权的敏感指令的陷入 — 模拟难题,而且模式切换时上下文的保存恢复由硬件来实现,这样就大大进步了陷入 — 模拟时上下文切换的效率。该技术的引入使 x86 可以很容易地实现完整虚拟化。故皆被几乎所有之前分歧流派各方所采取,如: KVM-x86,新版 VMWare ESX Server 3,Xen 3.0。

    

虚拟化和指令

    


    

5、VMM模型(Virtual Machine Monitor)

    

虚拟化和指令

    1)宿主模型(OS-hosted VMM)

    VMM 通过调用 Host OS 的服务来取得资源,实现 CPU,内存和 I/O 设备的虚拟化,VMM 创建出 VM 后,平日将 VM 作为 Host OS 的一个进程参与调度;VMM 模块担任 CPU 和内存虚拟化,由 ULM 请求 Host OS 设备驱动,实现 I/O 设备的虚拟化。
长处:可以充分利用现有 OS 的设备驱动,VMM 无需自己实现大量的设备驱动,省力实现 I/O 设备的虚拟化。
缺陷:资源受 Host OS 控制,VMM 需调用 Host OS 的服务来获取资源进行虚拟化,其效率和功能会受到一定影响。
采取该结构的 VMM 有:VMware Workstation, VMWare Server (GSX), Virtual PC,Virtual Server, KVM(早期)

    2)Hypervisor 模型 (Hypervisor VMM)

    该结构中,VMM 可以看作一个为虚拟化而生的完整 OS,掌控有所有资源(CPU,内存,I/O 设备),VMM 承当管理资源的重担,其还需向上提供 VM 用于运行 Guest OS,因此 VMM 还担任虚拟环境的创建和管理。

    长处:因 VMM 同时具有物理资源的管理功能和虚拟化功能,故虚拟化的效率会较高;安全性方面,VM 的安全只依赖于 VMM 的安全。

    缺陷:因 VMM 完整具有物理资源,因此,VMM 须要进行物理资源的管理,包括设备的驱动,而设备驱动的开辟工作量是很大的,这对 VMM 是个很大的挑战。

    采取该结构的 VMM 有:VMWare ESX Server, WindRiver Hypervisor, KVM(后期)

    3)混合模型((Hybrid VMM)

    该结构是上述两种模式的混合体,VMM 依然位于最底层,具有所有物理资源,但 VMM 会主动让出大部分 I/O 设备的控制权,将它们交由一个运行在特权 VM 上的特权 OS 来控制。VMM 只担任 CPU 和内存的虚拟化,I/O 设备的虚拟化由 VMM 和特权 OS 共同实现.

    长处:可利用现有 OS 的 I/O 设备驱动;VMM 直接控制 CPU 和内存等物理资源,虚拟化效率较高;若对特权 OS 的权限控制得当,虚拟机的安全性只依赖于 VMM。
缺陷:因特权 OS 运行于 VM 上,当须要特权 OS 提供服务时,VMM 须要切换到特权 OS,这里面就产生上下文切换的开销。
采取该结构的 VMM 有:Xen, SUN Logical Domain35

文章结束给大家分享下程序员的一些笑话语录: 真正的程序员喜欢兼卖爆米花,他们利用CPU散发出的热量做爆米花,可以根据米花爆裂的速度听出正在运行什么程序。

原文地址:https://www.cnblogs.com/jiangu66/p/3086064.html