Appearance
408
操作系统
OS-03-06 虚拟内存的基本概念
一、定位信息
- 所属圈层:核心层
- 前置知识回顾:理解页式管理的基本原理(页表、地址转换、页框)。了解程序执行时CPU需要将指令和数据加载到内存中才能访问。
- 知识网络位置:本单元是虚拟内存的理论基础,向下展开为请求页式管理(OS-03-07)、页面置换算法(OS-03-09)、抖动与工作集(OS-03-10)等具体实现机制。虚拟内存是现代操作系统最核心的内存管理技术之一。
- 考点热度等级:H级(高频重点)——虚拟内存的概念、特征和实现条件是理解后续多个知识单元的前提。
二、知识点讲解
2.1 局部性原理
虚拟内存的理论基础是局部性原理(Principle of Locality),分为两种:
- 时间局部性:如果某个数据被访问过,那么它在不久的将来很可能再次被访问。典型例子:循环中的变量。
- 空间局部性:如果某个地址被访问过,那么它附近的地址很可能很快被访问。典型例子:顺序执行的指令、数组遍历。
正是因为程序具有局部性,我们不需要将整个程序全部装入内存,只需装入当前需要的部分即可。
2.2 虚拟内存的定义
虚拟内存是一种内存管理技术,它使得应用程序认为自己拥有一个连续的、足够大的逻辑地址空间(远大于实际物理内存)。实际上,程序只有部分页面在物理内存中,其余部分保存在磁盘(交换区)上,按需调入。
虚拟内存的三个重要特征:
- 多次性:一个程序可以被分成多次装入内存(而非一次性全部装入)
- 对换性:程序运行过程中,页面可以在内存和磁盘之间换入换出
- 虚拟性:逻辑地址空间可以远大于物理地址空间
2.3 虚拟内存的实现条件
虚拟内存的实现需要三个硬件支持:
- 页表机制:页表项中需要增加状态位(是否在内存)、访问字段(访问次数/时间)、修改位(是否被修改过)、外存地址(该页在磁盘上的位置)
- 缺页中断机构:当访问的页不在内存时,产生缺页中断,由OS处理
- 地址变换机构:能够处理页面不在内存的情况
软件层面需要:
- 请求调页:访问到不在内存的页时,将其从磁盘调入
- 页面置换:内存不足时,选择一个页面换出到磁盘
2.4 虚拟内存 vs 传统存储管理
| 对比项 | 传统存储管理 | 虚拟内存 |
|---|---|---|
| 程序装入方式 | 一次性全部装入 | 按需调入(多次性) |
| 逻辑地址空间 | ≤ 物理地址空间 | 可以 > 物理地址空间 |
| 程序是否全部在内存 | 是 | 否(部分在磁盘) |
| 支持的进程数 | 受物理内存限制 | 可以更多(每进程只用部分内存) |
| 实现复杂度 | 简单 | 复杂(需要缺页中断、置换算法等) |
三、记忆与理解辅助
1. 类比记忆:虚拟内存就像图书馆的"预约系统"——书架(物理内存)只能放一部分书,但读者(程序)以为所有书都在架上。当需要一本不在架上的书时,图书馆从仓库(磁盘)调入,必要时把不常看的书退回仓库。
2. 口诀:"局部性原理是基础,时间空间两局部;虚拟内存三特征,多次对换加虚拟;硬件三件要齐全,页表中断变换器。"
3. 虚拟内存三个特征的记忆:
- 多次性:程序不是一次装完,而是"多次"按需装入
- 对换性:页面可以在内存和磁盘之间"对换"
- 虚拟性:逻辑空间"虚拟地"大于物理空间
4. 局部性原理的应用场景:
| 局部性类型 | 典型场景 | 原因 |
|---|---|---|
| 时间局部性 | 循环体中的变量 | 同一变量反复访问 |
| 时间局部性 | 最近访问的函数 | 函数可能被反复调用 |
| 空间局部性 | 数组遍历 | 连续访问相邻元素 |
| 空间局部性 | 顺序执行指令 | 指令在内存中顺序存放 |
四、例题与精解
例题1(基础巩固)
题目:某系统物理内存大小为 ,某程序的逻辑地址空间为 。该程序能否在该系统上运行?如果采用虚拟内存技术,该程序运行时是否需要 的物理内存?
命题意图:考查虚拟内存的基本概念——逻辑地址空间可以大于物理地址空间。
精解:
1. 审题分析:程序逻辑地址空间(16GB)大于物理内存(4GB),需要判断能否运行以及物理内存需求。
2. 解题思路:利用虚拟内存的"虚拟性"特征分析。
3. 完整步骤:
(1)能否运行:能。虚拟内存技术允许程序的逻辑地址空间远大于物理地址空间。程序不需要全部装入内存,只需将当前需要的部分页面装入即可。
(2)是否需要16GB物理内存:不需要。由于程序具有局部性,实际运行时只需要访问程序的一小部分。操作系统按需调入页面,物理内存中只需保存当前活跃的页面。例如,即使程序有16GB,实际运行时可能只需要512MB的活跃页面在内存中。
4. 方法反思:虚拟内存的核心价值就是"用小内存运行大程序"。但需要注意,虚拟内存不是万能的——如果程序的工作集(实际需要同时在内存中的页面集合)超过物理内存大小,系统会产生抖动,性能急剧下降。
例题2(中等提升)
题目:某系统采用虚拟内存技术,页大小为 ,物理内存有 个页框。某进程的逻辑地址空间为 (共64页),实际运行时只有 页在内存中。 (1)该进程的页表至少有多少项? (2)页表中每项需要哪些额外信息(相比非虚拟内存的页表)? (3)若该进程访问第 页(不在内存),会发生什么?
命题意图:考查虚拟内存的页表结构和缺页中断机制。
精解:
1. 审题分析:进程64页,物理内存64个页框,运行时16页在内存中。需要分析页表结构和缺页处理。
2. 解题思路:页表项数 = 逻辑页数,虚拟内存页表需要额外字段,缺页时触发中断。
3. 完整步骤:
(1)页表至少有 64项(逻辑地址空间的每一页都需要一个页表项,无论是否在内存中)。
(2)相比非虚拟内存的页表(只需页框号),虚拟内存的页表每项需要增加:
- 状态位(存在位):标识该页是否在内存中(本题中,64项中只有16项的状态位为"在内存")
- 访问字段:记录该页被访问的次数或最近访问时间(供置换算法使用)
- 修改位(脏位):标识该页是否被修改过(若修改过,换出时需要写回磁盘)
- 外存地址:该页在磁盘上的存放位置
(3)访问第30页(不在内存):
- 硬件检测到状态位为"不在内存",产生缺页中断
- CPU从用户态切换到内核态,执行OS的缺页处理程序
- OS在磁盘上找到第30页的内容
- 若有空闲页框,直接调入;若无空闲页框,执行页面置换算法选择一个牺牲页换出
- 更新页表(第30页的状态位改为"在内存",记录其页框号)
- 重新执行被中断的指令
4. 方法反思:虚拟内存的页表比传统页表"胖"得多,每项包含更多控制信息。这些信息是OS进行页面置换决策的依据。理解这些字段的作用,是掌握后续页面置换算法的基础。
五、考情分析
- 考查频次:虚拟内存概念在近5年真题中出现频率高,几乎每年都有相关题目。
- 常见题型:选择题(虚拟内存特征判断、局部性原理应用、页表结构)、综合题(虚拟内存完整场景)。
- 分值占比:选择题2分,综合题中作为背景知识5-8分。
- 命题趋势:近年来倾向于将虚拟内存与具体算法(页面置换、工作集)结合考查,单纯概念题减少但仍是基础。基于大纲与命题规律推测。
六、易错点提醒
错误表现:认为虚拟内存就是"用磁盘扩展内存",等同于交换技术。 错误原因:混淆了虚拟内存和交换(Swapping)的概念。 正确理解/做法:交换是以整个进程为单位在内存和磁盘之间移动;虚拟内存是以页面为单位按需调入调出。虚拟内存的关键特征是"多次性"——程序可以分多次装入,而交换是一次性换入换出整个进程。
错误表现:认为有了虚拟内存就可以运行任意大的程序。 错误原因:忽略了虚拟内存的性能依赖于局部性原理。 正确理解/做法:虚拟内存的大小受限于:①逻辑地址空间的位数(如32位系统最大4GB);②磁盘空间大小;③程序的工作集大小。如果程序的工作集超过物理内存,会产生抖动,系统几乎无法工作。
错误表现:认为虚拟内存的页表和传统页表完全相同。 错误原因:忽略了虚拟内存需要额外的控制字段。 正确理解/做法:虚拟内存的页表每项除了页框号外,还需要状态位、访问字段、修改位、外存地址等,用于支持缺页中断和页面置换。
七、来源标注
- 依据2026考研统考408大纲
- 依据《操作系统概念》(Operating System Concepts, Silberschatz)第9-10章
- 依据汤小丹《计算机操作系统》第4版第3章