高速缓冲存储器(Cache)概念

 

 高速缓冲存储器(Cache)

一、概述

  1.为什么要使用Cache
  在多体交叉存储器中可知,I/O向主存请求的级别高于CPU访存,这就出现了CPU等待I/O访存的现象,致使CPU空等一段时间,甚至可能等待几个主存周期,从而降低了CPU的工作效率。为了避免CPU与I/O争抢访存,可在CPU与主存之间加一级缓存,这样,主存可将CPU要取的信息提前送至缓存,一旦主存在与I/O交换时,CPU可直接从缓存中读取所需信息,不必空等而影响效率。
  从另一角度来看,主存速度的提高始终跟不上CPU的发展。据统计CPU的速度平均每年改进60%,而组成主存的动态RAM速度平均每年只改进7%,结果是CPU和动态RAM之间的速度间隙平均每年增大50%。因此也希望由高速缓存Cache来解决主存与CPU的不匹配问题。

  2.程序访问的局部性原理
  Cache的出现主要解决CPU不直接访问主存, 只与高速Cache交换信息。那么,这是否可能呢?通过大量典型程序的分析,发现CPU从主存取指令或取数据在一定时间内,只是对主存局部地址区域的访问。这是由于指令和数据在主存内都是连续存放的,并且有些指令和数据往往会被多次调用(如子程序循环程序和一些常数),也即指令和数据在主存的地址分布不是随机的,而是相对的簇聚,使得CPU在执行程序时,访存具有相对的局部性,这就叫程序访问的局部性原理。根据这一原理,很容易设想,只要将CPU近期要用到的程序和数据, 提前从主存送到Cache, 那么就可以做到CPU在一定时间内只访问Cache。一般Cache采用高速的SRAM制作,其价格比主存贵,但因其容量远小于主存,因此能很好地解决速度和成本的矛盾。

  3.Cache的工作原理

  上图是Cache/主存存储空间的基本结构示意。
  主存由2n个可编址的字组成,每个字有惟一的n位地址。为了与Cache映射,将主存与缓存都分成若干块,每块内又包含若干个字,并使它们的块大小相同(即块内的字数相同)。这就将主存的地址分成两段:高m位表示主存的块地址, 低b位表示块内地址,则2m=M表示主存的块数。同样缓存的地址也分为两段:高c位表示缓存的块号,低b位表示块内地址,则表示缓存块数, 且c远小于M。主存与缓存地址中都用b位表示其块内字数,即B=2b 反映了块的大小,称B为块长。
  任何时刻都有一些主存块处在缓存块中。CPU欲读取主存某字时,有两种可能:一种是所需要的数已在缓存中,即可直接访问Cache(CPU与Cache之间通常一次传送一个字),此种情况称为CPU访问Cache命中;另一种是所需的数不在Cache内,此时需将该数所在的主存整个字块一次调入Cache中,此种情况称CPU访问Cache不命中。如果主存块已调入缓存块,则称该主存块与缓存块建立了对应关系。
  由于缓存的块数c远小于主存的块数M,因此,一个缓存块不能惟一地、永久地只对应一个主存块,故每个缓存块需设一个标记用来表示当前存放的是哪一个主存块,该标记的内容相当于主存块的编号。CPU读信息时,要将主存地址的高m位 (或m位中的一部分)与缓存块的标记进行比较,以判断所读的信息是否已在缓存中。
  Cache的容量与块长是影响Cache效率的重要因素,通常用“命中率”来衡量Cache的效率。命中率是指CPU要访问的信息已在Cache内的比率。一般而言,Cache容量越大,其CPU的命中率就越高。当然也没必要太大,太大会增加成本,而且当Cache容量达到一定值时,命中率已不因容量的增大而有明显的提高。因此,Cache容量是总成本价与命中率的折衷值。如80386的主存最大容量为4GB,与其配套的Cache容量为16KB或32KB,其命中率可达95%以上。
  块长与命中率之间的关系更为复杂,它取决于各程序的局部特性。当块由小到大增长时,起初会因局部性原理使命中率有所提高。由局部性原理指出,在已被访问字的附近,近期也可能被访问,因此,增大块长,可将更多有用字存入在缓存,提高其命中率。可是,倘若继续增大块长,很可能命中率反而下降,是因为所装入缓存的有用数据反而少于被替换掉的有用数据。由于块长的增大,导致缓存中块数的减少,而新装入的块要覆盖旧块,很可能出现少数块刚刚装入就又被覆盖,因此命中率反而下降。再者,块增大后,追加上的字,距离所访问的字更远,也更少会在近期用到。块长的最优值是很难确定的,一般每块取4至8个可编址单位(字或字节)较好,也可取一个主存周期所能调出主存的信息长度。例如CRAY—1的主存是16个体交叉,每个体为单字宽,其存放指令的Cache块长为16个字。又如IBM 370/168机主存是4体交叉,每个体宽为64位(8个字节),其Cache块长为32个字节。

  4.Cache的基本结构
  Cache的基本结构如下图所示。

  它由Cache存储体、地址映象变换机构、Cache替换机构几大模块组成。
  (1)Cache存储体。Cache存储体以块为单位与主存交换信息,为加速Cache与主存之间的调动,主存大多采用多体结构,且Cache访存的优先级最高。
  (2)地址映象变换机构。它是将CPU送来的主存地址转换为Cache地址。由于主存和Cache的块大小相同,块内地址都是相对于块的起始地址的偏移量(即低位地址相同),因此地址变换主要是主存的块号(高位地址)与Cache块号间的转换。
  如果转换后的Cache块已与CPU欲访问的主存块建立了对应关系,即命中,则CPU可直接访问Cache存储体。如果转换后的Cache块与CPU欲访问的主存块未建立对应关系,即不命中。此刻CPU在访问主存时,不仅将该字从主存取出,同时将它所在的主存块一并调入Cache,供CPU使用。当然,此刻能将主存块调入Cache内,也是由于cache原来处于未被装满的状态。反之,倘若Cache原来已被装满,即已无法将主存块调入Cache内时,就得采用替换策略。
  (3)替换机构。当Cache内容已满,无法接受来自主存块的信息时,就由Cache内的替换机构由按一定的替换算法来确定应从Cache内移出哪个块返回主存,而把新的主存块调入Cache。
  特别需指出的是,Cache对用户是透明的,即用户编程时所用到的地址是主存地址,用户根本不知道这些主存块是否已调入Cache内。因为,将主存块调入Cache的任务全由机器硬件自动完成。
  (4)Cache的读/写操作。Cache读操作的过程可用下述流程图来描述。

  Cache写操作比较复杂,目前主要采用以下几种方法。
  ·写直达法,又叫通过式写(Write-through)或叫通过式存(Store-through),它能随时保证主存与Cache的数据始终一致。但有可能会增加访存次数,因每向Cache写入时,都需向主存写入。
  ·写回法(Write-back),数据每次只是暂时写入Cache,并用标志将该块加以注明,直至该块从Cache替换出时,才写入主存。这种方法又称标志交换式,其速度快,但因主存中的字块未经随时修改,可能失效。
  ·信息只写入主存,同时将相应的Cache块有效位置“0”,表明此Cache块已失效,需要时从主存调入。还有一种可能,被修改的单元根本不在Cache内,因此写操作只对主存进行。
  对于有多个处理器的系统,各自都有独立的Cache,且都共享主存,这样又出现了新问题。即当一个缓存中数据修改时,不仅主存中相对应的字无效,连同其他缓存中相对应的字也无效(当然恰好其他缓存也有相应的字)。即使通过写直达法,改变了主存的相应字,而其他缓存中数据仍然无效。显然,解决系统中Cache一致性的问题很重要。

  5.Cache的改进
  Cache刚出现时,典型系统只有一个缓存,近年来普遍采用多个Cache。其含义有两方面:一是增加Cache的级数:二是将统一的Cache变成分开的Cache。
  (1)单一缓存和两级缓存。单一缓存即在CPU和主存之间只设一个缓存。随着集成电路逻辑密度的提高,又把这个缓存直接与CPU制作在同一个芯片内,故又叫片内缓存(片载缓存)。片内缓存可以提高外部总线的利用率,因为Cache做在芯片内,CPU直接访问Cache不必占用芯片外的总线(外部总线),而且片内缓存与CPU之间的数据通路很短,大大提高了存取速度,外部总线又可更多地支持I/O设备与主存的信息传输,增强了系统的整体效率。
  可是,由于片内缓存制在芯片内,其容量不可能很大,这就可能致使CPU欲访问的信息不在缓存内,势必再通过外部总线访问主存,访问次数多了,整机速度就会下降。如果在主存与片内缓存之间,再加一级缓存,叫做片外缓存,而且它是由比主存动态RAM和ROM存取速度更快的静态RAM组成,那么,从片外缓存调入片内缓存的速度就能提高,而CPU占用外部总线的时间也就大大下降,整机工作速度有明显改进。这种由片外缓存和片内缓存组成的Cache,叫做两级缓存,并称片内缓存为第一级,片外缓存为第二级。
  (2)统一缓存和分开缓存。统一缓存是指指令和数据都存放在同一缓存内的Cache;分开缓存是指指令和数据分别存放在两个缓存中,一个叫指令Cache,一个叫数据Cache。两种缓存的选用主要考虑如下两个因素。
  其一,它与主存结构有关,如果计算机的主存是统一的(指令、数据存在同一主存内),则相应的Cache就采用统一缓存;如果主存采用指令、数据分开存放的方案:则相应的Cache就采用分开缓存。
  其二,它与机器对指令执行的控制方式有关。当采用超前控制或流水线控制方式时,一般都采用分开缓存。
  所谓超前控制是指在当前指令执行过程尚未结束时,就提前将下一条准备执行的指令取出,即超前取指或叫指令预取。所谓流水线控制实质上是多条指令同时执行,又可视为指令流水。当然,要实现同时执行多条指令,机器的指令译码电路和功能部件也需多个。超前控制和流水线控制特别强调指令的预取和指令的并行执行,因此,这类机器必须将指令Cache和数据Cache分开,否则可能出现取指和执行过程对统一缓存的争用。如果此刻采用统一缓存,则在执行部件向缓存发出取数请求时,一旦指令预取机构也向缓存发出取指请求,那么统一缓存只有先满足执行部件请求,将数据送到执行部件,让取指请求暂时等待,显然达不到领取指令的目的,从而影响指令流水的实现。可见,这类机器将两种缓存分开尤为重要。

