在一个请求分页存储系统中,一个进程的页面走向为4,3,2,1,4,3,5,3,2,1,设分配给该进程的内存块数M=3,采用FIFO页面置换算法(每调进一个新页认为发生一次缺页中断)
(1)FIFO(先进先出算法)
因为有三个内存块,当放入4,3,2后,内存块就满了
后续进来需要通过FIFO算法决定替换谁,两种可能:
①后面进来的是4,3,2中的一个,则无需替换
②不是4,3,2中的一个选最长的数值(即占用内存块最久的)替换,这里为4
所以进一步得到:
接下来同理,4不在1,3,2中,所以再次挑选最长的,3最长,替换3
得到:
以此类推最终:
所以缺页率为9/10*100%=90%
10代表有10列,9代表除了不变以外的列
(2)LRU(最近最久未使用算法)
填充内存块这一步不变
接下来,两种可能
①如果后面的数值在4,3,2中,则不变
②若不在,看4,3,2谁离这一数值最远,在这里4离该数值最远,替换掉4
接下来,看1,3,2中谁离 “4” 这个数最远
接下来同理
最终可得:
(3)OPT算法(最佳置换算法)
OPT是看左边的,谁离他最远就替换谁,LFU是看右边,谁离他最远就替换谁
首先,填充部分是相同的。
接下来有两种可能
①如果后面的数值,在4,3,2中,则不变
②如果后面一个数值不在4,3,2中,就看该数值后面的4,3,2谁离该数值最远,可以看到2离得最远,所以替换2
接下来是4,4在4,3,1中,所以不变
接下来要注意一点:
如果后面的数没有出现4,3,1中的某一个或者多个,
①如果是一个,那么就把这一个当作无穷远将其替换,如下:
②如果是多个,那么就替换掉多个中的第一个
最终得到
(4)LFU算法(最近最少使用算法)
前面填充部分不变
LFU算法与LRU的算法最大的区别在于,LRU算法是替换最久未出现的数值,而LFU算法是近期访问最少的页面被替换。
如上,4,3,2都只进行了一次访问,那么有两种解决方法
①使用LRU算法,若使用该算法,则应替换4
②使用FIFO算法,若使用该算法,则也是替换4
这里我们使用FIFO算法
现在4,3,2,1都只被使用了一次,再次使用FIFO算法,替换3
现在4被使用了2次,3,2,1都被使用了1次,可以通过以下框框看出现的次数
那么对1,2使用FIFO算法,替换2
现在1只出现过1次,4,3出现过2次,那么替换1
以此类推,最终得: