Cache与主存之间的映射方式

原文出处:http://gsqls.blog.163.com/blog/static/45971218201341310221675/


一、高速缓冲存储器的功能、结构与工作原理

  高速缓冲存储器是存在于主存与CPU之间的一级存储器,由静态存储芯片(SRAM)组成,容量比较小但速度比主存高得多,接近于CPU的速度。

  1Cache的引入

  请注意下面两种情况:

  ①大容量主存一般采用DRAM,相对SRAM速度慢,而SRAM速度快,但价格高。

  ②程序和数据具有局部性,即在一个较短的时间内,程序或数据往往集中在很小的存储器地址范围内。

  因此,在主存和CPU之间可设置一个速度很快而容量相对较小的存储器,在其中存放CPU当前正在使用以及一个较短的时间内将要使用的程序和数据,这样,可大大加快CPU访问存储器的速度,提高机器的运行效率。

  Cache基本工作原理如下图:

  

  Cache的功能是用来存放那些近期需要运行的指令与数据,目的是提高CPU对存储器的访问速度,为此需要解决2个技术问题:

  一是主存地址与缓存地址的映射及转换;

  二是按一定原则对Cache的内容进行替换。

  Cache的结构和工作原理如下图所示。

  

  主要由三大部分组成:

  Cache存储体:存放由主存调入的指令与数据块。

  地址转换部件:建立目录表以实现主存地址到缓存地址的转换。

  替换部件:在缓存已满时按一定策略进行数据块替换,并修改地址转换部件。

  2Cache的基本原理

  Cache与主存分成块(常常将Cache块说成Cache行),每块由多个字节组成,大小相等。在一个时间段内,Cache的某块中放着主存某块的全部信息,即Cache的某一块是主存某块的副本(或叫映像),如下图所示。

  Cache除数据部分外,还应记录放在某块中的信息是主存中哪一块的副本。因此,还应有第二个组成部分,即标记(tag)——记录主存块的块地址信息。

  采用Cache后,进行访问存储器操作时,不是先访问主存,而是先访问Cache。所以存在访问Cache时对主存地址的理解问题(指物理地址)。由于Cache数据块和主存块大小相同,因此主存地址的低地址部分(块内地址)可作为Cache数据块的块内地址。

