前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >面试系列之-MSI协议/MESI协议(JAVA基础)

面试系列之-MSI协议/MESI协议(JAVA基础)

作者头像
用户4283147
发布2023-09-11 15:57:07
4220
发布2023-09-11 15:57:07
举报
文章被收录于专栏:对线JAVA面试对线JAVA面试

MSI协议

多核CPU都有自己的专有高速缓存(一般为L1、L2),以及同一个CPU芯片板上不同CPU内核之间共享的高速缓存(一般为L3)。不同CPU内核的高速缓存中难免会加载同样的数据,那么如何保证数据的一致性呢?这就需要用到缓存一致性协议。

缓存一致性协议的基础版本为MSI协议,也叫作写入失效协议。如果同时有多个CPU要写入,总线会进行串行化,同一时刻只会有一个CPU获得总线的访问权。

MESI协议

缓存行的相容关系

目前主流的缓存一致性协议为MESI写入失效协议,而MESI是MSI协议的扩展。在MESI协议中,每个缓存行(Cache Line)有4种状态,即M、E、S和I(全名是Modified、Exclusive、Shared和Invalid)

1.M:被修改(Modified)

该缓存行的数据只在本CPU的私有高速缓存中进行了缓存,而其他CPU中没有,是被修改过的(Dirty),即与主存中的数据不一致,且没有更新到内存中。该缓存行中的内存需要在未来的某个时间点(允许其他CPU读取主存中相应的数据之前)写回(Write Back)主存。当被写回主存之后,该缓存行的状态会变成独享状态。简单来说,处于Modified状态的缓存行数据只在本CPU中有缓存,且其数据与内存中的数据不一致,数据被修改过。

2.E:独享的(Exclusive)

该缓存行的数据只在本CPU的私有高速缓存中进行了缓存,而其他CPU中没有,缓存行的数据是未被修改过的(Clean),并且与主存中的数据一致。该状态下的缓存行在任何时刻被其他CPU读取之后,其状态将变成共享状态。在本CPU修改了缓存行中的数据后,该缓存行的状态可以变成Modified状态。

3.S:共享的(Shared)

该缓存行的数据可能在本CPU以及其他CPU的私有高速缓存中进行了缓存,并且各CPU私有高速缓存中的数据与主存数据一致(Clean),当有一个CPU修改该缓存行时,其他CPU中该缓存行将被作废,变成无效状态。

4.I:无效的(Invalid)

该缓存行是无效的,可能有其他CPU修改了该缓存行。

MESI状态转换

(1)初始阶段:开始时,缓存行没有加载任何数据,所以它处于“I状态”。

(2)本地写(Local Write)阶段:如果CPU内核写数据到处于“I状态”缓存行,缓存行状态就变成“M状态”。

(3)本地读(Local Read)阶段:如果本地CPU读取处于“I状态”的缓存行,很明显此缓存没有数据给它。此时分两种情况:①其他CPU的高速缓存中也没有此行数据,那么从内存加载数据到此缓存行后,将它设成“E状态”,表示只有“我”有此行数据,其他CPU都没有;②其他CPU的高速缓存有此行数据,就将此缓存行的状态设为“S状态”(注意:处于“M状态”的缓存行,再由本地CPU写入/读出,状态是不会改变的)。

(4)远程读(Remote Read)阶段:假设我们有两个CPU c1和c2,如果c2需要读c1的缓存行内容,c1需要把它的缓存行内容通过主存控制器(Memory Controller)发送给c2,c2接收到后将相应的缓存行状态设为“S状态”。在设置之前,主存要从总线上得到这份数据并保存。

(5)远程写(Remote Write)阶段:其实确切地说不是远程写,而是c2得到c1的数据后,不是为了读,而是为了写。也算是本地写,只是c1也拥有这份数据的拷贝,这该怎么办呢?c2将发出一个RFO(RequestFor Owner)请求,说明它需要拥有这行数据的权限,其他CPU的相应缓存行设为“I状态”,除了它之外,谁也不能动这行数据。这就保证了数据的安全,但处理RFO请求以及设置“I状态”的过程将给写操作带来很大的性能消耗。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-09-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 对线JAVA面试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MSI协议
  • MESI协议
  • 缓存行的相容关系
  • MESI状态转换
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档