题目重点:先解释稳定状态,再分析消息中的过渡状态与并发。
题意与假设
这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。
- 训练write-back、多核invalidate-based模型;M/O/E/S/I仅为稳定状态概念,具体消息FSM依协议实现。
- cache coherence约束单地址观察,memory consistency还约束跨地址顺序,二者不可混同。
解题路线
- M独占脏,E独占干净,S共享,O持有脏共享权威副本,I无效。O使脏数据可给其他reader共享而不要求立即写回内存;谁负责后续供数/写回由协议所有权定义。
- 新writer需取得独占并确认其他副本失效,再允许写完成。两个核同时GETX由directory/bus序列化,必须有暂态和ack计数,稳定五状态不能覆盖请求在途。
- 验证不变量:同line最多一个有写权限;读不能得到过期值;脏数据必须有负责保存/回写者;消息不丢与资源有序保证进展。不同协议实现可以在非关键路径时延/结构上不同。
手动走一遍
coreA的M line被coreB读取,典型可让A变O、B变S,由A供最新数据,内存仍旧。B随后要写,必须让A及其他S失效并移交责任,不能B直接S→M后任意写。
规模与取舍
按line维护owner/sharer元数据;N核全bit-vector directory每line O(N)bits,稀疏sharer可节省但有溢出与消息取舍。失效消息量依共享者数。
易错点与追问
容易失分的边界
- 把O解释成另一种允许多writer的Modified。
- 只有稳定状态图不证明无死锁,需要暂态、队列和网络依赖。
继续深挖
- owner驱逐但sharer仍在时,脏数据责任怎样转移?
- false sharing为什么即使不同变量也可能大量失效?
技术参考
- gem5一致性消息与状态:技术语义参考,具体题目按本文约定。
