问答题 假设有一个具有如下属性的系统:
·存储器是字节寻址。
·存储器访问是对1字节字(而不是4字节字)。
·地址宽13位。
·高速缓存是4路组相联的(E=4),块大小为4字节(B=4),有8个组(S=8)。
考虑下面的高速缓存状态。所有地址、标记和值都以十六进制表示。每组有4行,索引列包含组索引;标记列包含每一行的标记值;V列包含每一行的有效位;字节0~3列包含每一行的数据,标号从左向右,字节0在左边。
索引 标记V 字节0~3 标记V 字节0~3 标记V 字节0~3 标记V 字节0~3
0
1
2
3
4
5
6
7
F0 1
BC 0
BC 1
BE 0
7E 1
98 0
38 0
8A 1
ED 32 0A A2
03 3E CD 38
54 9E 1E FA
2F 7E 3D A8
32 21 1C 2C
A9 76 2B EE
5D 4D F7 DA
04 2A 32 6A
8A 1
A0 0
B6 1
C0 1
8A 1
54 0
BC 1
9E 0
BF 80 1D FC
16 7B ED 5A
DC 81 B2 14
27 95 A4 74
22 C2 DC 34
BC 91 D5 92
69 C2 8C 74
B1 86 56 0E
14 1
BC 1
00 0
C4 0
BC 1
98 1
8A 1
CC 1
EF 09 86 2A
8E 4C DF 18
B6 1F 7B 44
07 11 6B D8
BA DD 37 D8
80 BA 9B F6
A8 CE 7F DA
96 30 47 F2
BC 0
E4 1
74 0
BC 0
DC 0
BC 1
38 1
BC 1
25 44 6F 1A
FB B7 12 02
10 F5 88 2E
C7 87 AF C2
E7 A2 39 BA
48 16 81 0A
FA 93 E8 48
F8 1D 42 30
问答题 这个高速缓存的大小(容量)C是多少字节?
【正确答案】高速缓存的大小(容量)指的是所有块的大小的和,标记位和有效位不包括在内。因此,C=S×E×B=组数×路数×块大小=8×4×4=128。
【答案解析】
问答题 下面的图给出了一个地址的格式(每个小框表示一位),请指出用来确定下列信息的字段(在图中标号出来):
CO 高速缓存块内偏移
CI 高速缓存组索引
CT 高速缓存标记
【正确答案】组相联映射中,主存地址低位到高位划分为3部分:块内字地址、组号、标记,该3个字段位数分别为
块内字地址=log2(块大小)=log2(4)=2
组号=log2(Cache组数)=log2(8)=3
标记=主存地址的其余位=12-2-3=8
所以,答案如图1所示。
[*]

图1 主存地址的格式
【答案解析】
问答题 假设程序使用上述高速缓存,引用位于地址0x0718处的1字节字。用十六进制表示出它所访问的高速缓存条目,以及返回的高速缓存字节值,请指明是否发生了高速缓存不命中。如果有高速缓存不命中,在“返回的高速缓存值”所对应的“值”处填入相应内容。
参数
块偏移量(CO) 0x______
索引(CI) 0x______
高速缓存标记(CT) 0x______
高速缓存命中?(是/否) ______
返回的高速缓存值 0x______
【正确答案】地址0x0718化成二进制地址如图2所示。
[*]

图2 地址0x0718化成二进制地址
参数
块偏移量(CO) 0x{{U}} (0) {{/U}}
索引(CI) 0x{{U}} (6) {{/U}}
高速缓存标记(CT) 0x{{U}} (38) {{/U}}
高速缓存命中?(是/否)
返回的高速缓存值 0x{{U}} (FA) {{/U}}
第6组存在有效位为1且标记位与地址中标记位匹配的行,所以命中。
根据块偏移0,选出起始字节,读出FA。
【答案解析】