首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MESI协议-是什么在原子操作期间将缓存线保持在独占模式?

MESI协议-是什么在原子操作期间将缓存线保持在独占模式?
EN

Stack Overflow用户
提问于 2021-07-24 14:07:22
回答 2查看 72关注 0票数 1

我正在阅读一些关于高速缓存一致性的MESI协议的内容。我已经读取了x86-64中原子操作,例如XCHG在独占模式下访问缓存线。

但是根据该协议,如果另一个内核对该高速缓存线中的存储器位置进行读取或写入,则该高速缓存线可以转变为共享或无效状态。那么,当内核执行原子操作时,这种情况会发生吗?它是如何预防的?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-07-24 14:42:42

拥有该行的CPU核心简单地选择在原子RMW操作完成之前不处理和响应共享或使该行无效的请求。

现代CPU中的详细机制可能是基于微码的:xchg [mem], reg的一个uop可能会执行一种特殊类型的加载,“锁定”该缓存行(一旦它被这个核心L1d独占,如果它还不是),而最后一个uop执行一种特殊类型的存储,它也会“解锁”它,用于这种仅由微码使用的内部锁定机制。

(打开它以分离x86指令锁定和解锁将会造成系统死锁的可能性。将其设置为指令的微代码内部可以确保最大锁保持时间非常低,并且不会被中断所破坏。)

相关:我写了一个关于Can num++ be atomic for 'int num'?上的x86原子RMW操作的更一般的答案

票数 2
EN

Stack Overflow用户

发布于 2021-08-02 03:14:22

除了MESI状态外,所有的(?)高速缓存一致性协议具有在MESI状态之间发生转换时使用的“瞬态”状态。例如,当高速缓存请求S到M转换时,请求高速缓存必须等待,直到所有其它高速缓存(或等效目录)确认它们已使高速缓存线无效,才能准予M状态。在此间隔期间,必须延迟引用临时高速缓存线的其他事务--否则高速缓存将永远不能在其他内核正在读取的高速缓存线上完成“升级”事务。原子操作需要对同一行进行读取和更新,而不允许任何其他代理在事务中间操作。也许实现这一点的最直接方法是在read+write事务期间扩展一个或多个瞬时状态以“保护”高速缓存线。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68507443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档