在页式虚拟存储器中,一个程序由P1~P8共8个页面组成,程序执行过程中依次访问的页面如下:3、4、2、6、4、3、7、4、3、6、3、4、8、4、6。假设系统分配给这个程序的主存有3个页面,采用CLOCK页面替换算法对这3个页面进行调度。画出主存页面调入、替换和命中情况表并统计出命中率。(对于CLOCK算法,命中时不移动指针。)
参考答案:[表示方法一]
CLOCK算法:“←”表示指针位置;“Y”表示访问位为1、“N”表示访问位为0。如表4.17所示。
[表示方法二] 上面的表格还可以写为:“←”表示指针位置;“*”表示访问位为1、没有标记表示访问位为0。如表4.18所示。
从表中得到命中6次,命中率为6/15=40%。
解析: 页面流的调度过程如表4.16所示。
表4.16 页面流的调度过程 | |||||
访问页面 | 物理块0 | 物理块1 | 物理块2 | 缺页否 | 说明 |
初始状态 | →∧ | ∧ | ∧ | P指向块0 | |
0 | 0 | 0 | |||
访问页3 | 3 | →∧ | ∧ | 是 | 调入页3,块0访问位置1,指针 p后移 |
1 | 0 | 0 | |||
访问页4 | 3 | 4 | →∧ | 是 | 调入页3,块1访问位置1,指针 p后移 |
1 | 1 | 0 | |||
访问页2 | →3 | 4 | 2 | 是 | 调入页2,块2访问位置1,指针 p后移 |
1 | 1 | 1 | |||
访问页6 | 6 | →4 | 2 | 是 | 指针p循环后移(移动前修改访 问位),找到块0的访问位为0,替 换进页6,p后移 |
1 | 0 | 0 | |||
访问页4 | 6 | →4 | 2 | 否 | 页4在内存,将其访问位修改为 1,指针p不动 |
1 | 1 | 0 | |||
访问页3 | →6 | 4 | 3 | 是 | 指针p循环后移(移动前修改访 问位),找到块2的访问位为0,替 换进页3,p后移 |
1 | 0 | 1 | |||
访问页7 | 6 | 7 | →3 | 是 | 指针p循环后移(移动前修改访 问位),找到块2的访问位为0,替 换进页3,p后移 |
0 | 1 | 1 | |||
访问页4 | 4 | →7 | 3 | 是 | 指针p循环后移(移动前修改访 问位),找到块0的访问位为0,替 换进页4,p后移 |
1 | 1 | 0 | |||
访问页3 | 4 | →7 | 3 | 否 | 页3在内存,将其访问位修改为 1,指针p不动 |
1 | 1 | 1 | |||
访问页6 | 4 | 6 | →3 | 是 | 指针p循环后移(移动前修改访 问位),找到块1的访问位为0,替 换进页6,p后移 |
0 | 1 | 0 | |||
访问页3 | 4 | 6 | →3 | 否 | 页3在内存,将其访问位修改为 l,指针p不动 |
0 | 1 | 1 | |||
访问页4 | 4 | 6 | →3 | 否 | 页4在内存,将其访问位修改为 1,指针p不动 |
1 | 1 | 1 | |||
访问页8 | →4 | 6 | 8 | 是 | 指针p循环后移(移动前修改访 问位),找到块2的访问位为0,替 换进页8,p后移 |
0 | 0 | 1 | |||
访问页4 | →4 | 6 | 8 | 是 | 页4在内存,将其访问位修改为 1,指针p不动 |
1 | 0 | 1 | |||
访问页6 | →4 | 6 | 8 | 是 | 页6在内存,将其访问位修改为 1,指针p不动 |
1 | 1 | 1 |