Section 4 Concurrent Objects Correctness, Progress and Efficiency

Similar documents
Concurrent Objects and Linearizability

How Hard Is It to Take a Snapshot?

The Wait-Free Hierarchy

Partial Snapshot Objects

Faster than Optimal Snapshots (for a While)

Abstract. are shared by a number of processes which operate in a totally asynchronous and

Time and Space Lower Bounds for Implementations Using k-cas

Algorithms that Adapt to Contention

Fork Sequential Consistency is Blocking

The Space Complexity of Unbounded Timestamps

Fork Sequential Consistency is Blocking

Non-blocking Array-based Algorithms for Stacks and Queues!

Shared Memory. Chapter Model

6.852: Distributed Algorithms Fall, Class 21

Wait-Free Regular Storage from Byzantine Components

The Relative Power of Synchronization Methods

A Consistency Framework for Iteration Operations in Concurrent Data Structures

Solo-Valency and the Cost of Coordination

k-abortable Objects: Progress under High Contention

The Black-White Bakery Algorithm and related bounded-space, adaptive, local-spinning and FIFO algorithms

Concurrent Objects. Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit

ACONCURRENT system may be viewed as a collection of

arxiv: v2 [cs.dc] 13 Nov 2015

Fully-Adaptive Algorithms for Long-Lived Renaming

Universal Constructions that Ensure Disjoint-Access Parallelism and Wait-Freedom

A simple correctness proof of the MCS contention-free lock. Theodore Johnson. Krishna Harathi. University of Florida. Abstract

Lock Oscillation: Boosting the Performance of Concurrent Data Structures

Robust Data Sharing with Key-Value Stores

Unit 6: Indeterminate Computation

DREU Research. Alyssa Byrnes, Graduate Mentor: Edward Talmage, Faculty Mentor: Jennifer Welch August 26, 2015

On the Definition of Sequential Consistency

The Complexity of Renaming

Review of last lecture. Goals of this lecture. DPHPC Overview. Lock-based queue. Lock-based queue

Implementing Shared Registers in Asynchronous Message-Passing Systems, 1995; Attiya, Bar-Noy, Dolev

Nesting-Safe Recoverable Linearizability: Modular Constructions for Non-Volatile Memory

On the Space Complexity of Randomized Synchronization

DISTRIBUTED COMPUTING COLUMN. Stefan Schmid TU Berlin & T-Labs, Germany

AST: scalable synchronization Supervisors guide 2002

A Non-Blocking Concurrent Queue Algorithm

Self Stabilization. CS553 Distributed Algorithms Prof. Ajay Kshemkalyani. by Islam Ismailov & Mohamed M. Ali

On the inherent weakness of conditional primitives

Shared Objects. Shared Objects

Oh-RAM! One and a Half Round Atomic Memory

From Bounded to Unbounded Concurrency Objects and Back

Review of last lecture. Peer Quiz. DPHPC Overview. Goals of this lecture. Lock-based queue

6.852: Distributed Algorithms Fall, Class 12

Simulating Few by Many: k-concurrency via k-set Consensus

Parallélisme. Aim of the talk. Decision tasks. Example: consensus

Anonymous and Fault-Tolerant Shared-Memory Computing

A coded shared atomic memory algorithm for message passing architectures

A Polylogarithmic Concurrent Data Structures from Monotone Circuits

Shared Memory Seif Haridi

A coded shared atomic memory algorithm for message passing architectures

Coded Emulation of Shared Atomic Memory for Message Passing Architectures

Erasure Coding in Object Stores: Challenges and Opportunities

Cache-Aware Lock-Free Queues for Multiple Producers/Consumers and Weak Memory Consistency

Lamport Clocks: Verifying A Directory Cache-Coherence Protocol. Computer Sciences Department

k-abortable Objects: Progress Under High Contention

Non-blocking Array-based Algorithms for Stacks and Queues. Niloufar Shafiei

Mutual Exclusion. 1 Formal problem definitions. Time notion CSE /17/2015. Outline of this lecture:

Generic Proofs of Consensus Numbers for Abstract Data Types

Constant RMR Transformation to Augment Reader-Writer Locks with Atomic Upgrade/Downgrade Support

A Correctness Proof for a Practical Byzantine-Fault-Tolerant Replication Algorithm

