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-主存的三种映射方式的主要内容,如果未能解决你的问题,请参考以下文章
(计算机组成原理)第三章存储系统-第六节2:Cache和主存的映射方式(全相联映射直接映射和组相连映射)
有一主存/Cache层次的存储器,其主要容量1Mb,Cache容量64Kb,每个数据块的大小16B若采用两路组相联映射方式