当执行“LOCK”后面的指令时,x86 ASM“LOCK”命令前缀是否会导致所有内核冻结?
我在一篇博客文章中读到了这一点,但它没有意义。我找不到任何东西表明这是否属实。
这是关于锁定该地址的内存总线。Intel 64 和 IA-32 架构软件开发人员手册 - 第 3A 卷:系统编程指南,第 1 部分 http://download.intel.com/design/processor/manuals/253668.pdf告诉我们:
7.1.4 LOCK 操作对内部处理器高速缓存的影响。
对于 Intel486 和 Pentium 处理器,LOCK# 信号始终为
在 LOCK 期间在总线上置位
操作,即使内存区域
被锁定被缓存在
处理器。
对于 P6 和更新的处理器
家庭,如果内存区域是
在 LOCK 操作期间锁定的是
缓存在处理器中
执行 LOCK 操作为
写回存储器并完全
包含在缓存行中,
处理器可能无法断言 LOCK#
公交车上的信号。相反,它会
内部修改内存位置
并允许[其]缓存一致性
机制保证运行
是原子地执行的。这
操作称为“缓存锁定”。
缓存一致性机制
自动阻止两个或多个
具有相同面积的处理器
同时修改内存
该区域的数据。 (强调已添加)
在这里我们了解到,P6 和更新的芯片足够智能,可以确定它们是否真的必须阻塞总线,或者只能依靠智能缓存。我认为这是一个巧妙的优化。
我在我的博客文章中对此进行了更多讨论“锁是怎样锁的? http://www.moserware.com/2008/09/how-do-locks-lock.html"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)