# 虚拟内存

> CIE A-Level 计算机科学 · 9618
> 来源: https://www.owlsprep.com/zh/study/cie-9618-u5-virtual-memory/

虚拟内存是一种核心内存管理技术，它将辅助存储用作物理RAM的扩展，使得可以运行比主存单独容量更大或数量更多的程序。本模块讲解它的工作原理、核心术语和常见考点。

**先修:** [主存组织结构](https://www.owlsprep.com/zh/study/cie-9618-u5-main-memory-organization/); [操作系统核心功能](https://www.owlsprep.com/zh/study/cie-9618-u5-operating-system-functions/)

## 学习目标

- 解释虚拟内存的用途和功能
- 描述虚拟内存系统中分页和地址转换的工作原理
- 识别页错误和抖动的原因与影响
- 评价虚拟内存的优缺点

## 虚拟内存的用途与概述

当多个程序同时运行时，所有程序数据的总大小通常会超过物理RAM的可用容量。虚拟内存通过将不活动的程序数据从RAM移动到辅助存储中一个称为*交换空间*（或分页文件）的专用区域，为活动进程释放RAM空间，从而解决了这个问题。

**虚拟内存** — 一种内存管理技术，利用辅助存储扩展主存容量，营造出比物理RAM实际可用容量更大的连续地址空间的假象。

*例:* 一个拥有4GB RAM的系统可以运行6GB大小的游戏，方法是将2GB不活动的游戏数据存储在固态硬盘的虚拟内存中。

**例题:** 一台计算机拥有2GB物理RAM，五个打开的程序总共需要3.5GB内存。解释虚拟内存如何让这五个程序都保持打开状态。

1. 1. 操作系统识别出程序当前不活动的部分（例如，已经10分钟未使用的最小化文字处理器）。
2. 2. 不活动部分会从RAM复制到辅助存储的交换空间中，释放约1.5GB物理RAM供活动进程使用。
3. 3. 当用户切回这个不活动程序时，它的数据会被交换回RAM，同时新的不活动数据会被交换到虚拟内存中。

> **考试提示:** 一定要记住虚拟内存比物理RAM慢，因为辅助存储的访问延迟远高于RAM。

## 分页与地址转换

虚拟内存最常使用分页实现：虚拟地址空间被划分为固定大小的块（称为页），物理RAM被划分为同样大小的块（称为页框）。内存管理单元（MMU）负责处理虚拟地址和物理地址之间的自动转换。

**页表** — 存储在主存中的数据结构，将每个虚拟页号映射到对应的物理页框地址，或将该页标记为存储在磁盘的虚拟内存中。

**例题:** 某系统使用1KB大小的页。一个进程的虚拟地址为0x0254，对应虚拟页号2。页表中页2对应的物理页框号是0x0A。计算对应的物理地址。

1. 1. 计算页内偏移量：页大小为1KB = 1024 = 0x400字节，因此偏移量等于虚拟地址对页大小取模：
2. $$\text{Offset} = 0x0254 \mod 0x400 = 0x254$$
3. 2. 计算物理页框的起始地址：
4. $$\text{Physical Start} = 0x0A \times 0x400 = 0x2800$$
5. 3. 加上偏移量得到完整物理地址：
6. $$\text{Physical Address} = 0x2800 + 0x254 = 0x2A54$$

> **tip**
>
> 地址转换过程中页内偏移量永远不会改变。计算物理地址时，一定要保留虚拟地址的原始偏移量。

## 页错误与抖动

当进程尝试访问当前未加载到物理RAM中的页时，就会发生页错误。发生页错误时，操作系统会暂停该进程，将所需的页从交换空间加载到RAM的空闲页框中，更新页表，然后恢复进程运行。如果没有空闲页框，操作系统会将最近最少使用（LRU）的页换出到交换空间。

**抖动** — 系统将大部分时间都用于在RAM和虚拟内存之间交换页面，而非执行应用指令，从而导致性能严重下降的状态。

*例:* 当有过多活动进程竞争过少的物理RAM时，就会发生抖动。

**例题:** 用户在一台仅拥有4GB RAM的笔记本电脑上打开了15个大型浏览器标签页，即使只有一个标签页处于活动状态，系统也变得极其缓慢。使用术语抖动解释为什么会发生这种情况。

1. 1. 所有15个标签页的总大小超过了4GB可用物理RAM，因此大部分标签页数据都存储在磁盘的虚拟内存中。
2. 2. 当用户在标签页之间切换时，每次切换都需要将新标签页的页交换进RAM，同时将旧页交换出到磁盘。
3. 3. 系统将大部分处理时间都用于处理页错误和交换，而非运行活动标签页。这种过度交换的状态就是抖动，它导致了系统严重变慢。

> **考试提示:** CIE阅卷老师要求你必须将抖动与物理RAM不足和高页错误率关联起来，提到这两点才能获得满分。

## 优缺点

- **优点：**
- 允许有限物理RAM的系统运行更大的程序
- 允许同时加载和打开更多进程
- 通过将不活动数据移到磁盘，为活动进程释放物理RAM
- 为进程之间提供内存保护，因为每个进程都有独立的虚拟地址空间
- **缺点：**
- 虚拟内存访问比物理RAM访问慢得多
- 地址转换和页错误处理需要额外的处理开销
- 交换空间会占用辅助存储空间，减少用户可用存储
- 如果RAM不足以满足当前工作负载，可能会导致抖动

**概念自测**

测试你的理解：

1. 以下哪一项对虚拟内存的描述是正确的？

   - A：它通过硬盘为系统添加额外的物理RAM
   - B：它利用辅助存储扩展可用逻辑内存空间
   - C：它是CPU和主RAM之间的高速缓存
   - D：它永久存储操作系统内核

   *解析:* A错误：虚拟内存不会增加物理RAM。C错误：高速缓存与虚拟内存是不同的概念。D错误：内核存储在持久存储中，而非虚拟内存中。

## 常见错误

- **错误做法:** 认为虚拟内存会增加可用物理RAM的容量
  - 原因: 虚拟内存不会改变系统的物理RAM容量，它只是将辅助存储用作扩展
  - 正确做法: 应说明虚拟内存增加了进程可用的逻辑地址空间，允许运行比单独物理RAM所能支持的更大或数量更多的程序
- **错误做法:** 将页错误误认为是系统错误或崩溃
  - 原因: 页错误是虚拟内存运行过程中正常、预期会发生的部分，不是错误
  - 正确做法: 应认识到页错误会触发操作系统将请求的页从交换区加载到RAM中，问题解决后进程会正常恢复运行
- **错误做法:** 认为抖动是由磁盘上分配的交换空间过多导致的
  - 原因: 抖动是由物理RAM不足以容纳运行进程的所有活动页导致的
  - 正确做法: 应将抖动与当前工作负载下物理RAM不足导致的高页错误率关联起来
- **错误做法:** 从虚拟地址计算物理地址时改变偏移量
  - 原因: 只有页号会被映射到新的物理页框；偏移量用于标识页内的具体字节，不会改变
  - 正确做法: 一定要保留虚拟地址的原始偏移量，将其加到物理页框的起始地址上
- **错误做法:** 认为虚拟内存仅在RAM完全占满时才会被使用
  - 原因: 即使RAM未占满，操作系统也会使用虚拟内存，以提供内存保护和更大的地址空间
  - 正确做法: 应说明虚拟内存的主要用途是在RAM不足时扩展内存，但它还能提供进程保护和更大地址空间的好处

## 速查表

| 术语 | 核心定义 |
| --- | --- |
| 虚拟内存 | 主存的辅助存储扩展 |
| 页 | 虚拟地址空间的固定大小块 |
| 页框 | 物理RAM的固定大小块 |
| 页表 | 将虚拟页映射到物理页框 |
| 页错误 | 请求页不在RAM中，触发交换 |
| 抖动 | 过度交换降低系统性能 |
| 交换空间 | 虚拟内存所用的辅助存储区域 |

## 下一步

虚拟内存是CIE A-Level计算机科学试卷1中重点考察的核心内存管理概念，因此掌握它的核心术语、工作流程和常见易错点对考试成功至关重要。它建立在你对主存组织结构和操作系统功能的理解之上，连接到进程调度、内存保护和辅助存储设计等更广泛的主题。在这个子主题之外，你在学习操作系统安全、多任务和系统性能优化时会再次遇到虚拟内存概念。扎实掌握这个主题能帮助你应对考试中的简答题和扩展回答题。

- [文件管理](https://www.owlsprep.com/zh/study/cie-9618-u5-file-management/)
- [安全性、隐私与数据完整性](https://www.owlsprep.com/zh/study/cie-9618-u6-overview/)
- [安全威胁](https://www.owlsprep.com/zh/study/cie-9618-u6-threats-to-security/)

---

来自 [OwlsPrep](https://www.owlsprep.com) —— A-Level / IB / AP / IGCSE 免费学习指南，依据官方考纲编写。原页面：https://www.owlsprep.com/zh/study/cie-9618-u5-virtual-memory/
