首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >8086锁销和ASM锁前缀的工作原理

8086锁销和ASM锁前缀的工作原理
EN

Stack Overflow用户
提问于 2022-04-09 09:38:07
回答 1查看 157关注 0票数 2

我是一个程序员,学习汇编语言,以便直观地理解我的代码是如何在CPU上运行的。

在我学习ASM关键字时,google告诉我CPU将在执行以下带有锁前缀的指令时,获得数据总线的独占所有权。

但是在没有任何额外信息的情况下,如何才能独占。

我还发现8086微芯片有一个锁销,它与关键字锁所做的事情完全一样。这可能是实现锁关键字的逻辑电路。

有人能解释一下锁销的机制吗?当锁定引脚处于活动状态时,当试图获取数据总线的使用时,其他CPU将如何被拒绝。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-09 10:02:15

如果唯一的CPU已锁定内存总线,则在此期间,没有任何其他设备能够读取或更改内存内容,甚至连DMA都不能。(或者在共享总线上使用多个CPU,没有缓存,同样的处理。)因此,在加载和存储lock add [di], ax之间根本不可能发生其他内存操作--例如,使其成为原子wrt。任何可能的观察者。(除了连接到总线的逻辑分析器之外,它不算在内。)

半相关的:Can num++ be atomic for 'int num'?描述了lock前缀是如何在可缓存内存的现代CPU上工作的,它不需要总线锁就能提供RMW原子性,只需要在整个过程中保持缓存行。

我们将此称为“缓存锁”;所有现代CPU都以这种方式对对齐locked操作工作,只对跨越两个缓存行之间边界的xchg [mem], ax这样的操作执行昂贵的总线锁。这会损害所有内核的吞吐量,而且成本太高,以至于现代CPU有一种方法可以使这个错误始终存在,而不是其他未对齐的负载/存储,以及它的性能计数器。

有趣的事实:xchg [mem], reg在386和更新版本上有隐式lock语义。(这是不幸的,因为由于性能原因,它无法使用,因为在寄存器不足时,它只是普通的加载/存储)。它不是在286或更早,除非你做了lock xchg。这可能与存在SMP 386系统(具有原始的顺序一致的内存模型)有关。现代x86内存模型适用于486和更高版本的SMP系统。

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

https://stackoverflow.com/questions/71806848

复制
相关文章

相似问题

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