虚拟机的特征

本文是《系统虚拟化:原理与实现》第一章的学习笔记。

虚拟化的定义

抽象来说,虚拟化是资源的逻辑表示,它不受物理限制的约束。具体来说,虚拟化技术的实现形式是在系统中加入一个虚拟化层,虚拟化层将下层的资源抽象成另一形式的资源,提供给上层使用。通过空间上的分割、时间上的分时以及模拟,虚拟化可以将一份资源抽象成多份。反过来,虚拟化也可以将多份资源抽象成一份。

系统虚拟化是指将一台物理计算机系统虚拟化为一台或多台虚拟计算机系统。每个虚拟计算机系统(简称虚拟机)都拥有自己的虚拟硬件(如CPU、内存和设备等),来提供一个独立的虚拟机执行环境。通过虚拟化层的模拟,虚拟机中的操作系统认为自己仍然是独占一个系统在运行。这个虚拟化层被称为虚拟机监控器(Virtual Machine Monitor, VMM)。

image-20231223165253504

系统虚拟化分类

  • 完全虚拟化(Full Virtualization):抽象的虚拟计算机具有完全的物理计算机特性
  • 半虚拟化(Partial-Virtualization):提供了对底层硬件的部分模拟,以满足某些专门的软件的执行环境,但是并不能运行所有可能运行在物理机上的软件
  • 类虚拟化(Para-Virtualization):通过客户机操作系统与虚拟化管理层的协同设计,由虚拟化管理层软件提供一个近似于原物理系统,但又不完全相同(与原系统)的虚拟平台,以避免虚拟化漏洞和实现更高的虚拟化效率。在部分国内书籍和文章上,类虚拟化也被翻译成半虚拟化或部分虚拟化,但这是不确切的翻译,会与前面真正的半虚拟化混淆。

系统虚拟化的好处

image-20231223165452897

  • 封装性:以虚拟机为粒度的封装使得虚拟机运行环境的保存非常便捷。虚拟机的优秀封装性使得以下应用模式可以很方便地实现:

    • 虚拟机快照(Snapshot):将运行中的一个虚拟机的某个时间点的状态抓取下来,就像抓拍一张照片一样。
    • 虚拟机克隆(Clone):从一个虚拟机的执行环境复制出一个或多个相同的虚拟机。
    • 虚拟机挂起(Suspend):暂停一个运行中的虚拟机,将其运行环境保存在磁盘上。
    • 虚拟机恢复(Resume):将保存在磁盘上的虚拟机运行环境恢复到内存中以继续运行。
  • 多实例:在一个计算机上运行多个虚拟机使得资源的调度更为优化。

  • 隔离:使用虚拟机,每个应用程序可以在自己的操作系统环境中独立地运行,而不会影响到其他的工作负载。例如,如果一个虚拟机的操作系统由于故障或受到恶意破坏崩溃了,其他虚拟机中的应用程序仍然可以继续正常运行。故障或破坏被天然地封闭在一个虚拟机中。

  • 硬件无关性:虚拟化是资源的逻辑表示,它不受物理限制的约束。由于虚拟化层的抽象,虚拟机与底层的硬件没有直接的绑定关系。因此,尽管目前计算机体系结构呈现出很大的异构性,但只要另一台计算机提供相同的虚拟硬件抽象层,一个虚拟机就能够无缝地迁移过去。

  • 特权功能:由于虚拟化层处于客户机及客户机操作系统的下面,其具有更高的特权级。在这个层中添加新的功能有如下两个优势:

    • 新的功能有高特权级。不能被客户机操作系统绕过。
    • 新的功能不需要了解客户机内部的语义,使其实现上更容易。

    应用如事件记录与回放、入侵检测。

虚拟机的特征

  • 同质:虚拟机的运行环境和物理机的环境本质上需要是相同的,但是在表现上能够有一些差异。例如,虚拟机所看到的处理器个数可以和物理机上实际的处理器个数不同,处理器主频也可以与物理机的不同,但是物理机上和虚拟机中看到的处理器必须是同一基本类型的。在另一篇博客上看到解释是:一个运行于 VMM 下的程序,其行为应与直接运行于等价物理机上的同程序的行为完全一致。个人觉得后者的解释更为合理。
  • 高效:虚拟机中运行的软件需要有接近在物理机上直接运行的性能。为了做到这一点,软件在虚拟机中运行时,大多数的指令需要直接在硬件上执行,只有少数指令需要经过 VMM 处理或模拟。
  • 资源受控:VMM 需要对系统资源有完全控制能力和管理权限,包括资源的分配、监控和回收。