如何在缓存块的标记字段中查找位数
How to find number of bits in tag field of cache block
我有来自 class 的问题。
"主存有2048字节。缓存总大小为64字节,其中一共8个块。每个缓存块的标记字段是多少位?"
我该如何解决这个问题?我查看了整个堆栈溢出,我能找到的所有答案都涉及使用我无法获得的信息或使用从未在 class 中教授过的方法,例如使用对数。
以m位计算每个地址的大小。如果主内存有 2048 字节,那么我们有 2048=2^m 个唯一地址。这可以计算为 log2(2048) = 每个地址 11 位。 (2^11=2048)
根据块中的字节数计算位偏移量 n。 64 bytes/8 个块 = 每个块 8 个字节。 2^n=8,或 log2(8)。所以n=3,块偏移量为3位。
计算集合索引s。由于我们没有被告知其他情况,因此假设这是一个直接映射的缓存。这意味着我们有 8 组,每组有 1 个块。 2^s=8,或 log2(8)=3。所以 s=3.
最后,我们知道标签位数为T=m-s-n。因此当m=11、s=3、n=3时,T=11-6=5.
共有5个标签位
除非你能在脑海中计算出 2^m=2048,否则你将不得不使用对数。我试图以两种方式展示每个计算,以便您可以看到发生了什么。当您计算 log2(2048) 时,这与 2^m=2048.
相同
如果我关于我们在同一个 class 的假设是正确的,请查看 CSAPP 书中的 6.4。
我有来自 class 的问题。
"主存有2048字节。缓存总大小为64字节,其中一共8个块。每个缓存块的标记字段是多少位?"
我该如何解决这个问题?我查看了整个堆栈溢出,我能找到的所有答案都涉及使用我无法获得的信息或使用从未在 class 中教授过的方法,例如使用对数。
以m位计算每个地址的大小。如果主内存有 2048 字节,那么我们有 2048=2^m 个唯一地址。这可以计算为 log2(2048) = 每个地址 11 位。 (2^11=2048)
根据块中的字节数计算位偏移量 n。 64 bytes/8 个块 = 每个块 8 个字节。 2^n=8,或 log2(8)。所以n=3,块偏移量为3位。
计算集合索引s。由于我们没有被告知其他情况,因此假设这是一个直接映射的缓存。这意味着我们有 8 组,每组有 1 个块。 2^s=8,或 log2(8)=3。所以 s=3.
最后,我们知道标签位数为T=m-s-n。因此当m=11、s=3、n=3时,T=11-6=5.
共有5个标签位
除非你能在脑海中计算出 2^m=2048,否则你将不得不使用对数。我试图以两种方式展示每个计算,以便您可以看到发生了什么。当您计算 log2(2048) 时,这与 2^m=2048.
相同如果我关于我们在同一个 class 的假设是正确的,请查看 CSAPP 书中的 6.4。