Cache程序放在哪
程序局部性原理:CPU大多数时间在执行相同的指令或者与此相邻的指令
内存
动态随机存储器,DRAM,根据电容存储电荷的多少来代表0和1
与CPU数据吞吐量天差地别,内存是决定系统整体性能的瓶颈
Cache
可以通过一块小而快的存储器,放在CPU和内存之间,利用程序局部性原理,来缓解CPU和内存之间的性能问题,即Cache,高速缓存
Cache中存放了内存中一部分数据,CPU在访问内存时要先访问Cache,如果Cache中有需要的数据就直接从Cache中拿,没有就从内存中读取数据,并同时把这块数据放入Cache中
Cache构成:静态储存器,地址转换模式,Cache行替换
Cache把静态储存器和内存分成大小相同的行——Cache和内存交换数据的最小单位,多个行形成一组
Cache工作流程
1.CPU发出的地址由Cache的地址转换模块分成3段:组号,行号,行内偏移
2.Cache根据组号,行号查找静态存储器对应的行。如果命中,用行内偏移读取并返回数据给CPU,否则新分配一个新行并访问内存,把内存中对应的数据加载到Cache行并返回给CPU
3.没有新行,进入行替换逻辑,找出一个Cache行写回内存,腾出空间
Cache带来的问题
Cache一致性问题
1.一个CPU核心中的指令Cache和数据Cache的一致性问题
2.多个CPU核心各自的2级Cache的一致性问题
3.CPU的3级Cache与设备之间一致性问题
Cache的MESI协议
多核心Cache数据同步协议有MESI和MOESI
MESI协议定义了4种基本的状态:M(Modified 修改),E(Exclusive 独占),S(Shared 共享),I(Invalid 无效)
M修改(Modified):当前Cache的内容有效,数据已经被修改而且与内存中的数据不一致,数据只在当前Cache里存在
E独占(Exclusive):当前Cache中的内容有效,数据与内存中的数据一致,数据只在当前Cache里存在
S共享(Shared):当前Cache中的内容有效,Cache中的数据与内存中的数据一致,数据在多个CPU核心中的Cache里面存在
I无效(Invalid):当前Cache无效