【发布时间】:2017-06-05 09:56:09
【问题描述】:
这是一个我一直很难理解的关于记忆组织的问题,
假设我们有一个容量为4096bytes 的 N 路组关联缓存。这
地址的设置字段大小为 7 位,标签字段大小为 21 位。如果我们假设
缓存与 32 位处理器一起使用,那么块大小是多少(在
字节),缓存包含多少有效位,以及什么是关联性
缓存?
【问题讨论】:
标签: caching memory mips memory-mapping
这是一个我一直很难理解的关于记忆组织的问题,
假设我们有一个容量为4096bytes 的 N 路组关联缓存。这
地址的设置字段大小为 7 位,标签字段大小为 21 位。如果我们假设
缓存与 32 位处理器一起使用,那么块大小是多少(在
字节),缓存包含多少有效位,以及什么是关联性
缓存?
【问题讨论】:
标签: caching memory mips memory-mapping
为了解决这类问题,需要了解一些方程式。
要知道的参数
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_|
现在回答问题
已知:
C = 4096 bytes
set_bits = 7
tag_bits = 21
32 bits address field
问:
b?
N?
v?
只需从32 bit field 中减去tag_bits 和set_bits,即可得到byte_offset。
byte_offset = 32-21-7 = 4 bits
b = 2^4 = 16 bytes
S = 2^7 = 128 set
B = C/b = 4096/16 = 256
N = B/S = 256/128 = 2
v = B = 256 valid bits
【讨论】:
所以,我们有以下关于处理器和缓存的信息 -
缓存大小 = 4096 B
地址位 = 32
索引位 = 7
标记位 = 21
从以上信息可以快速计算出偏移字段所需的位数——
偏移位 = 地址位 - 标记位 - 索引位
偏移位 = 32 - 21 - 7 = 4
偏移位 = 4
使用偏移位,可以求出块大小,2**偏移位
块大小 = 16 字节
接下来是缓存的关联性 我们知道索引位 = 7。 这意味着我们有 128 个区块。每个块为 16 字节宽。
因此,缓存中的路数将是 -
方式数=缓存大小/(块数*块大小)
路数 = 2 因此关联性为 2。
关于有效位数。每个块都需要一个有效位。因此有效位数将是 -
有效位数 = 128*2
有效位 = 256
【讨论】: