最近我在阅读一些关于 cpu 缓存的资料。我想知道 cpu 如何查找 L1 和 L2 缓存以及 cpu 缓存中的数据以什么格式存储?
我认为缓存的线性扫描效率低下,有没有更好的解决方案?
谢谢。
它使用从它正在查找的地址中提取的索引位和标签。
假设您正在访问一些 32 位地址 ADDR
ADDR 将有位:31--------------0,[------tag|index|offset]
然后取决于缓存的大小:假设您有一个 32K 的直接映射缓存,每块 32 字节。
偏移位用于查找每行中的数据,因为 8 字节是要带入缓存的最小数据大小(你总是得到完整的 32 字节,但在 32 字节内你会得到你的数据。)
这说明了一个有 1024 行或集合的缓存,同样每行有 32 个字节。为了索引 1024 个集合,您需要 10 位。因此,您地址中的 10 位用作缓存的索引。偏移位用于查看数据在该行内的位置,标记位用于匹配您正在查找的地址,因为两个或多个地址将映射到缓存的同一行。说得通?
我不知道你的答案,但我可以推荐一本好书,它可能会引导你阅读 - The Essentials Of Computer Organization and Architecture