从主存到cache
假设把每个内存块分为4份,每次从主存中读取都是以块为单位,一次读取一个块。
(因为根据空间的局部性原理,当需要用到一个地址时,后续很大概率要用到其相邻的地址,因此一次读取一个块这种预读操作可以减少读取次数并提高缓存的命中率)
cache映射
直接映射
主存中的每一个块只能被放置到Cache中唯一的一个指定位置。
若这个位置已有内容,则产生块冲突,原来的块将无条件地被替换出去。
直接映像的块冲突概率最高。因为每个主存块只能映射到指定的Cache块,当多个主存块试图映射到同一个Cache位置时,就会发生冲突。
组相联映射
将Cache空间分成大小相同的组,主存的一个数据块可以装到对应的cache组内的任一个位置,即组间采取直接映射,组内采取全相联映射。
组相联映像是直接映像和全相联映像的折中。
组相联映像的块冲突概率介于直接映像和全相联映像之间。在组内,块冲突概率较低,因为类似于全相联映像,主存块可以映射到组内的任意位置;但在组间,块冲突概率则较高,因为类似于直接映像,每个主存块只能映射到特定的组。
2个块为一组则称为二路组相联
8个块为一组则称为八路组相联
全相联映射
主存中的任何一个块均可以映像装入到Cache中任何一个块的位置上。
这种方式灵活,Cache的块冲突概率最低、空间利用率最高。
全相联映像的块冲突概率最低。因为主存块可以映射到Cache中的任意位置,只要Cache中有空闲区,都能调入,所以只有当Cache块全部满了时才会发生冲突。
主存物理地址 = 标记 + 块内地址
主存物理地址 = 标记 + 组号 + 块内地址
主存物理地址 = 标记 + cache行号 + 块内地址