一、cache的数据查找
前言:主要用容量(C),组数(S),块大小(b),块数(B)和相关联度(N)等来刻画cache。不同种类的cache也对应着不同的映射方式。
各个物理量的解释:
容量(C):代表的是cache的容量,和主存等地方的容量可以一起理解。
块大小(b):即字面意思每一块的大小。如果cache miss的时候,在主存向cache中读入数据的时候,需要把这个块填满。例如,b为4个字。在miss的时候,依据所需要的数据在主存中的地址,先确定该数据存储在cache的哪一个组,以及组中的哪一路,那么在该处前后的数据都要从主存中读入。详细细节会在下面讨论。
块数(B):很明显依据前两个概念,可以得到B = C / b
组数(S)和 相关联度(N):相关联度是为每组提供N块。而组数就是B/N。
1.对于地址的理解
数据在主存中的地址为一串32位的二进制数。由于表示较为麻烦,故一般情况下,就会用八位十六进制数来表示一个地址。而每一段地址的低两位一定都为零,而为零的这两位被称作偏移位。
为何为零?因为,现今大多数都是字节寻址的存储器,即在主存中每一个字节都对应着唯一的地址,而每一个字都是4个字节。如下图,可以认为把最低位的字节地址当作字地址。故,字地址一定是4的倍数,反映在十六进制上就是后两位为0。
2.对于映射方式:
那么了解了地址的基本原理就可以很好的理解各个映射方式所对应的规则了。
直接映射高速缓存:以容量为8个字,块大小为1个字的直接映射高速缓存为例
由于有很多地址都映射到同一组上,所以高速缓存还必须保存实际包含在每一组内数据的地址。地址的最低有效位说明哪组包含该数据。剩下的高位称为标志,说明包含在组内的数据是多个可能地址中的哪一个。
其余的各种映射方式都是通过对描述cache各个参数的改变来实现不同的映射方式。
emmm,方式这儿就写这么多吧,欢迎大家讨论。
3.块大小:
个人认为,由于块大小的改变可以和上面提到的三种方式联系在一起,而且其有着自己的优缺点,故可能合适的块大小的选取可以使得cache的速度变快。
二、FLAG(可能并不会实现)
下次目标:对于cache的部分代码的实现以及各种映射方式的优缺点的总结,了解cache的老化。