
计算机
CPU里lock指令的概况。并发编程里,原子操作对防止多线程访问共享资源时出现竞态条件很关键。lock指令便是用于解决此问题的,其能保证当前CPU核心独占访问内存或缓存中的数据。早期单核系统里,lock指令实现起来比较简单,主要用总线锁阻止其他处理器访问共享资源。但多核处理器和缓存体系出现后,仅靠锁住总线实现同步操作就没那么高效了。于是,现代CPU设计时加入了像MESI(修改、独占、共享、无效)这样的缓存一致性协议,来保证缓存中的数据在多个核心间一致。
2. 缓存及缓存一致性协议概览多核处理器里,一般每个核心都有自身的L1缓存,不过L2和L3缓存可能是共享的。处理器为降低访问内存的延迟,会尽量把数据存于缓存而非频繁访问内存。但这产生了新问题:多个核心可能缓存同一块内存数据,所以需要一种机制保证不同核心缓存数据的一致性。MESI协议是常见的缓存一致性协议,它规定了缓存行的四种状态。MESI协议借助这些状态转换,保证多核系统里各核心缓存数据的一致性。lock指令以这种缓存一致性协议为基础,达成对缓存行的控制。3. lock指令在缓存环境下的实现3.1 总线锁的使用情形在无缓存或者早期架构里,lock指令大多依靠总线锁达成。总线锁就是在执行受锁保护的指令期间,处理器会发出总线锁定信号,别的处理器因此不能访问内存总线,需等此指令执行完才行,如此可保证只有一个核心能访问与修改共享资源。不过,缓存引入后,总线锁的效率就不理想了。因为数据若缓存在处理器的L1或L2缓存里,其他核心的访问可能不直接与内存总线相关。只靠总线锁的话,虽能阻止内存访问,却无法有效控制缓存中的数据。所以,在有缓存的系统里,用总线锁实现同步不但效率低,还容易产生不必要的性能损耗。3.2 总线锁与缓存一致性(MESI)相结合。当存在缓存时,lock指令的实现需更复杂机制处理缓存行的访问与修改。一般而言,处理器会联合MESI协议,借助缓存行锁定确保数据的一致性。比如,处理器执行带lock前缀的指令时,会依MESI协议给其他核心发信号,把缓存行状态设为Invalid(I)。要是其他处理器的缓存行处于Modified(M)状态,这个处理器就得先把缓存行写回内存,再设为Invalid。这样一来,持有锁的处理器就能安全操作缓存行了。这种机制的执行过程如下:这种机制把总线锁与缓存一致性协议相结合,既确保并发操作安全,又防止不必要的总线锁定,进而提升系统整体性能。

etc
Copyright © 2025 IZhiDa.com All Rights Reserved.
知答 版权所有 粤ICP备2023042255号