文档章节

MESI 一致性协议

 我类个擦
发布于 2014/10/02 10:28
字数 752
阅读 973
收藏 6

四态写回无效协议MESI

MESIMSI协议的基础上改进的,增加了一个互斥独占状态E

为什么要引入?

考虑当一个顺序先读入一个数据项,然后修改一个数据项时,就要产生一个BusRd事务用来得到内存块,并置为S状态,然后产生一个BusRdX事务,用来将该块状态从S变为M状态。而在顺序程序中数据项不存在共享者,因此只会在一个告诉缓存有该块拷贝,后一个事务是不必要的。

所以引入一个E状态,用来表示只有一个高速缓存中独占这个内存快,且该块内容没有被修改过。

 

 

 

 

 


在产生总线读事务时,高速缓存控制器要知道别的高速缓存中是否存在该块的拷贝,来决定该块置为S状态还是E状态。这就需要提供一个额外的共享S信号线,

S信号线低电平,为E,高为S

 

关键在于E状态:

1.  当有处理器读PrRd事件时,因为就该cache有当前数据,所以直接命中还是E

2.  当有处理器写PrWr事件时,由EM状态,告知已经被修改过,且是最新的

3.  当观察到一个总线读(BusRd)事务,将导致由E状态转换到S状态,同时由该高速缓存提供数据。(因为只有改cache是独占此数据的,其他cache中没有任务拷贝)

4.  当观察到一个总线互斥读(BusRdX)事务,由该高速缓存提供数据。(因为只有改cache是独占此数据的,其他cache中没有任务拷贝)但是因为人家要当老大,自己只好FLUSH后转为无效状态

注意S状态,在MSI中,当观察到一个总线读和互斥读的事务,在进行状态转换的同时,由主存提供数据,而在MESI中由处于S状态下的某一个高速缓存提供数据,这个并不是一定的,这是一种选择的策略。怎么都可以。

本文转载自:http://blog.csdn.net/zhuzongwei1988/article/details/5531269

粉丝 12
博文 31
码字总数 31164
作品 0
杭州
程序员
私信 提问
内存模型是怎么解决缓存一致性的?

前言 在再有人问你Java内存模型是什么,就把这篇文章发给他。这篇文章中,我们介绍过关于Java内容模型的来龙去脉。 我们在文章中提到过,由于CPU和主存的处理速度上存在一定差别,为了匹配这...

Java架构
2018/08/20
0
0
Cache一致性协议与MESI(2)

Write invalidate提供了实现Cache一致性的简单思想,处理器上会有一套完整的协议,来保证Cache一致性。比较经典的Cache一致性协议当属MESI协议,奔腾处理器有使用它,很多其他的处理器都是使...

j_m
2012/03/29
0
0
从多核硬件架构,看Java内存模型

在了解Java内存模型之前,先来看一下多核硬件架构。 我们应该都知道,计算机在执行程序的时候,每条指令都是在CPU中执行的,而执行的时候,又免不了要和数据打交道。而计算机上面的数据,是存...

消失er
2018/09/02
0
0
CAS指令与MESI缓存一致性协议

转: CAS(Compare-And-Swap)指令是并行程序设计最基础的基石,随着越来越多的本本都用上了双核,这个世界已经快速步入并行计算时代,CAS指令发挥的作用也就越来越大。CAS指令,在Intel CPU...

刘小兵2014
2011/10/15
0
0
JMM是怎么解决原子性、可见性、有序性问题的?

Java内存模型封装了底层的实现后提供给开发人员一系列和并发处理相关的关键字,,比如volatile、Synchronized、final等,在开发多线程代码的时候,我们可以直接使用 这些关键词来控制并发,从...

浦涛
2018/10/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Jenkins系列_插件安装及报错处理

进入Jenkins之后我们可以进行插件的安装,插件管理位于以下模块: 发现上面报了一堆错误,是因为插件的依赖没有安装好,那么这一节,就先把这些错误解决掉吧。解决完成后,也就基本会使用插件...

shzwork
今天
2
0
mysql mysql的所有查询语句和聚合函数(整理一下,忘记了可以随时看看)

查询所有字段 select * from 表名; 查询自定字段 select 字段名 from 表名; 查询指定数据 select * from 表名 where 条件; 带关键字IN的查询 select * from 表名 where 条件 [not] in(元素...

edison_kwok
昨天
9
0
多线程同时加载缓存实现

import com.google.common.cache.Cache;import com.google.common.cache.CacheBuilder;import java.util.concurrent.ExecutionException;import java.util.concurrent.ExecutorServi......

暗中观察
昨天
3
0
利用VisualVM 内存查看

准备工作,建几个测试类。等下就是要查看这几个类里面的属性 package visualvm;public class MultiObject { private String str; private int i; MultiObject(String str...

冷基
昨天
2
0
组装一台工作游戏两用机

一、配置清单如下: 分类 项目 价格(元) 主板 华硕(ASUS)TUF Z370-PLUS GAMING II 电竞特工 Z370二代 支持9代CPU 1049 CPU 英特尔(Intel) i7 8700K 酷睿六核 盒装CPU处理器 2640 风扇 九...

mbzhong
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部