我试图了解 CPU 缓存是如何运行的。假设我们有这个配置(例如)。
- 缓存大小 1024 字节
- 高速缓存行 32 字节
- 1024/32 = 总共 32 条缓存线。
- 单个缓存行可以存储 32/4 = 8 个整数。
1)根据这些配置,标签长度应为 32-5=27 位,索引大小为 5 位(2^5 = 缓存行中每个字节的 32 个地址)。
如果总缓存大小为 1024,并且有 32 个缓存行,那么标签+索引存储在哪里?(还有另外4*32 = 128字节。)是不是表示缓存的实际大小是1024+128 = 1152?
2) 如果在这个例子中缓存线是 32 字节,这意味着每当 CPU 需要从 RAM 中获取新字节时,32 字节就会被复制到缓存中。我是否正确假设所请求字节的缓存行位置将由其地址确定?
这就是我的意思:如果 CPU 请求的字节位于[FF FF 00 08]
,那么可用的缓存行将被从[FF FF 00 00]
到的字节填充[FF FF 00 1F]
。我们请求的单个字节将位于 position [08]
。
3)如果前面的语句是正确的,这是否意味着用于索引的 5 位在技术上是不需要的,因为所有 32 字节都在缓存行中?
如果我有什么问题,请告诉我。谢谢