写在前面
我们先来看一张图表,如下:
深入理解计算机系统一书将寄存器划分为L0级缓存,接着依次是L1,L2,L3,ARMv8最多可以支持7级的高速缓存,即L1级~L7级。接着是内存,本地磁盘。越往上的缓存存储空间越小,速度越快,成本也更高;越往下的存储空间越大,速度更慢,成本也更低。从上至下,每一层都可以看做是更下一层的缓存,即:L0寄存器是L1一级缓存的缓存,L1是L2的缓存,依次类推;每一层的数据都是来至它的下一层,所以每一层的数据是下一层的数据的子集。
一、高速缓存存在的意义
由于程序访问的局部性(包括时间局部性,某个内存单元在短时间内可能被再次访问;空间局部性,某个内存单元被访问后,相邻的内存单元在短时间内有可能被访问)。由于CPU和主存在性能上巨大的差异,我们在CPU和主存之间引入了高速缓存。在CPU访问数据时,如果缓存中存在该数据,则直接从缓存中读取,如果缓存中不存在,