虚拟机。
Overview
Virtual Machine (VM) is an abstraction of a physical machine that allows multiple operating systems to run concurrently on a single hardware platform. VMs provide isolation, resource management, and flexibility in deploying applications.
Components
- Host: 底层硬件系统
- VMM(Virtual Machine Manager): 模拟硬件环境,提供与主机相同接口以运行虚拟机
- Guest:获得主机虚拟副本的进程,一般是一个操作系统
System Model
VM Benefits and Features
优势与特点 | 描述 | 应用场景示例 |
---|---|---|
安全隔离 | 保护主机系统免受虚拟机影响,同时防止虚拟机之间相互干扰,降低病毒传播风险 | 企业多用户服务器环境中,一个虚拟机感染病毒,不会轻易扩散到其他虚拟机和主机 |
资源共享 | 通过共享文件系统和网络通信实现资源共享,提高资源利用率 | 云计算数据中心,众多用户的虚拟机共享服务器的计算、存储等资源 |
灵活操作 | 支持冻结(暂停)、迁移、克隆和快照恢复等功能 | 软件开发和测试场景中,开发人员克隆包含开发环境的虚拟机,快速搭建多个相同测试环境;测试人员利用快照恢复虚拟机状态,避免重复测试 |
多系统支持 | 允许在一台物理机上运行多个不同类型的操作系统 | 计算机技术爱好者和专业人员在同一台计算机上创建Windows、Linux等不同操作系统的虚拟机,方便进行开发、测试和学习 |
助力系统开发 | 方便操作系统研究,降低研究成本和风险,提高系统开发的安全性和效率 | 操作系统研究人员在虚拟机上试验新功能,出现问题不会损坏物理机 |
模板化 | 创建包含操作系统和应用程序的虚拟机模板,并快速生成多个相同配置的虚拟机实例 | 软件供应商将软件预安装在虚拟机模板中,交付给客户后,客户可快速部署使用 |
实时迁移 | 运行中的虚拟机可在主机间迁移,且不中断用户访问 | 数据中心进行硬件维护或升级时,将虚拟机迁移到其他主机,确保业务系统持续稳定运行 |
VM Building Blocks
VCPU
VMM 提供给 Guest 的 CPU 资源,通常是物理 CPU 的虚拟化。
VCPU通过在物理CPU上分时共享是实现。
非特权指令直接执行,特权指令通过VMM进行 Trap and Emulate。
Trap and Emulate
VM 的 kernel mode 和 user mode 实际上都运行在 user mode 下。
执行特权指令时,CPU 产生 Trap,VMM 捕获 Trap,执行相应的处理,之后将控制权交还给 VM。
Binary Translation
Some CPUs don’t have clean separation between privileged and nonprivileged instructions.
VMM 提前检查特权指令,翻译为等效的非特权指令。
Nested Page Tables
嵌套页表(Nested Page Tables)使客户机和 VMM 分别管理页表,同时硬件辅助(如 Intel VT-x 和 AMD-V 指令)提升虚拟化性能。
VM Types and Implementations
虚拟机类型 | 定义 | 特点 | 典型代表 | 应用场景 |
---|---|---|---|---|
Type 0 Hypervisor | 通过固件实现的硬件特性,为虚拟机创建和管理提供支持 | - 操作系统无需特殊设置,VMM集成在固件中 - 功能集相对较小,每个客户机有专用硬件 - I/O管理困难,有时通过控制分区实现共享I/O - 支持嵌套虚拟化 | IBM LPARs、Oracle LDOMs | 适用于对安全性、隔离性要求极高,且对硬件资源调配有特殊需求的场景,如大型企业核心业务系统 |
Type 1 Hypervisor | 类似操作系统的软件,具备虚拟化功能以及通用操作系统的标准功能 | - 常用于公司数据中心,成为“数据中心操作系统” - 以特殊目的运行在内核模式,直接创建、运行和管理客户机操作系统 - 能提供传统操作系统服务,如CPU调度和内存管理 - 可运行在Type 0 Hypervisor上 | VMware ESX、Joyent SmartOS、Citrix XenServer、Microsoft Windows Server with HyperV、RedHat Linux with KVM | 数据中心整合多个操作系统和应用,提高硬件利用率;根据业务负载灵活迁移客户机以平衡性能 |
Type 2 Hypervisor | 运行在标准操作系统上的应用程序,为客户机操作系统提供VMM特性 | - 对宿主操作系统依赖度高,虚拟化过程中操作系统参与度低 - VMM作为宿主操作系统的一个普通进程运行和管理 - 使用方便,无需修改宿主操作系统,但整体性能相对较差 | VMware Workstation、VMware Fusion、Parallels Desktop、Oracle VirtualBox | 适合个人开发者、测试人员在日常使用的操作系统上快速搭建多个不同的虚拟环境,进行开发、测试和学习 |
Paravirtualization(半虚拟化) | 客户机操作系统需修改以配合VMM工作,VMM不提供与底层硬件完全相同的环境 | - 性能有所提升,尤其在I/O操作上表现出色 - 早期用于在不支持二进制翻译的老款x86 CPU上实现虚拟化 - 现代CPU下,部分场景可不修改客户机操作系统 | Xen | 适用于对性能要求较高,且愿意对客户机操作系统进行一定修改以优化虚拟化性能的场景 |
Programming Environment Virtualization(编程环境虚拟化) | 并非真正意义上的硬件虚拟化,通过提供特定编程环境的API来优化程序执行 | - 编程语言在虚拟化环境中运行,如Java依赖Java虚拟机(JVM) - 实现“一次编写,到处运行”,提高程序跨平台性 - 具有垃圾回收、即时编译等优化机制 | Java Virtual Machine(JVM) | 适用于开发和运行跨平台的编程语言应用,如Java、Python等相关应用开发和部署 |
Emulation(仿真) | 允许在不同CPU架构的主机上运行针对其他架构编译的操作系统或应用程序 | - 通过翻译客户机指令实现不同架构间的运行支持 - 性能损耗大,比原生代码慢很多 - 常用于游戏领域模拟老款游戏机 | 运行老款游戏、在新服务器上运行针对旧CPU架构编译的遗留应用程序 | |
Application Containment(容器) | 在操作系统和应用程序之间创建虚拟层,实现应用程序的隔离、性能和资源管理 | - 基于宿主操作系统内核,容器内应用程序运行如独立进程 - 轻量级、可移植,资源开销小 - 每个容器有独立的应用、网络配置和用户账户等 | Oracle Solaris Zones、BSD Jails、IBM AIX WPARs、Docker | 适用于微服务架构、快速部署和弹性扩展的应用场景,提高应用的安全性和可管理性 |