一、什么是页面置换算法
在进程运行的过程中,若其访问的页面不存在内存中,则会产生缺页中断。如果此时内存中没有空闲的页面,操作系统就需要在内存中选择一个页面将其移出,从而可以将需要访问的页面调入内存中。而用来选择淘汰哪一页的算法就叫做页面置换算法。
好的页面置换算法有较低的页面更换频率。
二、常见的页面置换算法
1、OPT(最佳置换算法)
最佳置换算法:每次选择淘汰的页面将是以后永不使用或者最长时间内不在被访问的页面。这样可以保证最低的缺页率。
例如:假如操作系统给进程分配了3个内存块,并且该进程接下来会依次访问7,5,2,3,6,2,7,1,6,7,2,3,7,2,7。
如图所示,在第4步中,需要把3号页面调入内存,此时内存已经满了,所以需要从7,5,2中选择一个页面进行淘汰。按照最佳置换算法规则,往后寻找,此时2和7会被先后访问,所以把5号页面淘汰,即最长时间内不在被访问的页面。
2、FIFO(先进先出算法)
FIFO算法是最简单的页面置换算法。顾名思义,FIFO每次淘汰的页面是最早进入内存的页面。FIFO的实现方法是把调入内存的页面按先后顺序放入队列中,当需要置换页面时,选择队头的页面即可。
例如:假如操作系统给进程分配了3个内存块,并且该进程接下来会依次访问7,5,2,3,6,2,7,1,6,7,2,3,7,2,7。页面在内存中的表现如下所示:
3、LRU(最近最久未使用算法)
LRU(Least Recently Used),每次淘汰的页面是最近最久未使用的页面。所以需要去记录该页面上次被访问以来所经历的时间t。当需要淘汰页面是,选择内存中现有页面中t最大的,即最近最久未使用的页面。
如:假如操作系统给进程分配了3个内存块,并且该进程接下来会依次访问7,5,2,3,6,2,7,1,6,7,2,3,7,2,7。页面在内存中的表现如下所示:
如图所示,在第四步中需要把3号页面调入内存,而此时内存已满,需要从7、5、2中选择一个页面进行淘汰。按照LRU规则,7号页面上次被访问以来所经历的时间为3,他为最大的,所以把7号页面淘汰出去。
4、LFU(最近最少使用算法)
LFU(最近最少使用算法),它是基于"如果一个数据在最近一段时间内使用次数很少,那么在将来一段时间内被使用的可能性也很小“的思路。注意LFU和LRU算法的不同之处,LRU的淘汰规则是基于访问时间,而LFU是基于访问次数的。
如:假如操作系统给进程分配了3个内存块,并且该进程接下来会依次访问5,4,5,3,3、2、5、1、4。页面在内存中的表现如下所示:
如图所示,在第八步中需要把1号页面调入内存,而此时内存已满,需要从5、2、3中选择一个页面进行淘汰。按照LFU规则,2号页面最近一段时间内使用次数为1,他是最小的。所以把2号页面淘汰出去。
了解更多的技术文章,请扫码关注公众号。