虚拟内存管理--请求分页管理方式
1. 核心思想
请求分页是虚拟内存的典型实现,基于基本分页管理,增加请求调页(按需调入页面)和页面置换(内存不足时换出页面)功能,仅将当前需用页面装入内存,实现“部分装入、动态调度”。
2. 页表机制(扩展页表项)
在基本分页页表项基础上,新增4个字段支持虚拟内存:
字段 | 作用 |
状态位(P) | 标记页面是否在内存(1=在内存,0=在外存)。 |
访问字段(A) | 记录页面近期访问次数或未访问时间(供置换算法选择淘汰页)。 |
修改位(M) | 标记页面是否被修改(1=修改过,换出时需写回外存;0=未修改,直接丢弃)。 |
外存地址 | 页面在外存(如磁盘)的存放地址(供请求调页时读取)。 |
3. 缺页中断机构
当访问的页面不在内存(状态位P=0)时,触发缺页中断,处理流程如下:
1、中断处理:保护CPU环境 → 转入缺页中断处理程序 → 阻塞当前进程(放
2、内存检查:
- 有空闲页框:分配页框,从外存调入页面 → 更新页表(P=1,物理块号,A=1)。
- 无空闲页框:启动页面置换算法选择淘汰页 → 若淘汰页M=1,写回外存 → 调入新页面,更新页表。
3、恢复执行:唤醒进程(放回就绪队列),重新执行被中断指令。
缺页中断的特殊性:
- 内部异常:在指令执行期间产生(而非指令执行后)。
- 多次中断:一条指令可能触发多次缺页(如访问数组的多个页面)。
4. 地址变换机构
在基本分页地址变换基础上,增加缺页中断处理和页面置换逻辑,步骤如下:
- 先检索快表,若命中,则从相应表项中取出该页的物理块号,并修改页表项中的访问位,以供置换算法换出页面时参考。对于写指令,还需要将修改位置为1。
- 若快表未命中,则要到页表中查找,若找到,则从相应表项中取出物理块号,并将该页表项写入快表,若快表已满,则需采用某种算法替换。
- 若在页表中未找到,则需要进行缺页中断处理,请求系统将该页从外存换入内存,页面被调入内存后,由操作系统负责更新页表和快表,并获得物理块号。
- 利用得到的物理块号和页内地址拼接形成物理地址,用该地址去访存。
访存次数:
- 快表命中:1次访存。
- 快表未命中但页面在内存:2次访存(查页表+访存)。
- 缺页:多次访存(外存读页+更新页表+快表+访存)。
5. 请求分页 vs 基本分页
对比项 | 基本分页 | 请求分页 |
内存装入 | 全部页面装入内存 | 仅需装入当前需用页面(部分装入) |
页表字段 | 仅物理块号 | 新增状态位、访问位、修改位、外存地址 |
核心功能 | 地址映射(逻辑→物理) | 地址映射+请求调页+页面置换 |
适用场景 | 物理内存管理 | 虚拟内存管理(逻辑扩充内存) |
核心考点 📌
- 页表扩展字段:状态位(P)判断是否缺页,修改位(M)决定是否写回外存。
- 缺页中断处理流程:中断→检查空闲页框→调页/置换→更新页表→恢复执行。
- 地址变换步骤:快表→页表→缺页中断→物理地址,注意快表未命中和缺页的不同处理。
- 缺页中断的特殊性:指令执行中产生,可能多次触发。
总结
请求分页通过“按需调页”和“页面置换”,结合局部性原理,实现了内存的逻辑扩充,是虚拟内存最核心的实现方式。其关键在于扩展页表项记录页面状态、通过缺页中断动态调度页面,以及高效的地址变换机制(快表+页表)。
✨ 一句话记忆:请求分页按需调,缺页中断动态补,页表扩展状态位,地址变换快表助! ✨