Self-stabilizing Byzantine Digital Clock Synchronization

Optimal-Time Adaptive Strong Renaming, with Applications to Counting

The Universality of Consensus

On the Time and Space Complexity of ABA Prevention and Detection

Wait-Free Multi-Word Compare-And-Swap using Greedy Helping and Grabbing

Generalized Lattice Agreement

arxiv: v3 [cs.dc] 17 Feb 2015

Computing with Infinitely Many Processes

arxiv: v8 [cs.dc] 29 Jul 2011

Generic Proofs of Consensus Numbers for Abstract Data Types

Synchronization. Chapter 5

Shared memory model" Shared memory guarantees" Read-write register" Wait-freedom: unconditional progress " Liveness" Shared memory basics"

COUNTING THE NUMBER OF WINNING BINARY STRINGS IN THE 1-DIMENSIONAL SAME GAME. Department of Mathematics Oberlin College Oberlin OH 44074

Adding Networks. 10 King s College Road, Toronto, Canada M5S 3G4 2 Department of Computer Science, Brown University,

Verification of a Concurrent Deque Implementation

Relationships Between Broadcast and Shared Memory in Reliable Anonymous Distributed Systems

On Correctness of Data Structures under Reads-Write Concurrency

Universal Constructions that Ensure Disjoint-Access Parallelism and Wait-Freedom

Temporal Logic of Actions (TLA) (a brief introduction) Shmuel Katz Computer Science Department The Technion

arxiv: v3 [cs.dc] 11 Mar 2016

Linearizability of Persistent Memory Objects

State-Optimal Snap-Stabilizing PIF In Tree Networks

Brewer's Conjecture and the Feasibility of Consistent, Available, Partition-Tolerant Web Services

Ownership of a queue for practical lock-free scheduling

How Live Can a Transactional Memory Be?

Making Fast Atomic Operations Computationally Tractable

We present an algorithm for implementing binary operations (of any type) from unary loadlinked

Self-Stabilizing Distributed Queuing

Concurrent specifications beyond linearizability

how to implement any concurrent data structure

User-defined Functions. Conditional Expressions in Scheme

6.852: Distributed Algorithms Fall, Class 15

Multi-writer Regular Registers in Dynamic Distributed Systems with Byzantine Failures

RESEARCH ARTICLE. A Simple Byzantine Fault-Tolerant Algorithm for a Multi-Writer Regular Register

A class C of objects is universal for some set E of classes if and only if any object in E can be implemented with objects of C (and registers)

Transactions are Back but How Different They Are?

Concurrent Computing. January 21, 2018

Transcription:

Section 4 Concurrent Objects Correctness, Progress and Efficiency CS586 - Panagiota Fatourou 1 Concurrent Objects A concurrent object is a data object shared by concurrently executing processes. Each object has a type, which defines a set of possible values and a set of primitive operations that provide the only means to create and manipulate that object. Concurrent objects have been proposed as building blocks for the construction of more complex multiprocessing systems: Start by using basic objects that are provided by hardware. Successively build more complex concurrent objects from simpler objects. This leads to a system that is simple and wellstructured. So, it is easier to prove that it is correct. CS586 - Panagiota Fatourou 2 1

Basic Concurrent Objects Read/Write Register Stores a value from some set of values and supports two operations: read(r): returns the current value of R without changing its contents, write(r,v): writes v in R and returns <ack>. Test-And-Set Register Stores a value from the set {0,1} and supports two operations: Test-And-Set(R): stores 1 in R and returns the old value of R reset(r): stores 0 in R CS586 - Panagiota Fatourou 3 Basic Concurrent Objects Load-Link, Store-Conditional (LL/SC) Register Stores a value from some set and supports two operations LL(R) και SC(R,v). Each SC(r, ) operation by some process p is associated with the last LL(R) operation executed by p (i.e., each SC by some process p should be preceded by an LL that is associated with the SC). LL(R): returns the value of R (without changing its contents), SC(R,v): stores v in R, if R has not changed since the execution of the LL that is associated with this SC. Compare-And-Swap Register Stores a value from some set and supports two operations: read(r): returns the current value of R without changing its contents, CAS(R,u,v): If the current value of R is u, the contents of R change to v and TRUE is returned. Otherwise, the contents of R do not change and FALSE is returned. CS586 - Panagiota Fatourou 4 2

Basic Concurrent Objects Multi-Writer (MW) Register All processes are allowed to execute update operations to the register Single-Writer (SW) Register Only one process is allowed to execute update operations to the register. Register size A register is of bounded size if the set of values it may store is bounded. In the opposite case, we say that the register size is unbounded. Different machines support different sets of these operations in hardware. The hardware, then, guarantees that these operations are executed atomically. CS586 - Panagiota Fatourou 5 Global State Predicate Evaluation In many problems of distributed computing, some action should take place only if some global predicate evaluates to TRUE. Examples deadlock detection termination detection garbage collection check-pointing & restarting record global state monitoring & debugging record global state requests R 1 allocated Shall I terminate? R allocated 2 requests active unused shared object p record global 1 state passive p 3 X failure execution CS586 - Panagiota Fatourou restart execution 6 from this point 3

Debugging Distributed Algorithms The biggest difficulty in proving that a distributed algorithm is correct is the necessity to argue based on non-consistent versions of the shared variables. Calculating consistent views of the shared variables facilitates the verification of correctness of distributed algorithms. Calculating such consistent views is not however an easy problem. CS586 - Panagiota Fatourou 7 Snapshot Object A snapshot object is a concurrent object that is composed by an array of m components, A 1,, A m, each capable to store a value from some set. The snapshot object supports two operations: UPDATE(i,v): writes v to component A i. SCAN: returns a vector of consistent values, one for each component. Snapshot objects provide consistent views of a set of shared variables given that UPDATE operations may concurrently change the values of these variables. A 1 A 2... A m Snapshot Object A CS586 - Panagiota Fatourou 8 4

Snapshot Objects Single-Writer Snapshot Only process p i is allowed to execute UPDATES on component A i. Multi-Writer Snapshot All processes are allowed to execute UPDATES on every component. Snapshots simplify the task of designing distributed algorithms! They are too complicated to be provided by the hardware. CS586 - Panagiota Fatourou 9 Applications of Snapshots Verification of global predicates Mutual Exclusion [Κatseff ACM STOC 78, Lamport J. of the ACM 86, Dolev & Gafni & Shavit ACM STOC 88]. Concurrent Timestamps [Dolev & Shavit STOC 88 & SIAM J. on Computing (SICOMP) 97]. Simplify the design of concurrent data structures [Aspnes & Herlihy SPAA 90, Herlihy PODC 91]. Simplify the design of other concurrent objects [Vitanyi & Awerbuch - FOCS 86, Bloom PODC 87, Peterson & Burns FOCS 87]. Simplify the design of software transactional memory [Shavit & Touitou - PODC 95, Herlihy & Luchangco & Moir & Scherer - PODC 03, Marathe & Scott - PODC 05]. CS586 - Panagiota Fatourou 10 5

The Problem Can we implement snapshot objects in systems that provide only r/w registers? If yes, how efficient can their implementation be in terms of: Time complexity? Space omplexity? CS586 - Panagiota Fatourou 11 Model Concurrent Execution n processes are executed concurrently Asynchrony Communication via Shared Memory Failures Processes may crash at any point of their execution. A crashed process stops executing and never recovers. CS586 - Panagiota Fatourou 12 6

Implementations of Snapshots from r/w registers Use the registers to store the values of the snapshot components. Provide algorithms to implement SCAN and UPDATE. 1 snapshot Efficiency Step Complexity (SCAN or UPDATE) Maximum number of steps executed by any process in any execution in order to perform an operation. Space Complexity Number (and size) of registers needed. registers 1 m r CS586 - Panagiota Fatourou 13 Correctness and Termination Wait-Freedom Each process finishes the execution of its operation within a bounded number of its own steps. Wait-free algorithms are highly fault-tolerant tolerant! Linearizability Intuitively In each execution α, each SCAN and UPDATE should have the same response as if it has executed serially (or atomically) at some point in its execution interval. This point is called linearization point of the operation. and slightly more formally: For each (parallel) execution α produced by the implementation, there is a serial execution σ of the operations (SCAN and UPDATE) executed in α, s.t.: each operation has the same response in σ as in a, and σ respects the partial order determined by the execution intervals of the operations. CS586 - Panagiota Fatourou 14 7

Linearizability Even more Formally We say that an execution a is linearizable if it is possible to do all of the following: 1. For each completed operation π, to insert a linearization point π somewhere between π s invocation and response in a. 2. To select a subset Φ of the incomplete operations, and for each operation ρ in Φ: to select a response, and to insert a linearization point ρ somewhere after ρ s invocation in a. 3. These operations and responses should be selected and these linearization points should be inserted, so that, in the sequential execution constructed by serially executing each operation at the point that its linearization point has been inserted, the response of each operation is the same as that in a. CS586 - Panagiota Fatourou 15 Linearizability - Examples Example of linearizable execution : UPDATE(Α 1, 1) : ok(a 1 ) : UPDATE(Α 2, 2) : ok(a 2 ) time : SCAN()??? -> > <1, 0> Example of non-linearizable execution : UPDATE(Α 1, 1) : ok(a 1 ) : UPDATE(Α 2, 2) : ok(a 2 ) : SCAN()? Χ Χ?? Χ -> > <0,2< 0,2> time CS586 - Panagiota Fatourou 16 8

Linearizability - Examples A FIFO queue Q supports the following two operations: enq(q,v): add an element with value v as the last element of Q deq(q): deletes and returns the first element of Q In a concurrent FIFO queue, several processes try to apply enq() and deq() operations concurrently. head tail Concurrent FIFO queues can be implemented by simpler concurrent objects, such as Test-And-Set and LL/SC registers. The same is true for other concurrent objects, such as stacks, lists, skip lists, graphs, etc. CS586 - Panagiota Fatourou 17 Linearizable Executions p 1 : enq(q, z) ->y... p p (a) : enq(q, y) 2 2 -> x p1 ->x (b) : enq(q, y) -> y -> NULL (c) (d) -> x CS586 - Panagiota Fatourou 18 9

Linearizable Executions... -> x (a)... -> NULL -> x (b) CS586 - Panagiota Fatourou 19 Non-Linearizable Executions ->y : enq(q, y) (a) ->x... (b) ->y : enq(q, y) -> x (c) CS586 - Panagiota Fatourou 20 10

More Examples - Register Executions : w(r, 0) : r(r) ->1 p 3 : w(r, 0) p 3 : w(r, 1) : r(r)->0 (a) linearizable : w(r, 0) : r(r) ->1 p 3 : w(r, 0) p 3 : w(r, 1) (b) non-linearizable : r(r) ->1 CS586 - Panagiota Fatourou 21 Histories A history H is a finite sequence of operation invocation and response events. A subhistory of H is a subsequence of the events of H. The invocation of an operation is denoted by <p i : op(o, args)>, where O is an object s name, op is an operation name, args denotes a sequence of argument values and p ι is a process name. The response of an operation is denoted by <p i : term(o)->res>, where term is a termination condition, and res is a list of results. A response matches an invocation if their object names agree and their process names agree. complete(h): maximal subsequence of H consisting only of invocations and matching responses. A process subhistory, H P, of a history H is the subsequence of all events in H whose process names are P. An object subhistory, H O, is similarly defined for an object O. A history H is sequential if: The first event of H is an invocation, and Each invocation, except possibly the last one, is immediately followed by a matching response. Each response is immediately followed by an invocation from the same process. A history that is not sequential is concurrent. A history H is well-formed if, for every process p, H p is sequential. Two histories, H and H, are equivalent if for every process p, H p = H p CS586 - Panagiota Fatourou 22 11

Histories - Example ->y : enq(q, z)... : enq(q, y) H: : enq(q, y) : ok(q) : ok(q) : ok(q)->x : ok(q)->y :enq(q,z) complete(h): : enq(q, y) : ok(q) : ok(q) : ok(q)->x : ok(q)->y -> x H p1 : : ok(q) : ok(q)->y :enq(q,z) H p2 : : enq(q, y) : ok(q) : ok(q)->x CS586 - Panagiota Fatourou 23 Partial Order induced by histories A history H induces an irreflexive partial order < H on operations: e 0 < H e 1 if res(e 0 ) precedes inv(e 1 ) in H Informally, < H captures the real time precedence ordering of operations in H. Operations unrelated by < H are said to be concurrent. (a) If H is sequential, < H is a total order. Example ->y : enq(q, y) p -> x 2 < H = {<[ / : ok(q)], [p2/ : ok(q)->x]>, <[ / : ok(q)], [p1/ : ok(q)->y]>, <[ : enq(q, y)/ : ok(q)],[ / : ok(q)->x]> <[ : enq(q, y)/ : ok(q)], [ / : ok(q)->y]> <[ / : ok(q)->x], [ :deq(q)/ : ok(q)->y]> } CS586 - Panagiota Fatourou 24 12

