cache line
比如定义cache line的size是16byte;
cpu访问的时候 要用wrap和cache有关
cache的更新是一条line一条line的更新,为了cache管理简单一点,看有没有被hit的时候简单一点,靠cache line要么都被更新,要么都被踢走。
cache line:每次内存和CPU缓存之间交换数据都是固定大小,cache line就表示这个固定的长度。
cpu取一个指令,从memory中
cpu连续两次访问同一个地址,cache看到cache缓存空间中有这个地址的数据,就不用再访问下面的slave,把这个地址的数据拿给cpu直接用,
一个cache被分为S个组,每个组有E个cacheline,而一个cacheline中,有B个存储单元,现代处理器中,这个存储单元一般是以字节(通常8个位)为单位的,也是最小的寻址单元。因此,在一个内存地址中,中间的s位决定了该单元被映射到哪一组,而最低的b位决定了该单元在cacheline中的偏移量。valid通常是一位,代表该cacheline是否是有效的(当该cacheline不存在内存映射时,当然是无效的)。tag就是内存地址的高t位,因为可能会有多个内存地址映射到同一个cacheline中,所以该位是用来校验该cacheline是否是CPU要访问的内存单元。
当tag和valid校验成功是,我们称为cache命中,这时只要将cache中的单元取出,放入CPU寄存器中即可。
cache地址和主存地址之间有对应关系:
主存和cache的块大小相同,块内地址是相对于块的起始地址的偏移量(低位地址相同),地址变换主要为:主存的块号和cache块号的转换。
1.从0地址开始 incr4;总线上地址回0-4-8-c,0-4-8是没用的数,cpu等到c的数据回来,指令才会往下走;
2.发两个甚至更多的burst,把cache line读回来;
3.从c开始发,发一个wrap 4;wrap就先把急需的c地址取回来,然后就回给cpu了,cpu在第一个周期就能得到数据,就可以往下走了。后面的0-4-8再填充到cache-line;
wrap是为了和cache配合。也提升了cpu效率。
如果cache发现 cpu要访问的地址不在cache里,需要把这个数据刷上来。
cpu访问的地址 在cache里面没有hit,这时候就要从memory取。op-code进cache,发incr4-burst4