cache-主存的三种映射方式

Posted Rainbowman 0

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cache-主存的三种映射方式相关的知识,希望对你有一定的参考价值。

1. 基本概念

1. 存储系统的体系结构

在这里插入图片描述
图片摘自这篇博客:图片来源

2. cache在存储系统中的位置

在这里插入图片描述
cache(缓存)位于CPU内部,其读取速度快于主存,但容量小于主存。cache中存放的是程序需要用到的数据,CPU处理时直接从cache中读取数据速度要快于从主存中读取。

在CPU和主存之间引入cache是为了:

①避免CPU与外部设备争抢主存
外设向主存请求数据级别高于CPU,可能导致CPU等待较长时间。
②提高取指令和取数据的速度
主存速度提高跟不上CPU的发展速度,差距总在5倍以上。

3. 程序访问的局部性原理

之所以可以把CPU当前需要的数据和程序放在cache中,是因为程序访问具有局部性的原理:

时间局部性 一个存储单元被访问,此单元很快就会再次被访问

空间局部性 一个存储单元被访问,该单元临近的单元也可能很快被访问。

4. 命中率

如果访问的数据在cache中,称为访问cache命中。

设某Cache的命中率为h,其中访问Cache的时间为tc,访问M的时间为tm。设Nc访问cache命中的总次数,Nm表示访问cache不命中而访问M的次数,则有:
h=Nc/(Nc+Nm)×100%
①若CPU在访问cache不命中时再访问主存
平均访存时间ta=h·tc+(1-h)·(tc+tm)=tc+(1-h)·tm
②若CPU同时访问cache和主存,访问命中时中止对主存的访问。
平均访存时间ta=h·tc+(1-h)·tm

5. 字、字块、标记、组

:1个字由n个字节组成(n≥1),字是CPU访问存储器时可存取的最小单位

字块 :1个字块包含n个字(n≥1),字块是主存与cache交换的最小单位

也就是说,cache和主存在交换时是以字块为单位的,一次交换一个字块(包含好多个字,利用到了局部性原理)。而CPU在访问cache时,一次只存取一个字。

标记 :cache中存放的主存块地址称为标记。

:多个字块组成的一个逻辑整体称为组。

2. cache-主存的三种映射方式

2.1 全相联映射

思路

允许主存中的每个字块映像到cache的任何一个字块位置上。

示意图

在这里插入图片描述
主存地址和cache地址

设置主存地址和cache地址的一个目的是,可以通过主存地址来找到cache地址,这样才能实现主存和cache字块的交换。

主存地址:

包括块标记字块内地址两部分,其中块标记相当于字块在主存中的地址,字块内地址为字块中某个字的地址。

示意图:
在这里插入图片描述
cache地址:

包括字块号字块内地址,其中,字块号为字块在cache中的地址,字块内地址为字块中某个字的地址。

注意:主存地址和cache地址中的字块内地址相同。

示意图:

在这里插入图片描述
相联存储器:

既然全相联映射方式的思路是:主存中的字块映射在cache中的任一字块,计算机怎么知道映射到哪一字块了?到时候怎么操作呢?这就需要一个目录表来查找主存中的某一字块与cache中某一字块的对应关系:

在这里插入图片描述
该目录表由三部分组成:主存字块标记(主存地址的第一部分),cache字块地址(cache地址的第一部分),有效位(1位)。目录表的行数为cache的字块数,这很好理解,因为目录表的目的就是查找主存字块和cache字块的对应关系。

特点

(1)映像方式灵活,主存中的一个字块可以对应cache的任意一块;
(2)主存地址映射到cache无规则可言,必须使用相联存储器通过按内容查找获取cache块号。
(3) 全部由硬件实现,速度快,但硬件实现难度大;
(4)由于使用相联存储器存储目录表,成本高。当cache容量越大时,所需相联存储器的容量也越大,成本也越高。仅适用于小容量cache采用。

2.2 直接映射方式

思路

主存中的一块只能拷贝到cache中的一个特定行位置。设主存的块号为i,cache中的块号为j,cache的总块数为N,则映射关系为:
j = i mod N

示意图

在这里插入图片描述
主存地址与cache地址

主存地址:

