cache的作用
随着现代半导体工艺的发展,CPU的频率越来远快,相对内存快了一个数量级,对于访存的操作CPU就需要等待主存,这样会导致资源的白白浪费。所以cache的出现是为了解决CPU与内存速度不匹配的问题,(结构:cpu->cache->memory).
cache 的工作原理
是基于“局部性”原理,它包含以下两个方面:
- 时间局部性:如果某个数据被访问,那么不久将来它很可能再次被访问。
- 空间局部性:如果某个数据被访问,那么与它相邻的数据也可能被访问。
现在的多核CPU的缓存一般都到了
CPU多级缓存-缓存一致性(MESI)
MESI协议的作用:用于保证多个CPU Cache之间缓存共享数据的一致
MESI 是指4中状态的首字母。每个Cache line有4个状态,可用2个bit表示,它们分别是:
注: 缓存行(Cache line):缓存存储数据的单元。
各个状态的描述
状态 | 描述 | 监听任务 |
---|---|---|
M 修改 (Modified) | 该Cache line有效,数据被修改了,和内存中的数据不一致,数据只存在于本Cache中 | 缓存行必须时刻监听所有试图读该缓存行相对就主存的操作,这种操作必须在缓存将该缓存行写回主存并将状态变成S(共享)状态之前被延迟执行 |
E 独享、互斥 (Exclusive) | 该Cache line有效,数据和内存中的数据一致,数据只存在于本Cache中 | 缓存行也必须监听其它缓存读主存中该缓存行的操作,一旦有这种操作,该缓存行需要变成S(共享)状态 |
S 共享 (Shared) | 该Cache line有效,数据和内存中的数据一致,数据存在于很多Cache中 | 缓存行也必须监听其它缓存使该缓存行无效或者独享该缓存行的请求,并将该缓存行变成无效(Invalid) |
I 无效 (Invalid) | 该Cache line无效 | 无 |
触发事件:
触发事件 | 描述 |
---|---|
本地读取(Local read) | 本地cache读取本地cache数据 |
本地写入(Local write) | 本地cache写入本地cache数据 |
远端读取(Remote read) | 其它cache读取本地cache数据 |
远端写入(Remote write) | 其它cache写入本地cache数据 |
CPU多级缓存-乱序执行优化
处理器为提高运算速度而做出违背代码原有顺序的优化。
如下对代码的执行的顺序进行了修改,但是最终的结果不会影响
Java内存模型(Java Memory Model,JMM)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EFGzDnab-1571039461463)(C:\Users\dell-pc\AppData\Roaming\Typora\typora-user-images\1571026659760.png)]
odel,JMM)
[外链图片转存中…(img-EFGzDnab-1571039461463)]