1、5.3 高速缓冲存储器(Cache),Cache-存储器映象 替换算法,问题的提出,CPU和I/O争抢访问主存 主存速度始终跟不上CPU的发展 100MHz的Pentium处理器平均10ns就执行一条指令,而DRAM的典型访问时间是60120ns。Cache的出现主要使CPU不直接访问主存,只与高速Cache交换信息。程序访问的局部性原理 时间局部性:最近的访问项(指令/数据)很可能在不久的将来再次被访问(往往会引起对最近使用区域的集中访问) 空间局部性:一个进程访问的各项其地址彼此很近(往往会访问在存储器空间的同一区域),命中、不命中、命中率,Cache命中(hit) CPU欲访问的数据已在
2、缓存中,即可直接访问Cache Cache不命中(miss) CPU欲访问的数据不在Cache内,此时需将该数所在的主存整个子块一次调入Cache中。 命中率是指CPU要访问的信息已在Cache内的比率。通常用命中率来衡量Cache的效率。,Cache效率,Cache的容量和块长是影响Cache效率的重要因素。 Cache容量越大,命中率越高。 当Cahce容量达到一定值时,命中率不会因容量的增大而明显提高。 Cache容量大,成本增加。,Cache的命中率与cache容量的关系,1,Cache容量,命中率,Cache的读数操作流程,开始,CPU发出访存地址,访问Cache取出信息送CPU,命
3、中?,结束,访问主存取出信息送CPU,将新的主存块调入Cache中,执行替换算法腾出空位,Cache满?,Y,N,N,Y,Cache的写操作,命中 写直达法(Write-through、Store-though) 每次写入Cache的同时,也写入主存。 写回法(Write-back): 执行写操作时,信息只写入Cache; 当Cache块被替换时,先将该块内容写回主存,然后再调入新页。 信息只写入主存,同时将相应的Cache块有效位置“0” 不命中:被修改的单元根本不在Cache内,此时写操作只能对主存进行。比较 写回法的开销是在块替换时的回写时间,而写直达法则在每次写入时,都要附加一个比写C
4、ache长得多的写主存时间。 一般来说,写直达法的开销大一些,但其一致性保持的要好一些。 关键在于如何使Cache与主存内容保持一致。,Cache的基本结构,Cahce存储体、地址映象变换机构、替换机构,Cahce存储体 以块为单位和主存交换信息 Cache访存的优先级最高 地址映象变换机构 主要是 主存块号和Cache块号之间的转换。 四种映象:直接映象、全相联映象、组相联映象和段相联映象。 替换机构 Cache内容已满时,无法接受来自主存块的信息,需由Cache内的替换机构按一定的替换算法来确定从Cache内移出某个块写回主存。,Cache主存地址映象,由主存地址映象到Cache地址称为地
5、址映象。 直接映象全相联映象组相联影响段相连映象,1. 直接映象,Cache字块数为:C=2c 主存字块数为:M=2m 映射关系式:i=j mod C或 i=j mod 2c,主存储器,Cache,优点:实现简单,只需利用主存地址的某些位直接判断,就可确定所需字块是否在缓存中。缺点:效率低。因为每个主存块固定地对应某个缓存块(有2t个主存字块对应同一个Cache字块),如果这2t个字块中有两个或两个以上的主存字块要调入Cache,必然会发生冲突。这时,即使Cache中还有很多空闲块也无法占用,使缓存的空间得不到充分的利用。,2. 全相联映像,标记,标记,标记,主存地址,m=t+c位,b位,m=
6、t+c位,Cache“标记位”增多,比较位数增加;而且访问Cache时需要和Cache的全部“标记”进行比较,才能判断出所访问的主存地址的内容是否已在Cache内。,2. 全相联映像(续),字块号 0 1 2 3 4 5 6 7,3. 组相联映象,主存储器,Cache(r1),第0组,第1组,第2c-r-1组,主存地址,m位,3. 组相联映象(续),原理:把Cache分为Q(=2q)组,每组有R(=2r)块,且i=j mod Q 其中,i为缓存的组号,j为主存的块号 r0,直接相联;rc,全相联。在主存块和Cache的各组之间,属于直接映象关系;而主存块可以映射到对应组内的任何一块,这又体现出
7、了全相联映象的关系。,4.段相联映象,它将主存和Cache都分成若干段,且使得它们每段包含的块数都相等 段之间采用全相联映象,段内块之间采用直接映象。当段数与Cache块数相等时(即每段只包含一块),便为全相联映象;当段数为1时,便为直接映象。,四种映象方式比较,直接映象:优点是实现简单,缺点是不够灵活。全相联映象:实现电路较多,成本较高,实际的Cache还要采用各种措施来减少地址的比较次数。组相联映象和段相联映象:是直接映象和全相联映象相结合的两种形式。,替换算法,替换算法 先进先出算法(FIFO):选择最早装入的Cache字块替换出来。这种算法实现起来比较方便,但不能正确反映程序的局部性。
8、因为最先进入的字块也可能是目前经常要用的字块,因此,采用这种算法,有可能产生较大的失效率。 近期最少使用算法(LRU):选择“近期最少使用”块作为调出块,这种算法能比较正确反映程序的局部性,因为当前最少使用的块一般来说也是未来最少被访问的块。但是它的具体实现比FIFO要复杂一些。 随机替换,FIFO替换算法,近期最少使用算法,例:选最近4次访问期间最少使用Cache块作为被替换的块。,将内存与外存结合使用,好像有一个容量极大的内存储器,工作速度接近于主存,每位成本又与辅存相近.,虚拟存储器,工作过程包括6个步骤: 中央处理器访问主存的逻辑地址分解成组号a和组内地址b,并对组号a进行地址变换,即将逻辑组号a作为索引,查地址变换表,以确定该组信息是否存放在主存内。如该组号已在主存内,则转而执行;如果该组号不在主存内,则检查主存中是否有空闲区,如果没有便将某个暂时不用的组调出送往辅存,以便将这组信息调入主存。 从辅存读出所要的组,并送到主存空闲区,然后将那个空闲的物理组号a和逻辑组号a登录在地址变换表中。从地址变换表读出与逻辑组号a对应的物理组号a。从物理组号a和组内字节地址b得到物理地址。根据物理地址从主存中存取必要的信息。,