最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

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

运维笔记admin1浏览0评论

操作系统之页面置换算法(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算法)

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

发布评论

评论列表(0)

  1. 暂无评论