mesi--cpu内存一致性协议
cpu缓存一致性问题
一个服务器中有多个核,每个核中有多个cpu,每个cpu有多个线程。缓存最少分为3级,1级为线程缓存,2级为核缓存,3级为多个核共享缓存。
产生缓存一致性问题:cpu主缓存count=0,此时线程A需要对count+1,线程B需要count+1,但是线程A读取count=0,修改了count+1还没来得及提交,线程B读取的还是count=0,然后线程A,线程B都提交到cpu主缓存,此时count=1,产生错误,应该count=2
解决方式:
1.cpu主缓存加锁,产生问题效率变低,因为线程A使用count时,其他cpu线程都在等待
2.缓存一致性协议mesi:对单个缓存行进行加锁,不会影响cpu的其他线程

mesi协议
mesi协议:为了解决cpu缓存一致性问题
mesi协议的4种状态:m e s i
MESI是Midified(已修改),Exclusive(独占),Shared(共享),Invalidated(已失效)的缩写,对应Cache Line的四种状态。
多核CPU的cache和内存的构成可以简化为:每个CPU有自己的独有的cache,然后大家共享内存,当每个CPU从cache中读取数据时,如何保证所有cache和内存中数据的一致性,即使MESI协议要解决的问题。
mesi协议4种状态,及状态转换
状态解释:
【M已修改】: 即脏标记,表示当前cache line中的数据已经被修改,没有被写到内存中。
【i已失效】: 状态,表示这个cache line里的数据已经失效,是不可以读取的数据。
【E独占】和【S共享】:状态都表示这个cache line中的数据是干净的(即与内存中的数据是一致的,共享同时也表示与其他cpu cache中的数据是一致的)。
状态转换:
E独占:数据只在被一个cpu读取。
S共享:独占状态基础上,又有其他cpu读取这份数据到自己的缓存行。代表同一份数据在多个cpu的缓存行中
i已失效:当共享状态时,代表同一份数据在多个cpu的缓存行中,不能直接修改,而是要先向所有的其他 CPU 核心广播一个请求,要求先把其他核心的 Cache 中对应的 Cache Line 标记为【已失效】状态,然后再更新当前Cache 里面的数据(这时数据的状态就变为独占的)

