Abstraction
Share Memory Abstraction(SMA): 当多个进程无法共享物理存储,只能通过exchange message进行通信时,如何提供一种抽象,让进程感觉就好像在访问一个共享存储。SMA也被称为register,这应该是因为SMA就好像多核系统中,多个cpu的寄存器工作如何就像一个共享寄存器一样。
SMA最直接的应用场景应该就是分布式存储中的副本一致性:从用户访问角度,多个副本如何表现得像一个副本一样。
本章提供了如下几种SMA模型:
- (1,N)regular register:
- (1,N)atomic register:
- (N,N)atomic register:
当然上面三个模型可以根据 fail-stop,fail-silent,fail-recovery,fail-arbitrary格子寅生出不同的算法。
Introducation
4.1.2 Register Overview
Assumption:
- The processes in the system use register for communicating with each other and for storing information.
- Each correct process accesses the registers in a sequential manner.(只有当上一个operation执行完,才会进行下一个operation。如果上一个operation未执行完就crash了,那么下一个operation自然得不到执行了。)
- values written to a particular register are unique.(比如附加时间戳)
Signature and Semantics
事件定义(register——r):
- <r,Read>
- <r,Readreturn | v>
- <r,Write| v>
- <r,WriteReturn>
If a register is accessed by a set of processes one at a time, in a serial manner, and if no process crashes, we define following two properties:(这两个属性会贯穿本章) - Liveness: Every operation eventually completes.
- Safety: Every read operation returns the value written by the last written operation.
Failures
failure是不可预测的,它会在任何时间节点发生,例如在operation invoke 和 operation complete 之间发生,所以对于crash process我们不能保证Liveness。我们思考这样一个问题,当failure发生时,safety会发生什么变化:read operation是返回last correctly written value呢?还是返回crash的written value?其实我们无法判断。不过我们可以认为这样的write和之后的read是“concurrency”的。
Concurrency
当read和write并发是,什么是last value呢?这个问题和failure有点相似。
4.1.3 Completeness and Precedence
如果说operation A precedence operation B,那么 T(completion of A) < T(invoke of B);