The paper proposes a simple protocol that ensures sequential consistency. The protocol assumes that the shared memory abstraction is supported by the local memories of nodes, that can communicate only by exchanging messages through reliable channels. Unlike other sequential consistency protocols, the one proposed here does not rely on a strong synchronization mechanism, such as an atomic broadcast primitive or a central node managing a copy of every shared object. From a methodological point of view, the protocol is built incrementally starting from the very definition of sequential consistency. It has the noteworthy property that a process that issues a write operation never has to wait for other processes. Depending on the current local state, most read operations issued also have the same property.Keywords: Distributed Systems, Distributed Shared Memory, Sequential Consistency.
I. INTRODUCTIONThe definition of a consistency criterion is crucial for the correctness of a multiprocess program [10], [23]. Basically, a consistency criterion defines which value has to be returned when a read operation on a shared object is invoked by a process [11], [14], [18]. The strongest (i.e., most constraining) consistency criterion is atomic consistency [20], also called linearizability [13]. It states that a read returns the value written by the latest preceding write, "latest" referring to real-time occurrence order (concurrent writes being totally ordered). Causal consistency [3], [5] is a weaker criterion, stating that a read does not get an overwritten value. Causal consistency allows concurrent writes; consequently, it is possible that concurrent read operations on the same object get different values. This occurs when those values have been produced by concurrent writes. Other consistency criteria weaker than causal consistency have also been proposed [1], [27]. This paper focuses on sequential consistency [16]. This criterion lies between atomic consistency and causal consistency. Informally, it states that a multiprocess program executes correctly if its results could have been produced by executing that program on a single processor system. This means that an execution is correct if we can totally order its operations in such a way that 1) The order of operations in each process is preserved, and 2) Each read operation obtains the latest previously written value, "latest" referring here to the total order. The difference between atomic consistency and sequential consistency lies in the meaning of the word "latest". This word refers to real-time when we consider atomic consistency, while it refers to a logical time notion when we consider sequential consistency. Namely, the logical time defined by the total order.