Appearance
请求页式管理
考情分析
请求分页是虚拟内存的核心实现,缺页中断处理流程和缺页率计算是大题常考内容。🔥🔥🔥 高频核心。
虚拟内存只是一个概念,真正落地靠的是请求分页——访问到不在内存里的页面时,OS 自动从磁盘调入。这个"按需调入"的机制具体怎么运转?
请求分页的页表项
请求分页在基本分页的页表项基础上增加了以下字段:
| 字段 | 说明 |
|---|---|
| 页号 | 逻辑页号 |
| 页框号 | 物理页框号(不在内存时无意义) |
| 状态位 P | 该页是否在内存中(1=在,0=不在) |
| 访问字段 A | 记录最近被访问的情况(用于页面置换) |
| 修改位 M | 该页是否被修改过(决定换出时是否需要写回外存) |
| 外存地址 | 该页在外存上的位置 |
缺页中断
当 CPU 访问的页面不在内存中(状态位 P=0)时,产生缺页中断(Page Fault)。可以类比成去图书馆借书,发现书不在架上——你得填个调书单,等管理员从仓库里取过来。
缺页中断处理流程
缺页中断的特殊性
缺页中断与普通中断相比有两个特殊之处:
| 特殊性 | 说明 |
|---|---|
| 指令执行期间产生 | 普通中断在指令执行完毕后检测;缺页中断在指令执行过程中产生 |
| 一条指令可能产生多次缺页 | 一条指令的操作数可能跨页,可能触发多次缺页中断 |
有效访存时间(考虑缺页率)
设缺页率为
示例:
即使缺页率只有 0.1%,有效访存时间也增加了约 40 倍。这说明缺页率对性能的影响极大。
请求分页的地址变换
在基本分页地址变换的基础上,增加了缺页中断处理和 TLB 管理:
- CPU 发出逻辑地址 → 拆分为页号 P 和偏移 W
- 查 TLB → 命中则直接得到页框号
- TLB 未命中 → 查页表
- 页表项 P=1(在内存)→ 更新 TLB,计算物理地址
- 页表项 P=0(不在内存)→ 触发缺页中断 → 调入页面 → 更新页表和 TLB → 重新执行指令
易错
缺页中断的两个特殊性是选择题常考点:
- 缺页中断在指令执行期间产生(不是执行完毕后),属于内中断(异常/故障)
- 一条指令可能触发多次缺页中断(操作数跨页时)
常见错误:把缺页中断当成"外中断"。缺页中断由 CPU 执行指令时内部触发,是内中断(故障 Fault),不是外部设备引起的外中断。
考研高频考点
- 🔥🔥🔥 缺页中断的处理流程(选择题/简答题高频)
- 🔥🔥🔥 有效访存时间的计算(给定缺页率)
- 🔥🔥🔥 请求分页页表项增加的字段(状态位/修改位/访问字段/外存地址)
- 🔥🔥 缺页中断的两个特殊性
- 🔥🔥 修改位决定换出时是否写回外存
- 🔥 缺页率对系统性能的巨大影响
请求分页在内存满时需要淘汰旧页面腾出空间,选择淘汰谁直接影响缺页率。下篇开始逐一分析各种页面置换算法,首先是最简单的 FIFO。