因此,我在理解直接映射缓存的某些部分时遇到了问题。我有一个字节寻址的内存系统,它有64KB的内存和2KB的直接映射缓存。缓存块为32字节。
据我所知,如果我错了,请纠正我,我有2048B/32B = 64个缓存块。我需要计算出每个缓存条目(标签、“脏”位等)总共需要多少位。
我相信我需要6个索引位(2^6 = 64 (块的数量))和5个偏移位(2^5 = 32 (缓存块的大小))。
发布于 2017-12-11 05:52:07
物理地址的位可以被分成3组--最低有效位组用于确定“缓存块中字节的偏移量”并且不需要存储在标签中,中间位组用于确定“缓存块在缓存中的索引”并且不需要存储在标签中,以及最高有效位组用于检查缓存中的数据是否是必须存储在标签中的所需数据。
对于64 KiB的物理地址空间,一个物理地址将有16位;如果您的缓存是2048字节,那么(对于“直接映射”)最低有效位组和中间位组组合在一起必须加起来总共11位。这意味着最高有效位组(必须存储在标签中)需要是5位(因为16位- 11位=5位)。
对于其他位,你总是需要一些东西来指示条目是使用的还是空的;如果缓存是“写回”的,你需要一个脏位,但如果缓存是“直写”的,你就不需要;如果有多个CPU和缓存一致性,你需要更多的位(例如独占/共享);如果有任何类型的错误检测或纠正,你需要更多的位(例如“奇偶校验位”)。这意味着总标签大小至少为6比特(但可能更多)。
https://stackoverflow.com/questions/47743005
复制相似问题