二、Cache——主存地址映象

  1.直接映象

  一个主存块只能映象到cache中的惟一一个指定块的地址映象方式称为直接映象。在直接映象方式下,主存中存储块的数据只可调入Cache中的一个位置。Cache中的这个数据块存储位置称为块框架(block frame)。因为主存的容量总是比Cache大,因此会有多个主存地址映象到同一个Cache地址。如果主存中两个存储块的数据都要调入Cache中的同一个位置,则将发生冲突。直接映象的地址变换方法如上图所示,主存中每个区的第0块映象到Cache的第0块,第l块映象到Cache的第1块,…,第N-1块映象到第N-1块。
  地址映象的方法一般是将主存块地址对Cache的块数取模即得到Cache中的块地址,这相当于将主存的空间按Cache的尺寸区分,每区内相同的块号映象到Cache中相同的块位置。地址映象机构在判断命中与否时只需判断Cache中某一块对应于主存中哪一区就可以了。因此,可以将主存地址的高位看作是区地址,即主存地址分为三段:区号、块号和块内地址。区号作为标志存放在地址映象表中,用于判断命中与否,主存的块号直接用于查地址映象表和在Cache中进行块内寻址,块内地址用于块内寻址。如果一个块的容量主几个(2的幂次)字或字节,那么地址的最低位可用于选择块中的字或字节。

  实现地址转换的过程如上图所示,其中地址映象用的块表中包含Cache存储器各块的区号,Cache地址的块内地址与主存地址的块内地址部分相同,块号也相同。在访存操作时,根据地址中的块号读出表中的区号并与当前地址的区号段进行比较,比较结果相同表示Cahe命中,访问可对Cache进行;比较结果不相同则表示不命中,访问需要对主存进行。这时在对主存进行访问并将主存中的块调人Cache中的同时将区号段写入块表中,这就完成了地址映象关系的改变。在新的数据块调入时,Cache中的原数据块被替换。从主存读人的数据可以先替换原数据然后再从Cache送到CPU,也可以在替换Cache原数据块时直接送到CPU。
  直接映象是一种最简单的地址映象方式,它的地址变换速度快,而且不涉及其他两种映象方法中的替换策略问题。缺点是不够灵活,因每个主存块只能固定地对应某个缓存块,即使缓存内还空着许多位置也不能占用,使缓存的存储空间得不到充分的利用。此外,如果程序恰好要重复访问对应同一缓存位置的不同主存块,就要不停地进行替换,从而降低了命中率。

  2.全相联映象

  每个主存块都可映象到任何Cache块的地址映象方式称为全相联映象,如上图所示。在全相联映象方式下,主存中存储块的数据可调入Cache中的任意块框架,如果Cache中能容纳程序所需的绝大部分指令和数据,则可达到很高的Cache命中率。但全相联映象Cache的实现比较复杂。当访问一个块中的数据时,块地址要同时与块表中的所有地址标志进行比较以确定是否命中。在数据块调入时,还存在着一个比较复杂的替换策略问题,即决定将数据块调入Cache中什么位置,将Cache中哪一块数据调出。

  采用全相联映象方式后,地址变换方式如上图所示。Cache地址中,块内地址部分直接取自主存地址的块内地址段,Cache块号则根据主存从块表中查到。块表中包含Cache存储器各块的主存块号以及对应的Cache块号,在访存操作时,根据地址中的块号在块表中查找是否有相同的主存块号。如果有相同的,则表示Cache命中,将对应的Cache块号取出以对Cache进行访问,没有相同的则表示不命中,在对主存进行访问并将主存中的块调入Cache中的同时将主存块号和Cache块号写入块表中,以改变地址映象关系。查找地址映象表时需要查找表中的每个项,全部查完后才能确定Cache不命中。在新的数据块调入时,还需确定将Cache中的哪个数据块替换出去。图中块表中的阴影区域表示块表查找的范围。
  全相联方法在Cache中的块全部装满后才会出现块冲突,而且可以灵活地进行块的分配,所以块冲突的概率低,Cache的利用率高。但全相联Cache中块表查找的速度慢,控制复杂,需要一个用硬件实现的替换策略,实现起来比较困难。为了提高全相联查表的速度,地址映象表可用相联存储器实现。但相联存储器的容量一般较低,速度较慢。所以全相联的Cache一般用于容量比较小的Cache中。

  3.组相联映象

  组相联映象指的是将存储空间分成若干组,各组之间是直接映象,而组内各块之间则是全相联映象。如上图所示,在组相联映象方式下,主存也按Cache的容量分区,每个分区又分成若干个组,每个组包含若干个块,Cache也进行同样的分组。主存中存储块的数据块可调入Cache中一个指定组内的任意块框架中,但主存中一个组的地址空间只能映象到Cache中相同的组中,也就是说组内是全相联映象,组间则是直接映象。组相联映象可以看做是上述两种地址映象方式的一般形式,如果组的容量为1个块时就变成了直接映象;如果组的容量变成了整个Cache的容量(也就是一个区的容量)时就变成了全相联映象。
  在组相联映象中,组的个数一般为2的幂次数,组内块的个数也是2的幂次。主存地址分成四段,高字段是区号;然后是组标志,用于确定组号;第三段是组中的块地址,用于确定组中的块;低字段是块内寻址段。Cache地址分三段:组号、组内块号和块内地址。组相联方法在判断块命中以及替换算法上都要比全相联方法简单,块冲突的概率比直接映象的低,其命中率也介于直接映象和全相联映象方法之间。

  组相联映象的地址变换方式如上图所示,其中cache地址中的块内地址部分直接取自主存地址的块内地址段,组号部分也直接取自主存地址(因为组间是直接映象),组内的块号部分则是查找块表的结果。块表中包含Cache存储器各块的主存区号;组内块号以及对应的cache组内块号。在访存操作时,根据地址中的组号和块号在块表中的该组对应的若干项中查找是否有相同的主存区号和组内块号。如果有相同的,则表示Cache命中,将对应的Cache组内块号取出以对Cache进行访问,没有相同的则表示不命中,在对主存进行访问并将主存中的块调入Cache中的同时将主存区号和组内块号和Cache的组内块号写入块表中,以改变地址映象关系。在新的数据块调入时,还需确定将组内的哪一个数据块替换出去。为了提高查块表和比较的速度,可以将一组的表项同时读出,分别与主存地址进行比较。
  组相联映象相对于直接映象的优越性随Cache容量的增大而下降,分组的效果随着组数的增加而下降。实践证明,全相联Cache的失效率只比8路组相联Cache的稍微低一点。全相联和组相联地址映象方法尽管可以提高命中率,但随之增加的复杂性和降低的速度也是不容忽视的。因此,一般在容量小的Cache中可采用组相联映象或全相联映象方法,而在容量大的Cache中则可以采用直接映象的Cache。在速度要求较高的场合采用直接映象,而在速度要求较低的场合采用组相联或全相联映象。

  4.段相联映象
  段相联映象是直接映象和全相联映象两者结合的又一种方式。它是将主存和Cache都分成若干段,且使它们每段包含的块数都相等,段之间采用全相联象,段内块之间采用直接映象。当段数与Cache块数相等(即每段只包含一块)时,便为全相联映象,当段数为1时,便为直接映象。

