无论是否对内存进行扩容,如果面对这样的情况:需访问的数据或程序不在内存时,怎么将塞的满满当当的内存做出适当的调整,使新的程序装入内存,即内存的置换策略。下面将学习的几个置换策略重新描述一下。
1. FIFO算法
将先进入内存的程序块,对于以后来说,可能是最先淘汰的。基于这个想法,采用先进先出的策略来做替换。
这个方法并没有考虑局部性原理,只考虑了程序的顺序执行。因而相对于后面的几个策略显得不是那么有优势。
将各页表项,看作是循环放置的,有一个指针指向当前被置换的页表项。
具体过程:
1. 当装入新程序时,将指针所指向的页表项装入新的程序块;
2. 指针向下一项移动。
2. URL算法
这个策略的想法是:如果当前页表项很久没有被使用,那么根据局部性原理,以后也不太可能会被使用。
这个策略可以减少抖动的出现,在实际运用中表现的效率也最好。
具体过程:
采用一种能判别时长的方式标记页表项(比如:使用栈或时间标签),新程序等待装入到时长最长的页表中
无论是使用栈还是时间标签,将栈低元素移除和每次更新时间标签,都是开销很大的操作。
3. OPT算法
将下次访问距当前时间最长的页表项置换出去,这显然这样可以极大的降低抖动。
如果细想一想,可以发现这是无法实现的。因为要预测未来,这及其的困难。