每个处理器,在自己的高速缓存中都有变量副本,这就有了缓存不一致问题,因此有了MESI协议。

MESI协议将缓存行状态flag分为4种:

  • invalid:无效的,标记为I,当前cache entry无效,数据不能使用
  • shared:共享的,标记为S,当前cache entry有效,数据在各个处理器中都有副本,且副本值都和主内存一致
  • exclusive:独占的,E,当前处理器对这个数据独占,只有它有数据副本,其他处理器没有
  • modified:修改过的,M,只能有1个处理器对共享数据更新


处理器0读取某个变量的数据,根据内存地址解码,得到index + tag + offset,并以此从高速缓存的拉链散列表中拿到数据。如果发现数据无效,就会发送read消息总线bus。此时主内存会把数据交给总线bus,总线bus再将其return给处理器0。处理器0会把数据放到高速缓存的cache entry中,flag设为 共享。

处理器1也会读取数据到自己的高速缓存中。

当处理器0修改数据时,会发送invalidate消息到总线bus。处理器1会嗅探到这条invalidate消息,会将自己高速缓存中的flag设为无效,并return invalidate ack消息给总线bus。

处理器0嗅探到 其他所有处理器返回的invalidate ack消息,会将自己高速缓存中的数据加锁,并将状态从共享S —> 独占E

处理器0对这条消息独占期间,其他处理器就不允许修改数据了。即使其他处理器也想修改这条数据,发送invalidate消息给总线bus,处理器0是不会回复invalidate ack消息的。因此其他处理器的修改操作无效。

等处理器0修改数据完毕后,会把状态设为 修改过的M,同时处理器0不再持有这条数据的锁了。

MESI缓存一致性协议相关推荐

  1. 4.什么是MESI缓存一致性协议?怎么解决并发的可见性问题?

    MESI一致性协议 小陈:老王,上一章你让我看看MESI一致性协议,我大概了解了一下. 老王:哦,来说说你对MESI一致性协议的理解 小陈:MESI协议也叫做缓存一致性协议,主要是用来进行协调多核CP ...

  2. MESI 缓存一致性协议

    本文目录 场景再现 1.总线锁 2.MESI 缓存一致性协议 1.MESI 协议概念 2.通过例子来介绍 MESI 协议 1.MESI 场景 2.MESI 协议下,执行步骤 3.MESI协议失效问题 ...

  3. MESI缓存一致性协议详解

    MESI缓存一致性协议详解 1.CPU为何要有高速缓存 CPU中内置了少量的高速缓存以解决I\O速度和CPU运算速度之间的不匹配问题. 带有高速缓存的CPU执行计算的流程 程序以及数据被加载到主内存 ...

  4. 并发编程实战-MESI缓存一致性协议

    大家好,最近呢我对并发编程展现出了兴趣(没办法,别人都会你不会说不过去啊),然后我就要奋发图强学好并发编程,那么接下来让我们一起进入学习吧.我们在学习并发编程实战之前,应该先要了解一下我们的cpu缓存 ...

  5. 简述Intel的MESI缓存一致性协议

    ①M:modified--与主存的内容相比,有改动就标记为M.我改过,那么对于别人来说就是i了. ②E:exclusive--内容为我锁独占,标记为E. ③S:shared--与此同时别人也在读,标记 ...

  6. 两个例子详解并发编程的可见性问题和有序性问题,通过volatile保证可见性和有序性以及volatile的底层原理——缓存一致性协议MESI和内存屏障禁止指令重排

    1. 并发编程的可见性问题 2. 并发编程的有序性问题 3. 使用volatile关键字解决可见性问题 4. 可见性问题的本质--缓存不一致 因为cpu执行速度很快,但是内存执行速度相对于CPU很慢, ...

  7. “了解高并发底层原理”,面试官:讲一下MESI(缓存一致性协议)吧

    目录 前言: 1.什么是(Who): 2.为何来(How): 2.1缓存不一致带来的后果 2.2解决方法: 3.是什么(What) 3.1数据在缓存中的四种状态: 3.2MESI的六种消息(请求消息和 ...

  8. 同时存多个变量缓存 微信小程序_CPU缓存一致性协议MESI,memory barrier和java volatile...

    MESI协议 MESI协议是一个被广泛使用的CPU缓存一致性协议.我们都知道在CPU中存在着多级缓存,缓存级别越低,容量就越小,速度也越快.有了缓存,CPU就不需要每次都向主存读写数据,这提高了CPU ...

  9. CPU缓存一致性协议MESI - 笔记

    CPU缓存一致性协议MESI CPU高速缓存(Cache Memory) CPU为何要有高速缓存 CPU在摩尔定律的指导下以每18个月翻一番的速度在发展,然而内存和硬盘的发展速度远远不及CPU.这就造 ...

最新文章

  1. mysql 表空间收缩_mysql表碎片清理和表空间收缩
  2. yii2 nginx去掉index.php?r=
  3. 你有多了解hybris ?
  4. css水平垂直居中(绝对定位居中)
  5. @NotBlank注解使用不生效的解决办法
  6. div图片垂直居中 如何使div中图片垂直居中
  7. java判断float相等_在java中判断两个浮点型(float)数据是否相等的案例
  8. android设置window背景颜色,Android WindowManager 背景暗化
  9. 条形码、二维码的区别和组成结构介绍
  10. 关于文件的存储——windows和Linux比较
  11. Geoserver入门操作系列之二:创建图层样式
  12. 百融云创被传赴港IPO急辟谣 旗下信贷业务存众多质疑
  13. 基木鱼html标签,基木鱼 | QA常见问题|【其他类】
  14. Executor框架-Executors
  15. Windows添加网络位置向导(即我的电脑中添加网络盘符)
  16. 【我的DOT语言学习之旅】 学习DOT语言并使用Graphviz软件来打开.dot文件
  17. 为什么计算机不显示桌面工具栏,快速解决电脑任务栏显示桌面图标不见了几个实用方法...
  18. 《Linguistic Regularities in Continuous Space Word Representations》翻译与理解
  19. 【图像识别与处理】图像相似度对比的几种办法
  20. 计算机电缆电压实验,计算机电缆的执行标准与规格型号

热门文章

  1. memcached客户端_对比Memcached和Redis,谁才是适合你的缓存?
  2. Activiti工作流从入门到入土:整合spring
  3. clientdataset新增append新增多条记录的时候报错 key valation
  4. 改善代码设计 —— 总结篇(Summary)
  5. Redis工具类的封装
  6. BurpSuite实例教程讲解
  7. Android开发中使用七牛云存储进行图片上传下载
  8. 教务查询子系统时序图
  9. LocalResizeIMG前端HTML5本地压缩图片上传,兼容移动设备IOS,android
  10. h3c 3600 交换机配置Telnet登录