Linearizability defined in terms of Histories A history H is linearizable if it can be extended (by appending zero or more response events) to some history H such that: L 1 : complete(h ) is equivalent to some legal sequential history S, and L 2 : < H < S S is called a linearization of H. Nondeterminism is inherent in the notion of linearizability: 1. There may be more than one extension H satisfying the two conditions, L 1 and L 2. 2. For each extension H, there may be more than one linearization S CS586 - Panagiota Fatourou 25 Properties of Linearizability - Locality A property P of a concurrent system is said to be local if the system as a whole satisfies P whenever each individual object satisfies P. Theorem H is linearizable if and only if, for each object O, H O is linearizable. This theorem has two parts: If part: If for each object O, H 0 is linearizable, then H is linearizable. Only-if part: If H is linearizable, then for each object O, H 0 is linearizable. The only-if part is obvious. The if part requires a proof (see original paper by Herlihy and Wing Proof of Theorem 1). CS586 - Panagiota Fatourou 26 13

Locality Locality is important because it allows concurrent systems to be designed and constructed in a modular fashion. Linearizable objects can be implemented, verified and executed independently. Locality should not taken for granted; alternative correctness properties that have been proposed in the literature are not local. CS586 - Panagiota Fatourou 27 Linearizable implementations An implementation is linearizable if all the executions (histories) it produces are linearizable. In this course, an implementation of a concurrent object is called correct, if it is linearizable. CS586 - Panagiota Fatourou 28 14

Comparison to other correctness conditions Sequential Consistency (Intuitively) In each execution α, each operation should have the same response as if it has executed serially (or atomically). and slightly more formally: For each (parallel) execution α produced by the implementation, there is a serial execution σ of the operations executed in α, s.t., each operation has the same response in σ as in a. for each process p i, if op by p i precedes op by p i then op appears in σ before op. and even more formally: We say that an execution a is sequntially consistent if it is possible to do all of the following: 1. For each completed operation π, to insert a serialization point π. 2. To select a subset Φ of the incomplete operations, and for each operation π in Φ: to select a response for it, and to insert a linearization point π for it. 3. These operations and responses should be selected and these linearization points should be inserted, so that, in the sequential execution constructed by serially executing each operation at the point that its linearization point has been inserted, the response of each operation is the same as that in a. and extremely formally: A history H is sequentially consistent if it can be extended (by appending zero or more response events) to some history H such that complete(h ) is equivalent to some legal sequential history S. CS586 - Panagiota Fatourou 29 Comparison to other correctness conditions : enq(q, y) The above history is sequentially consistent! : enq(q, y) -> y -> y However, it is not linearizable (since should return x instead of y). : enq(q, y) -> y Linearizability is stronger than sequential consistency: Any linearizable execution is sequentially error! consistent! The opposite is not TRUE! CS586 - Panagiota Fatourou 30 15

Comparison to other correctness conditions Sequential consistency is not a local property! : enq(q 1, x) : ok(q 1 ) : enq(q 2, x) : ok(q 2 ) : deq(q 1 ) : ok(q 1 ) ->y H : enq(q 2, y) : ok(q 2 ) : enq(q 1, y) : ok(q 1 ) : deq(q 2 ) : ok(q 2 )-> x not sequentially consistent! : enq(q 1, x) : ok(q 1 ) : deq(q 1 ) H Q1 : enq(q 1, y) : ok(q 1 ) : ok(q 1 ) ->y sequentially consistent! H Q2 : enq(q 2, x) : ok(q 2 ) : enq(q 2, y) : ok(q 2 ) : deq(q 2 ) sequentially consistent! : ok(q 2 )-> x CS586 - Panagiota Fatourou 31 The Problem Can we implement snapshot objects in systems that provide only r/w registers? CS586 - Panagiota Fatourou 32 16

