diff --git a/02_基础操作/虚拟机/01_虚拟化技术简介.md b/02_基础操作/虚拟机/01_虚拟化技术简介.md new file mode 100644 index 00000000..cd30d22c --- /dev/null +++ b/02_基础操作/虚拟机/01_虚拟化技术简介.md @@ -0,0 +1,141 @@ +--- +title: 虚拟化技术简介 +description: 对虚拟化技术进行了简要介绍 +published: true +date: 2024-10-14T08:22:46.338Z +tags: +editor: markdown +dateCreated: 2024-10-14T06:04:02.696Z +--- + +# 什么是虚拟化? + +在《系统虚拟化——原理与实现》一书中,对虚拟化有如下阐释: + +> 抽象来说,虚拟化是资源的逻辑表示,它不受物理限制的约束。具体来说,虚拟化技术 +> 的实现形式是在系统中加入一个虚拟化层,虚拟化层将下层的资源抽象成另一形式的资 +> 源,提供给上层使用。通过空间上的分割、时间上的分时以及模拟,虚拟化可以将一份 +> 资源抽象成多份。反过来,虚拟化也可以将多份资源抽象成一份。 + +从上可知,虚拟化是资源的逻辑表示。这里的资源,既可以是磁盘、网络、文件系统等系 +统组件,也可以是完整的计算机系统。对于后者,我们常常称之为系统虚拟化,也是最常 +见的一种虚拟化形式。 + +# 系统虚拟化 + +系统虚拟化是指将一台物理计算机系统虚拟化为一台或多台虚拟计算机系统。系统虚拟化 +是虚拟化技术中的一种,其抽象的粒度是整个计算机。 + +位于物理计算机与虚拟计算机之间的虚拟化层,可称之为虚拟机监控器,英文为Virtual +Machine Monitor(VMM)或Hypervisor。 + +由于虚拟计算机寄生于物理计算机上,通常又将虚拟计算机称为客户机,将物理计算机称 +为宿主机。 + +## 系统虚拟化的优势 + +- **封装性**:以虚拟机为粒度进行封装,可方便的实现虚拟机的快照、克隆、挂起、恢 + 复等功能。 +- **多实例**:在一个计算机上运行多个虚拟机,资源调度更优化,利用更充分。 +- **隔离性**:虚拟机独立运行,互不影响。 +- **硬件无关性**:与物理硬件解耦,方便迁移。 +- **特权功能**:VMM具有比虚拟机更高的特权,可监控虚拟机动态,实现事件记录和回 + 放、入侵检测、病毒检测等。 + + +## 系统虚拟化与容器的区别 + +容器也属于广义上的操作系统层的虚拟化,但与系统虚拟化隔离的组件不一样(内核、设 +备)。 + +![系统虚拟化与容器虚拟化](assets/container-vs-virtualization.png) + +## Type1与Type2虚拟化 + +Type 1和Type 2管理程序之间的主要区别是:Type 1在裸机上运行,而Type 2在操作系统 +上运行。 + +![Type1与Type2虚拟化](assets/type1-vs-type2.png) + +## 全虚拟化与半虚拟化 + +这里的“全”和“半”是指是否完全模拟了硬件环境。 + +对于全虚拟化,其完全模拟了整个硬件环境,虚拟机操作系统感知不到其位于虚拟环境 +中,因而具有兼容性好,移植性强等特点。 + +对于半虚拟化,其某些虚拟设备并不是安全按着对应的物理设备进行模拟的,因而需要 +修改操作系统内的设备驱动,才能正确识别或访问设备。半虚拟化由于不用死板的模拟 +物理硬件的行为(比如寄存器访问、硬件交互协议等),因而在实现逻辑上便存在很大 +的优化空间,所以一般性能较好。 + +## 纯软件虚拟化与硬件辅助虚拟化 + +纯软件虚拟化, 顾名思义, 就是用纯软件的方法在现有的物理平台上(往往并不支持 +硬件虚拟化) 实现对物理平台访问的截获和模拟。常见的软件虚拟机例如QEMU,它是 +通过纯软件来仿真X86平台处理器的取指、解码和执行,客户机的指令并不在物理平台 +上直接执行。由于所有的指令都是软件模拟的,因此性能往往比较差,但是可以在同一 +平台上模拟不同架构平台的虚拟机。 + +硬件辅助虚拟化,简而言之,就是物理平台本身提供了对特殊指令的截获和重定向的硬 +件支持,甚至,新的硬件会提供额外的资源来帮助软件实现对关键硬件资源的虚拟化, +从而提升性能。 + +综合来说,硬件辅助虚拟化的性能大大优于纯软件虚拟化,是未来虚拟化的主要方向。 + +# 虚拟化的实现 + +## KVM简介 + +基于内核的虚拟机(KVM)是一种内建于Linux的开源虚拟化技术。具体而言,KVM +可将Linux转变为虚拟机监控程序,使主机计算机能够运行多个隔离的虚拟环境,即 +虚拟客户机或虚拟机(VM)。 + +KVM是Linux的一部分。Linux 2.6.20或更新版本包括KVM。KVM于2006年首次公 +布,并在一年后合并到主流Linux内核版本中。由于KVM属于现有的Linux代码,因 +此它能立即享受每一项新的Linux功能、修复和发展,无需进行额外工程。 + +KVM将Linux转变为1类(裸机)虚拟机监控程序。所有虚拟机监控程序都需要一些 +操作系统层面的组件才能运行虚拟机,如内存管理器、进程调度程序、输入/输出(I/O) +堆栈、设备驱动程序、安全管理器以及网络堆栈等。由于KVM是Linux内核的一部分, +因此它包含了所有这些组件。每个虚拟机都像常规Linux进程一样实施,由标准的Linux +调度程序进行调度,并且使用专门的虚拟硬件,如网卡、图形适配器、CPU、内存和磁 +盘等。 + +## QEMU简介 + +> QEMU is a generic and open source machine emulator and virtualizer. +> —— https://www.qemu.org/ + +QEMU是一款开源的虚拟机软件,它可以模拟多种不同的硬件平台,包括x86、ARM、MIPS、 +SPARC等,支持多种操作系统的运行,如Linux、Windows、Mac OS X、FreeBSD等。QEMU +可用于虚拟化、仿真、调试和测试等多种应用场景。QEMU能够将一台物理主机模拟成多 +台虚拟机,为用户提供了一个隔离的环境来运行不同的应用程序和操作系统。QEMU是一 +个轻量级的虚拟机软件,易于安装和配置,并且具有良好的可移植性和跨平台性。 + +QEMU有多种使用方式: + +- 系统模拟(System Emulation) + 提供完整的、模拟的计算机系统来运行客户机OS。CPU可以是纯模拟的,也可以直接使用 + 宿主机CPU,可搭配KVM、Xen等使用。 +- 用户模式模拟(User Mode Emulation) + 可直接在系统中运行另一架构的二进制程序,这种模式下CPU是纯模拟的。 + +## KVM/QEMU虚拟化方案 + +KVM/QEMU虚拟化方案很好的结合了KVM和QEMU各自的优点,在该方案中: + +- KVM主要负责CPU、内存的虚拟化 +- QEMU主要负责设备的虚拟化 + +它们的组合,很好的解决了之前存在的一些问题,比如: + +- KVM只提供了虚拟机管理接口,需要用户空间程序的配合才能完成虚拟机的管理,无法 + 独立使用 +- KVM不能模拟外设,但QEMU已支持了大量的外设 +- QEMU的模拟CPU模式效率低下 + +# 参考资料 + +- https://www.redhat.com/zh/topics/virtualization/ +- https://tecadmin.net/type-1-vs-type-2-virtualization/ diff --git a/02_基础操作/虚拟机/assets/container-vs-virtualization.png b/02_基础操作/虚拟机/assets/container-vs-virtualization.png new file mode 100644 index 00000000..b9d418ad Binary files /dev/null and b/02_基础操作/虚拟机/assets/container-vs-virtualization.png differ diff --git a/02_基础操作/虚拟机/assets/type1-vs-type2.png b/02_基础操作/虚拟机/assets/type1-vs-type2.png new file mode 100644 index 00000000..4422053b Binary files /dev/null and b/02_基础操作/虚拟机/assets/type1-vs-type2.png differ