请求分页存储管理方式
请求分页系统是建立在基本分页基础上,其主要硬件支持有请求分页的页表机制、缺页中断机构和地址变换机构,其实现请求分页的软件有请求调页和页面置换。
1. 请求分页的硬件支持
1.1. 请求页表机制
请求页表机制的主要数据结构是请求页表:
| 页号 | 物理块号 | 状态位 P | 访问字段 A | 修改位 M | 外存地址 |
- 状态位 P 标识该页是否已调入内存
- 访问字段 A 记录该页被访问次数,或记录该页最近未被访问时长
- 修改位 M 标识该页在调入内存后是否被修改过,若被修改,则需用该页更新外存的副本。
1.2. 缺页中断机构
在请求分页系统中,一旦所要访问的页面不存在,便产生一个缺页中断,请求 OS 将所缺的页面调入内存。如同其他中断,缺页中断也需要保护现场、分析中断原因、转入缺页中断处理程序以及恢复中断等。由于缺页中断发生在指令执行期间,还要求在指令执行期间立即产生中断信号,而且一条指令执行期间可产生多次缺页中断,要求硬件机构能保存多次中断状态。
1.3. 地址变换机构
2. 请求分页的内存分配
如何给每个进程分配物理块?
2.1. 最小物理块数
最小物理块是能够保证进程正常运行所需的最小物理块数,存放指令、存放数据和缺页中断都需要物理块。
2.2. 内存分配策略
在请求分页系统中可采用固定和可变两种内存分配策略,在进行置换时刻采用全局和局部两种策略。
固定分配局部置换(Fixed Allocation,Local Replacement)
即为进程分配一组固定数目的物理块(在进程期间不改变),进程在运行中发现缺页时,仅允许用该进程的页面去置换缺页。
可变分配全局置换(Variable Allocation,Global Replacement)
即每个进程所获得的物理块数在进程运行期间可变,进程在运行中发现缺页时,则将 OS 所保留的空闲物理块(被组织为一个队列)取出一块用于缺页调入。若无空闲物理块,则 OS 从内存中选出一页用于置换。
可变分配局部置换(Variable Allocation,Local Replacement)
进程在运行中发现缺页时,OS 将用该进程的页面去置换缺页。OS 根据进程缺页的频繁程度增减物理块。
2.3. 物理块分配算法
在采用固定分配策略时,如何给每个进程分配物理块?
- 平均分配算法
- 按比例分配算法:以进程大小为比例
- 考虑优先权的分配算法
3. 页面调入策略
3.1. 何时调入页面
预调入策略:在第一次将进程调入内存时,将程序员指出的那些页调入内存;每当程序被调度运行时,将工作集中的所有页调入内存。
请求调入策略:发现缺页则调入。
3.2. 从何处调入页面
请求分页系统的外存分为文件区和对换区。
当 OS 拥有足够对换区空间时,将进程有关的所有文件都复制到对换区,页面从对换区调入。
当 OS 缺失足够对换区空间时,凡不会被修改的文件从文件区调入(不用经历修改过的页面从内存写回磁盘),而可能被修改的文件在被换出后便调入对换区。
UNIX 方式,未运行过的页面都从文件区调入,运行过又被换出的页面均放在对换区。
3.3. 如何调入页面
每当程序所要访问的页面未在内存时(存在位为“0”),便向 CPU 发出一缺页中断,中断处理程序首先保留 CPU 环境,分析中断原因后转入缺页中断处理程序。该程序通过查找页表得到该页在外存的物理块后,如果此时内存能容纳新页,则启动磁盘 I/O,将所缺之页调入内存,然后修改页表。如果内存已满,则须先按照某种置换算法,从内存中选出一页准备换出;如果该页未被修改过(修改位为“0”),可不必将该页写回磁盘;但如果此页已被修改(修改位为“1”),则必须将它写回磁盘,然后再把所缺的页调入内存,并修改页表中的相应表项,置其存在位为“1”,并将此页表项写入快表中。在缺页调入内存后,利用修改后的页表形成所要访问数据的物理地址,再去访问内存数据。整个页面的调入过程对用户是透明的。
3.4. 缺页率
缺页率=访问页面失败次数/访问页面总次数
4. ChangeLog
2018.09.13 初稿