页面置换算法总结

在线考试一般可能只会考察命中次数,即总次数-缺页次数,例如科大讯飞2018年秋招笔试题出现的,因此有必要整理下计算方法。

首先看一下什么是页面置换算法:地址映射过程中,若在页面中发现所要访问的页面不在内存中,则产生缺页中断。当发生缺页中断时,如果操作系统内存中没有空闲页面,则操作系统必须在内存选择一个页面将其移出内存,以便为即将调入的页面让出空间。而用来选择淘汰哪一页的规则叫做页面置换算法。

1.最佳置换算法(OPT)(理想置换算法 不可实现):从主存中移出永远不再需要的页面;如无这样的页面存在,则选择将来最长时间不需要访问的页面。
于是所选择的被淘汰页面是将来永不在使用的,或者是在将来的最长时间内不被访问的,这样可以保证获得最低的缺页率。但是将来的会不会访问操作系统并不知道,因此该算法不能被实现,只是理想的。

最佳置换算法 可以用来评价其他算法。假定系统为某进程分配了三个物理块,并考虑有以下页面号引用串:

7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1

① 进程运行时,先将7, 0, 1三个页面依次装入内存。
② 接下来进程要访问页面2时,产生缺页中断,根据最佳置换算法,会选择未来第18次访问才调入的页面7予以淘汰。
③ 然后,访问页面0时,因为已在内存中所以不必产生缺页中断。
④ 访问页面3时又会根据最佳置换算法将页面1淘汰……
依此类推,如图所示。从图中可以看出釆用最佳置换算法时的情况。可以看到,发生缺页中断的次数为9,页面置换的次数为6。
页面置换算法总结

2.先进先出置换算法(FIFO): 是最简单的页面置换算法。这种算法的基本思想是:当需要淘汰一个页面时,总是选择驻留主存时间最长的页面进行淘汰,即先进入主存的页面先淘汰。
其理由是:最早调入主存的页面被认为不再被使用的可能性最大。

这里仍用上面的实例,釆用FIFO算法进行页面置换。进程访问页面2时,把最早进入内存的页面7换出。然后访问页面3时,再把2、0、1中最先进入内存的页换出。由图可以看出,利用FIFO算法时进行了 12次页面置换,比最佳置换算法正好多一倍。
页面置换算法总结
FIFO算法还会产生当所分配的物理块数增大,但是页故障数不减反增的异常现象,这是由 Belady于1969年发现,故称为Belady异常,只有FIFO算法可能出现Belady 异常,而LRU和OPT算法永远不会出现Belady异常。

3.最近最久未使用(LRU)算法: 这种算法的基本思想是:利用局部性原理,根据一个作业在执行过程中过去的页面访问历史来推测未来的行为。它认为过去一段时间里不曾被访问过的页面,在最近的将来可能也不会再被访问。
所以,这种算法的实质是:当需要淘汰一个页面时,总是选择在最近一段时间内最久不用的页面予以淘汰。即淘汰最近最长时间未访问过的页面。(往前看)

再对上面的实例釆用LRU算法进行页面置换,如图所示。进程第一次对页面2访问时,将最近最久未被访问的页面7置换出去。然后访问页面3时,将最近最久未使用的页面1换出。
页面置换算法总结
LRU算法根据各页以前的情况,是 “向前看” 的,而最佳置换算法则根据各页以后的使用情况,是 “向后看” 的。