二、地址映射与转换

  地址映射是指某一数据在内存中的地址与在缓存中的地址两者之间的对应关系。下面介绍三种地址映射的方式。

  1、全相联映射方式

  全相联映射是指主存中任意一个块都可以映射到Cache中任意一个块的方式,也就是说,当主存中的某一块需调入Cache时,可根据当时Cache的块占用或分配情况,选择一个块给主存块存储,所选的Cache块可以是Cache中的任意一个块。例如,设Cache共有2C块,主存共有2M块,当主存的某一块j需调进Cache中时,它可以存入Cache的块0、块1、…、块i、…或块2C-1的任意一块上。如下图所示。

  

  全相联映射方式

  在全相联映射方式下,CPU的访主存地址为如下形式:

  

  其中,M为主存的块号,W为块内的字号。而CPU访Cache的地址形式为:

  

  其中,C为Cache的块号,W为块内的字号。

  主存地址到Cache地址的转换是通过查找一个由相联存储器实现的块表来完成的,其形成过程如下图所示。

  

  全相联映射的地址转换

  当一个主存块调入Cache中时,会同时在一个存储主存块号和Cache块号映射表的相联存储器中进行登记。CPU访存时,首先,根据主存地址中的主存块号M在相联存储器中查找Cache块号C,若找到,则本次访Cache命中,于是将对应的Cache块号取出,并送访Cache地址的块号C字段,紧接着将主存地址的块内字号W直接送Cache地址的块内字号W字段,从而形成一个访Cache的地址,最后根据该地址完成对Cache单元的访问。

  优点:命中率比较高,Cache存储空间利用率高。

  缺点:相联存储器庞大,比较电路复杂,访问相关存储器时,每次都要与全部内容比较,速度低,成本高,因而只适合于小容量的Cache之用,应用少。

  2.直接相联映射

  直接相联映射方式是指主存的某块j只能映射到满足如下特定关系的Cache块i中:

  i=j mod 2C

  

  直接相联映射方式

  上图中,主存的第0、2C、2C+1、…块只能映射到Cache的第0块,主存的第1、2C+1、2C+1+1、…块只能映射到Cache的第1块,……,主存的第2C-1、2C+1-1、…2M-1块只能映射到Cache的第2C-1块。

  对2C求余后余数相同的主存块对应Cache中同一个块。

  在直接相联映射方式下,CPU的访主存地址为如下形式:

  

  其中,T为标志号,C为Cache的块号,W为块内的字号。在这里,原主存的块号M实际上被分成了两个字段:T和C,其中C用于指出主存的块可以映射的Cache的块,即对2C求余后的余数部分,而对于余数相同的不同的主存块来讲,整除2C后的商(即上面的T)部分则不相同。

  一般来讲,主存的块数是Cache的块数的整数倍,也就是说主存的块数2M和Cache的块数2C满足关系式:2M=n·2C

  在直接相联映射方式下,标志号T是随Cache的每个块一起存储的,其地址转换过程如下图所示。

  

  直接相联映射的地址转换

  当一个主存块调入Cache中时,会同时将主存地址的T标志存入Cache块的标志字段中。当CPU送来一个访存地址时,首先,根据该主存地址的C字段找到Cache的相应块,然后将该块标志字段中存放的标志与主存地址的T标志进行比较,若相符,说明主存的块目前已调入该Cache块中,则命中,于是使用主存地址的W字段访问该Cache块的相应字单元;若不相符,则未命中,于是使用主存地址直接访主存。

  优点:比较电路最简单,地址映射方式简单,数据访问时,只需检查区号是否相等即可,因而可以得到比较快的访问速度,硬件设备简单。

  缺点:Cache块冲突率较高,余数相同的主存块无法同时进入Cache,从而降低了Cache的利用率。由于主存的每一块只能映射到Cache的一个特定块上,当主存的某块需调入Cache时,如果对应的Cache特定块已被占用,而Cache中的其它块即使空闲,主存的块也只能通过替换的方式调入特定块的位置,不能放置到其它块的位置上,替换操作频繁,命中率比较低。

  3.组相联映射

  以上两种方式各有优缺点,而且非常有趣的是,它们的优缺点正好相反,也就是说,对于全相联映射方式来说为优点的恰是直接相联映射方式的缺点,而对于全相联映射方式来说为缺点的恰是直接相联映射方式的优点。那么,可否找到一种能较好地兼顾这两种方式的优点的映射方式呢?下面我们就来看看组相联映射方式在这种方式下,将Cache分成2u组,每组包含2v块。主存的块与Cache的组之间采用直接相联映射,而与组内的各块则采用全相联映射。也就是说,主存的某块只能映射到Cache的特定组中的任意一块。主存的某块j与Cache的组k之间满足如下关系:

  k=j mod 2u

  设主存共有2s×2u块(即M=s+u),则它们的映射关系如下图所示。

  

  组相联映射方式

  图中,主存的块0、2u、2u+1、…、(2s-1)2u可以映射到Cache的第0组的任意一块,主存的块1、2u+1、2u+1+1、…、(2s-1)2u+1可以映射到Cache的第1组的任意一块,……,主存的块2u-1、2u+1-1、…、2M-1可以映射到Cache的第2u-1组的任意一块。

  在组相联映射方式下,CPU的访主存地址和访Cache地址分别为如下形式:

  

  

  其中,u为Cache的组号,v为组内的块号。Cache的块号C=u+v,而主存的块号M=s+u。也就是说,主存块地址的后u位指出了主存的这一块所能映射的Cache的组。

  与全相联映射方式类似的是,在组相联映射方式下,主存地址到Cache地址的转换也是通过查找一个由相联存储器实现的块表来完成的,其形成过程如下图所示。

  

  组相联映射的地址转换

  当一个主存块调入Cache中时,会同时将其主存块地址的前s位写入一个由相联存储器实现的快表的对应Cache块项的s字段中。例如,设主存的某块调入Cache的第1组的第2块中,则在快表的组1第3项的s字段会登记下该主存块地址的前s位。

  优点:块的冲突概率比较低,块的利用率大幅度提高,块失效率明显降低。

  缺点:实现难度和造价要比直接映射方式高。

