在请求分页存储管理系统中,由于使用了虚拟存储管理技术,使得所有的进程页面不是一次性地全部调入内存,而是部分页面装入。可能出现要访问的页面不在内存,这时系统产生缺页中断。操作系统在处理缺页中断时,要把所需页面从外存调入到内存中。如果这时内存中有空闲块,就可以直接调入该页面;如果这时内存中没有空闲块,就必须先淘汰一个已经在内存中的页面,腾出空间,再把所需的页面装入,即进行页面置换。
(1)最佳(Optimal)置换算法/OPT算法(OPTimal replacement algorithm):
-
淘汰以后永不使用的或是在最长(未来)时间内不再被访问的页面。
例子:系统为某进程分配了三个物理块,并考虑有以下的页面号引用串:
7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1进程运行时,先将7,0,1 三个页面装入内存。以后,当进程要访问页面2 时,将会产生缺页中断。此时OS根据最佳置换算法,将选择页面7 予以淘汰。这是因为页面0 将作为第5 个被访问的页面,页面1 是第14 个被访问的页面,而页面7 则要在第18 次页面访问时才需调入。下次访问页面0时,因它已在内存而不必产生缺页中断。当进程访问页面3时,又将引起页面1 被淘汰;因为,它在现有的1,2,0 三个页面中,将是以后最晚才被访问的。下图所示出了采用最佳置换算法时的置换图。由图可看出,采用最佳置换算法发生了6 次页面置换。
方法:
(1)先看物理块中是否有置换的页面数,没有的话产生缺页中断,有的话,不需要进行置换数据,直接走下去。
(2)产生缺页中断的需要置换,看后续出现的最晚与物理块的页面吻合的页面数/不再出现页面数,要先去除,因为我们需要淘汰以后永不使用的或是在最长(未来)时间内不再被访问的页面。优点:
保证获取最低的缺页率。缺点:
无法预知一个进程在内存的若干页面,那个在未来最长时间内不再被访问,是一种无法实现的算法。
(2)随机算法/RAND算法(Random algorithm):
随机淘汰。利用软件或硬件的随机数发生器来确定主存储器中被替换的页面。
优点:
算法最简单,而且容易实现。缺点:
这种算法完全没有利用主存储器中页面调度情况的历史信息,也没有反映程序的局部性,所以命中率比较低。性能不稳定。
(3)先进先出算法/FIFO算法(First-In First-Out algorithm):
- 淘汰最先调入主存储器的页面。
进程运行时,先将7,0,1 三个页面装入内存。以后,当进程要访问页面2 时,将会产生缺页中断。此时OS根据先进先出算法,将选择页面7 予以淘汰。这是因为页面7 最先调用,下次访问页面0时,因它已在内存而不必产生缺页中断。当进程访问页面3时,又将引起页面1 被淘汰。由图可看出,采用先进先出算法发生了12次页面置换。
优点:
比较容易实现,能够利用主存储器中页面调度情况的历史信息。缺点:
没有反映程序的局部性。因为最先调入主存的页面,很可能也是经常要使用的页面。
(4) 近期最少使用算法/LFU算法(Least Frequently Used algorithm):
淘汰选择近期最少访问的页面。因为到目前为止最少使用的页面,很可能也是将来最少访问的页面。
优点:
充分利用了主存中页面调度情况的历史信息,又正确反映了程序的局部性。缺点:
种算法实现起来非常困难,它要为每个页面设置一个很长的计数器,并且要选择一个固定的时钟为每个计数器定时计数。在选择被替换页面时,要从所有计数器中找出一个计数值最大的计数器。
(5) 最久没有使用算法/LRU算法(Least Recently Used algorithm):
- 淘汰近期最久没有被访问过的页面。核心思想是“如果数据过去被访问多次,那么将来被访问的频率也更高”。
进程运行时,先将7,0,1 三个页面装入内存。以后,当进程要访问页面2 时,将会产生缺页中断。此时OS根据最久没有使用算法,将选择页面7 予以淘汰。这是因为页面7 是过去时间内在7,0,1三个页面中没有新操作的。下次访问页面0时,因它已在内存而不必产生缺页中断。当进程访问页面3时,又将引起页面1 被淘汰;因为,它在过去时间内的2,0,1三个页面中,是最早被访问的,即近期最久没有被访问过。下图所示出了采用 近期最少使用算法时的置换图。由图可看出,采用最佳置换算法发生了9次页面置换。
方法:
LRU算法选择过去一段时间里最久未被使用的页面。若出现缺页,从该页向前查找,先找到的M-1个页面保留在内存,另外那个替换掉。优点:
它把LFU算法中要记录数量上的”多”与”少”简化成判断”有”与”无”,因此,实现起来比较容易。