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

📅  最后修改于: 2021-09-24 05:54:46             🧑  作者: Mango

计算机系统使用 16 位内存地址。它有一个 2K 字节的高速缓存,以直接映射方式组织,每个高速缓存块 64 字节。假设每个内存字的大小为 1 个字节。

执行程序时,处理器从以下字地址依次读取数据:

128, 144, 2176, 2180, 128, 2176 

以上所有地址均以十进制值显示。假设缓存最初是空的。上述给定地址的缓存命中率是 __________ 。
(一) 0.333
(乙) 0.666
(C) 0.353
(D) 0.535答案:(一)
说明:首先,查找单词、块和标签大小:
块大小 = 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 位代表字。

现在,检查给定地址的缓存命中或未命中:
缓存最初是空的。因此,所有的缓存块都是无效的。

    访问#1:
    地址 = (128) 10 = (0000000010000000) 2
    (注:地址显示为16位数字,因为电脑使用的是16位地址)
    对于此地址,标签 = 00000,块 = 00010,字 = 000000
    由于在这次访问之前缓存是空的,这将是一个缓存未命中
    此访问后,缓存块 00010 的 Tag 字段设置为 00000
  • 访问#2:
    地址 = (144) 10 = (0000000010010000) 2
    对于此地址,标签 = 00000,块 = 00010,字 = 010000
    由于在这次访问之前缓存块 00010 的标签字段是 00000,这将是一个缓存命中(因为
    地址标签 = 块标签)
  • 访问#3:
    地址 = (2176) 10 = (0000100010000000) 2
    对于此地址,标签 = 00001,块 = 00010,字 = 000000
    由于在此访问之前缓存块 00010 的标记字段是 00000,因此这将是缓存未命中
    (地址标签≠块标签)
    这次访问后,缓存块 00010 的 Tag 字段设置为 00001
  • 访问#4:
    地址 = (2180) 10 = (0000100010000100) 2
    对于此地址,标签 = 00001,块 = 00010,字 = 000100
    由于在这次访问之前缓存块 00010 的标签字段是 00001,这将是一个缓存命中(地址
    标签 = 块标签)
  • 访问#5:
    地址 = (128) 10 = (0000000010000000) 2
    对于此地址,标签 = 00000,块 = 00010,字 = 000000
    由于在此访问之前缓存块 00010 的标记字段是 00001,因此这将是缓存未命中
    (地址标签≠块标签)
    此访问后,缓存块 00010 的 Tag 字段设置为 00000
  • 访问#6:
    地址 = (2176) 10 = (0000100010000000) 2
    对于此地址,标签 = 00001,块 = 00010,字 = 000000
    由于在此访问之前缓存块 00010 的标记字段是 00001,因此这将是缓存未命中
    (地址标签≠块标签)
    此访问后,缓存块 00010 的 Tag 字段设置为 00001

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

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