MESI协议硬件级别说明
2017-02-23 23:51:03 0 举报
MESI协议是一种用于多处理器系统中的缓存一致性协议。它通过在缓存中维护共享数据的状态来确保多个处理器之间的数据一致性。MESI协议定义了四种状态:Modified(已修改)、Exclusive(独占)、Shared(共享)和Invalid(无效)。当一个处理器需要读取或写入共享数据时,它会发送请求给其他处理器,并等待它们的响应。如果所有处理器都同意该操作,则该操作将被执行。否则,将采取相应的措施来保持数据的一致性。
作者其他创作
大纲/内容
bucket
高速缓存
未通过或未定级
cache line
指令1
flagS->E->M
线程1释放锁,count=0,owner=null
指令2
指令3
tag
owner=线程1
load
2.1 处理器0想修改变量i的值,需要先发送一条invalidate 消息到总线
总线
否
.class文件
硬件组件写缓存器高速缓存
寄存器
flag
mark word(主要存储锁的数据)
处理器1如果要use 这个变量i,发现flag为i,过期状态,会重新发送read从其他处理器中(或者主内存中,这个要看硬件的实现)读取该变量的最新值
blocked
处理器0
跳转大数据定级页进行定级
stop
suspend/sleep/wait
resume/notify/ notifyAll
处理器0将变量i load到自己高速缓存中,通过index获取哪个bucket;通过tag获取到哪个cache entry;通过偏移量offset在cache line中获取到具体数值将flag = S
1.3 use
无效队列
read
主内存
i=0
写缓存
线程1执行wait()操作
提示不满足购买条件
编译为机器码
处理器1
总线嗅探机制
3.1 处理器0修改变量i,并将flag 置为M,有可能将修改后的值刷新回主内存(这个要看具体的硬件实现)
1.1 read
处理器1修改了某个变量值以后,会强制刷新到高速缓存或者主内存中,并且发送一条消息到总线中去
直接跳转到未支付的订单页
指令
高速指令重排序
是
2.3 处理器0必须接收到所有处理器的invalidate ack后,先将flag设置为E,独占锁,在这个期间,别的处理器不能修改这个变量的值。处理器0也不会给其他处理器返回invalidate ack
硬件组件写缓冲器高速缓存无效队列
1.2 load
用户是否付费
terminated
加锁成功后
总线bus
java静态编译
处理器
Synchronized细化底层原理
写缓存器
用户
线程2
主内存i = 0
waitSet(线程1)
flagS->i
未通过
cache entry
通过
用户24小时是否通过大数据定级
monitor对象
readi= 0
对象头
执行notify操作
lock锁对象
yield/schedule swap
处理器2通过总线嗅探机制,获取到某个变量的值发生了变化,然后会重新从其他处理器的高速缓存或者主内存中读取该变量的值
跳转到不满足购买条件
用户是否有该课程id的未支付订单
写好的代码helloWorld.java文件
entryList
thread was selectedby scheduler
处理器2
立即下单
new Lock()
count计数器
堆
start
Runnable
通过cas进行加锁
class Metadata指向该对象在堆内存的地址
线程1被唤醒,重新进入entryList中争抢锁
对象实例
线程3
进入电商确认订单页
线程1
monitor指针
active
running
JIT动态编译
2.2 处理器1,通过总线嗅探机制获取该变量的invalidate消息,然后将自己高速缓存中的cache entry的flag设置为i(过期),然后向总线返回invalidate ack
NEW
0 条评论
下一页