面试题答案
一键面试MESI协议基本工作原理
-
缓存行状态:
- 修改(Modified):缓存行中的数据已被修改,与主存中的数据不同。此状态下,缓存行的数据是最新的,且该缓存行是独占的,其他处理器缓存中没有该缓存行的副本。只有处于此状态的缓存行,在需要时会将数据写回主存。
- 独占(Exclusive):缓存行中的数据与主存一致,且其他处理器缓存中没有该缓存行的副本。此时缓存中的数据可以直接提供给处理器使用,若处理器对其进行修改,缓存行状态会变为“修改”。
- 共享(Shared):多个处理器缓存中都有该缓存行的副本,且数据与主存一致。处于共享状态的缓存行可以被多个处理器同时读取,但任何一个处理器要对其进行写操作,必须先将其状态变为“修改”,同时要通知其他处理器将该缓存行状态变为“无效”。
- 无效(Invalid):缓存行中的数据无效,需要从主存或其他处理器缓存中重新获取数据。
-
状态转换:
- 读操作:
- 若缓存行状态为“修改”,直接返回数据给处理器,并保持状态不变。因为“修改”状态的数据是最新的。
- 若为“独占”,直接返回数据,状态仍为“独占”,因为数据是最新且唯一的副本。
- 若为“共享”,也直接返回数据,状态保持“共享”,因为多个处理器可同时读共享数据。
- 若为“无效”,则从主存读取数据到缓存,同时检查其他处理器缓存中是否有该缓存行副本。若没有,缓存行状态变为“独占”;若有,则变为“共享”。
- 写操作:
- 若缓存行状态为“修改”,直接修改缓存数据并保持状态。因为当前缓存数据是最新且独占的。
- 若为“独占”,修改缓存数据并将状态变为“修改”。
- 若为“共享”,首先要通知其他处理器将该缓存行状态变为“无效”,然后修改本地缓存数据,并将状态变为“修改”。
- 若为“无效”,先从主存读取数据到缓存(可能变为“独占”或“共享”,取决于其他处理器缓存情况),然后修改缓存数据并将状态变为“修改”。
- 读操作:
解决缓存一致性问题的方式
- 监听机制:每个处理器缓存不仅存储数据,还监听总线上的通信。当一个处理器对某缓存行进行写操作并要改变其状态时(如从“共享”变为“修改”),会通过总线广播一个消息,告知其他处理器该缓存行已被修改。其他处理器监听到这个消息后,将自己缓存中对应的缓存行状态变为“无效”。这样就保证了其他处理器不会再使用旧数据,从而解决了缓存一致性问题。
- 写回策略与同步:处于“修改”状态的缓存行,在适当的时候(如缓存行被替换、处理器下电等)会将数据写回主存。写回主存时,由于其他处理器缓存中对应缓存行已被标记为“无效”,所以主存中的数据会被更新为最新值。当其他处理器再次需要该数据时,会从主存重新读取,从而保证了数据的一致性。