存储管理——页面置换算法
内存的空间相对来说是比较小的,这个时候程序在执行过程中遵循一个局部性原理,当前正在运行的部分需要装载内存中,不在运行的部分会从内存中退出,所以会有一个不断装载和退出的过程,这就是置换过程。
置换过程有一种叫先进先出,先进先出指的是那一页先进的内存,淘汰的时候就先淘汰那一页。
还有一种叫最佳置换法,就是查看这一页在内存中访问的状况,如果这一页经常被访问到,那么这一页就不用进行置换,置换的是不经常被访问的那一页。
最后是最近最少使用置换法,就是看最近那一页最少被使用然后对其进行一个置换。
例题
“×”为缺页,“○”为不缺页
先进先出法(FIFO):
考虑下述页面走向:1,2,3,4,2,1,5,6,2,1,2,3,7,6,3,2,1,2,3,6。当内存块数量为3时,试问先进先出置换算法(FIFO)的缺页次数是多少?(注意:所有内存块最初都是空,凡是第一次用到页面都产生一次缺页)
页面 | 1 | 2 | 3 | 4 | 2 | 1 | 5 | 6 | 2 | 1 | 2 | 3 | 7 | 6 | 3 | 2 | 1 | 2 | 3 | 6 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
块1 | ||||||||||||||||||||
块2 | ||||||||||||||||||||
块3 | ||||||||||||||||||||
缺页 |
第一次访问的页面为1,但是内存是空的,所以缺页,这时候把1装载到块1里面。
页面 | 1 | 2 | 3 | 4 | 2 | 1 | 5 | 6 | 2 | 1 | 2 | 3 | 7 | 6 | 3 | 2 | 1 | 2 | 3 | 6 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
块1 | 1 | |||||||||||||||||||
块2 | ||||||||||||||||||||
块3 | ||||||||||||||||||||
缺页 | × |
第二次访问页面2,这时候块1装载的是页面1,块2和块3是空的,所以缺页,然后把页面2转装到块2中。
页面 | 1 | 2 | 3 | 4 | 2 | 1 | 5 | 6 | 2 | 1 | 2 | 3 | 7 | 6 | 3 | 2 | 1 | 2 | 3 | 6 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
块1 | 1 | 1 | ||||||||||||||||||
块2 | 2 | |||||||||||||||||||
块3 | ||||||||||||||||||||
缺页 | × | × |
第三次访问页面3,这时候块1装载的是页面1,块2装载的是页面2,快3为空,所以访问页面3的时候缺页,然后把页面3装载到块3中。
页面 | 1 | 2 | 3 | 4 | 2 | 1 | 5 | 6 | 2 | 1 | 2 | 3 | 7 | 6 | 3 | 2 | 1 | 2 | 3 | 6 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
块1 | 1 | 1 | 1 | |||||||||||||||||
块2 | 2 | 2 | ||||||||||||||||||
块3 | 3 | |||||||||||||||||||
缺页 | × | × | × |
第四次访问的是页面4,这时候块1装载的是页面1,块2装载的是页面2,块3装载的是页面3,所以也是缺页,但是这时候内存占满,已经没有空间装载页面4,所以开始淘汰,这里使用的是先进先出淘汰法(FIFO),也就是最先装载的最先淘汰,页面1是最先装载进来的,所以先把页面1淘汰掉腾出空间装载页面4。
页面 | 1 | 2 | 3 | 4 | 2 | 1 | 5 | 6 | 2 | 1 | 2 | 3 | 7 | 6 | 3 | 2 | 1 | 2 | 3 | 6 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
块1 | 1 | 1 | 1 | 4 | ||||||||||||||||
块2 | 2 | 2 | 2 | |||||||||||||||||
块3 | 3 | 3 | ||||||||||||||||||
缺页 | × | × | × | × |
第五次访问的是页面2,这时候块1里面装载的是页面4,块2里面装载的是页面2,块3里面装载的是页面3,需要访问的是页面2,就存在块2中,所以不缺页,不缺页就不需要装载,所以内存块里面的页面保持不变。
页面 | 1 | 2 | 3 | 4 | 2 | 1 | 5 | 6 | 2 | 1 | 2 | 3 | 7 | 6 | 3 | 2 | 1 | 2 | 3 | 6 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
块1 | 1 | 1 | 1 | 4 | 4 | |||||||||||||||
块2 | 2 | 2 | 2 | 2 | ||||||||||||||||
块3 | 3 | 3 | 3 | |||||||||||||||||
缺页 | × | × | × | × | ○ |
第六次访问的是页面1,这时候块1里面是页面4,块2里面是页面2,块3里面是页面3,也是缺页的并且内存被占满,这时候就需要淘汰掉一个然后把页面1装载进来,最先装载的是块1里面的页面1,然后是块2里面的页面2,再到块3里面的页面3,第四次访问的时候页面1刚被置换掉,第六次访问的时候保持不变,所以现在最先进入的是块2,需要把块2里面的页面2置换成当前所需的页面1。
页面 | 1 | 2 | 3 | 4 | 2 | 1 | 5 | 6 | 2 | 1 | 2 | 3 | 7 | 6 | 3 | 2 | 1 | 2 | 3 | 6 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
块1 | 1 | 1 | 1 | 4 | 4 | 4 | ||||||||||||||
块2 | 2 | 2 | 2 | 2 | 1 | |||||||||||||||
块3 | 3 | 3 | 3 | 3 | ||||||||||||||||
缺页 | × | × | × | × | ○ | × |
第七次访问的是页面5,这时候块1里面是页面4,块2里面是页面1,块3里面是页面3,也是缺页并且内存占满,这时候最先进入的是页面3,因为块1和块2里面的页面页面4和页面1是刚置换装载的,把页面3置换为现在需要的页面5
页面 | 1 | 2 | 3 | 4 | 2 | 1 | 5 | 6 | 2 | 1 | 2 | 3 | 7 | 6 | 3 | 2 | 1 | 2 | 3 | 6 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
块1 | 1 | 1 | 1 | 4 | 4 | 4 | 4 | |||||||||||||
块2 | 2 | 2 | 2 | 2 | 1 | 1 | ||||||||||||||
块3 | 3 | 3 | 3 | 3 | 5 | |||||||||||||||
缺页 | × | × | × | × | ○ | × | × |
第八次访问的是页面6,这时块1里面是页面4,块2里面是页面1,块三里面是页面5,也是缺页并且内存被占满,这时候块1,块2,块3都已经被置换过一次了,最先置换进来的是块1的页面4,所以现在要把页面4置换为当前所需的页面。
页面 | 1 | 2 | 3 | 4 | 2 | 1 | 5 | 6 | 2 | 1 | 2 | 3 | 7 | 6 | 3 | 2 | 1 | 2 | 3 | 6 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
块1 | 1 | 1 | 1 | 4 | 4 | 4 | 4 | 6 | ||||||||||||
块2 | 2 | 2 | 2 | 2 | 1 | 1 | 1 | |||||||||||||
块3 | 3 | 3 | 3 | 3 | 5 | 5 | ||||||||||||||
缺页 | × | × | × | × | ○ | × | × | × |
第九次访问的是页面2,这时块1里面是页面6,块2里面是页面1,块3里面是页面5,也是缺页并且内存占满,块1已经被置换过两次了,块2和块3都只被置换1次,块2比块3先被置换的,也就是目前块2里面的页面1是最先进入的,所以把块2里面的页面1置换为当前所需要的页面。
页面 | 1 | 2 | 3 | 4 | 2 | 1 | 5 | 6 | 2 | 1 | 2 | 3 | 7 | 6 | 3 | 2 | 1 | 2 | 3 | 6 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
块1 | 1 | 1 | 1 | 4 | 4 | 4 | 4 | 6 | 6 | |||||||||||
块2 | 2 | 2 | 2 | 2 | 1 | 1 | 1 | 2 | ||||||||||||
块3 | 3 | 3 | 3 | 3 | 5 | 5 | 5 | |||||||||||||
缺页 | × | × | × | × | ○ | × | × | × | × |
第十次访问的是页面1,这时块1里面时页面6,块2里面是页面2,块3里面是页面5,也是缺页并且内存占满,块1和块2已经置换两次,就剩块3只置换了一次,置换次数越少的说明进入时间是最早的,所以需要把快三里面的页面5置换为当前所需要的页。
页面 | 1 | 2 | 3 | 4 | 2 | 1 | 5 | 6 | 2 | 1 | 2 | 3 | 7 | 6 | 3 | 2 | 1 | 2 | 3 | 6 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
块1 | 1 | 1 | 1 | 4 | 4 | 4 | 4 | 6 | 6 | 6 | ||||||||||
块2 | 2 | 2 | 2 | 2 | 1 | 1 | 1 | 2 | 2 | |||||||||||
块3 | 3 | 3 | 3 | 3 | 5 | 5 | 5 | 1 | ||||||||||||
缺页 | × | × | × | × | ○ | × | × | × | × | × |
第十一次访问的是页面2,这时候块1里面是页面6,块2里面是页面2,已经存在页面2,就说明不缺页了,内存里面的页面页不需要置换。
页面 | 1 | 2 | 3 | 4 | 2 | 1 | 5 | 6 | 2 | 1 | 2 | 3 | 7 | 6 | 3 | 2 | 1 | 2 | 3 | 6 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
块1 | 1 | 1 | 1 | 4 | 4 | 4 | 4 | 6 | 6 | 6 | 6 | |||||||||
块2 | 2 | 2 | 2 | 2 | 1 | 1 | 1 | 2 | 2 | 2 | ||||||||||
块3 | 3 | 3 | 3 | 3 | 5 | 5 | 5 | 1 | 1 | |||||||||||
缺页 | × | × | × | × | ○ | × | × | × | × | × | ○ |
第十二次访问的是页面3,块1到块3里面没有页面3,缺页,块1到块3都经历了两次置换,现在最先进入的是块1的页面6,把最先进入的置换为当前所需的。
页面 | 1 | 2 | 3 | 4 | 2 | 1 | 5 | 6 | 2 | 1 | 2 | 3 | 7 | 6 | 3 | 2 | 1 | 2 | 3 | 6 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
块1 | 1 | 1 | 1 | 4 | 4 | 4 | 4 | 6 | 6 | 6 | 6 | 3 | ||||||||
块2 | 2 | 2 | 2 | 2 | 1 | 1 | 1 | 2 | 2 | 2 | 2 | |||||||||
块3 | 3 | 3 | 3 | 3 | 5 | 5 | 5 | 1 | 1 | 1 | ||||||||||
缺页 | × | × | × | × | ○ | × | × | × | × | × | ○ | × |
第十三次访问的是页面7,这时候块1到块3里面都没有页面7,所以缺页,块1已经经历3次置换,块2和块3才经历了2次置换,目前为止块2的页面2是最先进入的,所以需要把块2的页面2置换为当前所需的。
页面 | 1 | 2 | 3 | 4 | 2 | 1 | 5 | 6 | 2 | 1 | 2 | 3 | 7 | 6 | 3 | 2 | 1 | 2 | 3 | 6 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
块1 | 1 | 1 | 1 | 4 | 4 | 4 | 4 | 6 | 6 | 6 | 6 | 3 | 3 | |||||||
块2 | 2 | 2 | 2 | 2 | 1 | 1 | 1 | 2 | 2 | 2 | 2 | 7 | ||||||||
块3 | 3 | 3 | 3 | 3 | 5 | 5 | 5 | 1 | 1 | 1 | 1 | |||||||||
缺页 | × | × | × | × | ○ | × | × | × | × | × | ○ | × | × |
以此类推,最后得出的结果如下表,总共缺页16次。
页面 | 1 | 2 | 3 | 4 | 2 | 1 | 5 | 6 | 2 | 1 | 2 | 3 | 7 | 6 | 3 | 2 | 1 | 2 | 3 | 6 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
块1 | 1 | 1 | 1 | 4 | 4 | 4 | 4 | 6 | 6 | 6 | 6 | 3 | 3 | 3 | 3 | 2 | 2 | 2 | 2 | 6 |
块2 | 2 | 2 | 2 | 2 | 1 | 1 | 1 | 2 | 2 | 2 | 2 | 7 | 7 | 7 | 7 | 1 | 1 | 1 | 1 | |
块3 | 3 | 3 | 3 | 3 | 5 | 5 | 5 | 1 | 1 | 1 | 1 | 6 | 6 | 6 | 6 | 6 | 3 | 3 | ||
缺页 | × | × | × | × | ○ | × | × | × | × | × | ○ | × | × | × | ○ | × | × | ○ | × | × |
最佳置换法(OPT):
考虑下述页面走向:1,2,3,4,2,1,5,6,2,1,2,3,7,6,3,2,1,2,3,6。当内存块数量为3时,试问最佳置换算法(FIFO)的缺页次数是多少?(注意:所有内存块最初都是空,凡是第一次用到页面都产生一次缺页)
页面 | 1 | 2 | 3 | 4 | 2 | 1 | 5 | 6 | 2 | 1 | 2 | 3 | 7 | 6 | 3 | 2 | 1 | 2 | 3 | 6 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
块1 | ||||||||||||||||||||
块2 | ||||||||||||||||||||
块3 | ||||||||||||||||||||
缺页 |
最开始访问页面1的时候,这时候内存为空,所以为缺页,把页面页装载到块1中
页面 | 1 | 2 | 3 | 4 | 2 | 1 | 5 | 6 | 2 | 1 | 2 | 3 | 7 | 6 | 3 | 2 | 1 | 2 | 3 | 6 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
块1 | 1 | |||||||||||||||||||
块2 | ||||||||||||||||||||
块3 | ||||||||||||||||||||
缺页 | × |
第二次访问的是页面2,这时候块1厘面为页面2,块2和块3为空,所以缺页,把页面2装载到块2中
页面 | 1 | 2 | 3 | 4 | 2 | 1 | 5 | 6 | 2 | 1 | 2 | 3 | 7 | 6 | 3 | 2 | 1 | 2 | 3 | 6 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
块1 | 1 | 1 | ||||||||||||||||||
块2 | 2 | |||||||||||||||||||
块3 | ||||||||||||||||||||
缺页 | × | × |
第三次访问的是页面3,这时候块1里面为页面1,块2里面为页面2,块3为空,所以缺页,把页面3装载到块3中
页面 | 1 | 2 | 3 | 4 | 2 | 1 | 5 | 6 | 2 | 1 | 2 | 3 | 7 | 6 | 3 | 2 | 1 | 2 | 3 | 6 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
块1 | 1 | 1 | 1 | |||||||||||||||||
块2 | 2 | 2 | ||||||||||||||||||
块3 | 3 | |||||||||||||||||||
缺页 | × | × | × |
第四次访问的是页面4,这时候块2、块2、块3里面分别是页面1,页面2和页面3,没有页面4并且内存占满,所以为缺页,这时候需要把一个块里面的页面置换为页面4,这里使用的是最佳置换法(OPT),最佳置换法需要看后面访问到的页面,页面4之后访问的是页面2,在后面是页面1,页面2和页面1是马上就需要访问的,所以不能置换掉,只能把块3里面的页面3置换为页面4。
页面 | 1 | 2 | 3 | 4 | 2 | 1 | 5 | 6 | 2 | 1 | 2 | 3 | 7 | 6 | 3 | 2 | 1 | 2 | 3 | 6 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
块1 | 1 | 1 | 1 | 1 | ||||||||||||||||
块2 | 2 | 2 | 2 | |||||||||||||||||
块3 | 3 | 4 | ||||||||||||||||||
缺页 | × | × | × | × |
第五次访问的是页面2,页面2就在块2中,不缺页,所以不需要置换,内存里面的内容保持不变。
页面 | 1 | 2 | 3 | 4 | 2 | 1 | 5 | 6 | 2 | 1 | 2 | 3 | 7 | 6 | 3 | 2 | 1 | 2 | 3 | 6 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
块1 | 1 | 1 | 1 | 1 | 1 | |||||||||||||||
块2 | 2 | 2 | 2 | 2 | ||||||||||||||||
块3 | 3 | 4 | 4 | |||||||||||||||||
缺页 | × | × | × | × | ○ |
第六次访问的页面1,页面1在块1中,不缺页,所以不需要置换,内存里面的内容保持不变。
页面 | 1 | 2 | 3 | 4 | 2 | 1 | 5 | 6 | 2 | 1 | 2 | 3 | 7 | 6 | 3 | 2 | 1 | 2 | 3 | 6 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
块1 | 1 | 1 | 1 | 1 | 1 | 1 | ||||||||||||||
块2 | 2 | 2 | 2 | 2 | 2 | |||||||||||||||
块3 | 3 | 4 | 4 | 4 | ||||||||||||||||
缺页 | × | × | × | × | ○ | ○ |
第七次访问的是页面5,块1到块3中都不存在页面5,缺页,现在需要置换掉一个块里面的页为当前需要访问的页面5,使用最佳置换法,页面5之后需要访问到的是页面6,当前块1到块3中也没有页面6,所以忽略掉,页面6之后需要访问的是页面2,块2中存在页面2,不能置换,页面2之后需要访问的是页面1,当前块1中存在页面1,所以也不能置换,那么只能把块3中的页面4置换为当前所需要访问的页面5
页面 | 1 | 2 | 3 | 4 | 2 | 1 | 5 | 6 | 2 | 1 | 2 | 3 | 7 | 6 | 3 | 2 | 1 | 2 | 3 | 6 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
块1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | |||||||||||||
块2 | 2 | 2 | 2 | 2 | 2 | 2 | ||||||||||||||
块3 | 3 | 4 | 4 | 4 | 5 | |||||||||||||||
缺页 | × | × | × | × | ○ | ○ | × |
第八次访问的是页面6,块1到块3中不存在页面6,缺页,需要把一个块里面的页面置换为页面6,页面6之后需要访问到的是页面2,不能置换掉,页面2之后需要访问的是页面1,不能置换,那么只能把块3里面的页面5置换为现在需要访问的页面6了。
页面 | 1 | 2 | 3 | 4 | 2 | 1 | 5 | 6 | 2 | 1 | 2 | 3 | 7 | 6 | 3 | 2 | 1 | 2 | 3 | 6 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
块1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | ||||||||||||
块2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | |||||||||||||
块3 | 3 | 4 | 4 | 4 | 5 | 6 | ||||||||||||||
缺页 | × | × | × | × | ○ | ○ | × | × |
第九次访问的是页面2,块2中的就是页面2,不缺页,所以不需要置换,内存里面的内容保持不变。
页面 | 1 | 2 | 3 | 4 | 2 | 1 | 5 | 6 | 2 | 1 | 2 | 3 | 7 | 6 | 3 | 2 | 1 | 2 | 3 | 6 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
块1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | |||||||||||
块2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | ||||||||||||
块3 | 3 | 4 | 4 | 4 | 5 | 6 | 6 | |||||||||||||
缺页 | × | × | × | × | ○ | ○ | × | × | ○ |
第十次访问的是页面1,块1中即为页面1,不缺页,所以不需要置换,内存里面的内容保持不变。
页面 | 1 | 2 | 3 | 4 | 2 | 1 | 5 | 6 | 2 | 1 | 2 | 3 | 7 | 6 | 3 | 2 | 1 | 2 | 3 | 6 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
块1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | ||||||||||
块2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | |||||||||||
块3 | 3 | 4 | 4 | 4 | 5 | 6 | 6 | 6 | ||||||||||||
缺页 | × | × | × | × | ○ | ○ | × | × | ○ | ○ |
第十一次访问的是页面2,块2中就是页面2,不缺页,所以不需要置换,内存中的内容保持不变。
页面 | 1 | 2 | 3 | 4 | 2 | 1 | 5 | 6 | 2 | 1 | 2 | 3 | 7 | 6 | 3 | 2 | 1 | 2 | 3 | 6 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
块1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | |||||||||
块2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | ||||||||||
块3 | 3 | 4 | 4 | 4 | 5 | 6 | 6 | 6 | 6 | |||||||||||
缺页 | × | × | × | × | ○ | ○ | × | × | ○ | ○ | ○ |
第十二次访问的是页面3,块1到块3中没有页面3,需要置换掉一个块里面的页面为页面3,页面3之后需要访问的是页面7,当前块1到块3中没有页面7,忽略掉往下看,页面7之后是页面6,块3中为页面6,不能置换,页面6之后是页面3,块1到块3中没有页面3,忽略掉往下看,页面3之后是页面2,块2中为页面2,所以置换的是块1中的页面1。
页面 | 1 | 2 | 3 | 4 | 2 | 1 | 5 | 6 | 2 | 1 | 2 | 3 | 7 | 6 | 3 | 2 | 1 | 2 | 3 | 6 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
块1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 3 | ||||||||
块2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | |||||||||
块3 | 3 | 4 | 4 | 4 | 5 | 6 | 6 | 6 | 6 | 6 | ||||||||||
缺页 | × | × | × | × | ○ | ○ | × | × | ○ | ○ | ○ | × |
以此类推得出下表,可以看出使用最佳置换法有11个缺页。
页面 | 1 | 2 | 3 | 4 | 2 | 1 | 5 | 6 | 2 | 1 | 2 | 3 | 7 | 6 | 3 | 2 | 1 | 2 | 3 | 6 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
块1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 6 |
块2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 7 | 7 | 7 | 2 | 2 | 2 | 2 | 2 | |
块3 | 3 | 4 | 4 | 4 | 5 | 6 | 6 | 6 | 6 | 6 | 6 | 6 | 6 | 6 | 1 | 1 | 1 | 1 | ||
缺页 | × | × | × | × | ○ | ○ | × | × | ○ | ○ | ○ | × | × | ○ | ○ | × | × | ○ | ○ | × |
注意:因为在实际中,下一个需要访问的页是不可预测的,所以最佳置换法不可行
最近最少使用置换法(LRU)
考虑下述页面走向:1,2,3,4,2,1,5,6,2,1,2,3,7,6,3,2,1,2,3,6。当内存块数量为3时,试问最近最少使用置换算法(LRU)的缺页次数是多少?(注意:所有内存块最初都是空,凡是第一次用到页面都产生一次缺页)
页面 | 1 | 2 | 3 | 4 | 2 | 1 | 5 | 6 | 2 | 1 | 2 | 3 | 7 | 6 | 3 | 2 | 1 | 2 | 3 | 6 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
块1 | ||||||||||||||||||||
块2 | ||||||||||||||||||||
块3 | ||||||||||||||||||||
缺页 |
第一次访问的是页面1,当前内存为空,所以缺页,把页面1加载到块1中。
页面 | 1 | 2 | 3 | 4 | 2 | 1 | 5 | 6 | 2 | 1 | 2 | 3 | 7 | 6 | 3 | 2 | 1 | 2 | 3 | 6 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
块1 | 1 | |||||||||||||||||||
块2 | ||||||||||||||||||||
块3 | ||||||||||||||||||||
缺页 | × |
第二次访问的是页面2,当前内存中块1里面加载的为页面1,块2和块3为空,所以缺页,把页面2加载到块2中。
页面 | 1 | 2 | 3 | 4 | 2 | 1 | 5 | 6 | 2 | 1 | 2 | 3 | 7 | 6 | 3 | 2 | 1 | 2 | 3 | 6 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
块1 | 1 | 1 | ||||||||||||||||||
块2 | 2 | |||||||||||||||||||
块3 | ||||||||||||||||||||
缺页 | × | × |
第三次访问的是页面3,当前内存中块1为页面1,块2为页面2,块3为空,所以缺页,把页面3加载到块3中。
页面 | 1 | 2 | 3 | 4 | 2 | 1 | 5 | 6 | 2 | 1 | 2 | 3 | 7 | 6 | 3 | 2 | 1 | 2 | 3 | 6 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
块1 | 1 | 1 | 1 | |||||||||||||||||
块2 | 2 | 2 | ||||||||||||||||||
块3 | 3 | |||||||||||||||||||
缺页 | × | × | × |
第四次访问的是页面4,现在块1到块3中的内容分别是页面1、页面2、页面3,没有页面4,缺页,需要把一个块里面的页面置换为当前需要访问的页面,这里使用最近最少使用置换法,最近使用的页面是1、2、3,而且都是使用了1次,所以从头开始置换,把块1中的页面1置换为现在需要访问的页面4。
页面 | 1 | 2 | 3 | 4 | 2 | 1 | 5 | 6 | 2 | 1 | 2 | 3 | 7 | 6 | 3 | 2 | 1 | 2 | 3 | 6 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
块1 | 1 | 1 | 1 | 4 | ||||||||||||||||
块2 | 2 | 2 | 2 | |||||||||||||||||
块3 | 3 | 3 | ||||||||||||||||||
缺页 | × | × | × | × |
第五次访问的是页面2,块2中就是页面2,不缺页,内存里的内容保持不变。
页面 | 1 | 2 | 3 | 4 | 2 | 1 | 5 | 6 | 2 | 1 | 2 | 3 | 7 | 6 | 3 | 2 | 1 | 2 | 3 | 6 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
块1 | 1 | 1 | 1 | 4 | 4 | |||||||||||||||
块2 | 2 | 2 | 2 | 2 | ||||||||||||||||
块3 | 3 | 3 | 3 | |||||||||||||||||
缺页 | × | × | × | × | ○ |
第六次访问的页面是1,块1到块3中没有页面1,缺页,最近使用的是页面2和页面4,所以块1和块2中的页面4和页面2不能置换掉,只能把块3中的页面3置换为页面1。
页面 | 1 | 2 | 3 | 4 | 2 | 1 | 5 | 6 | 2 | 1 | 2 | 3 | 7 | 6 | 3 | 2 | 1 | 2 | 3 | 6 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
块1 | 1 | 1 | 1 | 4 | 4 | 4 | ||||||||||||||
块2 | 2 | 2 | 2 | 2 | 2 | |||||||||||||||
块3 | 3 | 3 | 3 | 1 | ||||||||||||||||
缺页 | × | × | × | × | ○ | × |
第七次访问的是页面5,块1到块3中没有页面5,缺页,最近访问到的页面为页面1和页面2,所以置换掉块1中的页面4。
页面 | 1 | 2 | 3 | 4 | 2 | 1 | 5 | 6 | 2 | 1 | 2 | 3 | 7 | 6 | 3 | 2 | 1 | 2 | 3 | 6 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
块1 | 1 | 1 | 1 | 4 | 4 | 4 | 5 | |||||||||||||
块2 | 2 | 2 | 2 | 2 | 2 | 2 | ||||||||||||||
块3 | 3 | 3 | 3 | 1 | 1 | |||||||||||||||
缺页 | × | × | × | × | ○ | × | × |
第八次访问的是页面6,块1到块3中没有页面6,最近访问的页面为页面5和页面1,所以块1和块3不能置换掉,只能把块2的页面2置换为页面6。
页面 | 1 | 2 | 3 | 4 | 2 | 1 | 5 | 6 | 2 | 1 | 2 | 3 | 7 | 6 | 3 | 2 | 1 | 2 | 3 | 6 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
块1 | 1 | 1 | 1 | 4 | 4 | 4 | 5 | 5 | ||||||||||||
块2 | 2 | 2 | 2 | 2 | 2 | 2 | 6 | |||||||||||||
块3 | 3 | 3 | 3 | 1 | 1 | 1 | ||||||||||||||
缺页 | × | × | × | × | ○ | × | × | × |
以此类推,最后得出的结果为下表,得出缺页数为15。
页面 | 1 | 2 | 3 | 4 | 2 | 1 | 5 | 6 | 2 | 1 | 2 | 3 | 7 | 6 | 3 | 2 | 1 | 2 | 3 | 6 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
块1 | 1 | 1 | 1 | 4 | 4 | 4 | 5 | 5 | 5 | 1 | 1 | 1 | 7 | 7 | 7 | 2 | 2 | 2 | 2 | 2 |
块2 | 2 | 2 | 2 | 2 | 2 | 2 | 6 | 6 | 6 | 6 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | |
块3 | 3 | 3 | 3 | 1 | 1 | 1 | 2 | 2 | 2 | 2 | 2 | 6 | 6 | 6 | 1 | 1 | 1 | 6 | ||
缺页 | × | × | × | × | ○ | × | × | × | × | × | ○ | × | × | × | ○ | × | × | ○ | ○ | × |