Skip to content

408

操作系统

OS-03-06 虚拟内存的基本概念


一、定位信息

  • 所属圈层:核心层
  • 前置知识回顾:理解页式管理的基本原理(页表、地址转换、页框)。了解程序执行时CPU需要将指令和数据加载到内存中才能访问。
  • 知识网络位置:本单元是虚拟内存的理论基础,向下展开为请求页式管理(OS-03-07)、页面置换算法(OS-03-09)、抖动与工作集(OS-03-10)等具体实现机制。虚拟内存是现代操作系统最核心的内存管理技术之一。
  • 考点热度等级H级(高频重点)——虚拟内存的概念、特征和实现条件是理解后续多个知识单元的前提。

二、知识点讲解

2.1 局部性原理

虚拟内存的理论基础是局部性原理(Principle of Locality),分为两种:

  • 时间局部性:如果某个数据被访问过,那么它在不久的将来很可能再次被访问。典型例子:循环中的变量。
  • 空间局部性:如果某个地址被访问过,那么它附近的地址很可能很快被访问。典型例子:顺序执行的指令、数组遍历。

正是因为程序具有局部性,我们不需要将整个程序全部装入内存,只需装入当前需要的部分即可。

2.2 虚拟内存的定义

虚拟内存是一种内存管理技术,它使得应用程序认为自己拥有一个连续的、足够大的逻辑地址空间(远大于实际物理内存)。实际上,程序只有部分页面在物理内存中,其余部分保存在磁盘(交换区)上,按需调入。

虚拟内存的三个重要特征:

  • 多次性:一个程序可以被分成多次装入内存(而非一次性全部装入)
  • 对换性:程序运行过程中,页面可以在内存和磁盘之间换入换出
  • 虚拟性:逻辑地址空间可以远大于物理地址空间

2.3 虚拟内存的实现条件

虚拟内存的实现需要三个硬件支持:

  1. 页表机制:页表项中需要增加状态位(是否在内存)、访问字段(访问次数/时间)、修改位(是否被修改过)、外存地址(该页在磁盘上的位置)
  2. 缺页中断机构:当访问的页不在内存时,产生缺页中断,由OS处理
  3. 地址变换机构:能够处理页面不在内存的情况

软件层面需要:

  • 请求调页:访问到不在内存的页时,将其从磁盘调入
  • 页面置换:内存不足时,选择一个页面换出到磁盘

2.4 虚拟内存 vs 传统存储管理

对比项传统存储管理虚拟内存
程序装入方式一次性全部装入按需调入(多次性)
逻辑地址空间≤ 物理地址空间可以 > 物理地址空间
程序是否全部在内存否(部分在磁盘)
支持的进程数受物理内存限制可以更多(每进程只用部分内存)
实现复杂度简单复杂(需要缺页中断、置换算法等)

三、记忆与理解辅助

1. 类比记忆:虚拟内存就像图书馆的"预约系统"——书架(物理内存)只能放一部分书,但读者(程序)以为所有书都在架上。当需要一本不在架上的书时,图书馆从仓库(磁盘)调入,必要时把不常看的书退回仓库。

2. 口诀:"局部性原理是基础,时间空间两局部;虚拟内存三特征,多次对换加虚拟;硬件三件要齐全,页表中断变换器。"

3. 虚拟内存三个特征的记忆

  • 多次性:程序不是一次装完,而是"多次"按需装入
  • 对换性:页面可以在内存和磁盘之间"对换"
  • 虚拟性:逻辑空间"虚拟地"大于物理空间

4. 局部性原理的应用场景

局部性类型典型场景原因
时间局部性循环体中的变量同一变量反复访问
时间局部性最近访问的函数函数可能被反复调用
空间局部性数组遍历连续访问相邻元素
空间局部性顺序执行指令指令在内存中顺序存放

四、例题与精解

例题1(基础巩固)

题目:某系统物理内存大小为 4GB4\text{GB},某程序的逻辑地址空间为 16GB16\text{GB}。该程序能否在该系统上运行?如果采用虚拟内存技术,该程序运行时是否需要 16GB16\text{GB} 的物理内存?

命题意图:考查虚拟内存的基本概念——逻辑地址空间可以大于物理地址空间。

精解

1. 审题分析:程序逻辑地址空间(16GB)大于物理内存(4GB),需要判断能否运行以及物理内存需求。

2. 解题思路:利用虚拟内存的"虚拟性"特征分析。

3. 完整步骤

(1)能否运行:。虚拟内存技术允许程序的逻辑地址空间远大于物理地址空间。程序不需要全部装入内存,只需将当前需要的部分页面装入即可。