三、替换算法

  当新的主存块需要调入Cache并且它的可用空间位置又被占满时,就产生了一个替换算法(策略)问题。目前,常用的两种算法是:先进先出(FIFO)算法和近期最少使用(LRU)算法。

  1.先进先出(FIFO)算法
  FIFO算法的原则总是将最先调入Cache的字块替换出来,它不需要随时记录各字块的使用情况,所以容易实现、开销小。但其缺点是可能把一些需要经常使用的程序(如循环程序)块也作为最早进入Cache的块而被替换出去。

  2.近期最少使用(LRU)算法
  LRU算法是将近期最少使用的块替换出来。它需要随时记录Cache中各个字块的使用情况,以便确定哪个字块是近期最少使用的字块。LRU算法的平均命中率比FIFO高,尤其是当分组容量加大时(组相联映象)更能提高LRU算法的命中率。

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 程序局部性是指在程序执行过程中,相同或相邻的指令和数据往往会被反复访问并多次使用的特性。其原理主要包括时间局部性和空间局部性。 时间局部性指的是在执行过程中,程序的某个指令或者数据项在一段时间内被反复多次使用。这是由于计算机执行时,指令和数据往往以顺序的方式被取出和执行,因此当前执行的指令和数据有较大的概率在近期内再次使用。 空间局部性指的是在执行过程中,程序相邻的指令和数据在存储器中相对位置较近,因此在访问某个指令或数据时,往往会连续地访问其相邻的指令和数据。这是因为计算机在执行指令时,往往以块的方式从内存中读取数据,因此在读取一个数据时,很可能连续地读取其相邻的数据。 高速缓冲存储器cache)是位于中央处理器(CPU)和主内存之间的一层存储器,用来加快计算机的数据访问速度。其原理是通过提前将CPU需要访问的数据和指令缓存在高速缓存中,以满足CPU持续快速访问数据的需求。 高速缓存存储器采用了多级存储结构,通常包括L1、L2和L3三级缓存。L1缓存是与CPU核心直接相连的缓存,速度最快,容量较小;L2缓存是位于L1缓存和主内存之间的缓存,速度相对较慢但容量较大;L3缓存是当前多核处理器中常见的共享缓存,用于多个核心之间的数据共享。 高速缓存采用了缓存替换策略和缓存写策略来管理缓存中的数据。常见的缓存替换策略有最近不经常使用(LRU)、先进先出(FIFO)等,用来确定替换哪些数据;而缓存写策略主要有写回(Write Back)和写直达(Write Through),用来决定何时将数据写回主内存。其中,写回策略可以减少对主内存的写入次数,提高效率。 高速缓存的主要技术指标包括缓存容量、缓存关联度和缓存块大小。缓存容量示缓存可以存储的数据量,一般以字节或字来衡量;缓存关联度示CPU访问缓存时,需要比较的地址数量,常见的关联度有直接映射、全相联和组相联三种;缓存块大小则是指一次从主存中读取的连续数据的大小。这些指标的选择需要在缓存成本和命中率之间进行权衡。 ### 回答2: 程序局部性是指在程序执行过程中,程序具有空间局部性和时间局部性的特点。空间局部性指程序在一段时间内往往只访问某一部分数据,而时间局部性指程序在某一时刻访问的数据,很可能在未来的几个时刻仍然需要被访问。 程序局部性的原理是基于程序的运行特点。在程序执行过程中,通常会存在循环结构和函数调用等,导致代码的局部执行次数较高。而在循环结构中,往往会反复访问相同的内存位置,这样就形成了空间局部性。同时,程序的执行也会遵循顺序性,即执行的指令往往是紧邻着的,这就形成了时间局部性。 高速缓冲存储器cache)是位于CPU和主存之间的一级缓存,其主要目的是加快CPU对数据的访问速度。cache的原理是通过存储最常用的数据,将其快速提供给CPU,从而减少了对主存的访问次数,提高了程序的执行效率。 cache的主要技术指标包括容量、速度和命中率。容量是指cache能够存储的数据量大小,容量越大可以存储更多的数据,但相应的访问速度可能降低。速度是指从cache中获取数据的时间,速度越快,就可以更快地满足CPU的需求。命中率是指CPU请求的数据在cache中的比例,命中率越高,cache存储的数据满足CPU需求的概率越高。 为了提高cache的效率,可以采用多级缓存、使用更快的存储介质、采用更高效的替换算法等。同时,还可以根据程序的局部性原理,设计合理的访问策略,例如预取技术和写策略等,来进一步提高cache的性能。 ### 回答3: 程序局部性是指在程序的执行过程中,存在着指令局部性和数据局部性。指令局部性是指程序在一段时间内,执行的指令往往是同一部分代码附近的指令。数据局部性是指程序在一段时间内,使用的数据往往是同一部分内存附近的数据。 程序局部性的原理主要是基于计算机的存储结构和程序的执行特点。首先,由于计算机的主存和CPU的速度差异很大,为了提高程序的执行效率,计算机将一部分经常被访问的指令和数据存放在高速缓冲存储器cache)中。其次,程序的执行往往有顺序性和循环性,即程序的指令和数据往往存在较好的局部性。因此,通过合理的缓存算法和数据替换策略,将程序中高频访问的指令和数据放入高速缓存中,可以大大减少主存和CPU之间的数据传输次数,从而提高程序的执行效率。 高速缓存存储器(cache)是位于CPU与主存之间的一级缓存,其主要目的是缓解CPU对主存的访问速度和处理器运算速度之间的矛盾。高速缓存存储器的原理是基于程序局部性原理。当CPU需要访问指令或数据时,首先在高速缓存中进行查找,如果找到则命中,直接从高速缓存中读取;如果没有找到,则访问主存并将所需要的指令或数据加载到高速缓存中,并将原有的数据替换掉。 高速缓存存储器的主要技术指标包括容量、关联度和替换策略。容量指的是高速缓存能够存放的指令和数据的数量,容量越大,命中率越高;关联度指的是高速缓存中存放指令和数据的方式,可以采用直接映射、组相联或全相联等方式;替换策略则是指当高速缓存已满时,该如何选择被替换的指令或数据,常见的替换策略有先进先出(FIFO)、最近最少使用(LRU)等。这些技术指标的选择要根据计算机的架构和应用需求进行权衡和调整,以达到最佳的性能和效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值