计算机系统使用16位内存地址。它具有以直接映射方式组织的2K字节高速缓存,每个高速缓存块64个字节。假设每个存储字的大小为1个字节。
执行程序时,处理器从以下字地址顺序读取数据:
128, 144, 2176, 2180, 128, 2176
以上所有地址均以十进制值显示。假定缓存最初是空的。对于上述给定地址,发生的缓存命中率是__________。
(A) 0.333
(B) 0.666
[C) 0.353
(D) 0.535答案: (A)
说明:首先,找到单词,块和标签的大小:
块大小= 64字节= 2 6字节= 2 6个字(因为1个字= 1字节)
因此,字字段中的位数= 6
缓存大小= 2K字节= 2 11字节
缓存块数=缓存大小/块大小= 2 11/2 6 = 2 5
因此,“块”字段中的位数= 5
地址位数总数= 16
因此,“标记”字段中的位数= 16 – 6 – 5 = 5
对于给定的16位地址,5个最高有效位表示标签,接下来的5位表示块,而6个最低有效位表示Word。
现在,检查给定地址的缓存命中或未命中:
缓存最初是空的。因此,所有缓存块均无效。
- 存取#1:
- 存取#2:
地址=(144) 10 =(0000000010010000) 2
对于此地址,标签= 00000,块= 00010,字= 010000
由于此访问之前缓存块00010的标签字段为00000,因此这将是缓存命中(因为
地址标签=块标签) - 存取#3:
地址=(2176) 10 =(0000100010000000) 2
对于此地址,标签= 00001,块= 00010,字= 000000
由于此访问之前缓存块00010的标签字段为00000,因此这将是缓存未命中
(地址标签≠块标签)
进行此访问后,将缓存块00010的标签字段设置为00001 - 存取#4:
地址=(2180) 10 =(0000100010000100) 2
对于此地址,标签= 00001,块= 00010,字= 000100
由于此访问之前缓存块00010的标签字段为00001,因此这将是缓存命中(地址
标签=块标签) - 存取#5:
地址=(128) 10 =(0000000010000000) 2
对于此地址,标签= 00000,块= 00010,字= 000000
由于此访问之前缓存块00010的标记字段为00001,因此这将是缓存未命中
(地址标签≠块标签)
进行此访问后,将缓存块00010的“标记”字段设置为00000。 - 存取#6:
地址=(2176) 10 =(0000100010000000) 2
对于此地址,标签= 00001,块= 00010,字= 000000
由于此访问之前缓存块00010的标记字段为00001,因此这将是缓存未命中
(地址标签≠块标签)
进行此访问后,将缓存块00010的标签字段设置为00001
地址=(128) 10 =(0000000010000000) 2
(注意:地址显示为16位数字,因为计算机使用16位地址)
对于此地址,标签= 00000,块= 00010,字= 000000
由于此访问之前缓存为空,因此这将是缓存未命中
进行此访问后,将缓存块00010的“标记”字段设置为00000。
因此,缓存命中率=命中数/访问数= 2/6 = 0.333。
选项(A)是正确的。
这个问题的测验