记忆体一致性模型 描述的是程序在执行过程中记忆体操作正确性的问题。记忆体操作包括读操作和写操作,每一操作又可以用两个时间点界定:发出(Invoke)和响应(Response)。在假定没有流水线的情况下(即单个处理器内指令的执行是按顺序执行的),设系统内共有N个处理器,每个处理器可发出
s
n
(
0
<
n
≤
N
)
{\displaystyle s_{n}(0<n\leq N)}
个记忆体操作(读或写),那么总共有:
(
∑
n
=
1
n
=
N
s
n
)
!
∏
n
=
1
n
=
N
s
n
!
{\displaystyle {\frac {(\sum _{n=1}^{n=N}s_{n})!}{\prod _{n=1}^{n=N}s_{n}!}}}
种可能的执行顺序。记忆体一致性模型描述的就是这些操作可能的执行顺序中哪些是正确的。
内存一致性模型的研究历史和分类
按照传统冯诺依曼体系结构的计算模型来看,读操作应当返回最近的写操作所写入的结果,但是这里“最近”的含义是比较模糊的。因此必须将概念严格化,于是产生了线性一致性 (或称做严格一致性 Strict consistency、原子一致性 Atomic consistency)的概念。但是线性一致性太难实现了,因为这里需要一个全局同步的时钟,于是Leslie Lamport 提出了顺序一致性 (Sequential consistency)的概念,这里全局的时钟变得不再需要,转而需要的是各个处理器局部的时钟,相应的,Maurice Herlihy 和Nir Shavit等人后来又提出了静态一致性 (Quiescent consistency)的概念。
然而,即使是顺序一致性 在实际系统中也是很少使用的,主要是它严格限制了程序的优化执行,强行的使程序在本地处理器上按程序顺序 (program order)执行在大多数情况下是没有必要的。于是在后来的研究中陆续提出了面向硬件的内存模型 (Hardware-centric memory model),其中包含了弱序一致性模型 (WO, Weak-order model),处理器一致性模型 (PC, Processor-consistency model),松弛一致性模型 (RC, Release consistency model)以及一系列相关的派生模型,如TSO一致性模型 (Total store ordering),PSO一致性模型 (Partial Store Ordering)等。使用前面的这些模型对于程序员来说无疑是非常困惑的,因为这要求程序员在编写程序时必须考虑到各种硬件体系结构所对应的不同内存模型,于是后来的研究进一步提出了面向程序员的内存模型 (Programmer-centric model)的概念,主要包括SCNF模型 (Sequntial consistency nomal form)和PL模型 (Properly-Labeled Model)等等。
内存一致性模型列表
线性一致性 (Linearizability)或严格一致性 (Strict consistency):任何对一个内存位置X的读操作,将返回最近一次对该内存位置的写操作所写入的值。
原子一致性 (Atomic consistency):读操作未能立即读到此前最近一次写操作的结果,但多读几次还是获得了正确结果。所有对数据的修改操作都是原子的,不会产生竞态冲突 。
顺序一致性 (Sequential consistency ):(并发程序在多处理器上的)任何一次执行结果都相同,就像所有处理器的操作按照某个顺序执行,各个微处理器的操作按照其程序指定的顺序进行。换句话说,所有的处理器以相同的顺序看到所有的修改。读操作未必能及时得到此前其他处理器对同一数据的写更新。但是各处理器读到的该数据的不同值的顺序是一致的。
缓存一致性 (Cache Coherence)
静态一致性 (Quiescent consistency)
处理器一致性 (Processor consistency)/PRAM一致性 (PRAM consistency,P指pipeline):在一个处理器上完成的所有写操作,将会被以它实际发生的顺序通知给所有其它的处理器;但是在不同处理器上完成的写操作也许会被其它处理器以不同于实际执行的顺序所看到。这反映了网络中不同节点的延迟可能是不相同的。对于双处理器,处理器一致性与顺序一致性是等价的。
释放一致性 (Release consistency ):在对一个共享变量进行普通访问之前,进程在之前所有的获得锁而进行的操作必须成功的完成。在释放一个锁操作之前,进程之前的读和写操作必须已经完成。获得和释放锁的操作必须符合“FIFO一致性”。“释放一致性”仅仅关注被锁住的共享内存内存变量,仅仅只需要将对被锁住的共享变量的修改通知给其它的处理器。C# 的VolatileWrite函数即实现了释放一致性语义。
因果一致性 (Causal consistency )
TSO一致性 (Total store ordering)
PSO一致性 (Partial store ordering)
弱序一致性 (Weak-ordering consistency)
最终一致性 (Eventual consistency)
相关话题
参考文献
Designing Memory Consistency Models For Shared-Memory Multiprocessors,Computer Sciences Technical Report #1198,University of Wisconsin-Madison December 1993,Sarita V. Adve
Distributed Computing,Principles, Algorithms, and Systems. Ajay D. Kshemkalyani University of Illinois at Chicago, Chicago and Mukesh Singhal University of Kentucky, Lexington
外部链接
存储一致性总结 (页面存档备份 ,存于互联网档案馆 )