目录
1.直接映射
这种方法每个内存字节块只能放到cache的相应位置,cpu给的地址分成三部分 区号,块号,块内偏移地址。(有点类似于mmu分成三个部分)cache的标记就是区号,字块地址就是块号,cache的大小是固定的,cpu发出地址的时候根据 区号 和 块号 和 有效位 确定是否命中(注意cache 中标记是区号,因为字块只能映射到固定的cache块的位置,所以根据区号就能确定这个字块cache是不是cpu要读取内存中的位置,在图中 2的C次方字块 就是一个区,有时候一个字节块又叫做一个缓存行),直接映射方式电路简单速度快。
2.全相连映射
全相连映射 内存字节块(缓存行)可以放置在缓存中任意的字节块当中,全相连映射的cache标记的位数m = 区号t + 块号c,这样要确定cpu访问的位置在不在cache中,就要比较 m 位长度的标记,而且每个字节块的标记都要比较,这样电路比较复杂,速度比较慢。
3.组相连映射
跟直接映射一样这里把 cache 分成 Q组,每组两个字节块,每个字节块都有一个标记。把主内存分区处理,每个区只能根据 字节块编号 把数据 缓存到对应的组编号里面,例如:内存区0 的 字块0,只能放在缓存的组0 的任意一个字块中(缓存行),内存区1 的 字块0,也只能放在缓存的组0 的任意一个字块中,内存区1 的 字块1,只能放在缓存的组1 的任意一个字块中,内存区1 的 字块6,只能放在缓存的组6的任意一个字块中。这种方式硬件复杂度一般,速度也挺快,更适合拿来使用。