📌  相关文章
📜  门| Sudo GATE 2020 Mock I(2019年12月27日)|第42章

📅  最后修改于: 2021-06-29 17:35:03             🧑  作者: Mango

计算机系统使用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:
    地址=(128) 10 =(0000000010000000) 2
    (注意:地址显示为16位数字,因为计算机使用16位地址)
    对于此地址,标签= 00000,块= 00010,字= 000000
    由于此访问之前缓存为空,因此这将是缓存未命中
    进行此访问后,将缓存块00010的“标记”字段设置为00000。
  • 存取#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

因此,缓存命中率=命中数/访问数= 2/6 = 0.333。

选项(A)是正确的。
这个问题的测验