(配图来自MOOC华中科技大学计算机原理课程)
Cache与主存按块进行信息交换,其地址映射方法有三种:
1.全相联映射
当CPU从Cache中读取字的时候,需要将主存地址中的标记(块号)与Cache中所有行的标记进行比较,如果标记相同,则根据偏移地址在Cache的该行内取出相应的字,送给CPU;如果没有相同的标记,则从主存内找到相同标记的块,送到Cache中。
如1F的标记0000111不在Cache中,所以去主存中取相应的块,存入Cache;
类似的如20,24;
当标记在Cache中,根据偏移地址取出相应的字。
(1)应为主存中的块是随意放入Cache中,知道Cache填满,所以不存在空间被闲置;
(2)直到Cache被填满后,才会出现块冲突的情况;
(3)需要与Cache中所有行的标记进行比较。
2.直接映射
直接映射相较于全相联映射又进行了分区,每区的行数为Cache的行数。
当CPU从Cache中取字时,根据主存地址的index部分确定行号,将相应行的Tag与标记进行比较,如果符合再按偏移地址取出相应的字送到CPU。否则从主存中取出对应块放入对应的行中。
(1)每区的相同Index的块都只能存放在Cache对应的行中,空间利用率低;
(2)相同Index的块同时只能有一个存放在Cache中;
(3)只需要与对应行的Tag进行比较即可。
3.组相联映射的工作原理
兼有前两种映射方式的特点,把主存分成和Cache大小相同的若干个分组,对应组号的主存能自由移入Cache中。
如果Cache是8行的,如果令分组数为1,那组相联映射就相当于是全相联映射。而若分组数为8,就相当于直接映射。(此处图片应当有误,是课程ppt错了吗)