虚拟化初始了解

一:虚拟化技术的本质

虚拟化 就是由位于下层的软件模块,通过向上一层软件模块提供一个与它原先所期待的运行环境完全一致的接口的方法,抽象出一个虚拟的软件或硬件接口,使得上层软件可以直接运行在虚拟的环境上

二:虚拟化的技术分类

术语:在虚拟化中,物理资源通常有一个定语称为宿主(Host),而虚拟出来的资源通常有一个定语称为客户(Guest)
2.1 按不同的抽象层次划分
硬件抽象层上的虚拟化
操作系统层上的虚拟化
库函数层上的虚拟化
编程语言层上的虚拟化
2.2 按应用领域划分
服务器虚拟化(计算虚拟化)
网络虚拟化
存储虚拟化
应用程序虚拟化
平台虚拟化
桌面虚拟化
2.3 按虚拟化程度划分
全虚拟化
半虚拟化
硬件辅助虚拟化

三:系统级虚拟化(硬件抽象层)

理解概念:运行于物理服务器中的虚拟机都有属于它的虚拟硬件,通过虚拟化层的模拟,虚拟机中的操作系统会以为自己是独占一个系统在运行(事实上只是宿主机上的一个进程,宿主机上运行了多虚拟机)。这个虚拟化层称为虚拟机监视器(Virtual Machine Monitor ,VMM)
VMM对于物理资源的虚拟主要是三个层面:处理器虚拟化、内存虚拟化、I/O虚拟化。其中处理器虚拟化是VMM的核心。
3.1 系统级虚拟化按实现方法划分
完全虚拟化(Full Virtualization)
半虚拟化(Para-Virtualization)

3.2按实现结构划分
hypervisor模型
宿主模型

四:完全虚拟化

概念:
完全虚拟化的虚拟平台和现实平台是一样的,客户机操作系统察觉不到是运行在一个虚拟平台上,这样的虚拟平台可以运行现有的操作系统,无须对操作系统内核进行任何修改,因此这种方式被称为完全虚拟化。
在完全虚拟化中,通过模拟特权指令来克服由Guest OS运行在ring1和VMM运行在ring 0中所产生的限制。全虚拟化在第一代x86 VMM中广泛采用。它依靠例如二进制转译(binary translation)来捕获和虚拟化某些敏感和无法虚拟化的指令。也就是说,在二进制转换中,一些系统调用被解释执行和动态重写。下图描述了“Guest OS如何在ring 1下访问主机硬件,执行特权指令”以及“非特权指令是如何在无ring 1参与的情况下获得执行”。

虚拟化初始了解
ring 0是最高特权等级,它直接与物理硬件交互,例如CPU和内存等。诸如内存,IO端口和CPU指令的资源通过特权ring受到保护。ring 1和ring 2通常不被使用。大多数通用操作系统只使用两个ring,即使它们运行的硬件提供了更多的CPU模式。这两个主要的CPU模式被称为内核模式(kernel mode)和用户模式(user mode)

五:半虚拟化

概念:
半虚拟化也称为类虚拟化。在半虚拟化中,需要对所运行的客户机操作系统进行或多或少的修改使之适应虚拟环境,因此guest操作系统知道其运行在虚拟平台上,并且会去主动适应。一个VMM可以既提供完全虚拟化的虚拟平台,又提供半虚拟化的虚拟平台。在此情况下,guest os 经过修改可以允许特权指令访问ring0 ,以“hypercalls”的方式实现VMM/hypervisor和Guest OS的通信,即不需要VMM/ Hypervisor耗费一定的资源进行翻译操作,因此Hypervisor的工作负担变得非常的小。
虚拟化初始了解
虚拟化初始了解

六:硬件辅助虚拟化

概念:
在硬件中加入虚拟化功能,用于截获操作系统对于敏感指令的执行或者对于敏感资源的访问,通过异常的方式报告给VMM,从而解决虚拟化的问题。硬件辅助虚拟化是一种完备的虚拟化方法,内存和外设的访问本身也是通过指令来完成的,所以处理器指令级别的截获就意味着VMM可以模拟一个与真实主机完全相同的环境。
Intel和AMD各自独立地创建了新的x86架构的处理器扩展,分别称为Intel VT-x和AMD-v。
以VT-x为例,其在处理器上引入了一个新的执行模式用于运行虚拟机,当虚拟机执行在这个特殊模式中时,它仍然面对的是一套完整的处理器寄存器集合和执行环境,只是任何敏感操作都会被处理器截获并报告给VMM。当前的系统级虚拟化解决方案中,全虚拟化应用得非常普遍,典型的有知名的产品有VirtualBox、KVM、VMware Workstation
虚拟化初始了解

七:两大实现结构模型

7.1 hypervisor模型

在Hypervisor模型中,VMM首先可以被看做是一个完备的操作系统,不过和传统操作系统不同的是,VMM是为虚拟化而设计的,因此还具备虚拟化功能。从架构上来看,首先,所有的物理资源如处理器、内存和I/O设备等都归VMM所有,因此,VMM承担着管理物理资源的责任;其次,VMM需要向上提供虚拟机用于运行客户机操作系统,因此,VMM还负责虚拟环境的创建和管理。
由于VMM同时具备物理资源的管理功能和虚拟化功能,因此,物理资源虚拟化的效率会更高一些。在安全方面,虚拟机的安全只依赖于VMM的安全。Hypervisor模型在拥有虚拟化高效率的同时也有其缺点。由于VMM完全拥有物理资源,因此,VMM需要进行物理资源的管理,包括设备的驱动。我们知道,设备驱动开发的工作量是很大的。因此,对于Hypervisor模型来说这是个很大的挑战。事实上,在实际的产品中,基于Hypervisor模型的VMM通常会根据产品定位,有选择地挑选一些I/O设备来支持,而不是支持所有的I/O设备。

7.2 宿主模型

在宿主模型中,物理资源由宿主机操作系统管理。宿主机操作系统是传统操作系统,如Windows 、Linux等,这些传统操作系统并不是为虚拟化而设计的,因此本身并不具备虚拟化功能,实际的虚拟化功能由VMM来提供。VMM通常是宿主机操作系统独立的内核模块,有些实现中还包括用户态进程,如负责I/O虚拟化的用户态设备模型。 VMM通过调用宿主机操作系统的服务来获得资源, 实现处理器、内存和I/O设备的虚拟化。VMM创建出虚拟机之后,通常将虚拟机作为宿主机操作系统的一个进程参与调度。宿主模型最大的优点是可以充分利用现有操作系统的设备驱动程序,VMM无须为各类I/O设备重新实现驱动程序,可以专注于物理资源的虚拟化。考虑到I/O设备种类繁多,千变万化, 设备驱动程序开发的工作量非常大,因此,这个优点意义重大。此外,宿主模型也可以利用宿主机操作系统的其他功能,例如调度和电源管理等,这些都不需要VMM重新实现就可以直接使用。
采用这种模型的典型是KVM、VirtualBox和VMware Workstation。

以上所讨论的都是基于系统级层面的虚拟化

八:操作系统级虚拟化

概念:
在操作系统虚拟化技术中,每个节点上只有唯一的系统内核,不虚拟任何硬件设备。通过使用操作系统提供的功能,多个虚拟环境之间可以相互隔离。通常所说的容器(Container)技术,如目前为止最流行的容器系统Docker,即属于操作系统级虚拟化。
8.1 操作系统级虚拟化技术实现
主流技术:Docker