《CACHE与主存之间的全相联映射直接映射和组相联映射的区别》由会员分享,可在线阅读,更多相关《CACHE与主存之间的全相联映射直接映射和组相联映射的区别(5页珍藏版)》请在金锄头文库上搜索。
1、CACHE 与主存之间的全相联映射,直接映射和组相联映射的区别高速缓冲存储器的功能、结构与工作原理 高速缓冲存储器是存在于主存与 CPU 之间的一级存储器, 由静态存储芯片(SRAM)组成,容量比较小但速度比主存高得多, 接近于 CPU 的速度。 Cache 的功能是用来存放那些近期需要运行的指令与数据。目的是提高 CPU 对存储器的访问速度。为此需要解决 2 个技术问题:一是主存地址与缓存地址的映象及转换; 二是按一定原则对 Cache 的内容进行替换。 Cache 的结构和工作原理如图 2.3.1 所示。 主要由三大部分组成: Cache 存储体:存放由主存调入的指令与数据块。 地址转换部
2、件:建立目录表以实现主存地址到缓存地址的转换。 替换部件:在缓存已满时按一定策略进行数据块替换,并修改地址转换部件。2.3.2 地址映象与转换地址映象是指某一数据在内存中的地址与在缓冲中的地址,两者之间的对应关系。下面介绍三种地址映象的方式。 1.全相联方式 地址映象规则:主存的任意一块可以映象到 Cache 中的任意一块 (1) 主存与缓存分成相同大小的数据块。 (2) 主存的某一数据块可以装入缓存的任意一块空间中。 全相联方式的对应关系如图 2.3.2 所示。如果 Cache 的块数为 Cb,主存的块数为 Mb,则映象关系共有 CbMb 种。图 2.3.3 示出了目录表的格式及地址变换规则
3、。 目录表存放在相关(联)存储器中,其中包括三部分:数据块在主存的块地址、存入缓存后的块地址、及有效位(也称装入位) 。由于是全相联方式,因此,目录表的容量应当与缓存的块数相同。举例:某机主存容量为 1M,Cache 的容量为 32KB, 每块的大小为 16 个字(或字节) 。 划出主、缓存的地址格式、 目录表格式及其容量。 容量:与缓冲块数量相同即 2112048(或 32K/162048) 。优点:命中率比较高,Cache 存储空间利用率高。 缺点:访问相关存储器时,每次都要与全部内容比较,速度低,成本高,因而应用少。2.直接相联方式地址映象规则: 主存储器中一块只能映象到 Cache 的
4、一个特定的块中。 (1) 主存与缓存分成相同大小的数据块。 (2) 主存容量应是缓存容量的整数倍,将主存空间按缓存的容量分成区,主存中每一区的块数与缓存的总块数相等。 (3) 主存中某区的一块存入缓存时只能存入缓存中块号相同的位置。 图 2.3.4 示出了直接相联映象规则。 可见,主存中各区内相同块号的数据块都可以分别调入缓存中块号相同的地址中,但同时只能有一个区的块存入缓存。由于主、缓存块号相同,因此,目录登记时,只记录调入块的区号即可。图 2.3.5 示出了主、 缓冲地址格式、目录表的格式及地址变换规则。主、缓存块号及块内地址两个字段完全相同。目录表存放在高速小容量存储器中,其中包括二部分
5、:数据块在主存的区号和有效位。目录表的容量与缓存的块数相同。地址变换过程:用主存地址中的块号 B 去访问目录存储器, 把读出来的区号与主存地址中的区号 E 进行比较, 比较结果相等,有效位为 1,则 Cache 命中,可以直接用块号及块内地址组成的缓冲地址到缓存中取数;比较结果不相等,有效位为 1, 可以进行替换,如果有效位为 0,可以直接调入所需块。 优点:地址映象方式简单,数据访问时,只需检查区号是否相等即可,因而可以得到比较快的访问速度,硬件设备简单。 缺点:替换操作频繁,命中率比较低。 举例:上例中,主存容量为 1M, Cache 的容量为 32KB,每块的大小为 16 个字(或字节)
6、 。划出主、缓存的地址格式、目录表格式及其容量。 容量:与缓冲块数量相同即 2112048(或 32K/162048) 。3.组相联映象方式组相联的映象规则: (1) 主存和 Cache 按同样大小划分成块。 (2) 主存和 Cache 按同样大小划分成组。 (3) 主存容量是缓存容量的整数倍,将主存空间按缓冲区的大小分成区,主存中每一区的组数与缓存的组数相同。 (4) 当主存的数据调入缓存时,主存与缓存的组号应相等,也就是各区中的某一块只能存入缓存的同组号的空间内,但组内各块地址之间则可以任意存放, 即从主存的组到 Cache 的组之间采用直接映象方式;在两个对应的组内部采用全相联映象方式。
7、 图 2.3.6 示出了组相联的映象关系, 图中缓存共分 Cg 个组,每组包含有 Gb 块; 主存是缓存的 Me 倍,所以共分有 Me 个区, 每个区有 Cg 组,每组有 Gb 块。那么, 主存地址格式中应包含 4 个字段:区号、区内组号、组内块号和块内地址。 而缓存中包含 3 个字段:组号、组内块号、块内地址。主存地址与缓存地址的转换有两部分,组地址是按直接映象方式,按地址进行访问,而块地址是采用全相联方式,按内容访问。组相联的地址转换部件也是采用相关存储器实现,见图 2.3.7。 相关存储器中每个单元包含有: 主存地址中的区号 E 与组内块号 B,两者结合在一起,其对应的字段是缓存块地址
8、b。相关存储器的容量,应与缓存的块数相同。当进行数据访问时,先根据组号,在目录表中找到该组所包含的各块的目录,然后将被访数据的主存区号与组内块号,与本组内各块的目录同时进行比较。如果比较相等,而且有效位为“1”则命中。可将其对应的缓存块地址 b 送到缓存地址寄存器的块地址字段,与组号及块内地址组装即形成缓存地址。如果比较不相等,说明没命中,所访问的数据块尚没有进入缓存,则进行组内替换;如果有效位为 0,则说明缓存的该块尚未利用, 或是原来数据作废,可重新调入新块。 优点:块的冲突概率比较低,块的利用率大幅度提高,块失效率明显降低。 缺点:实现难度和造价要比直接映象方式高。2.3.3 替换策略根
9、据程序局部性规律可知:程序在运行中,总是频繁地使用那些最近被使用过的指令和数据。这就提供了替换策略的理论依据。综合命中率、实现的难易及速度的快慢各种因素,替换策略可有随机法、先进先出法、最近最少使用法等。 1.随机法(RAND 法) 随机法是随机地确定替换的存储块。设置一个随机数产生器,依据所产生的随机数,确定替换块。这种方法简单、易于实现,但命中率比较低。 2.先进先出法(FIFO 法) 先进先出法是选择那个最先调入的那个块进行替换。当最先调入并被多次命中的块,很可能被优先替换,因而不符合局部性规律。这种方法的命中率比随机法好些,但还不满足要求。先进先出方法易于实现,例如 Solar16/6
10、5 机 Cache 采用组相联方式,每组 4 块,每块都设定一个两位的计数器,当某块被装入或被替换时该块的计数器清为 0,而同组的其它各块的计数器均加 1,当需要替换时就选择计数值最大的块被替换掉。 3.最近最少使用法(LRU 法) LRU 法是依据各块使用的情况, 总是选择那个最近最少使用的块被替换。这种方法比较好地反映了程序局部性规律。 实现 LRU 策略的方法有多种。 下面简单介绍计数器法、寄存器栈法及硬件逻辑比较对法的设计思路。 计数器方法:缓存的每一块都设置一个计数器,计数器的操作规则是: (1) 被调入或者被替换的块, 其计数器清“0” ,而其它的计数器则加“1” 。 (2) 当访
11、问命中时,所有块的计数值与命中块的计数值要进行比较,如果计数值小于命中块的计数值, 则该块的计数值加“1” ;如果块的计数值大于命中块的计数值,则数值不变。最后将命中块的计数器清为 0。 (3) 需要替换时,则选择计数值最大的块被替换。 例如 IBM 370/65 机的 Cache 用组相联方式,每组 4 块,每一块设置一个 2 位的计数器,其工作状态如表 2.3.1。表 2.3.1 计数器法实现 LRU 策略主存块地址块 4 块 2 块 3 块 5块号计数器块号计数器块号计数器块号计数器Cache 块 0110111111500Cache 块 1301310300301Cache 块 240
12、0401410411Cache 块 3 空 XX200201210操作起始状态调入命中替换寄存器栈法:设置一个寄存器栈, 其容量为 Cache 中替换时参与选择的块数。如在组相联方式中,则是同组内的块数。堆栈由栈顶到栈底依次记录主存数据存入缓存的块号, 现以一组内 4 块为例说明其工作情况,如表 2.3.2 所示,表中 14 为缓存中的一组的 4 个块号。表 2.3.2 寄存器栈法实现缓存操作初始状态调入 2 命中块 4 替换块 1寄存器 03241寄存器 14324寄存器 21432寄存器 3 空 113(1) 当缓存中尚有空闲时,如果不命中,则可直接调入数据块,并将新访问的缓冲块号压入堆栈
13、,位于栈顶。其他栈内各单元依次由顶向下顺压一个单元,直到空闲单元为止。 (2) 当缓存已满,如果数据访问命中,则将访问的缓存块号压入堆栈,其他各单元内容由顶向底逐次下压直到被命中块号的原来位置为止。如果访问不命中,说明需要替换,此时栈底单元中的块号即是最久没有被使用的。所以将新访问块号压入堆栈,栈内各单元内容依次下压直到栈底,自然,栈底所指出的块被替换。 比较对法:比较对法是用一组硬件的逻辑电路来记录各块使用的时间与次数。 假设 Cache 的每组中有 4 块, 替换时,是比较 4 块中那一块是最久没使用的,4 块之间两两相比可以有 6 种比较关系。如果每两块之间的对比关系用一个 RS 触发器
14、,则需要 6 个触发器(T12,T13,T14,T23,T24,T34) , 设 T120 表示块 1 比块 2 最久没使用,T121 表示块 2 比块 1 最久没有被使用。 在每次访问命中或者新调入块时,与该块有关的触发器的状态都要进行修改。 按此原理,由 6 个触发器组成的一组编码状态可以指出应被替换的块。例如,块 1 被替换的条件是:T120,T130,T140;块 2 被替换的条件是:T121,T230,T240 等等。2.3.4 Cache 的一致性问题 Cache 的内容是主存内容的一部分, 是主存的副本,内容应该与主存一致。由于: (1) CPU 写 Cache,没有立即写主存;
15、 (2) I/O 处理机或 I/O 设备写主存。 从而造成 Cache 与主存内容的不一致,如图 2.3.8 所示。对 Cache 进行写操作时引起的不一致的解决方法: 1.全写法亦称写直达法(WT 法-Write through) 方法:在对 Cache 进行写操作的同时,也对主存该内容进行写入。 优点:可靠性较高,操作过程比较简单。 缺点:写操作速度得不到改善,与写主存的速度相同。2.写回法(WB 法-Write back) 方法:在 CPU 执行写操作时,只写入 Cache,不写入主存。 优点:速度较高。 缺点:可靠性较差,控制操作比较复杂。2.3.5 Cache 性能分析1.Cache
16、 系统的加速比 存储系统采用 Cache 技术的主要目的是提高存储器的访问速度,加速比是其重要的性能参数。Cache 存储系统的加速比 SP(Speedup)为:其中:Tm 为主存储器的访问周期,Tc 为 Cache 的访问周期,T 则为 Cache 存储系统的等效访问周期,H 为命中率。 可以看出,加速比的大小与两个因素有关:命中率 H 及 Cache 与主存访问周期的比值Tc/Tm,命中率越高加速比越大。图 2.3.9 示出了加速比与命中率的关系。2.Cache 的命中率影响 Cache 命中率的因素很多,如 Cache 的容量,块的大小,映象方式,替换策略以及程序执行中地址流的分布情况等等。一般地说,Cache 容量越大则命中率越高, 当容量达到一定程度后,容量的增加命中率的改善并不大;Cache 块容量加大, 命中率也明显增加,但增加到一定值之后反而出现命中率下降的现象;直接映象法命中率比较低,全相联方式命中率比较高,在组相联方式中,组数分得越多,则命中率下降。