24

3.5.3 Cache和主存的映射方式
​ Cache 行中的信息是主存中某个块的副本,地址映射是指把主存地址空间映射到Cache地址空间,即把存放在主存中的信息按照某种规则装入Cache。

​ 由于Cache行数比主存块数少得多,因此主存中只有一部分块的信息可放在Cache中,因此在Cache中要为每块加一个标记,指明它是主存中哪一块的副本。该标记的内容相当于主存中块的编号。为了说明Cache行中的信息是否有效,每个Cache行需要一个有效位。

 

全相联映射

​ 主存中的每一块可以装入Cache中的任何位置,每行的标记用于指出该行取自主存的哪一块,所以CPU访存时需要与所有Cache行的标记进行比较。

 

优点:比较灵活,Cache块的冲突概率低,空间利用率高,命中率也高

缺点:标记的比较速度较慢,实现成本较高,通常需采用昂贵的按内容寻址的相联存储器进行地址映射。

全相联映射的地址结构为

 

直接映射

主存块只能放到特定的某个Cache行,若这个位置已有内容,则产生冲突,原来的块被替换(无需替换算法)

​ 直接映射的关系可定义为:
C a c h e 行号 = 主存块号 % C a c h e 总行数 Cache行号=主存块号\%Cache总行数
Cache行号=主存块号%Cache总行数

 

​ 假设Cache有2c行,主存有2m块,在直接映射方式,主存的第0块、第2c块、第2c+1块…只能映射到第0行

​ 由此看出,主存块号低c位正好是要装入Cache的行号。给每个Cache设置长为t=m-c的标记(tag),当主存某块调入Cache后,就将其块号的高t位设置在对应Cache行的标记中,如图(a)所示。

直接映射的地址结构为:

 

​ CPU访存过程如图(b)所示,

首先根据访存地址中间的c位,找到对应的Cache行,将对应Cache行中的标记和主存地址的高t位标记进行比较,若相等且有效位为1,则访问Cache“命中”,此时根据主存地址中低位的块内地址,在对应的Cache行中存取信息;

若不相等或有效位为0,则“不命中”,此时CPU从主存中读出该地址所在的一块信息送到对应的Cache行中,将有效位置1,并将标记设置为地址中的高t位,同时将该地址中的内容送CPU。

组相联映射

主存块可以放到特定分组中的任意位置。常用的有2路组相联映射,如下图所示。

 

组相联映射的关系可以定义为
C a c h e 组号 = 主存块号 % C a c h e 组数( Q ) Cache组号=主存块号\%Cache组数(Q)
Cache组号=主存块号%Cache组数(Q)

​ 路数越大,即每组Cache行的数量越大,发生块冲突的概率越低,但相联比较电路也越复杂。选定适当的数量,可使组相联映射的成本接近直接映射,而性能上仍接近全相联映射。

组相联映射的地址结构为:

 

CPU访存过程如下:

首先根据访存地址中间的组号找到对应的Cache组;
将对应Cache组中每个行的标记与主存地址的高位标记进行比较;
若有一个相等且有效位为1,则访问Cache命中,此时根据主存地址中的块内地址,在对应Cache行中存取信息;
若都不相等或虽相等但有效位为0,则不命中,此时CPU从主存中读出该地址所在的一块信息送到对应Cache组的任意一个空闲行中,将有效位置1,并设置标记,同时将该地址中的内容送CPU。

posted @ 2025-02-13 19:43  cor0000  阅读(27)  评论(0)    收藏  举报