LRU算法介绍

问题背景

在操作系统的内存管理里,如何节省有限的内存并为尽可能多的进程提供资源是一个很重要的问题。

 

内存的虚拟存储管理 ,是现在最通用,最成功的方式——在内存有限的情况下,扩展一部分外存作为虚拟内存,真正的内存只存储当前运行时所用得到信息。这无疑极大地扩充了内存的功能,极大地提高了计算机的并发度。虚拟页式存储管理,则是将进程所需空间划分为多个页面,内存中只存放当前所需页面,其余页面放入外存的管理方式。

 

然而,有利就有弊,虚拟页式存储管理减少了进程所需的内存空间,却也带来了运行时间变长这一缺点:进程运行过程中,不可避免地要把在外存中存放的一些信息和内存中已有的进行交换,由于外存的低速,这一步骤所花费的时间不可忽略。解决的办法:采取尽量好的算法以减少读取外存的次数(进程所需的页基本上命中在主存中)

 

LRU算法思想

 

达到这样一种情形的算法是最理想的——每次调换出的页面是所有内存页面中最迟将被使用的——这可以最大限度的推迟页面调换,这种算法,被称为理想页面置换算法。可惜的是,这种算法是无法实现的。

 

为了尽量减少与理想算法的差距,产生了各种精妙的算法,最近最少使用页面置换算法便是其中一个。LRU算法的提出,是基于这样一个事实:在前面几条指令中使用频繁的页面很可能在后面的几条指令中频繁使用。反过来说,已经很久没有使用的页面很可能在未来较长的一段时间内不会被用到 。这个,就是著名的局部性原理——比内存速度还要快的cache,也是基于同样的原理运行的。因此,我们只需要在每次调换时,找到最近最少使用的那个页面调出内存

 

LRU实现思路

计时法

页表中每一页(cache中每个对象)增加一个域(or属性)”新鲜度量时间“,每次根据” 新鲜度量时间 “最长的规则来选择”出局“候选人,然后将新的页放入主存中,并设置其” 新鲜度量时间 “为0。每个页的” 新鲜度量时间 “根据其加入主存的时间和选择操作发生时的时间来确定。如果hit主存中某页,则设置

 

 

计数法

 

 

以上两个方法仅仅考虑使用标识来进行算法判断,每次存取都要对所有页进行计算和判断。没有考虑选择一个合适的数据结构。

链表法

 

 

其他相关算法

LRU算法算是一种集合元素选择算法(or置换选择算法)  cache算法 ,处理同样问题的算法还有FIFO,NRU等。

 

 

 

 

你可能感兴趣的:(LRU)