包括块标记、字块地址、字块内地址三部分。其中,块标记为字块在主存中的地址,字块地址为字块在cache中的地址(计算方法就是上面说的),字块内地址为字在字块中的地址。

因此这种映射方法不需要目录表了。(因为主存地址中存有要映射到cache相应字块的字块地址了)

示意图:

在这里插入图片描述
cache地址:

包括字块地址字块内地址两部分:其中,字块地址为字块在cache中的地址,字块内地址为字在字块中的地址。

注意:cache地址中的字块地址字块内地址和主存地址中的相同。

示意图:

在这里插入图片描述
特点

(1)映像函数简单,实现硬件简单,无需相联存储器,实现成本较全相联映像方式低;
(2)地址变换速度快,如果命中且字块有效,那么主存地址去掉区号后的低位部分就是cache地址。
(3)块冲突率高,当两个或两个以上的主存块映射到相同的cache发生冲突时,即使其他cache块空闲也不能被使用。当两块交替映射到同一cache时,造成频繁置换——抖动。

2.3 组相联映射方式

思路

组相联映像方式为前两种方式的折衷。其方法是将cache按某种规格分组,主存中若干字块映射到同一个组中,组间为直接映像方式,组内为全相联映像。

主存字块在cache组号求法为:主存字块号 mod cache组数
示意图

在这里插入图片描述
主存地址和cache地址

主存地址:

主存地址包括主存字块标记、组号字块内地址三部分。其中主存字块标记为字块在主存中的地址,组号为cache分的组的组号,字块内地址为字在字块中的地址。

示意图:
在这里插入图片描述
cache地址:

cache地址包括组号、字块号字块内地址三部分组成。其中,组号为cache分组的组号,字块号为每组内字块的地址,字块内地址为字在字块中的地址。

注意:主存地址和cache地址中的组号字块内地址相同。

示意图:

在这里插入图片描述
特点

(1)因为是两种映像方式的折衷,因此地址结构较为复杂,比较的情况较多,需要引入相联存储器;
(2) 兼顾了映像的灵活性和操作的复杂程度。
(3)目前应用较多。每组具有v个字块的组相联映像方式常称为v路组相联。v一般取值较小,典型值有2、4、8、16。

3. 三种映射方式例题

【例题】

设主存容量为256K字,cache容量为2K字,块长为4,按字编制。
①设计cache地址格式,cache可装入多少块数据。
②在直接映射方式下,设计主存地址格式。
③在四路组相联映射方式下,设计主存地址格式
④在全相联映射方式下,设计主存地址格式

【解答】

因为是按字节编址,所以主存地址有18位,cache地址有11位,因为块长为4,说明每个字块有4个字,故字块内地址为2位。

① 字块内地址为2位,故字块地址有11-2=9位,cache地址如下:
在这里插入图片描述
② 直接映射方式下,主存地址包括主存字块标号字块地址字块内地址3部分,其中字块地址和字块内地址与cache地址相同,故主存字块标号有18-11=7位。主存地址如下:

在这里插入图片描述
③ 四路组相联,说明cache分为4个组,此时cache地址包括:组号、字块地址、字块内地址三部分

因为分为4组,故组号为2位,因为一个字块长4位,故字块内地址为2位,故字块地址为11-2-2=7位,cache地址如下:

在这里插入图片描述
此时主存地址由三部分组成:主存字块标记、组号、字块内地址。

组号和字块内地址和cache地址相同(共7+2=9位),故主存字块标记有18-9=9位,主存地址如下:

在这里插入图片描述
④ 全相联方式下,主存地址由主存字块标记和字块内标记组成,字块内标记和cache地址相同,为2位,故主存字块标记为18-2=16位,主存地址如下:

在这里插入图片描述

以上是关于cache-主存的三种映射方式的主要内容,如果未能解决你的问题,请参考以下文章

主存与Cache间组相联映射计算

计算机原理 4.9 Cache地址映射与变换方法

cache中的数据是啥的映射

(计算机组成原理)第三章存储系统-第六节2:Cache和主存的映射方式(全相联映射直接映射和组相连映射)

有一主存/Cache层次的存储器,其主要容量1Mb,Cache容量64Kb,每个数据块的大小16B若采用两路组相联映射方式

主存到Cache直接映射全相联映射和组相联映射