本人初学CS,终于弄明白了一个小知识点,有感而发。(本题知识点对应《深入理解计算机系统(第三版)》9.6.4节)
若一计算机系统的情况如下:
- 内存是按字节寻址,字长为1字节(而非4字节);
- 虚拟地址长度:25位/bits,虚拟页面大小是 2*1024 字节;
- 使用一级页表;
- 物理页号PPN的长度是8位/bits;
- L1 d-cache是物理寻址、直接映射(每组一行),行大小8字节,共8个组,当前数值如表1所示。
表1 L1 d-cache的数值
索引 | 标记位 | 有效位 | 字节0 | 字节1 | 字节2 | 字节3 | 字节4 | 字节5 | 字节6 | 字节7 |
0 | 35E | 1 | 42 | A0 | 75 | 50 | 42 | 0 | 05 | 50 |
1 | 27B | 1 | 08 | E3 | 00 | A7 | 13 | 00 | 8B | 52 |
2 | C54 | 1 | 3F | 75 | AB | 11 | 25 | 78 | 9A | 00 |
3 | B57 | 0 | 33F | 52 | A0 | 23 | 45 | 79 | 78 | 10 |
4 | A32 | 1 | 97 | 3A | 91 | D3 | 3F | 12 | 86 | 22 |
5 | C30 | 1 | 30 | 62 | 15 | 4C | 48 | A1 | 12 | 5C |
6 | B26 | 1 | 01 | 25 | 3E | 62 | 1F | C4 | 85 | 12 |
7 | 01A | 1 | 98 | 3A | 12 | D39 | 3F | 3C | 4D | 5E |
回答以下问题:
1.计算页表条目PTE的总数量 、物理地址的位数、虚拟页号VPN的位数。
虚拟页面的大小为2^11字节,则虚拟地址的低11位为VPO,剩余的14位为VPN,每一个VPN相当于页表条目数组的索引,故PTE的数量为2^14个。
物理地址的位数:在地址翻译中,VPO被直接作为PPO,故VPO的位数与PPO的位数是相同的,都为11位,而PPN为8位,则物理地址的长度为8+11=19位。
2.在L1 d-cache寻址中,块偏移、组索引、标记位的位长分别是多少?
L1 d-cache的行大小是8字节,所以块偏移CO是3位;有8个组,所以组索引CI有3位,而物理地址有19位,减去CO和CI的位数,剩余的13位则是标记位CT的位数。
3.在CPU从物理地址0x31511读取1字节数据,在访问缓存时,对应的组索引、标记位的数值、能否命中缓存、若能命中数值是多少?
0x31511对应的二进制数为011 0001 0101 0001 0001,故CO=001,CI=010,CT=0 1100 0101 0100,对应的十六进制数为:0xC54。因为0xC54在L1缓存中且有效位被置为1,所以能够命中。又因为CO=1,所以命中的数值是第二个字节0x75。