操作系统学习笔记 3.7 请求分页管理方式
前言
参考王道书。
后续会进一步整理,包括添加笔记内容,标明参考资料。
更新中。。。
请求分页存储管理与基本分页存储管理的主要区别:
- 当所访问的信息不在内存时,由操作系统负责将所需信息从外存调入内存,然后继续执行程序。
- 若内存空间不够,由操作系统负责将内存中暂时用不到的信息换出到外存。
实现:
- 页表机制
- 缺页中断机构
- 地址变换机构
一、页表机制
与基本分页管理相比,请求分页管理中,为了实现“请求调页”,操作系统需要知道每个页面是否已经调入内存;如果还没调入,那么也需要知道该页面在外存中存放的位置。
操作系统也需要记录各个页面是否被修改的信息。
当内存空间不够时,要实现“页面置换",操作系统需要通过某些指标来决定到底换出哪个页面;有的页面没有被修改过,就不用再浪费时间写回外存。有的页面修改过,就需要将外存中的旧数据覆盖。
请求页表
-
请求页表增加了四个字段
-
内存块号
-
状态位
是否已经调入内存 -
访问字段
可记录最近被访问过几次,或记录上次访问的时间,供置换算法选择换出页面时参考 -
修改位
页面调入内存后是否被修改过 -
外存地址
页面在外存中的存放位置
二、缺页中断机构
在请求分页系统中,每当要访问的页面不在内存时,便产生一个缺页中断,然后由操作系统的缺页中断处理程序处理中断。
此时缺页的进程阻塞,放入阻塞队列,调页完成后再将其唤醒,放回就绪队列。
- 如果内存中有空闲块,则为进程分配一个空闲块,将所缺页面装入该块,并修改页表中相应的页表项。
- 如果内存中没有空闲块,则由页面置换算法选择一个页面淘汰,若该页面在内存期间被修改过,则要将其写回外存。未修改过的页面不用写回外存。
注:
- 缺页中断是因为当前执行的指令想要访问的目标页面未调入内存而产生的,因此属于内中断
- 一条指令在执行期间,可能产生多次缺页中断。
如:copy A to B,即将逻辑地址A中的数据复制到逻辑地址B,而A、B属于不同的页面,则有可能产生两次中断
中断分类
- 内中断(内部异常)
信号的来源:CPU内部- 陷阱、陷入(trap)
有意而为之的异常,如系统调用 - 故障(fault)
由错误条件引起的,可能被故障处理程序修复,如缺页中断 - 终止(abort)
不可恢复的致命错误造成的结果,终止处理程序不再将控制返回给引发终止的应用程序,如整数除0
- 陷阱、陷入(trap)
- 外中断
信号的来源:CPU外部- I/O 中断请求
- 人工干预
假设此时要访问逻辑地址= (页号, 页内偏移量) = (0, 1024)
三、地址变换机构
请求分页存储管理与基本分页存储管理的主要区别:
- 当所访问的信息不在内存时,由操作系统负责将所需信息从外存调入内存,然后继续执行程序。
- 若内存空间不够,由操作系统负责将内存中暂时用不到的信息换出到外存。
操作系统要提供的功能:
- 请求调页功能
将缺失页面从外存调入内存 - 页面置换功能
将暂时用不到的页面换出外存
地址变换步骤
新增步骤:
- 请求调页(查到页表项时进行判断)
- 页面置换(需要调入页面,但没有空闲内存块时进行)
- 需要修改请求页表中新增的表项
- 找到对应页表项后,若对应页面未调入内存,则产生缺页中断,之后由操作系统的缺页中断处理程序进行处理
注:
- 快表中有的页面一定是在内存中的。若某个页面被换出外存,则快表中的相应表项也要删除,查则可能访问错误的页面
- 只有“写指令”才需要修改“修改位”。并且,一般来说只需修改快表中的数据,只有要将快表项删除时才需要写回内存中的慢表。这样可以减少访存次数。
- 和普通的中断处理一样,缺页中断处理依然需要保留CPU现场。
- 需要用某种“页面置换算法”来决定一个换出页面
- 换入/换出页面都需要启动慢速的/0操作,可见,如果换入/换出太频,会有很大的开销。
- 页面调入内存后,需要修改慢表,同时也需要将表项复制到快表中。
在具有快表机构的请求分页系统中,访问一个逻辑地址时,若发生缺页,则地址变换步骤是:
- 查快表:未命中
- 查慢表:发现未调入内存
- 调页:调入的页面对应的表项会直接加入快表
- 查快表:命中
- 访问目标内存单元