目录
1 高速缓存Cache机制
1.1 通用的高速缓存存储器结构
通用的高速缓存存储器的结构如图所示:
由图可见,高速缓存存储器实际上是由多个缓存行组成的,共分为S个组,每个组中有E个缓冲行,对于每个缓冲行来说,其主要由三部分组成:有效位(1bit)、标记位(t bits)以及1个缓存块组成,这个缓存块由B个字节组成。因此,高速缓存存储器的大小为C=S×E×B。其中有效位用来表明当前缓冲行的缓存块数据是否有意义,有意义即为1;标记位用于判别是否缓存命中的关键信息。
而另一方面,内存中每一个单元都拥有其地址,而每个地址则对应高速缓存存储器中的一个块。假设地址为m位的,那么这m位的地址构成如图所示:
如图所示,m位的地址中,低b位表示块偏移,这b位共对应有2^b种偏移情况,即是0~B-1字节;中间的s位为组索引,用来确定该地址映射到哪一个缓冲组里的,s位共对应2^s种情况,相应的就是组0~组S-1;然后就是高t位标记位了,只有当高速缓存存储器中某一缓存行的有效位为1,标记位与该地址中的t个标记位完全相同时,才能认为高速缓存命中,然后根据b位偏移来选择起始字节。
当CPU执行一条读内存字w的命令时,它会向L1高速缓存请求这个字,来看w是否在L1缓存命中。这时就会先根据w的地址的中间s位来确定w是在哪一个缓存组中,然后再根据t位标记位来确定w是在哪一个缓存行中,最后根据b位来确定w的偏移量从而确定w的起始字节。因此,整个过程分为三步:①组选择;②行匹配;③字抽取
1.2 直接映射高速缓存
所谓直接映射高速缓存,就是每个缓存组中只有1行,即E=1。如图所示。
由于每个缓存组中只有一行缓存行,因此根据地址的s位即可确定缓存行的位置,然后再通过低b位确定起始字节。现在假设CPU每次读取一个字节的字,且高速缓存的描述为(S,E,B,m)=(4,1,2,4),根据S=4,因此缓存组一共有4组,那么就需要s=2位来选择是哪一个组;根据B=2,那么缓存块有2个字节,因此就需要b=1位来选择偏移字节。它的初始结构如下:
<