【问题标题】:Is the byte offset included with the 'block address' in caching?缓存中的“块地址”是否包含字节偏移量?
【发布时间】:2018-11-26 11:28:09
【问题描述】:

我一直在忙着做作业,这个问题一直困扰着我。我做错了吗?

我的立场是,“块地址”是这些 32 位参考地址的一部分(在大多数问题中给出),不包括用作字节偏移量的最低有效位(用于选择的部分)块中的一个字(或字节)。

为了演示,假设我们使用的是直接映射缓存,并给出了一个 32 位的引用地址,例如 0000 0000 0000 0000 1111 1100 0001 1100,并且标记为 24 位,索引为 6 位,偏移量为 2 位。

我的教科书(计算机组织与设计:MIPS 版)指出,给定地址在直接映射缓存中映射到的块由(block address) modulo (number of blocks in the cache) 找到。如果我将此计算中的偏移量作为“块地址”的一部分包含在内,那么我将指示命中/未命中/存储的结果块将与我没有的情况大不相同。

因此,如果有人知道“块地址”是否只是“地址”的另一个术语(整个 32 位引用),或者它是否意味着我认为它的含义,那将让我放心标签和索引(仅此而已)。有人知道吗?

【问题讨论】:

    标签: cpu-architecture cpu-cache mips32


    【解决方案1】:

    由于 mips 使用字来寻址,所有地址基本上都是 30 位长,另外还有 2 位设置为 0(末尾的字节偏移量)。 块偏移量是接下来的 2 位,后跟块地址:

    XXXX XXXX XXXX XXXX XXXX XXXX XXXX WW00

    • 00 这是字偏移量,在 mips 中几乎没用,因为您通常不使用字节
    • WW 这是块偏移量,用于标识选择哪个单词(假设块长 4 个单词)
    • XX.. 块地址,这是内存块的直接地址,包含 4 个字,因此 4x4 = 16 个字节。

    当您谈论块地址时,您谈论的是地址的前 28 位,因为其余的只是其他应用程序的偏移量。

    • 字节地址 - 所有 32 位
    • 字地址 - 前 30 位
    • 块地址 - 前 28 位(如果您选择更大的块,则更少)

    标签和索引只在谈论缓存时起作用,此时您查看块地址(在本例中为 28 位)并仅从这部分选择您的标签和索引,偏移量仅在缓存后使用访问。

    1. 从区块地址获取标签和索引
    2. 使用块偏移来获取单词(例如使用 32x4-1-MUX 完成)
    3. 将字移入目标寄存器

    【讨论】:

    • 在 mips 中几乎没用,因为您通常不使用字节。 ASCII 和 UTF-8 中的字符串是单字节数组。在典型的真实计算机程序中并不罕见。未对齐的单词不太常用,直到 MIPS32r6 才保证完全支持。 (MIPS32r6 删除了特殊的未对齐加载指令(如 lwl/r 左/右半部分)并要求常规 lw / sw 处理未对齐的地址。en.wikipedia.org/wiki/MIPS_architecture#MIPS32/MIPS64_Release_6)。除此之外,+1。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多