然后通过内存tag依次比较2个缓存顶的tag,如果其中一个tag相等,说明这个数组缓存命中;如果两个都不相等,说明缓存不命中,CPU会拷贝内存值到缓存中,但是现在有2个位置,要拷贝进哪个呢?我的理解CPU应该是随机选1路拷贝。offset这个其实无关紧要,因为它是cache line中的偏移。那这个和直接映射相比,好在哪里呢,因为一个内存值会随机拷贝到2路中的1个,所以缓存冲突(多个内存地址映射到同一个缓存地址)的概率会降低一半;如果把缓存项数组分成4个数组,这就是4路组相联。上面LEVEL1_ICACHE_ASSOC的值等于8,表明是8路组相联。
分组越多,缓存冲突率越低,但是CPU要遍历的数组就越多,这是一个权衡的问题。通过观察也可以发现,其实直接映射就是1路组相联。如果直接分成512个数组,那每个数组只有1项,这种就是全相联,CPU直接遍历512个数组,判断内存地址在哪1个。缓存分配策略和更新策略:当CPU从内存读数据时,如果该数据没有在缓存中(cache miss),CPU会把数据拷贝到缓存。当CPU往内存写数据时:如果缓存缺失,CPU会先从内存拷贝数据到缓存,然后再更新缓存的数据。CPU更新缓存数据,也可能有多个策略:直接写(write through):更新缓存的数据,同时更新内存的数据。写回(write back):只更新缓存的数据,同时在缓存项设置一个drity标志位,内存的数据只会在某个时刻更新(比如替换cache line时)。从上面描述我们知道,当我们向一个内存写数据时,内存中的数据可能不马上被更新,这个新数据可能还在cache 的档次(略高一点)。
电脑常见英文词汇
Fax machine传真机
Field域
Find搜索
FireWire port port火线端口
Firmware固件
Flash RAM闪存
Flatbed scanner台式扫描器
Flat-panel monitor纯平显示器
floppy disk软盘
Formatting toolbar格式化工具条
Formula公式
Function函数