其他分享
首页 > 其他分享> > 计算机组成原理cache的三种映像

计算机组成原理cache的三种映像

作者:互联网

在学习三种映像之前,我们要先学习下cache的原理。

高速缓冲器cache的原理

cpu的速度远远快于内存,因此如果cpu只是从内存中读取数据,那么会花费较多的时间在等待数据上,我们希望有一种方法解决【从内存中读数据慢】的问题,于是有了高速缓存。

对于数据的读取基于两个猜想,假设我们读取内存地址x处的数据,那么有

命中(hit)

我们在访问一个内存地址的时候,先查看高速缓存里面有无该地址的数据。如果有就直接从高速缓存中读取数据,这个行为我们叫做hit,即缓存命中

未命中(miss)

如果高速缓存中没有数据,我们需要从内存中读取数据,这个行为叫做miss。值得注意的是,我们一次读取不是读取一个内存单元的数据,而是读取一个【cache行】的数据,这意味着目标地址及其附近区域的一些数据会被读到高速缓存中,如果下次访问邻近的数据,就不会miss。(cache容量一般为64字节)

在这里插入图片描述

直接映像

在这里插入图片描述
假设有4个cache行,每行16字节,那么主存中

0-15字节被映射到cache行1
16-31字节被映射到cache行2
32-47字节被映射到cache行3
48-63字节被映射到cache行4

64-79字节被映射到cache行1 这里循环往复,以4个16字节为循环长度,上图中不同颜色的连线表示了这种循环映射

我们对内存中的地址,直接模除64(4*16=64),看结果,如果模除结果是在0-15,那么cache行1。

示例
假设每次访问的都是映射到同一行的内存块,那么会不断的miss,因为就一块cache,大家一起用,互相覆盖,造成miss率高

在这里插入图片描述
优点是电路搭建简单,成本低。缺点是miss率很高

全相联映像

全连接映射顾名思义,谁都能映射。任意内存块,可以被映射到任意cache行。可以将cache看作一个list,只要list未满,就载入最前的一个空cache行,直到cache满,然后淘汰掉旧行,载入新行。
在这里插入图片描述
示例:
在这里插入图片描述
全连接映射hit率很高,因为大家公用所有cache,而不是像直接映射一样大家共用一个cache行。缺点是硬件实现很复杂,成本非常高(有n个cache行,就要有n个地址的比较电路来判断地址是否在行内)

多路组相联映像

组映射将cache分组,一个cache组包含多个cache行,而内存块以直接映射的形式,先映射到对应的组上,然后再以全连接映射的方式,再组内寻找对应到的cache行。
在这里插入图片描述
示例:
如下示例中,两次访问映射到同一cache组的地址,如果是直接映射,那么会被覆盖,而组内采用全连接映射,则避免了覆盖的情况。
在这里插入图片描述
优缺点:综合了上述两种映射,暨能做到组间直接映射,又能做到组内全连接映射,在成本和效率上有所折中,是折中的平衡方案。

标签:字节,映射,cache,映像,三种,内存,miss,高速缓存
来源: https://blog.csdn.net/qq_54494937/article/details/120843738