MESI问题
来源:2-1 案例环境初始化
![](http://img1.sycdn.imooc.com/user/5aa9cbcc0001810004800480-100-100.jpg)
YoooooooA
2018-03-22
老师,除了invaild状态的其他的三种都支持cpu的读请求,那么图中I状态上蓝线所指的不也支持cpu的本地的读请求吗?这个地方没想明白。。。😓
1回答
-
Jimin
2018-03-22
你好,这个图这样理解,比如当前处于M状态,他有一条 橙色 线,指向到S。橙色线代表的是remote read操作,因此总体就是 当前M状态时,如果发生remote read操作,会变成S状态。不知道这样解释你是否明白了?
顺便从整体上对这里做一下阐述:
在一个典型多核系统中,每个核心都会有自己的缓存,共享主存总线,每个相应的CPU会发出读写请求。
一个缓存除在Invalid状态外都可以满足cpu的读请求,一个invalid的缓存必须从主存中读取(变成S或者E状态)来满足该CPU的读请求。
一个写请求只有在该cpu缓存状态是M或者E状态时才能被执行
如果缓存处于S状态,必须先将其它缓存中该缓存行变成Invalid状态
可以随时将一个非M状态的缓存作废,或者变成Invalid状态,而一个M状态的缓存必须先被写回主存。
一个处于M状态的缓存必须时刻监听所有试图读该缓存相对就主存的操作,这种操作必须在缓存将该缓存行写回主存并将状态变成S状态之前被延迟执行。
一个处于S状态的缓存也必须监听其它缓存使该缓存无效或者独享该缓存的请求,并将该缓存变成无效(Invalid)。
一个处于E状态的缓存也必须监听其它缓存读主存中该缓存行的操作,一旦有这种操作,该缓存行需要变成S状态。
对于M和E状态而言总是精确的,他们在和真正状态是一致的。而S状态可能是非一致的,如果一个缓存将处于S状态的缓存作废了,而另一个缓存实际上可能已经独享了该缓存行,但是该缓存却不会将该缓存行升迁为E状态,这是因为其它缓存不会广播他们作废掉该缓存的通知,同样由于缓存并没有保存该缓存行的copy的数量,因此即使有这种通知没有办法确定自己是否已经独享了该缓存行。
012018-03-22
相似问题