直接映射缓存

时间:2010-08-30 21:13:24

标签: caching

直接映射缓存由16个块组成。主存储器包含16K块,每块8字节。什么是主存储器地址格式(意味着每个字段的大小)。

我知道字段是Tag | Block | Offset。我只是不知道如何获得每个的大小。

1 个答案:

答案 0 :(得分:8)

这是家庭作业吗?

为了解决这个问题,您需要知道相关架构的地址大小。一般解决方案:

设C为以位为单位的缓存大小 设A为位的大小。
设B为比特的缓存块大小 设S是缓存的关联性(在某种程度上,直接映射为S = 1,完全关联为S = C / B)

L,缓存中的行数等于C / B.这是高速缓存位的数量除以每行的位数。 Q,缓存中的集合数等于L / S.这是行数除以关联性。这条线和上述原因应该是显而易见的;如果不是,请在阅读下面之前再次阅读教科书。

现在,让我们计算出三件事:位移位,块位和标记位。

位移位用于查找缓存行中的特定项。假设字节可寻址存储器D,位移位数是ceil(log2(ceil(B / 8)))。这是高速缓存行中两个字节数的对数基数,在每一步向上舍入。如果内存是双字节可寻址的,那么内部部分将是B / 16等。

块位用于在缓存中找到我们想要的缓存集。因此,块位数O是ceil(log2(Q))。这是缓存中集合数量的两个日志库。

标记位是剩下的。因此,标签位的数量T是A-D-O。在英语中,地址中的位数减去用于其他两个部分的位数。我们不必在这里考虑关联性,因为我们已经使用Q代替L来处理它。

总结:

  • 位移位是指定行中特定字节所需的位数
  • 块位是指定缓存中特定集所需的数量
  • 标记位是剩下的任何位

最后计算标签长度。这肯定更容易。

P.S。 - 请注意,实际上,缓存还会在每行中存储脏位和一些其他元数据。但是,这些问题通常会忽略这些问题,所以我也这样做了。