- 设某计算机的逻辑地址空间和物理地址空间均为64KB,按字节编址。若某进程最多需要6页(Page)数据存储空间,页的大小为1KB [2],操作系统采用固定分配局部置换策略为此进程分配4个页框(Page Frame)。
页号 | 页框号 | 装入时刻[3] | 访问位[4] |
0 | 7 | 130 | 1 |
1 | 4 | 230 | 1 |
2 | 2 | 200 | 1 |
3 | 9 | 160 | 1 |
当给进程执行到时刻260时,要访问逻辑地址为17ACH [1]的数据,请回答下列问题:
- 该逻辑地址对应的页号是多少?若采用先进先出(FIFO)置换算法,该逻辑地址对应的物理地址是多少?要求给出计算过程。
- 若采用时钟(Clock)置换算法,该逻辑地址对应的物理地址是多少?要求给出计算过程。(设搜索下一页的指针沿着顺时针方向移动,且当前指向2号页框,示意图如下。)
答:(1)逻辑地址对应的页号是5。置换的页面为0号,将5号页面装入7号物理框,逻辑地址对应的物理地址是1FACH。
(2)置换2号页面,5号页面装入2号页框。逻辑地址对应的物理地址是0BACH
小白解析:
(1)首先关注[1]处的数据。[1]处的数据是表示16进制,要把先换成2进制。注意这里17AC是一个数,H表示16进制。
(2)十六进制转换2进制很简单,把1和 7 和A和 C这4个数分别转成2进制即可。转换请参照如下表格:
0 | 0000 | 8 | 1000 |
1 | 0001 | 9 | 1001 |
2 | 0010 | A | 1010 |
3 | 0011 | B | 1011 |
4 | 0100 | C | 1100 |
5 | 0101 | D | 1101 |
6 | 0110 | E | 1110 |
7 | 0111 | F | 1111 |
所以17ACH转换成2进制 就是:0001 0111 1010 1100 B这里的B表示二进制
(3)因为[2]处数据是1KB,1KB就是1024 个字节。1024 就是2^10(2的10次方)为了计算页号,需要用 17ACH/ 2^10。 前者是16进制,后者是10进制。解法是都换成2进制计算,17ACH换成2进制 是 0001 0111 1010 1100 B。它/ 2^10 会得到一个商和余数,商和余数的计算就是把0001 0111 1010 1100 B 右移10位,分开得到:
000101 和 11 1010 1100 B
前者按照上面的表格可以看出等于 5
这个时候可以直接回答页号是5。这就是第一大问的第一小问答案。
(4)接下来计算第二小问。因为用的FIFO算法,先进入内存的先移出,只需要寻找[3]对应的一列数据中,装入时刻最小的,也就是最先进入内存的。发现是7号页框里面的0号页。所以把它换出。程序的5号页进入7号页框,需要计算下物理地址。计算方法:
进入几号页框就用几。这里是7号页框,所以我们先把7换成2进制:
0111 ,然后在后面添加10 个0变成:
01 1100 0000 0000 再加上第(3)步的余数11 1010 1100 B得到:
01 1111 1010 1100 B换成16 进制为 1FACH,这就是第一大问的第二小问答案。
(5)接下来计算第二大问。首先要回顾clock算法,增加一个访问位[4],在选择要换出的页面时,先看访问位是不是为1,如果为1,不换出这个页面,但是要把它的访问位改成0,然后检查下一个页面,直到检查到一个访问位为0的页面,才将它换出。
这里题目中给出的所有页面访问位都是1,所以,第一轮检查,每个页面都不会被换出,但是大家的访问位都会变成0。检查指针顺时针旋转一圈后,又指向2号页框,此时它的访问位已经是0了,所以将2号页框的2号页换出。接下来的计算方式和(4)类似。进入几号页框就用几,这里是2号页框,所以我们先把2换成2进制。
0010 然后在后面添加10个0变成:
00 1000 0000 0000 再加上第(3)步的余数11 1010 1100 B得到:
00 1011 1010 1100 B换成16进制就是 0BACH,这就是第二大问的答案。