The trivial solution does not work! Assign a register R i to each component Α i. UPDATE(i,v): write(r i,v); SCAN(): Are Read there all wait-free, registers and linearizable return a vector consisting implementations of the of values atomic you snapshot read. objects? Processes Register Values P This algorithm Q is not linearizable! read(r 1 ) read(r 2 ) write(r 1,1) write(r 2,2) R 1 UPDATE(Α 1, 1) UPDATE(Α 2, 2)? Χ Χ?? Χ 0 1 1 R 2 SCAN() -> > <0, < 2> CS586 - Panagiota Fatourou 33 0 0 time 2 Snapshot Implementations from Registers Anderson PODC 90, PODC 93, DISC 91 Afek, Attiya, Dolev, Gafni, Merritt and Shavit PODC 90 + JACM 93 Attiya, Herlihy & Rachman - DISC 92 Attiya & Rachman PODC 93 + SICOMP 98 Israeli & Shaham PODC 92 Israeli, Shaham & Shirazi DISC 93 Inoue, Chen, Masuzawa & Tokura DISC 94 Afek, Stupp & Touitou FOCS 99 Afek, Attiya, Fouren, Stupp & Touitou PODC 99 Attiya & Fouren SICOMP 01 Jayanti PODC 02, STOC 05 Fatourou, Fich & Ruppert - STOC 03 Fatourou & Kallimanis PODC 06, PODC 07 CS586 - Panagiota Fatourou 34 17

A simple implementation using unbounded-size registers Each component, A j, 1 j n, can be updated only by process p j (single-writer snapshot). The implementation uses n registers R 1,.., R n, one for each component. A register R j has been assigned to each component A j. UPDATE operations on A j write only into R j. Each register R j is written only by p i but it can be read by all processes (single-writer registers). Each register R j is big enough to store the following information: val j : the current value of A j tag j : a timestamp used by p j to differentiate the UPDATE operations it initiates view j : a vector of n values, one for each component. This assumption is not realistic (since the registers are too big to be provided by the hardware). However, for the time being, we are only interested to design a simple such algorithm. CS586 - Panagiota Fatourou 35 The UnboundedSnapshot Algorithm UPDATE(v), code for process p i : view := SCAN(); tag := increment p i s tag by 1; write(r i,<v, tag,view>); SCAN, code for process p i : repeatedly read R 1,, R n until: 1. Two sets of reads return the same R j.tag for every j; then, return the vector of values R j.val, 1 j n, returned by the second set of reads, or 2. For some j, three distinct values of R j.tag have been seen; return the vector of values in R j.view associated with the last of the three values read in R j.tag. Step Complexity = O(n 2 ) for SCAN and UPDATE. The implementation uses n SW registers of unbounded size. CS586 - Panagiota Fatourou 36 18

Linearizability Definition: A SCAN operation S returns a consistent vector if, for each component Α i, S returns for Α i the value written by the last UPDATE on Α i for which the linearization point precedes the linearization point of S (or the initial value if such an UPDATE does not exist). To prove that the implementation is linearizable, we have to do the following: assign linearization points to the operations of any execution prove that the linearization point of each operation is within its execution interval, and prove that each SCAN returns a consistent vector CS586 - Panagiota Fatourou 37 The UnboundedSnapshot Algorithm If process j, while performing repeated sets of reads on behalf of a SCAN, ever sees the same register R i with three different tags, then it knows that some UPDATE i is completely contained within the execution interval of the SCAN SCAN S that returns the view field of some UPDATE that writes view in R i and its embedded SCAN register R i. first read of R i by p v 1 second read of R i by p v 2 v 1 third read of R i by p v 3 v 2 p k1 p k2 pk3 p kn SCANS or embedded SCANS...... All p k1,, p kn are simultaneously active. Since we have n processes in the system, the embedded SCAN executed by p kn terminates by evaluating condition (1) of the SCAN code to TRUE. CS586 - Panagiota Fatourou 38 19

