他是如何拆分物理地址中的位的?

时间:2016-02-28 23:10:52

标签: computer-science comparator computer-architecture

我正在学习计算机体系结构,我发现了一个问题和一个答案,我没有得到它。

它说L1缓存是32Kbyte和4路组关联。然后它询问比较器(四个),它们使用了多少位。物理地址是32位。

那家伙回答说:

Tag = ?

Set Address = 8 bits

Address of Bytes = 5 bits

Tag = 32 - 8 -5 = **19 bits**.

我没有得到的是,他是如何拆分32位的呢?为什么设置地址有8位,为什么字节地址有5位?

1 个答案:

答案 0 :(得分:0)

无论是谁解决了这个问题,都会隐含一个假设(或者你错过了复制它),即缓存行是32字节长。顺便说一句,大多数现代CPU都使用64字节。

这意味着,32kB L1存储1024行,每行32个字节,以4种方式组织,使其成为256集。这意味着您需要从地址中取出8位来表示该集合。

此外,你需要删除行内的字节偏移 - 因为行是32字节(再次 - 这里没有给出) - 你需要5位。

这意味着每个地址中的8 + 5位用于映射缓存中的一个字节,在32位地址中留下19位用于标记(这里不要将32位地址大小与缓存行大小混淆,它是正交的)。

现在,让我们假设他错了,并且缓存行大小为64字节。 在这种情况下,您将拥有一半的集合,因此只有7位用于集合映射,但是您需要一个额外的位用于偏移,而对于标记则完全相同。这可能是问题的作者认为不适合提供此信息的原因。