模拟工具演示
https://www.scss.tcd.ie/Jeremy.Jones/VivioJS/caches/MESIHelp.htm
mesi--cpu内存一致性协议的更多相关文章
- C和C++中的volatile、内存屏障和CPU缓存一致性协议MESI
目录 1. 前言2 2. 结论2 3. volatile应用场景3 4. 内存屏障(Memory Barrier)4 5. setjmp和longjmp4 1) 结果1(非优化编译:g++ -g -o ...
- 并发研究之CPU缓存一致性协议(MESI)
CPU缓存一致性协议MESI CPU高速缓存(Cache Memory) CPU为何要有高速缓存 CPU在摩尔定律的指导下以每18个月翻一番的速度在发展,然而内存和硬盘的发展速度远远不及CPU.这就造 ...
- 多线程之:MESI-CPU缓存一致性协议
MESI(Modified Exclusive Shared Or Invalid)(也称为伊利诺斯协议,是因为该协议由伊利诺斯州立大学提出)是一种广泛使用的支持写回策略的缓存一致性协议,该协议被应用 ...
- CPU缓存一致性协议—MESI详解
MESI(也称伊利诺斯协议)是一种广泛使用的支持写回策略的缓存一致性协议,该协议被应用在Intel奔腾系列的CPU中. MESI协议中的状态 CPU中每个缓存行使用的4种状态进行标记(使用额外的两位b ...
- MESI-CPU缓存一致性协议
转http://blog.csdn.net/realxie/article/details/7317630 http://en.wikipedia.org/wiki/MESI_protocol MES ...
- 一篇文章让你明白CPU缓存一致性协议MESI
CPU高速缓存(Cache Memory) CPU为何要有高速缓存 CPU在摩尔定律的指导下以每18个月翻一番的速度在发展,然而内存和硬盘的发展速度远远不及CPU.这就造成了高性能能的内存和硬盘价格及 ...
- CPU缓存一致性协议与java中的volatile关键字
有关缓存一致性协议MESI自行百度. 提出问题:volatile在缓存一致性协议上又做了哪些事情?为啥它不保证原子性? 在缓存一致性协议下,CPU为了执行效率使用了写(存储)缓存和失效队列从而导致对用 ...
- 【并发编程】MESI--CPU缓存一致性协议
原文:多线程之:MESI-CPU缓存一致性协议 概念 MESI(Modified Exclusive Shared Or Invalid)(也称为伊利诺斯协议,是因为该协议由伊利诺斯州立大学提出)是一 ...
- Java内存模型(二)volatile底层实现(CPU的缓存一致性协议MESI)
CPU的缓存一致性协议MESI 在多核CPU中,内存中的数据会在多个核心中存在数据副本,某一个核心发生修改操作,就产生了数据不一致的问题,而一致性协议正是用于保证多个CPU cache之间缓存共享数据 ...
随机推荐
- 雪花算法生成分布式ID
分布式主键ID生成方案 分布式主键ID的生成方案有以下几种: 数据库自增主键 缺点: 导入旧数据时,可能会ID重复,导致导入失败 分布式架构,多个Mysql实例可能会导致ID重复 UUID 缺点: 占 ...
- 攻防世界-MISC:give_you_flag
这是攻防世界新手练习区的第四题,题目如下: 点击附件一下载,打开后发现是一个gif动图 可以看到动图有一瞬间出现了一个二维码,找一个网站给他分离一下 得到一张不完整的二维码(然后就不知道该怎么办了,菜 ...
- 攻防世界-MISC:pdf
这是攻防世界新手练习区的第二题,题目如下: 点击附件1下载,打开后发现是一个pdf文件,里面只有一张图片 用WPS打开,没发现有什么不对的地方,参考一下WP,说是要转为word格式.随便找一个在线转换 ...
- 企业应用架构研究系列二十八:身份认证 Beginning Out With IdentityServer4
在.Netcore 技术栈中,一直在使用了开源组件IdentityService4进行身份管理,其功能的强大和易用性的确很受开发者喜欢,但是最近其开源组织Duende Software 开始对其进行商 ...
- MindSpore尝鲜之爱因斯坦求和
技术背景 在前面的博客中,我们介绍过关于numpy中的张量网络的一些应用,同时利用相关的张量网络操作,我们可以实现一些分子动力学模拟中的约束算法,如LINCS等.在最新的nightly版本的MindS ...
- 重新审视C# Span<T>数据结构
先谈一下我对Span的看法, span是指向任意连续内存空间的类型安全.内存安全的视图. Span和Memory都是包装了可以在pipeline上使用的结构化数据的内存缓冲器,他们被设计用于在pipe ...
- GO 语言入门(一)
GO 语言入门(一) 本文写于 2020 年 1 月 18 日 Go 由 Google 工程师 Robert Griesemer,Rob Pike 和 Ken Thompson 设计的一门编程语言,第 ...
- MinIO学习
1.Minio及背景 Minio是一个开源的分布式文件存储系统,它基于 Golang 编写,虽然轻量,却拥有着不错的高性能,可以将图片.视频.音乐.pdf这些文件存储到多个主机,可以存储到多个Linu ...
- 830. Positions of Large Groups - LeetCode
Question 830. Positions of Large Groups Solution 题目大意: 字符串按连续相同字符分组,超过3个就返回首字符和尾字符 思路 : 举例abcdddeeee ...
- Centos7 安装 MPICH
查看官网版本 https://www.mpich.org/downloads/ 最新的stable release是mpich 4.0.2,复制下载链接. 安装依赖 mpich需要系列依赖,如果不确定 ...