2013-12-15 110 views
1

首先,这不是语言标记垃圾邮件,但这个问题并不特定于某种语言,特别是我认为这个stackexchange站点是最适合我的问题。缓存和内存

我正在处理缓存和内存,试图了解它是如何工作的。 我不明白的是这句话(粗体,不是在图片):

在MIPS架构,因为字对齐四个 字节,最低显著两位被忽略的倍数当在块中选择一个 单词时。

所以我们可以说我有这个两不会忽略:

[1........0]10 
    [1........0]00 
     ^
     | 
    same 30 bits for boths [31-12] for the tag and [11-2] for the index (see figure below) 

据我所知第一个将导致MISS(我假设初始缓存为空)。因此,缓存中的一个插槽将填充位于此内存地址中的数据。

现在,我们拿了第二个,因为它具有相同的30位,它将导致HIT在缓存中,因为我们访问相同的插槽(因为相同的10位)和地址的20位等于存储在标签字段中的20位。

因此,我们将有数据位于内存[1........0]10而不是[1........0]00这是错误的!

所以我认为这与我上面引用的句子有关。任何人都可以解释为什么我的推理是错误的吗?

在图中的高速缓存:

enter image description here

+0

你在做单字节或单字访问吗? –

+0

你忽略了“在块中选择一个单词时”。在确定需要缓存的内容时,最后的位不会被忽略。实际的内存访问使用完整地址。 –

+0

@PeterLawrey如果它是一个字我明白这将导致相同的,我不应该关心字节偏移量。对 ? – user2336315

回答

1

在MIPS体系结构中,由于字对齐以四个 字节,在选择 字时至少显著两个比特被忽略的倍数块。

它只是意味着在内存中,我的话是这样排列的:

enter image description here

所以选择一个字的时候,我不应该关心的最后两个位,因为我会加载一个词。

当执行一个加载字节(lb)指令时,这两个最后的位对于处理器是有用的,以便正确地移位数据以获得正确字节位置的数据。