我正在尝试理解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]
的字节。而我们请求的单个字节将位于[08]
位置。
3) 如果上述说法正确,那么使用的5位索引是否在技术上不需要,因为所有32字节都在缓存行中?
请告诉我如果我理解错了什么,谢谢。