教材上大段的文字清楚但不直观,老师讲的有点点快,自己课下做了点整理,如有纰漏,麻烦大家评论区指出。废话不多说,开始啦!
主存与cache的地址映射方式有3种
1.全相联映射
适合小容量cache采用
带全部地址一起保存
主存(块)与cache(行)之间多对一,即cache一行中可以有多个主存的块。
2.直接映射
适合需要大容量cache的场合,主存(块)与cache(行)之间多对一,但是跟前面的区别在于!
- mod:取余运算
- m:cache中总行数
- 为方便理解,先把主存分区,使每个区的块数等于cache的行数m
缺点:每个主存块只有一个固定的行位置可存放
ps:若连续访问块号相距m整数倍的2个块,因2个块映射到同一cache行时,就会发生冲突。发生冲突时,要将原先存入的行换出去,可能过一会又要换进来。频繁的置换会使cache效率下降。
3.组相联映射
- 将cache分成
组,每组
行
- 将cache中总行数:
- 分到哪一组?组号:
:主存块号,
:一维转成二维
对比直接映射和组相联映射来看看:
这个是组相联的