云计算已经成为了服务器端的潮流,通过它,我们可以有效支持弹性计算、隔离兼容等一系列的需求,计算力可以像水电一样为人们所使用,而虚拟化技术正是云计算中最重要的技术。
虚拟化技术一般可以被分为两类,分别是虚拟机(VM,Virtual Machine)技术以及容器(Container)技术。
虚拟机
虚拟机是指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。
物理机与虚拟机之间通过虚拟机管理程序(VMM,Virtual Machine Monitor,又称Hypervisor)与虚拟机操作系统进行分割,虚拟机管理程序对底层硬件环境与指令提供了模拟或调度,使得虚拟机中的操作系统以为自身运行在物理机上,从而可以在一个物理机(宿主机)上安装多个虚拟机系统,而且每个虚拟机可以运行与原物理机完全不同的操作系统,进而提供了良好的安全隔离与异构支持。主流的虚拟化支撑软件包括Xen、Linux内核的KVM、微软的Hyper-V与私有的VMWare等。
虚拟机技术栈一般是这样的:
虚拟机技术一般可以分为全虚拟化(Full Virtualization)、半虚拟化(Para Virtualization)以及硬件辅助的虚拟机。我们知道,在Intel处理器中划分了四个特权级别ring 0 ~ ring 3,其中ring 0是最高级别,ring 3是最低级别,一般操作系统内核运行在ring 0上,这样就能运行处理器的所有指令,但是应用程序则运行在ring 3上,有部分指令(特权指令)是运行不了的。要解决虚拟机运行的问题,关键就是要让虚拟机操作系统以为自己仍然运行在物理机上,其内核仍然能运行在ring 0上。
全虚拟化
全虚拟化的典型代表是早期的VMWare,虚拟化管理程序在运行的时候对捕获虚拟机操作系统的特权指令,并进行二进制翻译,使得虚拟机操作系统以为自己运行在物理机上。这种方法的好处是不用修改虚拟机操作系统,但坏处就是性能比较差。
半虚拟化
半虚拟化的典型代表是早期的Xen,它在虚拟化管理程序中添加了一些接口函数,然后修改虚拟机操作系统,在特权指令等需要修改的地方修改虚拟机操作系统的代码(打补丁)以便支持虚拟化。这种方法的好处是性能明显更好,但是坏处就是需要给虚拟机操作系统打补丁。
硬件辅助的虚拟化
硬件辅助的虚拟化指的是在处理器中直接加入虚拟化指令支持(比如Intel的VT-x或者AMD的SVM),处理器引入了新的虚拟化模式,例如在Intel处理器上是VMX root模式与VMX non-root模式,两种模式都支持ring 0 ~ ring 3,虚拟机管理程序运行在VMX root模式下,而虚拟机操作系统则运行在VMX non-root模式下。
运行在VMX root模式下的虚拟机管理程序通过显式调用VMLAUNCH或VMRESUME指令切换到VMX non-root模式,硬件自动