fbpx
维基百科

内存一致性模型

記憶體一致性模型描述的是程序在执行过程中記憶體操作正确性的问题。記憶體操作包括读操作和写操作,每一操作又可以用两个时间点界定:发出(Invoke)和响应(Response)。在假定没有流水线的情况下(即单个处理器内指令的执行是按顺序执行的),设系统内共有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)

相关话题

  • 任务并行
  • 面向硬件的内存模型
  • 面向程序员的内存模型

参考文献

  1. Designing Memory Consistency Models For Shared-Memory Multiprocessors,Computer Sciences Technical Report #1198,University of Wisconsin-Madison December 1993,Sarita V. Adve
  2. Distributed Computing,Principles, Algorithms, and Systems. Ajay D. Kshemkalyani University of Illinois at Chicago, Chicago and Mukesh Singhal University of Kentucky, Lexington

外部链接

存储一致性总结 (页面存档备份,存于互联网档案馆

内存一致性模型, 本條目存在以下問題, 請協助改善本條目或在討論頁針對議題發表看法, 此條目包含過多行話或專業術語, 可能需要簡化或提出進一步解釋, 2022年6月24日, 請在討論頁中發表對於本議題的看法, 並移除或解釋本條目中的行話, 此條目含有過多, 重複或不必要的内部链接, 2022年6月24日, 請根据格式指引, 移除重复, 標題链接以及任何与内容无关的链接, 此條目可参照英語維基百科相應條目来扩充, 2022年8月8日, 若您熟悉来源语言和主题, 请协助参考外语维基百科扩充条目, 请勿直接提交机械翻译,. 本條目存在以下問題 請協助改善本條目或在討論頁針對議題發表看法 此條目包含過多行話或專業術語 可能需要簡化或提出進一步解釋 2022年6月24日 請在討論頁中發表對於本議題的看法 並移除或解釋本條目中的行話 此條目含有過多 重複或不必要的内部链接 2022年6月24日 請根据格式指引 移除重复 標題链接以及任何与内容无关的链接 此條目可参照英語維基百科相應條目来扩充 2022年8月8日 若您熟悉来源语言和主题 请协助参考外语维基百科扩充条目 请勿直接提交机械翻译 也不要翻译不可靠 低品质内容 依版权协议 译文需在编辑摘要注明来源 或于讨论页顶部标记 a href Template Translated page html title Template Translated page Translated page a 标签 記憶體一致性模型描述的是程序在执行过程中記憶體操作正确性的问题 記憶體操作包括读操作和写操作 每一操作又可以用两个时间点界定 发出 Invoke 和响应 Response 在假定没有流水线的情况下 即单个处理器内指令的执行是按顺序执行的 设系统内共有N个处理器 每个处理器可发出s n 0 lt n N displaystyle s n 0 lt 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 种可能的执行顺序 記憶體一致性模型描述的就是这些操作可能的执行顺序中哪些是正确的 目录 1 内存一致性模型的研究历史和分类 2 内存一致性模型列表 3 相关话题 4 参考文献 5 外部链接内存一致性模型的研究历史和分类 编辑按照传统冯诺依曼体系结构的计算模型来看 读操作应当返回最近的写操作所写入的结果 但是这里 最近 的含义是比较模糊的 因此必须将概念严格化 于是产生了线性一致性 或称做严格一致性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外部链接 编辑存储一致性总结 页面存档备份 存于互联网档案馆 取自 https zh wikipedia org w index php title 内存一致性模型 amp oldid 75220477, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。