我知道偏移是:块大小= 2 ^ n(偏移= n)。但我已经看到,当块大小= 8字节时,我们做:8 = 2 ^ n所以offset = n = 3位,这是正确的,但是当块大小= 1个字时,我看到1 = 2 ^ n(偏移= N = 0)。如果我们知道缓存有32位内存地址,我们不需要将字转换为字节吗? (因此我们有32位= 4字节,4 = 2 ^ n偏移在这种情况下是2)。
答案 0 :(得分:0)
你做得对,直观的是,应该知道word
在32位处理器中是4字节,在64位中是8字节。
byte offset
也可以通过这种方式找到,假设您的地址大小为32位
byte_offset = 32-tag_bits-set_bits
。
为了解决这种问题,了解一些有用的参数和方程式是很好的。
要知道的参数
C = cache capacity
b = block size
B = number of blocks
N = degree of associativity
S = number of set
tag_bits
set_bits (also called index)
byte_offset
v = valid bits
要知道的等式
B = C/b
S = B/N
b = 2^(byte_offset)
S = 2^(set_bits)
内存地址
|___tag________|____set___|___byte offset_|