为了达到数据访问的一致,需要各个处理器在访问缓存时遵循一些协议,在读写时根据协议来操作,常见的协议有MSI,MESI,MOSI等。最常见的就是MESI协议。接下来给大家简单讲解一下MESI

MESI表示缓存行的四种状态,分别是

1. M(Modify) 表示共享数据只缓存在当前CPU缓存中,并且是被修改状态,也就是缓存的数据和主内存中的数据不一致

2. E(Exclusive) 表示缓存的独占状态,数据只缓存在当前CPU缓存中,并且没有被修改

3. S(Shared) 表示数据可能被多个CPU缓存,并且各个缓存中的数据和主内存数据一致

4. I(Invalid) 表示缓存已经失效

在MESI协议中,每个缓存的缓存控制器不仅知道自己的读写操作,而且也监听(snoop)其它Cache的读写操作

对于MESI协议,从CPU读写角度来说会遵循以下原则:

CPU读请求:缓存处于M、E、S状态都可以被读取,I状态CPU只能从主存中读取数据

CPU写请求:缓存处于M、E状态才可以被写。对于S状态的写,需要将其他CPU中缓存行置为无效才可写

使用总线锁和缓存锁机制之后,CPU对于内存的操作大概可以抽象成下面这样的结构。从而达到缓存一致性效果

初步认识Volatile-缓存一致性协议相关推荐

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

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

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

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

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

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

  4. 关于缓存一致性协议、MESI、StoreBuffer、InvalidateQueue、内存屏障、Lock指令和JMM的那点事

    前言 事情是这样的,一位读者看了我的一篇文章,不认同我文章里面的观点,于是有了下面的交流. 可能是我发的那个狗头的表情,让这位读者认为我不尊重他.于是,这位读者一气之下把我删掉了,在删好友之前,还叫我 ...

  5. 缓存一致性协议硬核讲解

    作者 | 牛在舒 面向护发编程程序员,呵护每一根秀发 从缓存一致性协议说起 相信大家都听说过 "缓存一致性协议",那么它是为了解决哪些问题?在实际应用中的现状又是如何呢? 首先让我 ...

  6. Java并发编程(六):从CPU缓存一致性协议到JMM(Java内存模型)

    注:本系列主要注重并发编程这块儿,JVM内容很多,会另外开专栏总结,此系列可能只是会稍微提及 一.跨平台和JVM 经过前面几篇博文的介绍,我们知道,任何编程语言编写的程序要想被计算机执行,都必须被翻译 ...

  7. 缓存一致性协议-MESI

    背景 带有高速缓存的CPU执行计算的流程 程序以及数据被加载到主内存 指令和数据被加载到CPU的高速缓存 CPU执行指令,把结果写到高速缓存 高速缓存中的数据写回主内存 高速缓存的数据结构 高速缓存的 ...

  8. 缓存一致性协议(MESI)

    在目前主流的计算机中,cpu执行计算的主要流程如图所示: 数据加载的流程如下: 将程序和数据从硬盘加载到内存中 将程序和数据从内存加载到缓存中(目前多三级缓存,数据加载顺序:L3->L2-> ...

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

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

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

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

最新文章

  1. 用C#编写获取远程IP,MAC的方法
  2. 尚学堂requireJs课程---3、私有和公有属性和方法
  3. python统计字符在文件中出现的次数_python字符串中字符出现次数(python获取字符串个数)...
  4. jQuery的prev next
  5. java对mysql读写权限设置_Java学习笔记——MySQL开放3306接口与设置用户权限
  6. python 画三角函数_用Python计算三角函数之acos()方法的使用
  7. 使用FlexBox和Json实现类似ComboBox(类似Google的输入提示和自动)功能-基于JQuery-ASP.NET...
  8. dubbo的线程模型、派发策略、线程池策略
  9. 官方 mysql管理工具下载_飘云mysql管理工具
  10. aspx 微型_最初的十亿分钟:正在向世界授课的微型非营利组织背后的数字
  11. linux查看数据库实例名端口号,查看数据库tns配置
  12. 在线上传图片二维码识别解析
  13. 贼好玩!我用Python写了一个AI玩星际争霸2!
  14. vue-cli脚手架卡在 ‘98%’ after emitting CopyPlugin 报错,无法运行
  15. 互联网 IT 精英:龙泉寺静心之旅
  16. Mac电脑使用:Mac电脑如何用自带的Safari浏览器,一键翻译英文网页为中文网页
  17. mac上通过自动操作达到右键通过vscode打开文件、文件夹
  18. 网页浏览速度慢的排查原因
  19. docker搭建openstf, 远程无延时控制手机
  20. 【工控基础】1. SCADA系统介绍

热门文章

  1. 用《叩响C#之门》复习C#基础知识 第八章 面向对象编程:类和对象(二)
  2. 现在java就业前景怎么样?现在入行晚了吗
  3. Elasticsearch 的一些关键概念
  4. 网上书店例子(JSP和JavaBean)
  5. Servlet 和Filter的生命周期
  6. maven到底是个啥玩意~
  7. CENTOS7 Python3.7安装pip模块以及pip使用
  8. python中的property
  9. CentOS 7 安装 Mysql5.5 或自定义版本 RPM 方式
  10. 大数据科学认识与理解论坛全攻略