The UnboundedSnapshot Algorithm Assignment of Linearization Points UPDATE Operations We insert the linearization point of an UPDATE at the point where its write occurs. SCAN operations We assign linearization points not just to SCANs but also to embedded SCANs. We partition SCANs in two categories: Direct SCANs: those that terminate by evaluating condition (1) to TRUE Indirect SCAN: those that terminate by evaluating condition (2) to TRUE The linearization point of a direct SCAN can be placed anywhere within the end of the first of its last two sets of reads and the beginning of its second. CS586 - Panagiota Fatourou 39 The UnboundedSnapshot Algorithm Linearization points of indirect SCANs By induction on their response events (i.e., we linearize these SCANs one by one, in the order of their response events). 1 3 5 2 4 6 CS586 - Panagiota Fatourou 40 20

The UnboundedSnapshot Algorithm Induction Base: Linearization point of indirect SCAN S which responds first. S returns a vector of values written by an UPDATE U (i.e., this vector has been calculated by the embedded SCAN S of U). The execution interval of U and therefore also of S (which is executed by U) is included in the execution interval of S. S is a direct SCAN (since otherwise, the indirect SCAN that has the first response event would be S and not S). Thus, a linearization point for S has already been assigned. We linearize S at the same place as S. S S S U S CS586 - Panagiota Fatourou 41 The UnboundedSnapshot Algorithm Induction Hypothesis Let S be the indirect SCAN which has the k-th respond event. Assume that we have assigned linearization points to all SCAN operations for which it holds that their response events precede that of S. Induction Step: We assign a linearization point to S. S returns a vector of values written by an UPDATE U (i.e., this vector has been calculated by the embedded SCAN S of U). The execution interval of U and therefore also of S (which is executed by U) is included in the execution interval of S. If S is an indirect SCAN, by induction hypothesis, a linearization point has been assigned to S. The same is TRUE for all direct SCANs. We linearize S at the same place as S. S S S U S CS586 - Panagiota Fatourou 42 21

The UnboundedSnapshot Algorithm Lemma: The linearization point of each SCAN or UPDATE is within its execution interval. Proof: For UPDATES and direct SCANS this is obvious. We prove the claim for indirect SCANS by induction on the order of their response events. Induction Base Recall that the indirect SCAN S with the first response event is linearized at the same point as the direct SCAN S from which it borrows its vector. Moreover, the execution interval of S is included in the execution interval of S. The linearization point of S is in its execution interval Thus, the linearization point of S is in its execution interval. S U S S S CS586 - Panagiota Fatourou 43 The UnboundedSnapshot Algorithm Induction Step: We prove the claim for the indirect SCAN S with the k-th response event. S returns a vector of values written by an UPDATE U (i.e., this vector has been calculated by the embedded SCAN S of U). The execution interval of U and therefore also of S (which is executed by U) is included in the execution interval of S. If S is a direct SCAN, its linearization point is obviously within its execution interval. The same is TRUE, if S is an indirect SCAN (by induction hypothesis since the execution interval of S is included in the execution interval of S, and therefore the response event of S precedes that of S). The linearization point of S is placed at the same point as that of S thus, the linearization point of S is within its execution interval. S S S U S CS586 - Panagiota Fatourou 44 22

The UnboundedSnapshot Algorithm Lemma: In every execution of UnboundedSnapshot, each SCAN operation returns a consistent vector of values. Proof: Obviously true for direct SCANs. For indirect SCANs, the claim will be proved by induction on the order of response events Induction Base: The indirect SCAN S which responds first, is linearized at the same point as the direct SCAN S from which it borrows its vector. Since S returns a consistent vector, the same holds for S. Induction Step: We prove the claim for the indirect SCAN S that has the kth response event. S returns the same vector of values as an embedded SCAN S and is linearized at the same point as S. Moreover, the execution interval of S is within the execution interval of S. If S is direct, it obviously returns a consistent vector. If S is an indirect SCAN, by the induction hypothesis (since the response event of S precedes that of S), it follows that it returns a consistent vector. Thus, S returns a consistent vector. U(1) U(3) U(1) U(4) U(1,1) [1,0,0] U(2,1) [1,1,0] S1 U(1,3) [3,1,0] U(2,4) [3,4,0] U(3,5) [3,4,5] U(3,6) [3,4,6] S2 S3 S4 A1 A2 A3 U(5) U(6) Vals [1,0,0] [1,1,0] [3,1,0] [3,4,0] [3,4,5] [3,4,6] S2 S3 S4 CS586 - Panagiota Fatourou 45 Scans S1 time 23