- tags: Computer Systems
Memory Model
Links to this note
Memory Management
tags: Memory Model
C++11 内存模型
tags: C/C++,Memory Model,编程语言内存模型 受新的 Java 内存模型(2004)许多同样的人开始为 C++ 定义一个类似的内存模型,最终在 C++11 中采用。 两个重要方便的差异: C++ 对具有数据竞争的程序不做任何保证 C++ 提供了三种原子性:强同步(顺序一致性),弱同步(内存一致性(coherence))和无同步(“relaxed”,用于隐藏竞争)。 第一点尝试消除对 Java 模型的复杂性需求,“relaxed” 的原子性重新引入 Java 关于定义什么是竞争程序的所有复杂性。结果是C++模型比Java更复杂,但对程序员的帮助更小。
内存一致性(coherence)
tags: Memory Model,一致性 FROM 硬件内存模型: threads in the system must agree about a total order for the writes to a single memory location. That is, threads must agree which writes overwrite other writes. This property is called called coherence. 内存一致性的系统都所有线程都必须接受对一个内存地址所有写入的总顺序。换句话说,所有线程必须同意哪些写入可以覆盖另外的一些写入。
更新 Go 内存模型
tags: Go,Memory Model source: 更新Go内存模型 https://research.swtch.com/gomm
Java 内存模型
tags: Memory Model,Java,编程语言内存模型
内存一致性模型
tags: 一致性,Memory Model 当执行给定程序时,硬件和编译器之间的契约,对编译后后的代码对存储在内存中的数据更改的可见性和一致性。 这种契约称为「内存一致性模型(Memeory Consistency Model)」或仅仅是「内存模型(Memory Model)」。 最初目标是定义程序员编写汇编代码时硬件提供的保证,后来用来定义高级编程语言(如 C++ 或 Java)对该语言编写代码的程序员提供的保证。 例如下面变量都初始为 0 的情况下,线程 1 和 2 都运行在自己专用的处理器上,都运行到完成,这个程序能打印 0 吗? // Thread 1 // Thread 2 x = 1; while(done == 0) { /* loop */ } done = 1; print(x); Memory coherence vs consistency 内存一致性(coherence) 内存顺序一致性(sequential consistency) 硬件 顺序一致性 x86 总存储有序(x86-TSO) ARM/POWER Relaxed Memory Model 弱有序和无数据竞争(DRF) 编程语言内存模型
编程语言内存模型
tags: Memory Model,Programming Language,Computer Systems Programming Language Memory Models 编程语言内存模型 编程语言内存模型回答了并行程序可以依靠什么行为以便它们的线程之间可以共享内存的问题。 首先需要理解原子变量(atomic variable)或原子操作(tomic operation),编程语言模型作为程序员和编译器之间的约定规定了它们之间所需要的额外细节。 硬件、Litmus Tests、Happens Before 和 DRF-SC 程序使用DRF-SC 系统同步指令在多个处理器运行的代码之间创建一种“happens before”的关系。 Thread 1 和 Thread 2 执行 S(a) 同步指令。在这个特定执行中,两条 S(a) 指令建立了从 Thread 1 到 Thread 2 的 happens-before 关系,因此 Thread 1 中的 = W(x)= 发生在 Thread 2 中的 R(x) 之前。
硬件内存模型
tags: Memory Model,Computer Systems Hardware Memory Models 硬件内存模型 内存模型 内存一致性模型