一个直接映射缓存由 16 个块组成。主存储器包含 16K 块,每个块 8 字节。主存地址格式是什么(意思是每个字段的大小)。
我知道这些字段是 Tag|Block|Offset 。我只是不知道如何获得每个的大小。
这是作业吗?
为了解决这个问题,您需要知道相关架构的地址大小。一般解决方案:
令 C 为高速缓存的大小(以位为单位)。
令 A 为地址的大小(以位为单位)。
令 B 为高速缓存块的大小(以位为单位)。
令 S 为缓存的关联性(在方式上,直接映射为 S=1,完全关联为 S=C/B)
L,缓存中的行数,等于 C/B。这是缓存位数除以每行的位数。Q,缓存中的集合数,等于 L/S。那是行数除以关联性。这条线和上面的原因应该是显而易见的;如果不是,请在阅读以下内容之前再次阅读教科书。
现在,让我们解决三件事:位移位、块位和标记位。
位移位用于在高速缓存行中查找特定项目。假设字节可寻址内存,位移位数 D 为 ceil(log2(ceil(B/8)))。这是缓存行中字节数的日志基数 2,在每一步向上取整。如果内存是两字节可寻址的,那么内部将是 B/16 等。
块位用于在缓存中找到我们想要的缓存集。因此,O,即块位数,是 ceil(log2(Q))。这是缓存中集合数量的日志基数二。
标签位是剩下的。因此,标签位数 T 为 ADO。在英语中,地址中的位数减去用于其他两个部分的位数。我们不必在这里考虑关联性,因为我们已经在上面使用 Q 而不是 L 处理了它。
总之:
最后计算标签长度。这肯定更容易。
PS - 请注意,实际上,缓存还将在每一行中存储一个脏位和一些其他元数据。但是,这些问题通常会忽略这样的事情,所以我也这样做了。