高速缓冲静态存储器器可以直接被cpu访问吗

点击文档标签更多精品内容等伱发现~


VIP专享文档是百度文库认证用户/机构上传的专业性文档,文库VIP用户或购买VIP专享文档下载特权礼包的其他会员用户可用VIP专享文档下载特權免费下载VIP专享文档只要带有以下“VIP专享文档”标识的文档便是该类文档。

VIP免费文档是特定的一类共享文档会员用户可以免费随意获取,非会员用户需要消耗下载券/积分获取只要带有以下“VIP免费文档”标识的文档便是该类文档。

VIP专享8折文档是特定的一类付费文档会員用户可以通过设定价的8折获取,非会员用户需要原价获取只要带有以下“VIP专享8折优惠”标识的文档便是该类文档。

付费文档是百度文庫认证用户/机构上传的专业性文档需要文库用户支付人民币获取,具体价格由上传人自由设定只要带有以下“付费文档”标识的文档便是该类文档。

共享文档是百度文库用户免费上传的可与其他用户免费共享的文档具体共享方式由上传人自由设定。只要带有以下“共享文档”标识的文档便是该类文档

还剩7页未读, 继续阅读

大家都知道PC中内存条是构成内部靜态存储器器的主要部分是连接CPU和其他设备的通道,起到缓冲和数据交换作用

  1. 但是由于CPU与内存的速度存在着差异,所以在计算机静态存储器系统的层次结构中在中央处理器和主静态存储器器之间还设计了一部分高速小容量静态存储器器,它就是高速缓冲静态存储器器(Cache)它和主静态存储器器一起构成一级的静态存储器器。

  2. 如今计算机内采用高速缓冲静态存储器器技术已经相当普遍了有的计算机还采用多个高速缓冲静态存储器器,如系统高速缓冲静态存储器器、指令高速缓冲静态存储器器和地址变换高速缓冲静态存储器器等以提高系统的性能。

  3. 随着主静态存储器器容量不断增大高速缓冲静态存储器器的容量也越来越大,目前PC系统的发展趋势就是CPU主频越来越高系统架构也越来越先进,相对而言主存DRAM的结构和存取时间速度改进的比较慢因此缓冲静态存储器器技术更加重要,而且在PC系统中缓冲静態存储器器越来越大现在人们已经把缓冲静态存储器器作为评价和选购的一个重要指标之一。

  4. 中央处理单元(CPU)高速缓存是一种随机存取静态存储器器(RAM)它直接构建在计算机的微处理器本身中,并被指定为L1高速缓存

  5. 另一种CPU缓存是主板上有限容量的L2静态RAM(SRAM)芯片。在使用标准RAM静态存储器器之前微处理器在执行例程指令时首先访问这两种类型的静态存储器器,这为处理器提供了改进的性能特性

  6. 内存高速缓存是高速静态RAM(SRAM)的一部分,并且有效因为大多数程序重复访问相同的数据或指令。 通过在SRAM中尽可能多地保留这些信息计算机鈳以避免访问较慢的DRAM,从而使计算机的执行速度更快效率更高。

经验内容仅供参考如果您需解决具体问题(尤其法律、医学等领域),建議您详细咨询相关领域专业人士

作者声明:本篇经验系本人依照真实经历原创,未经许可谢绝转载。

 高速缓冲静态存储器器(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一致性的问题很重要


  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——主存地址映象

  一个主存块只能映象到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。
  直接映象是一种最简单的地址映象方式它的地址变换速度快,而且不涉及其他两种映象方法中的替换策略问题缺点是不够灵活,因每个主存块只能固定地对应某个缓存块即使缓存内还空着许多位置也不能占用,使缓存的静态存储器空间得不到充分的利用此外,如果程序恰好要重复访问对应同一缓存位置的不同主存块就要不停地进行替换,从而降低了命中率

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

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

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

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


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

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

  1.先进先出(FIFO)算法


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

  2.近期最少使用(LRU)算法


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

我要回帖

更多关于 缓冲存储器 的文章

 

随机推荐