概念:高速缓存(cache),为了平衡CPU和主存(DRAM)之间日益增大的速度差异,在CPU和主存之间引入的一个部件,他是主存中数据的一个子集,CPU访问主存之前先访问高速缓存,如果高速缓存中有要取的数据(命中)则不用再访问主存,以此提高速度,一般有SRAM组成,组织方式组相联。高速缓存一般是以物理地址为tag和索引的,可以分级。L1cache分指令和数据cache.
I. 高速缓存结构和原理:
高速缓存的结构可以用(S,E,B,m)元组表示,S是高速缓存组个数,E是每组高速缓存包含的高速缓存行个数,B是每个高速缓存行中高速缓存块的字节数,m是地址位数。一下涉及这么多概念,不要捉急,我们先往下看,待会儿回过头来再细看。m位地址如下划分,t位标记,s位组索引,b位块偏移。
s,b和S,B,E,M(物理主存大小)的关系如下:
以例说明高速缓存如何工作的,一条加载指令指示CPU加载主存地址A处的一个字时,它将地址A发送给高速缓存,如果高速缓存中存有地址A处的字的拷贝,它就将那个字返回给CPU。那么高速缓存如何知道自己是否存有地址A处的字的拷贝呢?地址A的s位索引得到高速缓存组,如果高速缓存存有A处字的拷贝的话,必定在此高速缓存组中,进一步如果地址A的t位标记和高速缓存组某高速缓存行的t位标记相同并且该高速缓存行的有效位有效,则拷贝只能在此高速缓存行的高速缓存块中,至于高速缓存块中的偏移,由地址A中的b位确定。参考下图可以更好的理解高速缓存工作过程。(注意上面过程中A一般是已经经过MMU转换的物理地址)
上述的高速缓存工作机制以读操作并且读命中为例进行的说明,写操作更复杂,而且高速缓存有Write-through和Copy-back等工作方式配合命中和不命中的组合,各个流程比较复杂需要仔细研读,高速缓存工作方式详见:http://blog.csdn.net/kklvsports/article/details/9208475
有了前面的基础下面汇总如下基本概念:
高速缓存行:即cache line,是高速缓存缓存主存的基本单元
全相联高速缓存:只有一个高速缓存组即S = 1的高速缓存
组相联高速缓存:有多个高速缓存组即S > 1,E > 1的高速缓存
直接映射高速缓存:高速缓存组中只有一个高速缓存行即E=1的高速缓存
高速缓存大小:高速缓存大小C是指所有高速缓存块的大小之和,不包含有效位和标记位。
II. 高速缓存替换策略
如果高速缓存不命中的话,并且所有高速缓存行有效位都是有效(即高速缓存满),就要替换现有的高速缓存行,替换原则如下:
对于直接映射高速缓存,由于高速缓存组中只有一个高速缓存行,以主存中的内容直接替换该行即可。
对于组相联高速缓存,一个高速缓存组中有多个高速缓存行,有多种替换策略,如LRU最近最少使用策略替换最后一次访问时间最久的那行;LFU最不常有策略替换过去某个时间窗口内最少使用的行。
参考:《深入理解计算机系统》