1.什么是原子操作
原子本意是不能被进一步分割的最小粒子,而原子操作就意味着不可被中断的一个或一系列操作。
原子操作的常见术语
缓存行:Cache line 缓存的最小操作单位
比较并交换:Compare and Swap。CAS操作需要输入两个数值,一个旧值(期望操作前的值)和一个新值,在操作期间先比较旧值有没有发生变化,如果没有发生变化,才交换成新值,发生了变化则不交换。
CPU流水线:CPU pipeline。CPU流水线的工作发生就像是工业生产上的装配流水线,在CPU中由5~6个不同功能的电路单元组成一条指令处理流水线,然后将一个X86指令分成5-6步后再由这些电路单元分别执行,这样就能实现一个CPU时钟周期完成一条指令,因此提高CPU的运算速度。
内存顺序冲突:Memory order violation。内存顺序冲突一般是假共享引起的,假共享是指多个CPU同时修改同一个缓存行的不同部分而引起其中一个CPU的操作无效,当出现这个内存顺序冲突时,CPU必须清空流水线。
2.处理器如何实现原子操作
32位IA-32处理器使用基于的缓存加锁或总线加锁的方式来实现多处理器之间的原子操作。
首先处理器会自动保证基本的内存操作的原子性。处理器保证从系统内存中读取或者写入一个字节是原子的,意思是当一个处理器读取一个字节时,其他处理器不能访问这个字节的内存地址。
但是复杂的内存操作处理器不能自动保证其原子性,比如跨总线宽度、跨多个缓存行和跨页表的访问。但是,处理器提供总线锁定和缓存锁定两个机制来保证复杂操作的原子性。
- 使用总线锁保证原子性。
第一个机制是通过