对于LFU算法和LRU算法,由于在主存中保留的是最近使用过的页面。如果先给某一个程序分配n个主存页面,那么在t时刻,这n个主存页面都是最近使用过的页面。如果再给这个程序多分配一个主存页面,那么在t时刻,这n+1个主存页面也都是最近使用过的页面。因此,在这n+1个主存页面中必然包含了前面的n个主存页面。所以,LFU算法和LRU算法都是堆栈型算法。很显然,OPT算法也是堆栈型算法。那么,FIFO算法是不是堆栈型算法呢?请看图5.20的情况。
图 5.20 FIFO 算法在主存页面数增加时命中率反而下降
  在图5.20中,对于同一个页地址流,当分配给这个程序的主存页面数从3页增加到4页时,命中率反而从3次下降到2次。因此,FIFO算法不是堆栈型算法。
  由于堆栈型替换算法的命中率随分配个该程序的主存页面增加而单调上升,因此,在多道程序系统中,可以采用一种被称为页面失效频率法(PFF:Page Fault Frequency)的动态页面调度方法。具体做法是:根据各道程序在实际运行过程中页面失效率的情况,由操作系统动态调整分配给每道程序的主存页面数。当一道程序的命中率低于某个限定值时就增加分配给该道程序的主存页面数,以提高它的命中率。而当命中率高于某个限定值时就减少分配给该道程序的主存页面数,把节省出来的主存页面分配给其它程序。从而使整个系统的总的命中率和主存利用率都得到提高。