(2)是否需要16GB物理内存:不需要。由于程序具有局部性,实际运行时只需要访问程序的一小部分。操作系统按需调入页面,物理内存中只需保存当前活跃的页面。例如,即使程序有16GB,实际运行时可能只需要512MB的活跃页面在内存中。

4. 方法反思:虚拟内存的核心价值就是"用小内存运行大程序"。但需要注意,虚拟内存不是万能的——如果程序的工作集(实际需要同时在内存中的页面集合)超过物理内存大小,系统会产生抖动,性能急剧下降。

例题2(中等提升)

题目:某系统采用虚拟内存技术,页大小为 4KB4\text{KB},物理内存有 6464 个页框。某进程的逻辑地址空间为 256KB256\text{KB}(共64页),实际运行时只有 1616 页在内存中。 (1)该进程的页表至少有多少项? (2)页表中每项需要哪些额外信息(相比非虚拟内存的页表)? (3)若该进程访问第 3030 页(不在内存),会发生什么?

命题意图:考查虚拟内存的页表结构和缺页中断机制。

精解

1. 审题分析:进程64页,物理内存64个页框,运行时16页在内存中。需要分析页表结构和缺页处理。

2. 解题思路:页表项数 = 逻辑页数,虚拟内存页表需要额外字段,缺页时触发中断。

3. 完整步骤

(1)页表至少有 64项(逻辑地址空间的每一页都需要一个页表项,无论是否在内存中)。

(2)相比非虚拟内存的页表(只需页框号),虚拟内存的页表每项需要增加:

  • 状态位(存在位):标识该页是否在内存中(本题中,64项中只有16项的状态位为"在内存")
  • 访问字段:记录该页被访问的次数或最近访问时间(供置换算法使用)
  • 修改位(脏位):标识该页是否被修改过(若修改过,换出时需要写回磁盘)
  • 外存地址:该页在磁盘上的存放位置

(3)访问第30页(不在内存):

  • 硬件检测到状态位为"不在内存",产生缺页中断
  • CPU从用户态切换到内核态,执行OS的缺页处理程序
  • OS在磁盘上找到第30页的内容
  • 若有空闲页框,直接调入;若无空闲页框,执行页面置换算法选择一个牺牲页换出
  • 更新页表(第30页的状态位改为"在内存",记录其页框号)
  • 重新执行被中断的指令

4. 方法反思:虚拟内存的页表比传统页表"胖"得多,每项包含更多控制信息。这些信息是OS进行页面置换决策的依据。理解这些字段的作用,是掌握后续页面置换算法的基础。


五、考情分析

  • 考查频次:虚拟内存概念在近5年真题中出现频率高,几乎每年都有相关题目。
  • 常见题型:选择题(虚拟内存特征判断、局部性原理应用、页表结构)、综合题(虚拟内存完整场景)。
  • 分值占比:选择题2分,综合题中作为背景知识5-8分。
  • 命题趋势:近年来倾向于将虚拟内存与具体算法(页面置换、工作集)结合考查,单纯概念题减少但仍是基础。基于大纲与命题规律推测

六、易错点提醒

  1. 错误表现:认为虚拟内存就是"用磁盘扩展内存",等同于交换技术。 错误原因:混淆了虚拟内存和交换(Swapping)的概念。 正确理解/做法:交换是以整个进程为单位在内存和磁盘之间移动;虚拟内存是以页面为单位按需调入调出。虚拟内存的关键特征是"多次性"——程序可以分多次装入,而交换是一次性换入换出整个进程。

  2. 错误表现:认为有了虚拟内存就可以运行任意大的程序。 错误原因:忽略了虚拟内存的性能依赖于局部性原理。 正确理解/做法:虚拟内存的大小受限于:①逻辑地址空间的位数(如32位系统最大4GB);②磁盘空间大小;③程序的工作集大小。如果程序的工作集超过物理内存,会产生抖动,系统几乎无法工作。

  3. 错误表现:认为虚拟内存的页表和传统页表完全相同。 错误原因:忽略了虚拟内存需要额外的控制字段。 正确理解/做法:虚拟内存的页表每项除了页框号外,还需要状态位、访问字段、修改位、外存地址等,用于支持缺页中断和页面置换。


七、来源标注

  • 依据2026考研统考408大纲
  • 依据《操作系统概念》(Operating System Concepts, Silberschatz)第9-10章
  • 依据汤小丹《计算机操作系统》第4版第3章

考研全科复习资料 - 基于2026考研统考大纲