LOCK指令前缀

计算机软件开发 2024-9-21 12:38:13 34 0 来自 中国
Intel® 64 and IA-32 Architectures Software Developer's Manual中的章节LOCK-Assert LOCK$ Signal Prefix中给出LOCK指令的详细表明


LOCK是一个指令前缀,也就是说LOCK会使紧跟在其背面的指令酿成原子指令(atomic instruction)。
LOCK指令前缀只能加在以下这些指令前面
ADD,ADC,AND,BTC,BTR,BTS,CMPXCHG,CMPXCH8B,CMPXCHG16B,DEC,INC,NEG,NOT,OR,SBB,SUB,XOR,XADD,XCHG
总线锁

在多处理惩罚器情况中,CPU提供了在指令实行期间对总线加锁的本事。CPU芯片上有一条引线LOCK,假如汇编语言的步调中在一条指令前面加上前缀“LOCK”,颠末汇编以后的机器代码就是CPU在实行这条指令的时间把引线LOCK的电位拉低,一连到这条指令竣事时放开,从而把总线锁住,如许同一总线上别的CPU就暂时不能通过总线访问内存了,包管了这条指令在多处理惩罚器情况中的原子性。
总线锁这种做法锁定的范围太大了,导致CPU使用率急剧降落,由于使用LOCK#是把CPU和内存之间的通讯锁住了,这使得锁定期间其他处理惩罚器不能利用其内存地点的数据,以是总线锁的开销比力大
缓存锁

从P6系列处理惩罚器开始,假如访问的内存地区已经缓存在处理惩罚器的缓存行中,LOCK#信号不会被发送。它会对CPU缓存中的缓存行举行锁定,在锁定期间,其他CPU不能同时缓存此数据。在修改之后通过缓存同等性协议来包管修改的原子性。这个利用被称为“缓存锁”
什么情况下使用总线锁

当利用的数据不能被缓存在处理惩罚器内部,或利用的数据跨多个缓存行时,也会使用总线锁
由于从P6系列处理惩罚器开始才有缓存锁,以是对于早些处理惩罚器是不支持缓存锁定的,也会使用总线锁
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-11-24 10:43, Processed in 0.161144 second(s), 32 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表