clock算法中的Belady现象

clock算法是有belady现象的。

belady现象是指局部置换算法中,发现某进程缺页率变高,于是操作系统给它又分了几个物理页,原以为缺页率的增高是由于工作集变大,物理页帧不够用,结果增加了物理页以后,缺页率不降反而升高。

belady现象的出现,是由于置换算法将需要经常访问的页面置换了出去导致的。例如FIFO算法,即便最开始进入内存的那个页面是最近以及未来要经常访问的,但是FIFO还是选择把它换出去。

FIFO选择替换最早进入内存的页面,没有考虑到这个页面未来是否可能会经常访问,所以导致了belady现象。

类似的算法还有clock算法,clock算法本质跟FIFO一样,假如物理页帧数为4,并页面p1、p2、p3、p4先后被访问并被载入物理页帧,从p4被载入内存的时刻t1开始,直到下一次发生缺页的时刻t2为止这段时间内最经常访问的页是p1,根据局部性原理,未来p1有很大可能要继续访问。但是clock算法给这四个页面都设置了访问位,而且很遗憾的是,这个访问位只有一个比特,它根本区分不了这个四个页面中谁被访问最频繁,这4个页面的访问位都是1,根据clock算法,t2时候发生缺页,clock算法按照被载入内存的时间先后扫描所有页帧,将第一个访问位为0的页面置换出去,但是显然这四个页面的访问位都是1,所以clock算法会将这4个页面的访问位依次置为0,然后循环扫描,将p1置换出去。所以clock算法是存在belady现象的。

clock算法的提出就是因为觉得LRU为了维持对访问局部性(谁是最近第一个被访问的、谁是最近第2个被访问的、...)的感知,开销太大,LRU需要经常修改页面链表,确保是按照最近访问时间排序。FIFO不需要费这种功夫,所以开销比较小,但是缺点是FIFO感知不了访问局部性。

clock算法是LRU和FIFO的折中,但是还是偏向于FIFO,它不像LRU那样能够区分页面的访问时间的先后顺序,它只能够区分有没有被访问过,至于在那些都被访问过的页面中,谁是最频繁被访问的、谁是最近被访问的,clock算法区分不了。所以导致它经过一轮扫描以后退化成为FIFO。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值