Article
操作系统-CH1.5-虚拟机
操作系统-CH1.5-虚拟机,待补充摘要。

1-5 虚拟机与虚拟机管理程序 (VMM)
在学习了操作系统的基本功能和结构后,我们通常默认“一个物理硬件之上直接运行一个操作系统”。然而,随着计算需求的演进,如何在一套物理硬件上运行多个相互隔离的操作系统?这就引入了本节的核心内容——虚拟机技术。
一、 虚拟机的基本概念
1. 什么是虚拟机?
虚拟机 (Virtual Machine, VM) 是利用虚拟化技术,将一台物理机器虚拟成多台逻辑上的虚拟机器。
- 技术本质:通过隐藏特定计算平台的物理特性,为用户提供抽象、统一且模拟的计算环境。
- 物理与逻辑的转换:将一个物理上存在的实体(物理硬件),通过软件手段虚拟出若干个逻辑上的独立系统。
2. 虚拟机系统的核心成员
在虚拟化环境中,角色被分为了两类:
- 主机 (Host):实际存在的、仅有一台的物理机。它提供真实的物理硬件资源(如物理 CPU、物理内存、外设)。
- 客户机 (Guest):被虚拟化层模拟出来的若干台虚拟机。
- 独立性:每个客户机都拥有自己虚拟的硬件(虚拟 CPU、虚拟内存等)和独立的运行环境。
- 互不知情:各客户机之间相互隔离,不知道彼此的存在。它们都“幻觉”自己正独占整台物理机器。
二、 虚拟机管理程序 (VMM) 的两类架构
实现上述“一变多”的核心技术,是引入一个软件实现层——虚拟机管理程序 (Virtual Machine Monitor, VMM / Hypervisor)。根据 VMM 在系统中所处的层级位置,虚拟化技术主要分为两类:一型 (Type 1) 和 二型 (Type 2)。
【 两种 VMM 架构对比示意图 】
一型虚拟机 (裸金属架构) 二型虚拟机 (寄居架构)
+-------------------------------+ +-------------------------------+
| App 1 | App 2 | App 3 | | App 1 | App 2 | App 3 |
+---------+---------+-----------+ +---------+---------+-----------+
| Guest OS 1 | Guest OS 2 | | Guest OS 1 | Guest OS 2 |
+--------------+----------------+ +--------------+----------------+
| 虚拟机管理程序 VMM (OS) | | 虚拟机管理程序 VMM (进程) |
+-------------------------------+ +-------------------------------+
| 物理硬件 (Bare-Metal) | | 宿主机 OS (Host OS) |
+-------------------------------+ +-------------------------------+
| 物理硬件 |
+-------------------------------+
1. 一型虚拟机管理程序(裸金属架构 / Bare-Metal)
① 架构特征
一型 直接运行在裸机(Bare-Metal)之上。此时的 本身就是一个特制的、功能精简的操作系统。
② 运行状态与控制逻辑
- VMM 的状态:作为底层直接控制硬件的软件,它是唯一运行在真实 内核态 (Kernel Mode) 的程序。
- 客户机 OS (Guest OS) 的状态:运行在介于真正的内核态与用户态之间的一种虚拟内核态。
- 运行幻觉 (Illusion):
- 客户机 OS 的视角:它自以为运行在真硬件之上、拥有内核态特权,能直接将内核代码调入主存。
- 物理实际:它无法直接与最底层的物理硬件交互。它的所有“特权操作”(如修改页表、控制中断)均被中间的 拦截并中介控制。
- 用户应用程序:客户机上的应用程序仍正常运行在 用户态 (User Mode),其内存分配在物理主机的用户空间内。
③ 典型代表
- VMware ESXi、Citrix XenServer、KVM (基于内核的虚拟机)。
2. 二型虚拟机管理程序(寄居架构 / Hosted)
① 架构特征
二型 寄居在已有的宿主机操作系统 (Host OS) 之上。对宿主机而言, 只是一个普通的进程,其资源的分配和调度完全依赖于宿主机 。
② 运行状态与控制逻辑
- VMM 的状态:对物理主机而言,它运行在宿主机的 用户态 (User Mode)。
- 客户机 OS (Guest OS) 的状态:由于其载体 运行在用户态,客户机 的所有操作在物理 CPU 看来也全都是 用户态 的。
- 资源获取方式:
- 当客户机 想要访问硬件资源时,它将请求发给 。
- 无法直接操作硬件,只能通过调用宿主机 提供的系统调用接口(API),间接请求物理硬件资源。
③ 典型代表(个人电脑上最常用)
- VMware Workstation、Parallels Desktop、VirtualBox。
三、 深度剖析:如何理解“程序运行在 XX 态”?
💡 考研与期末必考重难点: 很多同学在初学时,容易将“用户态/内核态”误解为“程序在内存中的物理位置”。这是严重的认知偏差!“用户态”与“内核态”本质上描述的是 CPU 的指令执行状态,而非内存空间。
为了彻底扫清障碍,我们将“程序运行在某种状态”的学术含义总结如下:
1. 运行在用户态 (User Mode)
- 本质含义:该程序作为一个普通应用程序执行。
- 行为限制:CPU 处于低特权级。程序不能执行任何特权指令,无法直接访问底层的物理硬件(CPU、内存、外设)。一切涉及硬件的操作必须通过向操作系统发起系统调用(System Call)来完成。
2. 运行在内核态 (Kernel Mode)
- 本质含义:程序(如一型的 或常规的操作系统的内核)拥有最高特权。
- 行为权限:CPU 允许执行包括特权指令在内的所有指令。程序可以直接读写任何物理寄存器、直接控制硬件资源并执行低级别的系统管理任务。
3. 运行在内核态和用户态之间(特指一型虚拟机中的 Guest OS)
- 逻辑视角:由于客户机 的职责是管理虚拟机的资源,它必须能够执行“逻辑上”的特权操作。
- 物理视角:它不能直接控制真实的物理硬件,其发出的特权请求都必须被高级控制层()拦截、审查和处理。
- 总结:它既不是纯粹的用户态(因为它逻辑上能管理虚拟硬件,可以发起特权请求),也不是纯粹的内核态(因为没有直接控制物理硬件的最高权限)。这种特殊的运行机制确保了虚拟机之间的完全隔离。
四、 1型与2型虚拟机多维对比总结
| 对比维度 | 一型虚拟机管理程序 (Type 1) | 二型虚拟机管理程序 (Type 2) |
|---|---|---|
| 底层支撑 | 直接运行在物理裸硬件上 | 运行在已有的宿主机操作系统上 |
| VMM 自身身份 | 本身就是操作系统 | 宿主机操作系统中的一个普通进程 |
| Guest OS 运行态 | 运行在虚拟内核态(介于真内核态与用户态之间) | 物理 CPU 视角下,完全运行在用户态 |
| 资源控制与调用 | 直接分配和管理物理硬件 | 必须通过宿主机 系统调用间接获取资源 |
| 执行效率/性能 | 极高。接近物理机性能 | 较低。因多了一层宿主机 的转换和调度 |
| 安全性与隔离度 | 高。一个虚拟机崩溃不影响其他虚拟机 | 低。若宿主机 崩溃,其上的所有虚拟机全部失效 |
| 典型应用场景 | 企业级服务器、云计算中心、数据中心 | 个人开发调试、多操作系统轻量级体验 |
五、 精选例题与深度解析
📝 例题 1:特权级与执行效率问题(单选题)
【题目】 下列关于 1 型(裸金属架构)和 2 型(寄居架构)虚拟机管理程序(VMM)的叙述中,错误的是( )。 A. 1 型 VMM 直接运行在裸硬件上,而 2 型 VMM 运行在宿主机操作系统上 B. 2 型虚拟机在执行敏感指令时,由于需要经过宿主机操作系统的转换,其性能一般低于 1 型 C. 在 1 型虚拟机中,客户机操作系统(Guest OS)可以运行在物理 CPU 的内核态(特权级 0) D. 二型虚拟机更适合个人开发者进行日常的多系统开发与测试
【答案】 C
【解析】
- A 项正确:这是 1 型和 2 型 VMM 的本质区别。
- B 项正确:2 型 VMM 本身是一个用户态进程,其敏感指令必须通过 VMM 转换,再调用宿主机操作系统的 API,最终由宿主机操作系统在内核态下执行。多了一次软件层级的转换,因此性能比 1 型更低。
- C 项错误:在 1 型虚拟机中,直接运行在物理裸金属上的 才是唯一占有物理 CPU 内核态(特权级 0)的软件。客户机 (Guest OS)虽然“以为”自己运行在内核态,但实际上运行在受限的“虚拟内核态”(物理 CPU 的非特权级),任何敏感指令都会被 拦截并进行模拟。因此它不能运行在物理 CPU 的内核态。
- D 项正确:2 型虚拟机(如 VMware Workstation)安装简单,无需重新划分整台电脑的系统分区,非常适合普通用户和个人开发者。
📝 例题 2:特权指令拦截与敏感指令模拟(分析题)
【题目】 在虚拟化技术中,敏感指令是指“试图修改系统资源配置或行为的指令”。请简述:在一型虚拟机(裸金属架构)中,当客户机操作系统(Guest OS)执行了一条敏感指令时,整个系统是如何协作处理该指令的?为什么这能体现 Guest OS 运行在“介于内核态和用户态之间”?
【分析过程与标准答案】
- 协作处理机制:
- 当 Guest OS 尝试执行敏感指令(例如关机指令或修改页表基址寄存器的指令)时,由于 Guest OS 实际上运行在物理非特权态,该指令触发了硬件异常(Trap/陷入)。
- 物理 CPU 拦截该异常,自动将控制权移交给直接运行在裸机内核态的虚拟机管理程序()。
- 接收到硬件中断后,分析该指令的意图,确认其是该 Guest OS 合法的虚拟化请求。
- 在物理硬件上代为执行该操作(或在软件中模拟该虚拟硬件状态的改变),然后更新该虚拟机的状态。
- 处理完成后, 将控制权返回给 Guest OS,Guest OS 继续向下执行。
- 为什么体现“介于二者之间”?
- 它不像纯用户态:纯用户态程序一碰敏感指令就会因越权直接被操作系统强制杀死(崩溃)。而 Guest OS 执行敏感指令是被允许并且能够成功实现其逻辑效果的。
- 它不像纯内核态:纯内核态程序可以直接把指令送上物理硬件执行,不需要任何中介。而 Guest OS 的特权指令无法直接作用于物理硬件,必须经过 的“拦截-翻译-代为执行”。
- 结论:这种“逻辑上能行使管理职能,但物理上需要被中介控制”的特征,完美地定义了它“介于内核态和用户态之间”的独特定位。