我正在学习计算机体系结构,我发现了一个问题和一个答案,我没有得到它。
它说L1缓存是32Kbyte和4路组关联。然后它询问比较器(四个),它们使用了多少位。物理地址是32位。
那家伙回答说:Tag = ?
Set Address = 8 bits
Address of Bytes = 5 bits
Tag = 32 - 8 -5 = **19 bits**.
我没有得到的是,他是如何拆分32位的呢?为什么设置地址有8位,为什么字节地址有5位?
答案 0 :(得分:0)
无论是谁解决了这个问题,都会隐含一个假设(或者你错过了复制它),即缓存行是32字节长。顺便说一句,大多数现代CPU都使用64字节。
这意味着,32kB L1存储1024行,每行32个字节,以4种方式组织,使其成为256集。这意味着您需要从地址中取出8位来表示该集合。
此外,你需要删除行内的字节偏移 - 因为行是32字节(再次 - 这里没有给出) - 你需要5位。
这意味着每个地址中的8 + 5位用于映射缓存中的一个字节,在32位地址中留下19位用于标记(这里不要将32位地址大小与缓存行大小混淆,它是正交的)。
现在,让我们假设他错了,并且缓存行大小为64字节。 在这种情况下,您将拥有一半的集合,因此只有7位用于集合映射,但是您需要一个额外的位用于偏移,而对于标记则完全相同。这可能是问题的作者认为不适合提供此信息的原因。