问答题 假设有一个具有如下属性的系统:
·存储器是字节寻址的。
·存储器访问是对1字节字的(而不是4字节字)。
·地址宽12位。
·高速缓存是2路组相联的(E=2),块大小为4字节(B=4),有4个组(S=4)。
高速缓存的内容如图1所示,所有地址、标记和值都以十六进制表示。
问答题 图2给出了一个地址的格式(每个小框表示一位),请指出用来确定下列信息的字段(在图中标识出来):
CO 高速缓存块内偏移
CI 高速缓存组索引
CT 高速缓存标记
【正确答案】组相联映射中,主存地址高位到低位划分为3部分:标记、组号、块内字地址,该3个字段位数分别为
块内字地址=log2(块大小)=log2(4)=2
组号=log2(Cache组数)=10g2(4)=2
标记:主存地址的其余位=12-2-2=8
所以,答案如下图3所示。
[*]

图3 主存地址的格式
【答案解析】
问答题 对于下面每个存储器访问,当它们是按照列出来的顺序执行时,请指出是高速缓存命中还是不命中。如果可以从高速缓存中的信息推断出来,请给出读出的值。
操作 地址 命中? 读出的值(或者未知)
0x409
0x40A
0x833
【正确答案】高速缓存确定一个请求是否命中,取决于两个条件:①有效位为1;②高速缓存行中的标记位必须与地址中的标记位相匹配。
Ⅱ.然后抽取出被请求的字的过程,分为三步:①组选择;②行匹配;③字抽取。
读0x409,如图4所示。
[*]

图4 读0x409

组号2,块内地址1,标记40。
Ⅰ.不存在有效位为1同时标记位与地址中标记位匹配的行,所以未命中。
写0x40A,如图5所示。
[*]

图5 写0x40A

组号2,块内地址2,标记40。
Ⅰ.上次访问未命中后,系统会把该数据块调入高速缓存中,有效位改为1,块内内容未知,如图6所示。此时存在有效位为1,且同时标记位与地址中标记位匹配的行,所以命中。
[*]

图6

Ⅱ.根据块偏移就能选出起始字节。但具体内容题目没有给出。
写0x833,如图7所示。
[*]

图7 写0x833

组号0,块内地址3,标记83。
Ⅰ.第0组存在有效位为1同时标记位与地址中标记位匹配的行,所以命中。
Ⅱ.根据块偏移就能选出起始字节,读出D0。
综上所述,答案如下:
操作 地址 命中否 读出的值(或者未知)
0x409 未命中
0x40A 命中 未知
0x833 命中 D0
【答案解析】