三、替换策略

  根据程序局部性规律可知:程序在运行中,总是频繁地使用那些最近被使用过的指令和数据。这就提供了替换策略的理论依据。综合命中率、实现的难易及速度的快慢各种因素,替换策略可有随机法、先进先出法、最近最少使用法等。

  1.随机法(RAND法)

  随机法是随机地确定替换的存储块。设置一个随机数产生器,依据所产生的随机数,确定替换块。这种方法简单、易于实现,但命中率比较低。

  2.先进先出法(FIFO法)

  先进先出法是选择那个最先调入的那个块进行替换。当最先调入并被多次命中的块,很可能被优先替换,因而不符合局部性规律。这种方法的命中率比随机法好些,但还不满足要求。先进先出方法易于实现,例如Solar-16/65机Cache采用组相联方式,每组4块,每块都设定一个两位的计数器,当某块被装入或被替换时该块的计数器清为0,而同组的其它各块的计数器均加1,当需要替换时就选择计数值最大的块被替换掉。

  3.最近最少使用法(LRU法)

  LRU法是依据各块使用的情况,总是选择那个最近最少使用的块被替换。这种方法比较好地反映了程序局部性规律。

  实现LRU策略的方法有多种。下面简单介绍计数器法、寄存器栈法及硬件逻辑比较对法的设计思路。

  计数器方法:缓存的每一块都设置一个计数器,计数器的操作规则是:

  (1)被调入或者被替换的块,其计数器清"0",而其它的计数器则加"1"。

  (2)当访问命中时,所有块的计数值与命中块的计数值要进行比较,如果计数值小于命中块的计数值,

  则该块的计数值加"1";如果块的计数值大于命中块的计数值,则数值不变。最后将命中块的计数器清为0。

  (3)需要替换时,则选择计数值最大的块被替换。

  寄存器栈法:设置一个寄存器栈,其容量为Cache中替换时参与选择的块数。如在组相联方式中,则是同组内的块数。堆栈由栈顶到栈底依次记录主存数据存入缓存的块号:

  (1)当缓存中尚有空闲时,如果不命中,则可直接调入数据块,并将新访问的缓冲块号压入堆栈,位于栈顶。其他栈内各单元依次由顶向下顺压一个单元,直到空闲单元为止。

  (2)当缓存已满,如果数据访问命中,则将访问的缓存块号压入堆栈,其他各单元内容由顶向底逐次下压直到被命中块号的原来位置为止。如果访问不命中,说明需要替换,此时栈底单元中的块号即是最久没有被使用的。所以将新访问块号压入堆栈,栈内各单元内容依次下压直到栈底,自然,栈底所指出的块被替换。

  比较对法:比较对法是用一组硬件的逻辑电路来记录各块使用的时间与次数。

  假设Cache的每组中有4块,替换时,是比较4块中那一块是最久没使用的,4块之间两两相比可以有6种比较关系。如果每两块之间的对比关系用一个RS触发器,则需要6个触发器(T12,T13,T14,T23,T24,T34),设T12=0表示块1比块2最久没使用,T12=1表示块2比块1最久没有被使用。

  在每次访问命中或者新调入块时,与该块有关的触发器的状态都要进行修改。

  按此原理,由6个触发器组成的一组编码状态可以指出应被替换的块。例如,块1被替换的条件是:T12=0,T13=0,T14=0;块2被替换的条件是:T12=1,T23=0,T24=0等等。

四、Cache的一致性问题

  Cache的内容是主存内容的一部分,是主存的副本,内容应该与主存一致。由于:

  (1)CPU写Cache,没有立即写主存;

  (2)I/O处理机或I/O设备写主存。

  从而会造成Cache与主存内容的不一致。

  对Cache进行写操作时引起的不一致的解决方法:

  1.全写法亦称写直达法(WT法-Write through)

  方法:在对Cache进行写操作的同时,也对主存该内容进行写入。

  优点:可靠性较高,操作过程比较简单。

  缺点:写操作速度得不到改善,与写主存的速度相同。

  2.写回法(WB法-Write back)

  方法:在CPU执行写操作时,只写入Cache,不写入主存。

  优点:速度较高。

  缺点:可靠性较差,控制操作比较复杂。

  3.写一次法(

  与写回法基本相同,不过在第一次写命中时,要同时写入Cache及主存。

  五、Cache性能分析

  1.Cache系统的加速比

  存储系统采用Cache技术的主要目的是提高存储器的访问速度,加速比是其重要的性能参数。Cache存储系统的加速比SP(Speedup)为:

  

  其中:Tm为主存储器的访问周期,Tc为Cache的访问周期,T则为Cache存储系统的等效访问周期,H为命中率。

  可以看出,加速比的大小与两个因素有关:命中率H及Cache与主存访问周期的比值Tc/Tm,命中率越高加速比越大。下图显示出了加速比与命中率的关系。

  

  2.Cache的命中率

  影响Cache命中率的因素很多,如Cache的容量,块的大小,映射方式,替换策略以及程序执行中地址流的分布情况等等。一般地说:

  Cache容量越大则命中率越高,当容量达到一定程度后,容量的增加命中率的改善并不大;

  Cache块容量加大,命中率也明显增加,但增加到一定值之后反而出现命中率下降的现象;

  直接映射方式命中率比较低,全相联方式命中率比较高,在组相联方式中,组数分得越多,则命中率下降。


  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值