Cache与主存之间的全相联映射、直接映射和组相联映射的区别
高速缓冲存储器的功能、结构与工作原理
高速缓冲存储器是存在于主存与CPU之间的一级存储器, 由静态存储芯片(SRAM)组成,容量比较小但速度比主存高得多,接近于CPU的速度。 Cache的功能是用来存放那些近期需要运行的指令与数据。目的是提高CPU对存储器的访问速度。为此需要解决2个技术问题:一是主存地址与缓存地址的映象及转换; 二是按一定原则对Cache的内容进行替换。
主要由三大部分组成:
1. Cache存储体:存放由主存调入的指令与数据块。
2. 地址转换部件:建立目录表以实现主存地址到缓存地址的转换。
3. 替换部件:在缓存已满时按一定策略进行数据块替换,并修改地址转换部件。
地址映象与转换
地址映象是指某一数据在内存中的地址与在缓冲中的地址,两者之间的对应关系。下面介绍三种地址映象的方式。
全相联方式
地址映象规则:主存的任意一块可以映象到Cache中的任意一块
1. 主存与缓存分成相同大小的数据块。
2. 主存的某一数据块可以装入缓存的任意一块空间中。
如果Cache的块数为Cb,主存的块数为Mb,则映象关系共有Cb×Mb种。
目录表存放在相关(联)存储器中,其中包括三部分:数据块在主存的块地址、存入缓存后的块地址、及有效位(也称装入位)。
由于是全相联方式,因此,目录表的容量应当与缓存的块数相同。
举例:某机主存容量为1M,Cache的容量为32KB, 每块的大小为16个字(或字节)。 划出主、缓存的地址格式、 目录表格式及其容量。
容量:与缓冲块数量相同即211=2048(或32K/16=2048)。
优点:命中率比较高,Cache存储空间利用率高。
缺点:访问相关存储器时,每次都要与全部内容比较,速度低,成本高,因而应用少。
直接相联方式
地址映象规则: 主存储器中一块只能映象到Cache的一个特定的块中。
1. 主存与缓存分成相同大小的数据块。
2. 主存容量应是缓存容量的整数倍,将主存空间按缓存的容量分成区,主存中每一区的块数与缓存的总块数相等。
3. 主存中某区的一块存入缓存时只能存入缓存中块号相同的位置。
图2.3.4示出了直接相联映象规则。 可见,主存中各区内相同块号的数据块都可以分别调入缓存中块号相同的地址中,但同时只能有一个区的块存入缓存。由于主、缓存块号相同,因此,目录登记时,只记录调入块的区号即可。
图2.3.5示出了主、 缓冲地址格式、目录表的格式及地址变换规则。主、缓存块号及块内地址两个字段完全相同。目录表存放在高速小容量存储器中,其中包括二部分:数据块在主存的区号和有效位。目录表的容量与缓存的块数相同。
地址变换过程:用主存地址中的块号B去访问目录存储器, 把读出来的区号与主存地址中的区号E进行比较, 比较结果相等,有效位为1,则Cache命中,可以直接用块号及块内地址组成的缓冲地址到缓存中取数;比较结果不相等,有效位为1, 可以进行替换,如果有效位为0,可以直接调入所需块。
优点:地址映象方式简单,数据访问时,只需检查区号是否相等即可,因而可以得到比较快的访问速度,硬件设备简单。
缺点:替换操作频繁,命中率比较低。
举例:上例中,主存容量为1M, Cache的容量为32KB,每块的大小为16个字(或字节)。划出主、缓存的地址格式、目录表格式及其容量。
容量:与缓冲块数量相同即211=2048(或32K/16=2048)。
组相联映象方式
直接映射虽然简单方便,但是如果程序同时用到了对应于同一个cache行中的两个主存地址,那么就会发生冲突,结果就是导致这个cache行不停的进行替换操作。所以就有了组相联映射。
将这cache存储器中的256个行分为了4路,每路有64个cache行。这时根据组索引找到的 cache行不再是一个,而是同时找到 4个 cache行,所以才被称为组索引。每路中包含一个cache行。如下图12.7所示,便是一个组相联映射的cache。 因为现在每路中有 64 个 cache 行,所以组索引的宽度变成了6位,而标签域的标签宽度变成了12位。 直接映射中组索引一次只能对应一个cache 行,而现在组相联映射中组索引一次能对应4个cache行,所以现在主存中的一个地址可以存放到4个cache行中的任意一行。 而在直接映射中,主存中的一个地址只能存放到对应的一个cache行中。所以一个cache行被替换的概率减少为原来的四分之一。
优点:块的冲突概率比较低,块的利用率大幅度提高,块失效率明显降低。
缺点:实现难度和造价要比直接映象方式高。