文章目录


虚拟化技术的内涵远远不止于虚拟内存和虚拟服务器。

Linux 虚拟化知识点_虚拟化

以层的方式抽象资源的好处是每一层只需要考虑本层设计以及相邻层间的相互交互,从而大大降低了系统设计的复杂性,提高了软件的移植性。

  • 硬件抽象层:是计算机中软件所能控制的硬件的抽象接口,通常包括CPU的各种寄存器、内存管理模块、I/O端口和内存映射的I/O地址等。
  • API抽象层抽象的是一个进程所能控制的系统功能的集合,包括创建新进程、内存申请和归还、进程间同步与共享、文件系统和网络操作。

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

  1. 硬件抽象层上的虚拟化

比较知名的硬件抽象层上的虚拟化有 VMware的系列产品、Xen等。

通过虚拟化硬件抽象层,来实现虚拟机,为客户机操作系统呈现和物理硬件相同或相近的硬件抽象层。由于客户机操作系统所能看到的是硬件抽象层,因此,客户机操作系统的行为和在物理平台上没有什么区别。

通常来讲,宿主机和客户机的指令集架构是相同的(Windows上的VMware跑ARM?),客户机的大部分指令可以在宿主处理器上直接运行,只有需要虚拟化的指令才会由虚拟化软件进行处理。

  1. 操作系统层上的虚拟化

操作系统的内核可以提供多个相互隔离的用户态实例(容器),这些容器对于它的用户来说就像是一台真实的计算器,有自己独立的文件系统、网络、系统设置和库函数等。

  1. 库函数层上的虚拟化

操作系统通常会通过应用级的库函数提供给应用程序一组服务,例如文件操作服务、时间操作服务等,这些库函数可以隐藏操作系统内部的一些细节。

库函数层上的虚拟化就是通过虚拟化操作系统的应用级库函数的服务接口,使得应用程序不需要修改,就可以在不同的操作系统中无缝运行。

  1. 编程语言层的虚拟化

如JVM。

进程级的作业。

Linux 虚拟化知识点_linux_02
Linux 虚拟化知识点_linux_03
传统的虚拟化技术一般是通过陷入再模拟的方式实现的,而这种方式依赖于处理器的支持,也就是说,处理器本身是否是一个可虚拟化的体系结构。

不论采取何种虚拟化方式,VMM对物理资源的虚拟可以归结为三个主要任务:处理器虚拟化、内存虚拟化和I/O虚拟化。


虚拟机 虚拟机监控器 硬件

一般来说,虚拟环境由三个部分组成:硬件、VMM和虚拟机。

在没有虚拟化的情况下,操作系统直接运行在硬件上,管理着底层物理硬件,这就构成了一个完整的计算机系统,也就是所谓的物理机。

在虚拟环境里,虚拟机监控器VMM抢占了操作系统的位置,变成了真实物理硬件的管理者,同时向上层的软件呈现出虚拟的硬件平台,“欺骗着”上层的操作系统。

虚拟机可以看作是物理机的一种高效隔离的复制。

大多数的现代计算机体系结构都有两个或两个以上的特权级,用来分隔系统软件和应用软件。系统中有一些操作和管理关键系统资源的指令会被定为特权指令,这些指令只有在最高特权级上才能够正确执行。

在虚拟化世界里,还有另一类指令被称为敏感指令,简言之就是操作特权资源的指令,包括修改虚拟机的运行模式或者下面物理机的状态;读写敏感的寄存器或是内存;访问存储保护系统、内存系统或是地址重定位系统以及所有的I/O指令。

所有的特权指令都是敏感指令,然而并不是所有的敏感指令都是特权指令。

通过陷入再模拟敏感指令的执行来实现虚拟机的方法是有前提条件的:所有的敏感指令必须都是特权指令。

VMM 运行在最高特权级,可以控制物理处理器上的所有关键资源;而客户机操作系统运行在非最高特权级,所以其敏感指令都会陷入到VMM中通过软件的方式进行模拟。

1.1 引入虚拟化的必要性

Linux 虚拟化知识点_主机操作系统_04

  • apache 和 mysql 分别安装到两个主机。
  • 虚拟化层将硬件和软件隔离,驱动程序可以很方便的安装。
  • 10 块钱能够发挥出 9.8 的效果。
  • 云技术底层技术就是虚拟化。

虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机,在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可以运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,提高计算机的工作效率。

1.2 虚拟化的分类(技术/架构)

Linux 虚拟化知识点_虚拟化_05

1.2.1 全虚拟化

  • 软件辅助的完全虚拟化;
  • 硬件辅助完全虚拟化;

在客户机操作系统来看,完全虚拟化的虚拟平台和现实平台是一样的,客户机操作系统无须做任何修改就可以运行。客户机操作系统就会像操作正常的处理器、内存、I/O设备一样来操作虚拟处理器、虚拟内存和虚拟I/O设备。

从实现的角度来看,VMM需要能够并且正确处理客户机所有可能的行为,客户机的行为是通过指令反映出来的,因此VMM需要能够正确处理所有可能的指令。

Linux 虚拟化知识点_主机操作系统_06

1.2.2 半虚拟化

Guest OS 可将客户端发出的指令进行优化(API),再传递给 VMM,提高效率。

Linux 虚拟化知识点_主机操作系统_07

1.2.3 寄居架构

在操作系统之上安装和运行虚拟化程序,依赖于主机操作系统对设备的支持和物理资源的管理。
Linux 虚拟化知识点_主机操作系统_08

