缓存内存模型
CPU缓存与寄存器
CPU缓存不是寄存器..
核心区别
寄存器:位于CPU内部最顶层,速度最快(通常在一个CPU周期内完成访问),容量极小(仅几十字节到几百字节),用于存放当前正在处理的数据、指令地址或中间结果。寄存器直接参与指令执行,是CPU运算单元的“工作台”。
CPU缓存:位于寄存器之下、主存之上,属于高速缓冲存储器,用于暂存近期可能被CPU访问的数据和指令,以缓解CPU与慢速内存之间的速度差距。缓存按层级分为L1、L2、L3,其中L1最快但容量最小(通常为几十KB),L3容量较大但速度较慢。
层级关系(从快到慢)
- CPU寄存器
- L1缓存(指令缓存 + 数据缓存)
- L2缓存
- L3缓存(多核共享)
- 主存(RAM)
- 硬盘
缓存使用SRAM实现,寄存器则由更高速、更昂贵的触发器电路构成,因此寄存器在速度和成本上均优于缓存。
功能定位
- 寄存器:存放当前指令所需的操作数、地址、状态等,由指令直接寻址。
- 缓存:透明地预取和暂存主存中可能被访问的数据,程序员通常无法直接控制缓存内容。
综上,缓存与寄存器虽同属高速存储结构,但寄存器是CPU执行核心的一部分,而缓存是存储层次中的独立层级,二者功能互补但本质不同。
CPU缓存
每一级缓存中所存储的数据全部都是下一级缓存中的一部分,这三种缓存的技术难度和制造成本是相对递减的,容量相对递增。 当CPU要读取一个数据时,首先从一级缓存中查找,如果没有再从二级缓存中查找,如果还是没有再从三级缓存中或内存中查找。一般来说每级缓存的命中率大概都有80%左右,也就是说全部数据量的80%都可以在一级缓存中找到,只剩下20%的总数据量才需要从二级缓存、三级缓存或内存中读取。
缓存一致性协议
缓存行的概念: 缓存是分段(line)的,一个段对应一块存储空间,称之为缓存行,它是CPU缓存中可分配的最小存储单元,大小32字节、64字节、128字节不等,这与CPU架构有关,通常来说是64字节。
缓存一致性协议就是要使多组缓存的内容保持一致。日常处理的大多数计算机设备缓存一致性协议都属于"嗅探(snooping)"协议,所有内存的传输都发生在一条共享的总线上,而所有的处理器都能看到这条总线:缓存本身是独立的,但是内存是共享资源,同一个指令周期中,只有一个CPU缓存可以读写内存。
MESI协议是当前最主流的缓存一致性协议,在MESI协议中,每个缓存行有4个状态。
CPU寄存器和高速缓存的抽象
工作内存Work Memory其实就是对CPU寄存器和高速缓存的抽象,或者说每个线程的工作内存也可以简单理解为CPU寄存器和高速缓存。
