Appearance
虚拟内存基本概念
考情分析
虚拟内存管理在 408 真题中累计考查约 106 分(2009-2026),是内存管理章节的绝对核心。🔥🔥🔥 。本文是概念基础,后续的页面置换算法是计算重点。
物理内存就那么大,一个大型程序可能比整个内存还大——有没有办法让每个进程都"以为"自己独占了一块巨大的内存空间?
传统内存管理的局限
传统方式(连续分配/分页/分段)要求进程全部装入内存才能运行,导致:
- 大程序无法运行(内存不够大)
- 并发度低(多个大进程无法同时驻留)
- 内存利用率低
局部性原理
虚拟内存的理论基础是局部性原理(Principle of Locality):
| 类型 | 说明 |
|---|---|
| 时间局部性 | 刚被访问的内存位置,很快还会被访问(循环、热点代码) |
| 空间局部性 | 刚被访问的位置附近的位置,很快也会被访问(顺序执行、数组遍历) |
局部性原理意味着:程序运行时,在一段时间内只会访问一小部分内存。因此不需要将整个程序都放在内存中。
虚拟内存的定义
虚拟内存让每个进程拥有一个很大的、连续的虚拟地址空间,实际上只有一部分页面在物理内存中,其余存放在外存(磁盘)上。就像每个住户都以为整栋楼是自己的,其实大家共用同一栋楼,只是各自住在不同的房间里。
虚拟内存的三个特征
| 特征 | 说明 |
|---|---|
| 多次性 | 程序不需要一次全部装入,可以分多次调入内存 |
| 对换性 | 暂时不用的部分可以换出到外存,需要时再换入 |
| 虚拟性 | 从逻辑上扩充了内存容量,用户感觉内存比实际大得多 |
虚拟性是最本质的特征
多次性和对换性是实现虚拟性的手段。虚拟性才是目的——让用户感觉有一个很大的内存可用。
易错
虚拟内存的实现必须建立在离散分配(分页/分段)基础上,连续分配方案无法实现虚拟内存。选择题常见干扰项:"采用连续分配也可以实现虚拟存储"——错。
另外,虚拟内存的容量上限由两个因素决定:
- 内存 + 外存的总容量(物理限制)
- 计算机的地址位数(寻址空间限制)
实际上限取两者中的较小值,而非"虚拟内存 = 外存大小"。
虚拟内存的实现
| 实现方式 | 基础技术 |
|---|---|
| 请求分页 | 在基本分页基础上增加请求调页和页面置换功能 |
| 请求分段 | 在基本分段基础上增加请求调段和段置换功能 |
| 请求段页式 | 在段页式基础上增加 |
请求分页是最常用的实现方式。
虚拟内存 vs 基本分页
| 比较 | 基本分页 | 请求分页(虚拟内存) |
|---|---|---|
| 装入方式 | 一次性全部装入 | 按需调入(缺页时调入) |
| 是否需要全部在内存 | 是 | 否 |
| 页表项 | 页号 → 页框号 | 增加状态位、修改位、外存地址等 |
| 缺页处理 | 无此概念 | 触发缺页中断,从外存调入 |
| 页面置换 | 无 | 内存满时需要置换 |
考研高频考点
- 🔥🔥🔥 局部性原理(时间局部性 + 空间局部性)
- 🔥🔥🔥 虚拟内存的三个特征(多次性/对换性/虚拟性)
- 🔥🔥 虚拟内存的实现基础(必须有硬件支持:页表机制 + 中断机制 + 地址变换机构)
- 🔥🔥 虚拟内存与基本分页的区别
- 🔥 虚拟性是最本质的特征
虚拟内存的概念有了,具体怎么实现"按需调入"?下篇来看请求页式管理的完整机制,包括缺页中断和页表项的扩展。