1.2.4 裸金属架构

直接在硬件上面安装虚拟化软件,再在其上安装操作系统和应用,依赖虚拟层内核和服务器控制台进行管理。

Linux 虚拟化知识点_主机操作系统_09

1.3 按VMM实现结构分类

1.3.1 Hypervisor模型

VMM首先可以被看作是一个完备的操作系统,和传统操作系统不同的是,VMM是为虚拟化而设计的,因此还具备虚拟化功能。

从架构上来看,所有的物理资源如处理器、内存和I/O设备等都归于VMM所有,因此,VMM承担着管理物理资源的责任;其次,VMM需要向上提供虚拟机用于运行客户机操作系统,VMM还负责虚拟环境的创建和管理。

VMM:设备模型(负责I/O设备的虚拟化)+设备驱动+处理器管理代码+内存管理代码

由于 VMM 同时具备物理资源的管理功能和虚拟化功能,因此,物理资源虚拟化的效率高一点,在安全方面,只依赖于VMM的安全。

由于 VMM 完全拥有物理资源,因此,VMM 需要进行物理资源的管理,为VMM的开发带来了极大的工作量,在该模型中,很多功能必须在VMM中重新实现。

1.3.2 宿主模型

在该模型中,物理资源由宿主机操作系统管理。宿主机操作系统是传统操作系统,如Windows,Linux等,这些传统操作系统并不是为虚拟化而设计的,因此本身并不具备虚拟化功能,实际的虚拟化功能由 VMM 来提供。VMM 通常是宿主机操作系统独立的内核模块。VMM 通过调用宿主机操作系统的服务来获得资源,实现处理器、内存和 I/O 设备的虚拟化。VMM 创建出虚拟机后,通常将虚拟机作为宿主机操作系统的一个进程参与调度。

宿主模型最大的优点就是可以充分利用现有操作系统的设备驱动程序,VMM无须为各类I/O设备重新实现驱动程序,可以专注于物理资源的虚拟化。由于物理资源由宿主机操作系统控制,VMM需要调用宿主机操作系统的服务来获取资源进行虚拟化,效率和功能可能会受到影响。在安全方面,由于VMM是宿主机操作系统内核的一部分,因此,如果宿主机操作系统内核是不安全的,那么,VMM也是不安全的。

Linux 虚拟化知识点_linux_10

1.3.3 混合模型

VMM 依然位于最底层,拥有所有的物理资源,与 hypervisor模式不同的是,VMM会主动让出大部分I/O设备的控制权,将它们交由一个运行在特权虚拟机中的特权操作系统来控制。VMM 虚拟化的职责也被分担处理器和内存的虚拟化依然由VMM来完成,而I/O的虚拟化则由VMM和特权操作系统共同合作完成。


VMware

产品:VMware ESX Server(Hypervisor模型)、VMware Server(面向服务器端,宿主模型)、VMware Workstation(面向桌面,宿主模型,支持完全虚拟化)、VMware Fusion(基于Intel Mac硬件平台的 Mac OS X)

是 x86 虚拟化软件的主流厂商之一。基于 Hypervisor 架构的 VMware ESX Server 可以直接运行在物理硬件之上,无须操作系统。

VMware ESX Server 支持完全虚拟化,可以运行 Windows、Linux、Solari、Novell Netware 等客户机操作系统。在新版本 ESX Server3中,已经开始采用硬件虚拟化的技术,支持 Intel VT 技术和 AMD-V 技术。

Microsoft

  • 服务器虚拟化:virtual server,windows server 2008
  • 桌面虚拟化:virtual PC
  • 应用虚拟化:SoftGrid
  • 表现虚拟化:Terminal server
  • 存储虚拟化:Windows storage server

操作系统虚拟化产品:virtual PC、virtual server、windows server 2008。

Xen

属于混合模型。

Linux 虚拟化知识点_linux_11

KVM

于 2007 年 2 月被集成到了 Linux 2.6.20 内核中,成为内核的一部分。

KVM 采用的是基于 Intel VT 技术的硬件虚拟化方法,结合 Qemu 来提供设备虚拟化。Linux 虚拟化知识点_虚拟化_12

从架构上来看,有人认为 KVM 是宿主模型,因为 Linux 设计之初并没有针对虚拟化的支持,KVM 是以内核模块的形式存在的,但是,随着越来越多的虚拟化功能被加入了 Linux 内核当中,也有说法认为 Linux 已经是一个 Hypervisor,因此 KVM 是 Hypervisor 模型。

qemubochs 类似,是一个操作系统模拟器。

容器技术

在实际的生产开发环境里,我们更关注部署业务应用而非完整的操作系统。

Linux 容器(LXC,Linux Container)技术,是一种轻量级的虚拟化技术,主要通过 CGroup 和 命名空间机制来实现资源隔离。

  • CGroups 机制是 Linux 内核提供的基于进程组的资源管理框架,可以为特定的进程组限定可使用的资源。
  • 命名空间:Linux 内核用来隔离内核资源的方式。通过命名空间可以让一些进程只能看到与自己相关的一部分资源,而另外一些进程也只能看到与它们相关的资源,这两组进程感觉不到对方的存在。

Linux 虚拟化知识点_主机操作系统_13
Linux 容器技术相比传统的虚拟化技术有如下优势:

  • 与宿主机使用同一个内核,性能损耗小。
  • 不需要指令级别模拟。
  • 可避免进入和退出 VM 时产生的消耗。
  • 和宿主机共享资源。