操作系统之页面置换算法(FIFO、LFU、LRU、OPT算法)

操作系统之页面置换算法(FIFO、LFU、LRU、OPT算法)

TIPS:

主存:实际上的物理内存。

虚存(虚拟内存):虚拟存储技术。虚拟内存使计算机系统内存管理的一种技术。它使得应用程序认为它拥有的可用的内存(一个连续完整的地址空间),而实际上,它通常被分割成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。目前,大多数操作系统都是用了虚拟内存,如Windows家族的“虚拟内存”;Linux的“交换内存”等。
  电脑虚拟内存,根据本机物理内存大小和使用率来定,才能达到最好的效果。虚拟内存的原理就是用软件将物理磁盘模拟成内存状态,以供缓存。如果物理内存较小,有明显的不够用的情况,可以设置为物理内存的2-3倍大小,如果物理内存够大,明显够用的时候,则不需要设置很大的虚拟内存,设置为物理内存的1倍就可。

前言

  在我们的系统中经常使用缓存,比如说redis缓存或者是guava缓存等(常用于提升数据查询速度)。由于缓存容量有限,当缓存容量达到上限时,就需要删除部分数据挪出空间,这样新数据才可以添加进来。缓存数据不能随机删除,一般情况下我们需要根据某种算法删除缓存数据。常用淘汰算法有LRU,LFU,FIFO

先进先出算法(FIFO算法)-队列类

  这种算法选择最先调入主存储器的页面作为被替换的页面。它的优点是比较容易实现,能够利用主存储器中页面调用情况的历史信息,但是,没有反映程序的局部性。因为最先调入主存的页面,很可能也是经常要使用的页面。

近期最少使用算法(LFU算法)-堆栈类

  这种算法选择近期最少访问的页面作为被替换的页面。显然,这是一种非常合理的算法,因为到目前为止最少使用的页面,很可能也是将来最少使用的页面。该算法即充分利用了主存中页面调度情况的历史信息,又正确反映了程序的局部性。但是,这种算法实现起来比较困难。

最久没有使用算法(LRU算法)-堆栈类

  这种算法把近期最久没有被访问过的页面作为被替换的页面。它把LFU算法中要记录数量上的“多”与“少”简化成判断“有”与“无”,因此,它实现起来比较容易

  LRU是Least Recently Used的缩写,即最近最少使用页面置换算法。这个算法会认为最近使用的数据是热门数据,下一次很大概率将会被再次使用。而最近很少被使用的数据,很大概率下一次不再用到。当缓存容量满的时候,优先淘汰最近很少使用的数据。
  假设现在缓存内部数据如下图所示(即该缓存只能存储五个数据):

  当调用缓存获取key = 1的数据,LRU算法需要将1这个几点移动到头节点,其余节点不变,如图所示。

  新来的数据直接添加到头节点,将末尾的数据删除。

效果图
  这里总结一下LRU算法的具体步骤:

  • 新数据直接插入到列表头部
  • 缓存数据被命中,将数据移动到列表头部
  • 缓存已满的时候,移除列表尾部数据。

实现的数据结构

  1. 双向链表(查询时间复杂度为O(N))
  2. 哈希表(底层是数组+链表,在不发生哈希碰撞的情况下查询的时间复杂度是O(1))

最优替换算法(OPT算法)

  上几种替换算法主要是以主存储器中页面调度的历史情况为依据的,它假设将来主存储器中的页面调度情况与过去一段时间内主存储器中的页面调度情况相同。显然,这种假设不总是正确的。最好的算法应该是选择将来最久不被访问的页面作为被替换的页面,这种替换算法的命中率一定是最高的,它就是最优替换算法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ufgnix0802

总结不易,谢谢大家的支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值