Appearance
408
操作系统
OS-03-07 请求页式管理与缺页中断
一、定位信息
- 所属圈层:核心层
- 前置知识回顾:理解虚拟内存的基本概念(局部性原理、多次性、对换性),掌握页式管理的地址转换过程(页表、页框号、物理地址计算)。
- 知识网络位置:本单元是虚拟内存的具体实现机制,承接OS-03-06的虚拟内存概念,向下连接页框分配(OS-03-08)和页面置换算法(OS-03-09)。请求页式管理是现代操作系统(Linux、Windows)实际采用的内存管理方式。
- 考点热度等级:H级(高频重点)——缺页中断处理流程和地址转换过程是综合题的高频考点。
二、知识点讲解
2.1 请求页式管理
请求页式管理是在基本页式管理基础上增加了请求调页和页面置换功能。程序启动时不需要将所有页面装入内存,而是只装入少数必要页面,其余页面在需要时从磁盘调入。
页表项的关键字段:
- 页框号:该页在内存中的页框编号
- 状态位(P):1 = 在内存中,0 = 不在内存中
- 访问位(A):记录是否被访问过(供置换算法使用)
- 修改位(M):记录是否被修改过(换出时决定是否写回磁盘)
- 外存地址:该页在磁盘上的位置
2.2 缺页中断
当CPU访问一个页面时,如果该页的状态位为0(不在内存),硬件产生缺页中断(Page Fault)。缺页中断与普通中断的区别:
- 普通中断发生在指令之间(指令执行完后检查中断)
- 缺页中断发生在指令执行过程中(访问内存时发现页面不在)
- 缺页中断处理完成后,重新执行引起缺页的指令(而非下一条)
2.3 缺页中断处理流程
完整的缺页中断处理流程:
- CPU发出逻辑地址,硬件进行地址转换
- 查页表发现状态位 = 0,产生缺页中断
- CPU从用户态切换到内核态
- OS保存当前进程的现场(寄存器、程序计数器等)
- OS确定需要调入的页面编号
- 检查内存是否有空闲页框:
- 有空闲页框:直接分配
- 无空闲页框:执行页面置换算法,选择一个牺牲页
- 若牺牲页的修改位 = 1(被修改过),需要写回磁盘
- 若修改位 = 0(未修改),直接覆盖
- 从磁盘调入所需页面,更新页表
- 更新快表(TLB)
- 恢复进程现场
- 重新执行引起缺页的指令
2.4 地址转换的完整流程(结合缺页处理)
完整的地址转换过程(含缺页处理):
- 从逻辑地址提取页号 和页内偏移
- 查快表:若命中,直接得到页框号 → 步骤5
- 查内存中的页表:
- 若状态位 = 1,得到页框号 → 步骤5
- 若状态位 = 0,产生缺页中断 → 步骤4
- 执行缺页中断处理(调入页面),更新页表和快表 → 步骤5
- 物理地址 = 页框号 × 页大小 +
- 访问物理内存中的数据
三、记忆与理解辅助
1. 类比记忆:请求页式管理就像"自助图书馆"——你不需要把所有书都搬回家(一次性装入),只需在需要时去图书馆借(请求调页)。如果书架满了,你需要还一本旧书才能借新书(页面置换)。
2. 口诀:"请求页式按需装,缺页中断来帮忙;先查状态位,0就调页面;有空直接装,没空换一页;改过的要写回,没改直接替。"
3. 缺页中断 vs 普通中断对比:
| 对比项 | 普通中断 | 缺页中断 |
|---|---|---|
| 触发时机 | 指令执行完成后 | 指令执行过程中 |
| 处理后执行 | 下一条指令 | 重新执行当前指令 |
| 发生条件 | 外部事件或异常 | 访问不在内存的页面 |
| 处理主体 | OS中断处理程序 | OS缺页处理程序 |
| 对用户透明 | 是 | 是(用户程序无感知) |
4. 页表项各字段的作用总结:
| 字段 | 作用 | 使用者 |
|---|---|---|
| 页框号 | 地址转换 | 硬件(地址转换) |
| 状态位 | 判断是否在内存 | 硬件(产生缺页中断) |
| 访问位 | 记录访问历史 | OS(置换算法决策) |
| 修改位 | 记录是否修改 | OS(决定是否写回磁盘) |
| 外存地址 | 定位磁盘上的页面 | OS(缺页处理时调入) |
四、例题与精解
例题1(基础巩固)
题目:某系统页大小为 ,采用请求页式管理。某进程的页表如下(简化):
| 页号 | 页框号 | 状态位 | 修改位 |
|---|---|---|---|
| 0 | 3 | 1 | 0 |
| 1 | - | 0 | 0 |
| 2 | 7 | 1 | 1 |
| 3 | - | 0 | 0 |
当CPU访问逻辑地址 时,会发生什么?请描述完整的处理过程。
命题意图:考查缺页中断的触发条件和处理流程。
精解:
1. 审题分析:逻辑地址 ,页大小 。需要计算页号,查页表判断是否缺页。
2. 解题思路:先计算页号和偏移,再查页表判断状态位。
3. 完整步骤:
- 页号 ,页内偏移
- 查页表:页号1的状态位 = 0,该页不在内存中
- 硬件产生缺页中断
- OS处理:
- 保存CPU现场
- 检查内存是否有空闲页框(假设当前无空闲页框)
- 执行页面置换算法,选择一个牺牲页(假设选中页0)
- 页0的修改位 = 0,不需要写回磁盘,直接覆盖
- 从磁盘调入页1的内容到页框3
- 更新页表:页1的页框号 = 3,状态位 = 1
- 更新快表
- 恢复CPU现场
- 重新执行指令,访问逻辑地址
- 物理地址 =
4. 方法反思:缺页中断的核心是"重新执行"而非"继续执行"。这是因为引起缺页的指令还没有完成(数据还没读到),必须重新执行。这也是缺页中断与普通中断的关键区别。
例题2(中等提升)
题目:某系统采用请求页式管理,页大小为 ,内存访问时间为 ,磁盘访问时间为 。某进程运行时, 的页面访问不产生缺页中断(即在内存中), 的访问产生缺页中断。假设缺页中断处理中,磁盘访问是主要开销。求该进程的平均有效访问时间。
命题意图:考查缺页率对系统性能的影响。
精解:
1. 审题分析:需要计算考虑缺页率后的平均访问时间。缺页率 ,缺页时需要额外的磁盘访问时间。
2. 解题思路:平均访问时间 = 正常访问时间 × (1-缺页率) + 缺页时总时间 × 缺页率。
3. 完整步骤:
不缺页时:访问时间 = (1次内存访问)
缺页时:访问时间 = (发现缺页)+ (磁盘调入)+ (重新访问) ≈ (磁盘时间远大于内存时间,可忽略内存时间)
平均访问时间:
即使只有 的缺页率,平均访问时间也从 飙升到约 ,性能下降了约 倍!
4. 方法反思:这个例题说明了为什么虚拟内存系统要极力降低缺页率——磁盘访问时间比内存慢数万倍,即使很小的缺页率也会严重影响性能。这也是页面置换算法如此重要的原因。
五、考情分析
- 考查频次:请求页式管理和缺页中断在近5年真题中出现频率极高,几乎每年都有。
- 常见题型:选择题(缺页中断判断、页表项含义)、综合题(完整的地址转换+缺页处理流程)。
- 分值占比:选择题2分,综合题5-10分。
- 命题趋势:近年来倾向于将缺页中断与页面置换算法结合考查,形成完整的虚拟内存场景分析。基于大纲与命题规律推测。
六、易错点提醒
错误表现:缺页中断处理后执行下一条指令。 错误原因:将缺页中断等同于普通中断。 正确理解/做法:缺页中断处理完成后,必须重新执行引起缺页的指令。因为该指令的数据还没有读入,指令尚未完成。
错误表现:认为缺页中断只会发生在取指令时。 错误原因:对缺页中断的触发条件理解不全面。 正确理解/做法:缺页中断可以在取指令、读数据、写数据时发生。任何一次内存访问都可能触发缺页中断。
错误表现:忽略修改位的作用,认为所有页面换出时都需要写回磁盘。 错误原因:不理解"脏页"和"干净页"的区别。 正确理解/做法:只有被修改过的页面(修改位 = 1)才需要写回磁盘。未修改的页面(修改位 = 0)可以直接覆盖,因为磁盘上已有原始副本。这可以减少磁盘I/O。
错误表现:认为页面置换时选择修改位 = 1 的页面更好(因为"更有用")。 错误原因:混淆了修改位和访问位的含义。 正确理解/做法:页面置换时应优先选择修改位 = 0 的页面(未修改),因为不需要写回磁盘,减少I/O开销。
七、来源标注
- 依据2026考研统考408大纲
- 依据《操作系统概念》(Operating System Concepts, Silberschatz)第10章
- 依据汤小丹《计算机操作系统》第4版第3章