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之间缓存共享数据 ...
随机推荐
- 阿里云IoT流转到postgresql数据库方案
之前写过一篇如使用阿里云上部署.NET 3.1自定义运行时的文章,吐槽一下,虽然现在已经2022年了,但是阿里云函数计算的支持依然停留在.NET Core 2.1,更新缓慢,由于程序解包大小的限制,也 ...
- 【大话云原生】kubernetes灰度发布篇-从步行到坐缆车的自动化服务升级
此文系[大话云原生]系列第四篇,该系列文章期望用最通俗.简单的语言说明白云原生生态系统内的组成.架构以及应用关系.从这篇开始我们要开始针对Kubernetes进行介绍了,本文内容如下: 一.Kuber ...
- Django模板相关
1.母版 想象一个举着火炬的手,除了火炬这个手还能举棒球棍.举雷神之锤.举拖拉机钥匙等等,举得东西不同给人整体感觉就不同. 母版就相当于这个手(实际为一个html文件),其他相关的html文件就相当于 ...
- 设置Linux系统的交叉编译环境
1.在Linaro官网上获得交叉编译工具 网址:http://releases.linaro.org/components/toolchain/gcc-linaro/ 从Linaro官网上能找到4.9 ...
- 从 Notion 分片 Postgres 中吸取的教训(Notion 工程团队)
https://www.notion.so/blog/sharding-postgres-at-notion 今年(2021)早些时候,我们对 Notion 进行了五分钟的定期维护. 虽然我们的声明指 ...
- 中间件漏洞之Nginx
中间件漏洞之Nginx 我们常见的中间件有IIS.Apache.Nginx,其中Nginx中间件有什么漏洞呢? Nginx 文件名逻辑漏洞(CVE-2013-4547): 漏洞版本: Nginx 0. ...
- 太极限了,JDK的这个BUG都能被我踩到
hello,大家好呀,我是小楼. 之前遇到个文件监听变更的问题,刚好这周末有空研究了一番,整理出来分享给大家. 从一次故障说起 我们还是从故障说起,这样更加贴近实际,也能让大家更快速理解背景. 有一个 ...
- CTFHub-HTTP协议五关刷题解答
CTFHub 开箱即用的CTF学习解决方案 地址:https://www.ctfhub.com/#/skilltree 本次解答一共包括五关,没有先后顺序. 1.技能树一:请求方式 题目描述 打开后得 ...
- Hbase数据库安装部署
Hbase单机版安装 hbase介绍 HBase – Hadoop Database是一个分布式的.面向列的开源数据库,该技术来源于Chang et al所撰写的Google论文"Bigta ...
- 安装vsFTP到CentOS(YUM)
运行环境 系统版本:CentOS Linux release 7.3.1611 (Core) 软件版本:vsftpd-3.0.2 硬件要求:无 安装过程 1.安装YUM-EPEL存储库 YUM-EPE ...