深入研读Cache存储的计算

本文探讨了Cache的存储容量计算,包括直接映射和二路组相连映射方式下的Cache行号确定。在256MB的主存地址空间下,数据Cache有8行,每行64B。对于直接映射,主存地址3200对应的Cache行号是2,而在二路组相连映射中,主存块号为50的会被映射到第2组。文章强调了正确理解主存地址、Cache块号和取余运算的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

假设某个计算机的主存地址空间是256MB,按照字节编址,其数据Cache有8行,行长有64B.

从这道题目里要好好领悟Cache策略的优美之处。

1)不考虑用于Cache的一致性维护位和替换算法控制位,并且采用直接映射方式,则该数Cache的总容量是多少?

2)若该Cache采用直接映射方式,则主存地址为3200(十进制)的主存对应的Cache行号是多少?若采用二路组相连映射又是多少?

解: 首先,这类题目的考法再怎么变化其实都是很直接的。前提是,你真的理解了背后的设计思路。

1)不空谈,看第一道。

不管是直接映射还是组映射,Cache总容量的计算方法是一样的:存储容量加上标记容量。

存储容量几乎不用多计算,题目中已经给出来。主要是标记容量的计算:需要考虑不同映射方式的差别。
为什么标记?先看主要原因,一个主存块对应到哪一个Cache块,在主存地址结构中就体现出来了。比如直接映射,低位是块内地址,中间是Cache块号,剩下的是总的存储位数减去前面两个,也可以这样计算:低位的Cache号和块内位数可以索引Cache存储体的全部位置。而一个主存相当于多少个Cache呢?用主存的大小除以Cache总容量,得到数据可以解读为多少个Cache,换算成二进制,幂就是高位的数目了。
假设我们有很多个Cache服务于主存。Cache之和恰好是主存大小。那么,每一个Cache的存储地址高位—Cache块号都是一模一样的,具体的行内地址这个我们不用管,反正就是和主存低位一样即可。现在我们知道主存分成一段一段的,每一段对应一个存储Cache.

但现实是Cache,这每一段都共用一个Cache,没关系,除了需要标记一下是哪一段以外,其他都相同。

回到题目中,标记容量就是这样,主存高位用了一部分表示自己是哪个Cache块,这个标记要和谁比较才有用?
所以在Cache中必然需要提供这样一个标记:主存高位的块标记。
也即,我们需要从主存地址推导这个标记位数。

然后再看其他的Cache需要用到的标记:有效位,脏位,替换算法控制等。这一般会被告知,最起码的要有一个有效位。
这也是本题中说的:1位有效位。

理论说完,看运用。按字节编址,256MB = 2^8 * 2^20 = 2^28B ==》 28位主存地址
Cache64B=26B==>6

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值