730 likes | 1.03k Views
计算机系统结构. - 第三章 存储系统. 3.4 高速缓冲存储器 ( Cache ). 当代 Cache 的特征. 为了弥补主存速度不足,在存储体系结构中出现了 “ 高速缓冲 - 主存 ” 层次,使之从 CPU 观察,如同具有 Cache 的速度,又具有主存的容量。 Cache 的 容量不断地增大 , Cache 的 管理实现全硬化 , Cache 的部件已 高度集成 。. Cache 实现的基础. 在时间间隔( t - T , t )内被访问的信息集合用 W ( t , T )表示,也称之为工作集合。
E N D
计算机系统结构 -第三章 存储系统 3.4 高速缓冲存储器 (Cache)
当代Cache的特征 • 为了弥补主存速度不足,在存储体系结构中出现了“高速缓冲-主存”层次,使之从CPU观察,如同具有Cache的速度,又具有主存的容量。 • Cache的容量不断地增大,Cache的管理实现全硬化,Cache的部件已高度集成 。
Cache实现的基础 • 在时间间隔(t-T,t)内被访问的信息集合用W(t,T)表示,也称之为工作集合。 • 根据程序访问局部性原理,W(t,T)随时间的变化是相当缓慢的。把这个集合从主存中移至(读出)一个能高速访问的小容量存储器内,供CPU在一段时间内随时访问,大大减少CPU访问主存的次数,从而加速程序的运行。 • 这个介于主存和CPU之间的高速小容量存储器就称为Cache。所以,程序访问局部性原理是Cache得以实现的原理基础,而高速(能与CPU匹配)则是Cache得以生存的性能基础。
3.4.1 Cache工作原理 • 如图所示。Cache和主存都分成大小相同的块,每块由若干个(字节)组成。 • 主存地址由块号B和块内地址W组成,而Cache的地址也由块号b和块内地址w组成。 • 当CPU要访问Cache时,CPU送来主存地址放入主存地址寄存器中,主存地址通过主存-Cache地址映像变换机构判定该字所在块是否已在Cache中。如在(Cache命中) ,则主存地址变换成Cache地址,访问Cache;如不在,则发生Cache块失效,需访问主存,且将包含该字的一块信息装入Cache。若Cache已满,则按某种替换策略,把该块替换进Cache。
主存 地址 主存储器地址(来自CPU) 块号B 块内地址W 主存-Cache地址变换 未命中 已满 命中 未满 Cache 地 址 块号b 块内地址w Cache 替换策略 替换块 装入块 Cache 数据送CPU(一个字) 主存 Cache的工作原理
Cache的设计要求 • 为了使Cache能与CPU在速度上相匹配,一般采用与CPU相同的半导体工艺所制成的大规模集成电路芯片。 • 为了更好地发挥Cache的高速性,在物理位置上,使Cache尽量靠近处理机或就在处理机中,而不放在主存模块中。一般采用两级Cache,一级在CPU内部,一级在CPU外部。 • 在价格允许的前提下,提高命中率和缩短访问时间,尽可能减少因不命中造成的时间延迟以及尽可能减少为修改主存所化的时间开销。
Cache存储器的设计要求 • 为了提高CPU访问Cache时的速度,Cache存储器在设计时让前一地址的访问Cache与后一地址的查表变换在时间上采用重叠流水方式; • 为了加速调块,一般让每块的容量等于在一个主存周期内由主存所能访问到的字数,因此Cache存储器的主存系统都采用多体交叉存储器; • Cache 存储器的优先级高于通道和主存的优先级。CPU访存的优先级依次为:Cache、通道、写数、读数、取指。
虚存与Cache的相同之处 • 它们都是把信息分成基本单位——块或页,作为一个整体从慢速存储器调入快速存储器,供CPU使用。 • 它们都要遵循一定的映象函数安排信息块在快速存储器内的位置。当快速存储器已占满,且CPU访问时不命中,则需依据确定的替换策略,成块更新快速存储器中内容。 • 为了获得较高命中率,它们都要利用程序访问局部化性质,寻求上述问题最佳解决方案。
虚存与Cache的区别。 • 首先,Cache的主要作用是弥补主存和CPU之间速度差距,因此它的管理部件是用硬件实现的,并对程序员透明。但虚拟存储器的主要作用是弥补主存和辅存之间的容量差距,因此它的管理部件基本上靠软件,适当结合硬件来实现,并且虚拟地址空间可被应用程序员感觉到和加以利用,而它的实现对系统程序员也不是透明的。 • Cache为了争取速度,CPU对Cache和主存均建立了直接访问路径,但虚拟存储器不一样,辅存必须经过主存才能和CPU通信。
3.4.2 Cache存储器的地址映像与变换 因为CPU访问都是按主存地址访问的,而Cache的空间远小于主存,因此当要把一个主存块调入Cache时,就存在应放在Cache中的哪一个位置的问题? 即如何把主存中的地址映射成Cache中的地址——地址映像问题。 由于Cache存储器空间小于主存空间,因此Cache中的一个存储块(空间)与主存中的若干块相对应。具体实现地址映像的方法有三种:直接映像、全相联映像和组相联映像。
1. 全相联映像 全相联映像:就是任何主存块可映像到Cache中任意一块的位置上。在这种方式下,主存中存储单元的数据可调入到Cache中的任意位置。只有在Cache中的块全部装满后才会出现块冲突。
主存 0 第 块 cache 1 第 块 0 第 块 任何主存块可映像到任何Cache块位置 1 第 块 … … N - 1 第 块 MN - 1 第 块 全相联映象规则 全相联映象规则
主存块号 块内地址 主存地址 不相等 块失效 块号 块内地址 cache地址 相联比较 0 1 块表 (专门硬件) … 相联查找 - 1 N 主存块号标志 cache块号 全相联映像的地址变换过程 目录表组织: 长:Cache 大小宽:(主存块号+Cache块号)位主存块号位参与比较
全相联映像的地址变换过程 (1)主存地址分成主存块号和块内地址 (2)用主存块号同目录表相联比较 (3)若相同,则取出Cache块号,Cache块号与块内地址拼接成Cache地址,访问Cache (4)若无相同的,则产生缺块、调块
全相联映像特点 • 优点: 块冲突概率最小,Cache的利用率最高。 • 缺点: 映像表太长,查表速度慢 。
2. 直接映像 • 直接映象:就是主存的一块只能映像到Cache中的一个特定的块。任何时候,主存中存储单元的数据只能调入到Cache中的一个特定位置,这是固定的,若这个位置已有数据,则产生冲突,原来的块将无条件地被替换出去。 • 直接映像方式把主存按Cache的大小分成区,每一分区内的块数与Cache的总块数相等。 • 直接映像方式只把主存各个分区中块号相同的那些块映像到Cache中与其块号相同的那个块中。
主存 0 第 块 1 第 块 cache 0 第 区 … 0 第 块 1 第 块 N - 1 第 块 … … N - 1 第 块 ( M - 1) N 第 块 ( M - 1) N + 1 第 块 第M-1区 … MN - 1 第 块 直接映像规则
区号E 块号B 块内地址W 主存地址 块号b 块内地址w 不相等 块失效 相等比较 Cache地址 相等 访问Cache 0 按块号查找 E 1 N-1 区号 有效位 区号存储器(按地址访问) 直接映像的地址变换过程 目录表组织 长:Cache大小 宽:主存地址位-Cache地址位+1 主存区号位参与比较
直接映像地址变换过程 (1)主存地址分成区号、块号、块内地址 (2)在主存地址中截取与Cache地址对应部分作为Cache地址 (3)以区号为地址访问目录表,读出区号与主存地址中区号比较 (4)若相等,命中 (5)若不相等,块失效,停止Cache访问。访主存,并调块
直接映像特点 优点: (1)硬件省,目录表小,成本低; (2)访问Cache与访问区号表同时进行,地址变换简单,节省了时间。 缺点: (1)块冲突概率高; (2)Cache利用率低。
3. 组相联映像 • 组相联映像是将主存和Cache按同样大小分成若干组,每组包含相同的块数,各组之间是直接映象,组内各块间则是全相联映象。 • 它是全相联映像和直接映像二种方式的结合。 • 组相联映象的块冲突概率比“直接映像”低得多。 • 主存-Cache层次广泛采用“组相联”.
主存 0 第 块 cache 0 第 组 … 0 0 第 区 第 块 … 0 第 组 1 第 组 … N - 1 第 块 … … 1 第 组 N - 1 第 块 ( M - 1) N 第 块 0 第 组 … M - 1 第 区 … 1 第 组 MN - 1 第 块 组相联映像规则
组号 块号 块内地址 区号 组号 主存块号 块内地址 主存地址 Cache地址 不相等 比较 块失效 块表 0 组内相联查找 N 1 - cache 区号标志 主存块号标志 块号 组相联映象的地址变换过程 N = 区内块数,阴影区表示查找范围,根据组号在块表中寻找组,组内相联查找
组相联映象的地址变换过程 (1)主存地址分区号、组号、块号、块内地址 (2)用组号选出一组 (3)对该组用区号+块号全相联比较 (4)若不等,则块失效 (5)若相等,则将读出的Cache块号与组号和块内地址拼接形成Cache地址。
组相联映像特点 优点: 集中全相联和直接映像的优点弥补他们的 缺点 缺点: 块冲突仍大于全相联,利用率低于全相联; 目录表大于直接方式.
4. 段相联映像 • 段相联是全相联的一个特殊情况,即段间全相联,段内采用直接映像(与组相联相反) 。 • 段相联可减少目录表的容量。但是同时使段内块的冲突概率增加。
例题1 • 有3个Cache存储器,每个Cach由4个块组成。第1个Cache存储器采用全相连映像,第2个Cache存储器采用2个组相连映像,第3个存储器采用直接映像。主存由12个块组成(0~11)。若程序访存的块地址流为: • 0,8,0,5,8,5,6 • 请计算该程序对这3种结构Cache访问的缺失次数各为多少?
解: (1)Cache存储器采用全相连映像时,则主存的任何块均可装入到cache的任何位置上。程序访问的块地址流对Cache的块位置的使用过程如下表所示。 因此,7次访存操作中,命中Cache3次,缺失4次。
(2)Cache存储器采用组相连映像时,主存按Cache的大小分为3个区,每个区分为2个组,每个组分为2块。主存的组到Cache的组之间是直接映像,对应组内的块之间是全相连映像。因此,主存0~11块与Cache的0~3块之间的映像关系是:(2)Cache存储器采用组相连映像时,主存按Cache的大小分为3个区,每个区分为2个组,每个组分为2块。主存的组到Cache的组之间是直接映像,对应组内的块之间是全相连映像。因此,主存0~11块与Cache的0~3块之间的映像关系是: 主存的0、1、4、5、8、9块只能装入Cache的0、1块位置; 主存的2、3、6、7、10、11块只能装入Cache的2、3块位置;主存块地址流对Cache的块位置的使用过程如下表所示:
因此,7次访存操作中,命中Cache2次,缺失5次。因此,7次访存操作中,命中Cache2次,缺失5次。
(3)采用直接映像方式时,主存分为3个区,各区内的块之间是一一对应关系。因此主存的0、4、8块只能装入到Cache的0块位置;主存的1、5、9块只能装入到Cache的1块位置;主存的2,6,10块只能装入到Cache的2块位置;主存的3,7,11块只能装入到Cache的3块位置。程序访存地址流对Cache的块位置的使用过程如下表所示:(3)采用直接映像方式时,主存分为3个区,各区内的块之间是一一对应关系。因此主存的0、4、8块只能装入到Cache的0块位置;主存的1、5、9块只能装入到Cache的1块位置;主存的2,6,10块只能装入到Cache的2块位置;主存的3,7,11块只能装入到Cache的3块位置。程序访存地址流对Cache的块位置的使用过程如下表所示:
因此,7次访存操作中,命中Cache1次,缺失6次。因此,7次访存操作中,命中Cache1次,缺失6次。
例题2 • 在一个采用组相联映像的Cache存储器组,主存由0~7共8块组成,Cache分为2组,每组2块,每块大小为16个存储字.在某个程序执行时,访存的主存块地址流为: • 6,2,4,1,4,6,3,0,4,5,7,3 • (1)写出主存地址和Cache地址的格式,并指出各字段的长度; • (2)指出主存块0~7与Cache块0~3之间的映像关系; • (3)给出该主存地址流满足组相联需要关系的一种Cache块地址流; • (4)采用LRU替换算法,计算该程序的Cache命中率; • (5)改用全相联映像,计算该程序LRU和FIFO替换算法的Cache命中率.
1 1 1 4 主存地址 区号E 组号G 块号B 块内地址W 1 1 4 Cache地址 组号g 块号b 块内地址w 解: • (1)采用组相联映像时,主存地址格式和Cache地址格式为: 主存按Cache大小划分为区,主存容量为8块,Cache容量为4块,故主存分为2个区,区号E的长度为1位; 每区分为2组,故组号G和g的长度都是1位; 每组2块,故块号B和b的长度都是1位; 每块大小为16个存储字,故块内地址W和w的长度都是4位
0 1 2 3 0 1 2 3 第0组 第0组 第0区 第1组 第1组 4 5 6 7 第0组 第1区 第1组 (2)组相联映像关系 主存 Cache 组相联映像规定:主存的组到Cache的组之间是直接映像,组内块之间是全相联映像.因此主存的块0~7与Cache的块0~3之间的映像关系是: 主存的块0,1,4,5与Cache的块0,1之间全相联; 主存的块2,3,6,7与Cache的块2,3之间全相联;
(3)主存块地址流相应的Cache块地址流: 由于主存按Cache大小分区,因此,去掉主存块地址中的区号E,就可得出满足组相联映像关系的一种Cache块地址;该主存块地址流相应的一种Cache块地址流如下表所示:
(4)组相联映像及LRU算法的Cache块使用过程 由第(2)题的结果可知,该程序按给出的主存地址流访存时,如果发生块失效,那么把主存块装入Cache的块位置时,必须遵守如下规定: 主存的块0,1,4,5只可装入到Cache的块0或块1的位置上; 主存的块2,3,6,7只可装入到Cache的块2或块3的位置上;因此采用LRU替换算法时,Cache的0~3块被使用的过程如下表所示:
组相联映像及LRU算法的Cache块使用过程: 主存块地址 6 2 4 1 4 6 3 0 4 5 7 3 Cache块0 4 4* 4 4 4 4* 4 4* 4* 4* Cache块1 1 1* 1* 1* 0 0* 5 5 5 Cache块2 6 6* 6* 6* 6* 6 6* 6* 6* 6* 7 7* Cache块3 2 2 2 2 2* 3 3 3 3 3* 3 调 调 调 调 命 命 替 替 命 替 替 命 入 入 入 入 中 中 换 换 中 换 换 中 调度情况 命中率H=4/12=0.33
主存块地址 6 2 4 1 4 6 3 0 4 5 7 3 Cache块0 6 6 6 6* 6* 6 6 6 6* 5 5 5 Cache块1 2 2 2 2 2* 3 3 3 3* 7 7 Cache块2 4 4 4 4 4 4* 4 4 4 4* Cache块3 1 1 1 1* 0 0 0 0* 3 调度情况 调 调 调 调 命 命 替 替 命 替 替 替 入 入 入 入 中 中 换 换 中 换 换 换 全联映像及LRU算法的Cache块使用过程: 命中率H=3/12=0.25
主存块地址 6 2 4 1 4 6 3 0 4 5 7 3 Cache块0 6 6 6 6* 6* 6* 3 3 3 3 3* 3* Cache块1 2 2 2 2 2 2* 0 0 0 0 0 Cache块2 4 4 4 4 4 4* 4* 5 5 5 Cache块3 1 1 1 1 1 1 1* 7 7 调度情况 调 调 调 调 命 命 替 替 命 替 替 命 入 入 入 入 中 中 换 换 中 换 换 中 全联映像及FIFO算法的Cache块使用过程: 命中率H=4/12=0.33
作业 P89-90 15, 17 • Cache与主存之间交换信息时,为了保持信息的一致性,可采取哪两种更新算法(策略),它们之间有哪些主要区别?
3.4.3 替换算法及其实现 在直接映象方式下,不存在块替换的算法,因为每一块的位置映像是固定的,需要哪一块数据就可直接确定地将该块数据调入上层确定位置。而其他两种映像就存在替换策略的问题,就是要选择替换到哪一个Cache块。即替换算法。 选择替换算法的依据是存储器总体性能,主要是上层存储器的访问命中率。
替换算法 • Cache-主存层次的替换算法与虚拟存储器的替换算法相似,一般可采用随机算法(RAND),先进先出(FIFO ),近期最少使用法(LRU),其中LRU算法最常使用。 • 为了提高CPU调Cache块的速度,替换算法采用全硬件实现.
1.LRU替换算法的堆栈法实现a.寄存器堆栈 • 在堆栈法中,用栈顶至栈底的先后次序来记录Cache中的各个块被访问的先后次序(如果是全相联,则堆栈单元数等于Cache的总块数,如果是组相联,则堆栈单元数等于组内块数) 。栈顶是最近被访问过的块,栈底是最久没有被访问过的块。 • 当要替换时,从栈顶压入新的块,很自然,最久没有被访问过的块就从栈底被挤出堆栈。
堆栈法的管理规则 (1)把本次访问的块号与堆栈中保存的所有块号进行相联比较。如果发现有相等的, 则Cache命中, 把堆栈中存放的此块号取出再压入堆栈,成为新栈顶,并使堆栈内各单元中的块号依次往下移,直至与本次访问的块号相等的那个单元为止,再往下的单元直至栈底都不变。。
堆栈法的管理规则 (2)如果相联比较没有发现相等的,则Cache块失效。这时,本次访问的块号从栈顶压入,堆栈内各单元中的块号依次往下移,直至栈底,栈底单元中的块号被移出堆栈,它就是要被替换的块号。
比较不等 压入栈顶 压入新块 近期被访问的块号 近期被访问的块号 块号 块号 下移 比较相等 块号 块号 下移 块号 块号 不变 近期最久未被访问的块号 近期最久未被访问的块号 块号 块号 寄存器堆栈法的实现原理
b. 堆栈法的改进 —轮换法 • 在寄存器堆栈法在中,由于寄存器堆栈既要具有相联比较的功能,又要有全下移(替换时),部分下移(调进或命中)及从中间取出一项的功能, 要求硬件实现复杂且成本高,因此寄存器堆栈只适用于组相联映像且组内块数较少的LRU替换. • 改进的方案:在组相联映像中, 每组分配一个寄存器组,每个寄存器用于存放被访问块的计数值.根据各块对应的计数值的大小确定被替换的块.计数器的使用及管理规则如下:
计数器的使用及管理规则 1. 被装入或被替换的块,其计数器清为“0”,同组中其它所有块所属的计数器都加“1”; 2. 命中的块,其对应的计数器清为“0”,同组的其它所有计数器中,凡是小于命中块所属计数器原来值的,都加“1“,其它计数器不变; 3. 需要替换时,在同组的所有计数器中选择计数值最大的计数器,它所对应的块就是要被替换的块。
例题3 • 某计算机的Cache采用组相联映像方式,每组有4块,为了实现LRU替换算法,在块表中为每一块设置一个2位的计数器。在访问Cache的过程中,块的装入,替换及命中时,计数器的工作情况如下表所示: