09 最优页面置换算法后续

页面置换算法之最近最久未使用算法

(Least Recently Used, LRU)的基本思路:当一个缺页中断发生时,选择最久未使用的那个页面,并淘汰之。

它是对最优页面置换算法的一个近似,其依据的原理是程序的局部性原理,即在最近一小段时间(最近几条指令)内,如果某些页面被频繁的访问。那么在将来的一小段时间内,它们还有可能会再一次被频繁的访问。反过来说,如果过去某些页面长时间未被访问,那么在将来它们可能会长时间得不到访问。

LRU算法需要记录各个页面使用时间的先后顺序,开销比较大。

两种可能实现的方法:

  • 系统维护一个页面链表,最近刚刚使用过的页面作为首结点,最久未使用的页面作为尾结点。每一次访问内存是,找到相应的页面,把它从链表中摘下来,在移动到链表之首。每当发生缺页中断时,淘汰链表末尾的页面。
  • 设置一个活动页面栈,当访问某页时,将此页号压入栈顶,然后,考察栈内是否有于此页面相同的页号,若有,则抽出。当需要淘汰一个页面时,总是选栈底的页面,他就是最久未被使用的。

时钟页面置换算法

Clock页面置换算法:LRU的近似,对 FIFO的一种改进;

基本思路

  • 需要页表项当中的访问位,当一个页面被装入内存的时候,把改为初始化为0。然后如果这个页面被访问(读/写),则把该位置为1;
  • 把各个页面组织成环形链表(类似于始终表面),把指针执行最老的页面(最先进来);
  • 当发生一个缺页中断的时候,考察指针所指向的最老的页面,若它的访问位为0,立即淘汰;若访问位为1,则把该位该位置置为0,然后指针往下移动一格。如此找下去,直到找到被淘汰的页面,然后把指针移动到它的下一格。

二次机会法(enhanced clock algorithm)

在指针指向的判别位在 accessed bit的基础上增加一个 ditty bit,这样刚被写过的页就可以让指针经过两次,而不被置换出去(因为置换已经被写过的页,也就是脏了的页,需要把它重新写回硬盘,以确保数据的更新,但这样会增加硬盘的访问次数,耗费时间),这样的目的是减少硬盘的访问次数,提高效率。


最不常用算法 (Least Frequently Used, LFU

基本思路:当一个缺页中断发生的时候,选择访问次数最少的那个页面,并把它淘汰。

实现方法:对每一个页面设置一个访问计数器,每当一个页面被访问时,该页面的访问计数器加1。当发生缺页中断的时候,淘汰计数值最小的那个页面。

  • LRULFU 的区别:LRU考察的是多久未访问,时间越短越好;而 LFU考察的是访问次数或频度,访问的次数越多越好(问题:一个页面在进程开始的时候使用的很多,但以后就不怎么使用了。实现也费时费力,解决办法:定期把次数寄存器右移一位)

提示:为了更好的理解知识点,博主在微信公众号中将操作系统知识进行了重新排版和插入图片。感兴趣的朋友可以扫码进行关注。

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值