页面置换算法

目录

前言

最优·页面置换算法

最近未使用·页面置换算法

先进先出(FIFO)·页面置换算法

第二次机会·页面置换算法

时钟·页面置换算法

最近最少使用(LRU)·页面置换算法

工作集·页面置换算法

工作集时钟·页面置换算法

页面置换算法小结


前言

发生缺页中断时,操作系统必须在内存中选择一个页面将其换出内存
如果要换出的页面在内存驻留期间已经被修改过,就必须把它写回磁盘以以便更新在磁盘上的副本
如果要换出的页面没有被修改过,那么不需要回写
下面是选择页面换出内存的一些方法
 

最优·页面置换算法

在缺页中断发生时,选择一个在后继指令中,最晚被访问的页面将其置换掉
由于操作系统没法预判接下来要执行的指令,所以该算法是没法实现的,但它可以用来衡量其它算法的效率
 

最近未使用·页面置换算法

系统设计了硬件为每一页面设置了2个状态位,当页面被访问(读或写)时设置R位,当页面被写入是设置M位
当启动一个进程时,它的所有页面的两个位都由操作系统设置为0,R位被定期地清零,以区别最近没有被访问的页面和被访问的页面
M和R的值有4种组合如下

算法随机地从类编号(即上图的编号)中选择一个最小编号的非空类中挑选一个页面淘汰
虽然性能不是很好,但够用了
 

先进先出(FIFO)·页面置换算法

由操作系统维护一个所有当前在内存中的页面的链表,最新进入的页面放在表尾,最早进入的页面放在表头。
当发生缺页中断时,淘汰表头的页面,并把新调入的页面加在表尾
由于可能淘汰最常使用的页面,所有很少纯粹地使用此算法
 

第二次机会·页面置换算法

FIFO算法可能把最常使用的页面置换出去,为了避免这个问题,对该算法做一个简单的改变:发生中断时,检查最老的页面的R位,如果R位是0,则立刻置换掉,如果R位是1,则把R位清0,并把该页面放到链表尾端,然后继续搜索

 

时钟·页面置换算法

把所有的页面保存在一个类似钟面的环形链表中,一个指针指向最老的页面
当发送缺页中断时,检查指针指向的页面,如果R位为0就立刻淘汰该页面并把新页面插入到这个位置,如果为1,就清除R位并把指针前移一个位置

 

最近最少使用(LRU)·页面置换算法

当发生缺页中断时,置换位使用时间最长的页面
LRU理论上是可以实现的,但代价很高,为了完全实现LRU需要在内存中维护一个所有页面的链表,最近最多使用的页面在表头,最近最少使用的页面在表尾。每次访问内存时都必须要更新整个链表(这个代价比较高),此外,在链表中找到一个页面,删除它并把它移动到表头也是一个代价很高的操作
然后还是有一些特殊硬件实现LRU算法的,它在硬件中有一个64位计数器C它在每条指令执行完后自动加1,每个表项必须有一个足够容纳这个计数器值的域,在每次访问内存后,将当前的C值保存到被访问页面的页表项中。一旦发生缺页中断,操作系统就检查所有页表项中计数器的值,找到最小的一个页面,这个页面就是最近最少使用的页面
 

工作集·页面置换算法

进程需要的页面在需要时被提前调入,称为请求调页
一个进程当前正在使用的页面的集合称为它的工作集
若每执行几条指令就发生缺页中断,那么称这个程序发生了颠簸

进程被转移到磁盘后,被再次调回CPU时,需要再次准备它的工作集,也就是说,它会一直产生缺页中断直到它的工作集被全部装入内存,这种做法的效率是非常低的,为了解决这个问题,设计了一种方法:工作集模型:它确保在进程运行前,它的工作集就已经在内存中
进程运行前就预先装入其工作集称为预先调页
细节实现见课本mark

工作集时钟·页面置换算法

细节实现见课本mark

 

页面置换算法小结

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值