操作系统:页面置换算法

概念

缺页中断:缺页中断就是要访问的页不在主存,需要操作系统将其调入主存后再进行访问。

页面置换算法:在地址映射过程中,若在页面中发现所要访问的页面不在内存中,则产生缺页中断。当发生缺页中断时,如果操作系统内存中没有空闲页面,则操作系统必须在内存选择一个页面将其移出内存,以便为即将调入的页面让出空间。而用来选择淘汰哪一页的规则叫做页面置换算法。

最佳置换算法(OPT)

即每次选择淘汰的页面将是以后用不使用的,或者在最长时间内不再被访问的页面,这样可以保证最低的缺页率

在这里插入图片描述

最佳置换算法可以保证最低的缺页率,但实际上,只有在进程的执行过程中才可以知道接下来会访问的页面,操作系统对接下来要访问的页面是不能进行预判的,因此该算法是不能被实现的。

先进先出置换算法(FIFO)

即每次选择淘汰的页面是最早进入内存的页面

实现:把调入内存的页面按照先后顺序放入队列,当需要进行换出页面时,将队头页面换出。队列的最大长度取决于系统为进程分配了多少个内存块。

Belady异常:当为进程分配的内存块增加时,缺页次数不减反增的现象

只有FIFO会产生Belady异常

FIFO虽然实现简单,但是算法与进程实际运行时的规律不符合,因为先进入的页面也有可能被经常访问。算法效率低

最近最久未使用置换算法(LRU)

即淘汰的页面为最近最久未使用的页面

实现:在页表项中,用访问字段记录该页面自上次访问以来所经历的时间t,当要淘汰页面时,选择t最大的淘汰。

该算法实现需要专门的硬件支持,虽然算法性能好,但是实现困难,开销大

时钟置换算法(CLOCK)

时钟置换算法是一种性能和开销较均衡的算法,又称最近未用算法(NRU)

简单的时钟置换算法

实现:为每个页面设置一个访问位,并通过链接指针将所有页面链接为一个循环队列。当某页被访问的时候,将该页的访问位置为1,当需要淘汰一个页面时,只需要检查页的访问位,如果是0,将该页换出,如果是1,则将它置为0,暂不换出,继续检查下一个页面,直到找到访问位为0的页面,如果遍历一遍后所有页面都是1,此时所有页面已经都置为0,那么重新遍历队列即可。

由于该算法只考虑了一个页面是否最近被访问过,但没有考虑I/O操作,即如果被淘汰的页面没有被修改过,那么就不需要执行I/O操作写回外存。因此会造成性能的下降。

改进的时钟置换算法

在简单时钟置换算法的基础上,优先淘汰没有修改过的页面,规避I/O

实现:增加修改位,为0,没被修改过;为1,被修改过

算法规则:将所有可能被置换的页面排成一个队列

  • 第一轮扫描:从当前位置开始扫描到第一个(0,0)的帧用于替换。本轮扫描不修改任何标志位
  • 第二轮扫描:若第二轮扫描失败,则重新扫描,查找第一个(0,1)的帧用于替换。本轮将所有扫描过的帧访问位设置为0
  • 第三轮扫描:若第二轮扫描失败,则重新扫描,查找第一个(0,0)的帧用于替换。本轮扫描不修改任何标志位
  • 第四轮扫描:若前三轮扫描均失败,则重新扫描,查找第一个(0,1)的帧用于替换。

由于第二轮已经将所有访问位设置为0,因此经过第三轮和第四轮一定会有一个帧被选中。

总结

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值