CPU和高速缓存、主内存之间的关系
- CPU只直接跟L1高速缓存交互,CPU不会直接操作主内存;每个CPU只直接操作各自的高速缓存,不能直接操作其他CPU的高速缓存;
- 高速缓存中的数据均来源于主内存,即是主内存中的数据的拷贝;
- 当高速缓存中的数据被CPU修改后,有两种机制来实现高速缓存和主内存的通信:一个是
write-through,另一个是write-back;
write-through机制
write-through机制描述的是当CPU对高速缓存进行写操作时,高速缓存如何跟主内存交互的。

image.png
特点如下:
- 写命中
既写高速缓存,也写主内存; - 写不命中
使用非写分配 not-write-allocat,即避开高速缓存,直接写到主存;
write-back机制
write-back机制描述的是当CPU对高速缓存进行写操作时,高速缓存如何跟主内存交互的。

write-back.png
特点如下:
- 写命中
每个缓存行有一个有效位:0表示dirty/空, 1表示有效;只写高速缓存,将相应的缓存行标记为脏,即dirty;只有当这个脏的缓存行要被替换掉时,才会写到内存中去; - 写不命中
首先使用write-allocate的方式:从下一层存储加载相应的块到高速缓存,然后更新这个缓存块;然后就使用写命中机制了;
高速缓存结构

Intel-i7-cache-hierarchy.png
- CPU只直接和寄存器、L1缓存交互;
- 现代的L1缓存分为两个单独的物理块:
i-cache存储指令,是read-only的;
d-cache存储数据,是read/write的;- L2和L3缓存存储指令和数据;
- 高速缓存的大小:Core i7的L1缓存大小为64KB, L2缓存是256KB,L3是8MB;
- 缓存是分块,分组的;
- L1的访问周期是4, L2是L1的3倍,L3是L2的3倍;一次内存访问的时钟周期是L3的3倍左右,和L1差2个数量级