缓存地址映射是如何工作的?
How does cache address mapping work?
我开始了解 cpu 缓存的基本工作原理。不过,我对某一点感到困惑。当 cpu 根据碰巧具有相同标签和集合的两个地址命中时会发生什么?
假设我们有一个包含 16 字节块的 64 字节缓存。地址是 12 位的,它使用直接映射。标签有 5 位,集合有 to 位,偏移量有 5 位。如果我们有两个地址 0x070 (0000 0111 0000 inn binary ) 和 0x068 (0000 0110 1000),我们看到标记(前五位)相同,集合相同,只是偏移量不同。
据我了解,当它是"hit"时,计算机只考虑标记和设置。因此,如果两个地址都在 运行 一个接一个,缓存将有一个 "hit"。为什么这行得通?如果 cpu 将它们视为同一事物,这两个地址不会包含不同的信息并因此导致错误吗?或者 cpu 然后检查值是否相同然后继续?
如果我遗漏了什么或犯了错误,请告诉我。
两个地址都在同一个缓存行中。 CPU 对整个缓存行进行操作,使用地址的低位来知道要修改缓存行中的哪些字节。
我开始了解 cpu 缓存的基本工作原理。不过,我对某一点感到困惑。当 cpu 根据碰巧具有相同标签和集合的两个地址命中时会发生什么?
假设我们有一个包含 16 字节块的 64 字节缓存。地址是 12 位的,它使用直接映射。标签有 5 位,集合有 to 位,偏移量有 5 位。如果我们有两个地址 0x070 (0000 0111 0000 inn binary ) 和 0x068 (0000 0110 1000),我们看到标记(前五位)相同,集合相同,只是偏移量不同。
据我了解,当它是"hit"时,计算机只考虑标记和设置。因此,如果两个地址都在 运行 一个接一个,缓存将有一个 "hit"。为什么这行得通?如果 cpu 将它们视为同一事物,这两个地址不会包含不同的信息并因此导致错误吗?或者 cpu 然后检查值是否相同然后继续?
如果我遗漏了什么或犯了错误,请告诉我。
两个地址都在同一个缓存行中。 CPU 对整个缓存行进行操作,使用地址的低位来知道要修改缓存行中的哪些字节。