题目来源王道书
一进程已分配到4个页帧,现在进程访问到第四页发生缺页,问若使用NRU算法应该换出哪一页。
虚拟页号 | 页帧 | 装入时间 | 最近访问时间 | 访问位 | 修改位 |
2 | 0 | 60 | 161 | 0 | 1 |
1 | 1 | 130 | 160 | 0 | 0 |
0 | 2 | 26 | 162 | 1 | 0 |
3 | 3 | 20 | 163 | 1 | 1 |
答案是虚拟页号2,页帧0的那一页。
题目中说到使用NRU,按照答案的说法应该是标准的NRU,而不是改进的CLOCK算法。
为了标准,下面的页号均是页帧号。
按照最近访问时间,访问顺序应该是1,0,2,3。
所以在没有发生缺页时,相对应的访问位和修改位是
1 | (1,0) |
0 | (1,1) |
2 | (1,0) |
3 | (1,1) |
此时访问第四页,发生了缺页,指针将按页表中的顺序进行查找。我们看到在题目给出的表中0和1号页的访问位已经变成了0,而2和3号页的访问位还是1,可以说明此时指针指向的是1号页,并且已经完成对1号页的处理,即将指向2号页。
但是这个过程还没完,现在我们需要的是访问位为0的页,扫描过了0号和1号,没有找到,所以要继续扫描。
扫描完了2号和3号,都没有发现访问位为0的页,所以此时第一轮扫描完成,将进行第二轮扫描。
因为此时0号页的访问位在第一次扫描的时候已经被置为0,所以根据NRU算法,0号页将会被换出。
我个人感觉这道题出的有问题,因为缺页之前0到3号页面的访问位都为1,但是题目里面0和1号页的访问位已经为0,说明clock算法已经执行一部分了。如果按照装入顺序来扫描,应该先扫描3和2才对;如果按最近访问顺序扫描,应该是1,0,2,3这个顺序,因为1和0的访问位已经为0,所以下一个应该到2,这种情况该替换的应该是1号,和答案也不一样。只有按照页表顺序0,1,2,3扫描才能得到书上的答案.
那如果是改进的CLOCK算法呢?
第一轮扫描要找(0,0)的页面,没找到;第二轮要找(0,1)的页面,也没找到。
0 | (0,1) |
1 | (0,0) |
2 | (0,0) |
3 | (0,1) |
此时页面访问位和修改位是这样的。
第三轮扫描和第一轮一样,要找(0,0)的页面,此时1号页符合,所以将1号页换出。
这个题虽然题目里说了要用NRU,但是表格里给了修改位,让人很自然的直接按改进的CLOCK算法去做了。做题的时候一定要注意审题啊!!!