# 4.7 请求分页管理方式 ## 一、请求分页的基本原理 ### 1.1 什么是请求分页 **请求分页**:在分页存储管理基础上,增加请求调页和页面置换功能。 **特点**: - 程序运行时,只需装入部分页面 - 需要访问的页面不在内存时,产生缺页中断 - 将所需页面调入内存 ### 1.2 页表机制 **页表项内容**: | 字段 | 说明 | |-----|------| | 页框号 | 该页在内存中的页框号 | | 状态位(存在位) | 该页是否在内存中 | | 访问位 | 该页是否被访问过 | | 修改位(脏位) | 该页是否被修改过 | | 外存地址 | 该页在外存的地址 | --- ## 二、缺页中断 ### 2.1 什么是缺页中断 **缺页中断**:访问的页面不在内存时产生的中断。 **特点**: - 属于内部中断(异常) - 需要操作系统处理 - 处理完成后重新执行被中断的指令 ### 2.2 缺页中断的处理过程 1. **保护CPU现场** 2. **查找外存**:根据外存地址找到所需页面 3. **检查内存**: - 如果有空闲页框,直接调入 - 如果没有,选择页面换出 4. **页面换出**(如果需要): - 选择牺牲页 - 如果修改位为1,写回外存 - 清除页表项 5. **页面调入**: - 从外存读入页面 - 存入页框 6. **修改页表**: - 设置页框号 - 设置状态位为1 - 清除访问位和修改位 7. **恢复CPU现场**,重新执行被中断的指令 ### 2.3 缺页中断与一般中断的区别 | 特性 | 缺页中断 | 一般中断 | |-----|---------|---------| | 产生时机 | 指令执行期间 | 指令执行完毕 | | 返回 | 重新执行该指令 | 执行下一条指令 | | 处理时间 | 较长(需要I/O) | 较短 | | 频率 | 可能频繁 | 相对较低 | --- ## 三、地址变换 ### 3.1 地址变换过程 1. 根据逻辑地址获取页号和页内偏移 2. 查找页表,获取页表项 3. **检查状态位**: - 如果为1,页面在内存,直接转换地址 - 如果为0,产生缺页中断 4. 缺页中断处理完成后,重新执行指令 ### 3.2 地址变换机构 **硬件支持**: - 页表基址寄存器 - 页表长度寄存器 - 快表(TLB) **地址变换流程**: ``` 逻辑地址 → 页号 + 偏移 ↓ 查快表 → 命中?→ 是 → 直接得到物理地址 ↓ 未命中 查页表 → 在内存?→ 是 → 得到物理地址,更新快表 ↓ 不在内存 缺页中断 → 调页 → 重新执行 ``` --- ## 四、页面分配策略 ### 4.1 固定分配局部置换 **策略**: - 为每个进程分配固定数量的页框 - 缺页时,从该进程的页面中选择置换 **优点**: - 实现简单 - 不影响其他进程 **缺点**: - 分配过少,缺页率高 - 分配过多,浪费内存 ### 4.2 可变分配全局置换 **策略**: - 为每个进程分配一定页框,但可动态调整 - 缺页时,从所有页面中选择置换 **优点**: - 灵活分配页框 - 系统整体缺页率低 **缺点**: - 实现复杂 - 可能淘汰其他进程的页面 ### 4.3 可变分配局部置换 **策略**: - 为每个进程分配一定页框 - 缺页时,从该进程的页面中选择置换 - 根据缺页率动态调整页框数 **优点**: - 兼顾灵活性和隔离性 - 系统性能好 --- ## 五、页面调入策略 ### 5.1 预调页策略 **思想**:根据预测,提前调入可能需要的页面。 **适用场景**: - 程序首次加载 - 顺序访问模式 ### 5.2 请求调页策略 **思想**:需要时才调入页面。 **特点**: - 实现简单 - 首次访问产生缺页中断 --- ## 六、考研重点 1. **请求分页的基本原理**:部分装入、请求调页 2. **页表项内容**:状态位、访问位、修改位、外存地址 3. **缺页中断**:处理过程、与一般中断的区别 4. **地址变换过程**:检查状态位、缺页处理 5. **页面分配策略**:固定分配、可变分配、局部置换、全局置换 6. **页面调入策略**:预调页、请求调页 --- *下一节:4.8 页面置换算法*