ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

cache和主存的映射方式

cache和主存的映射方式

cache和主存的映射方式

全相联映射

主存块可以放在cache的任意位置

假设某个计算机的主存地址空间大小为256MB,按字节编址。

其数据cache有8个cache行,行长64B

由此可知,我们想要求出主存被分为多少块,就用256MB/64B =228/26=2^22

由于主存有28位,那么它就有22位用来表示主存块号,还有剩下6位用来表示块内地址

cache命中判定:

要访问1011010110.....001110

1.主存地址前22位,对比cache中所有块的标记
2.若标记匹配,且有效位=1,则cache命中,访问块内地址位=001110的单元
3.若没有命中,或者有效位=0,那么正常访问主存即可

直接映射

每个主存块只能放到一个特定的位置,cache块号=主存块号%cache总块数

%是取余操作,比如说cache块有8块,他映射主存的10号块的位置,那么10%8=2

假设某个计算机的主存地址空间大小为256MB,按字节编址。

其数据cache有8个cache行,行长64B

此时cache有8个块,当主存块号(二进制)对2^3进行取余 ,那么这个运算结果就相当于我们保留了末尾3位

此时如果主存地址可以映射到cache的0号位置,那么它的末尾三位一定是0

这时候相比全相联映射我们可以把表示主存块号的22位分割成19位标记+3位行号

块内地址依然是6位

此时如果想要访问101.....110001110

1.先根据主存块好找到后3位确定cache行

2.在看如果主存块号的前19位与cache标记匹配且有效位=1,那么cache命中,访问地址为001110的单元

3.若没有命中,或者有效位=0,那么正常访问主存即可

组相联映射

把cache块分组,cache块分为若干块,每个主存块可放到特定分组中任意一个位置,组号=主存块号%分组数

比如说,我们分了4组(0~3),我们要把主存15位置的数据映射到cache,那么就15%4=3,就放到第3组

假设某个计算机的主存地址空间大小为256MB,按字节编址。

其数据cache有8个cache行,行长64B

cache2路组相联映射,2块为1组,分4组

组的数量为22个,那么当主存块号(二进制)对22进行取余,相当于保留了后2位

此时也可以和直接映射一样把主存块号分为22位的标记,和2位的组号

此时如果想要访问101.....10001110

1.根据主存块号后2位,找到cache中的01组

2.如果前20位与分组哪某个标识匹配,且有效位=1,则cache命中,访问地址为001110的单元

3.若没有命中,或者有效位=0,那么正常访问主存即可

标记

为了区分主存块在cache上映射的地址,每个cache块都需要有一个标记,对应它所映射的主存块的位置
标记位如果没有指向,就让它指向0,这时候问题就来了,如果没有另外一个标识,那他们就会默认指向内存块0的位置,这样是不妥的

那么光是有标记还不够,还需要有一个有效位,来辨别这个标记是否有效。

返回列表