DSM
本文是mit6.824 Schedule: Spring 2016的第12课,前面课程内容可以在分布式找到,更多详细资料可以到:distributed-system查看。
介绍
在并发编程中,我们需要处理两个关键问题:
线程之间如何通信
线程之间如何同步
通信是指线程之间以何种机制来交换信息,在命令式编程中,线程之间的通信机制有两种:
共享内存
消息传递
我们从通信和同步两个维度来看共享内存和消息传递。
在共享内存的并发模型里,线程之间共享程序的公共状态,线程之间通过写-读内存中的公共状态来隐式进行通信。在消息传递的并发模型里,线程之间没有公共状态,线程之间必须通过明确的发送消息来显式进行通信。
同步是指程序用于控制不同线程之间操作发生相对顺序的机制。在共享内存并发模型里,同步是显式进行的。程序员必须显式指定某个方法或某段代码需要在线程之间互斥执行。在消息传递的并发模型里,由于消息的发送必须在消息的接收之前,因此同步是隐式进行的。
通过上面的介绍我们知道了共享内存是一种隐式的通信手段,需要显示的方法来实现同步。
而在分布式系统中,我们希望能够的是能尽可能的利用普通的机器,来达到并行计算的目标,而distributed shared memory (DSM) 在分布式系统中实现了共享内存,让所有process都共享一个全局地址空间,通过提供简单的api,方便process的访问。
先让我们看下api
其中barrier,acquire和realease用于同步操作,一旦调用barrier等待所有process都到达这个点后才继续执行,acquire和realease则用于锁的获取和释放。
设计
在实现DSM时,主要考虑的两个问题是:
一致性
False Sharing<