我正在做计算机体系结构的作业,无法理解练习的前提

I'm working on homework for computer architecture and can't understand the premise of the exercise

我正在研究 "Computer organization and embedded systems, 6th edition" 书中的问题 8.6,我正在努力理解问题的设置。我已经截取了问题的屏幕截图并发布在下面:

我很难理解缓存的功能。问题陈述将缓存指定为 "small for illustrative purposes" 和 "It contains only four 16-bit words"。据我了解,缓存实际上只包含这 4 个用于字长数据或指令的插槽。此外,缓存是直接映射的,因此加载到其中的 instructions/data 应该通过它们的 "main-memory address" 模数 "number of blocks in the cache" 放入其中。现在缓存只有四个块(甚至不是块)所以它只是 "memory address" 模 4?这看起来很荒谬。我遇到的另一个问题是 "Words are accessed in the cache using the low-order 3 bits of an address"。我什至不知道缓存中保存的标签如何工作,或者标签的用途是什么,因为缓存中只有 4 个位置。

英语不是我的第一语言,所以我担心规范中可能有一些我不完全理解的细微差别,但无论哪种方式我都无法理解它。

你说的缓存是对的。它只能缓存4个字(每个字是2个字节),它只使用地址模块8(这就是直接映射缓存)。

这可能看起来很小,但是如果您看一下 68020 cpu,它只使用了“256 字节直接映射指令缓存,排列为 64 个四字节条目”,所以小缓存是没那么奇怪。 (我想他们把它做得这么小,所以你可以用手看它的内容。你甚至不想尝试 show/calculate 一个现代的 2MB 缓存)。

由于地址存储在模块8中,所以只需要地址的最低3位,就可以得到它在缓存中的槽位。

(补充说地址存储在模块8,而不是模块4,因为缓存中的每个字是2个字节,而不是1个)。

标记的目的是验证缓存中的值是否为您请求的地址中的值。

示例:您将 0xffff 写入地址 2+3,这将存储在缓存中的位置 2。

现在您尝试读取地址 10。您应该使用缓存中的值吗?如果地址10存储在缓存中,它将存储在缓存位置2。但是我们知道缓存位置2存储的值是地址2而不是地址10,所以你对地址10的读取必须从真正的读取ram,而不是来自缓存。

为了知道这一点,每次cpu写入缓存时,它存储高13位,这称为标记。因此缓存中的每个槽都包含 16 位存储在缓存位置的值,以及一个 13 位标签。

这样它就可以将标签与你要读取的地址进行比较,然后知道它是应该使用缓存值,还是从 ram 中读取。