![直接映射缓存:如何确定地址分解](https://linux22.com/image/1531292/%E7%9B%B4%E6%8E%A5%E6%98%A0%E5%B0%84%E7%BC%93%E5%AD%98%EF%BC%9A%E5%A6%82%E4%BD%95%E7%A1%AE%E5%AE%9A%E5%9C%B0%E5%9D%80%E5%88%86%E8%A7%A3.png)
假设我有一个 32 位可寻址内存和一个 4 kib 直接映射缓存。假设缓存的每个条目(行)都由一个唯一字(32 位)组成。
我们可以推断索引的大小为 10 位,因为 4*2^10 字节 / 4 = 2^10 字 = 2^10 行。
现在,由于每行只有一个字,我假设我们不需要偏移字段。因此,缓存的地址按以下方式分解:
- 位 0 至 9 :索引
- 位 10 至 31:标签
我的逻辑有错误吗?
答案1
我们需要 2 位作为偏移量,因为 32 位值有 4 个字节,并且每个字节可能被单独访问,因此偏移量可能是 0、1、2 或 3。
因此,直接映射缓存会将地址分解为以下形式:
- 位 0 至 1:偏移量
- 位 2 至 11:索引
- 位 12 至 31:标签
答案2
一个缓存行通常为 64 个字节,偏移位 0-6 选择该行上的一个字节。