Preface |
|
xix | |
|
|
1 | (14) |
|
|
1 | (3) |
|
|
4 | (2) |
|
1.3 Overview of Chapters 2-25 |
|
|
6 | (7) |
|
|
13 | (1) |
|
|
14 | (1) |
Part I Synchronous Network Algorithms |
|
15 | (182) |
|
2 Modelling I: Synchronous Network Model |
|
|
17 | (8) |
|
2.1 Synchronous Network Systems |
|
|
17 | (2) |
|
|
19 | (1) |
|
|
20 | (1) |
|
|
20 | (1) |
|
|
21 | (1) |
|
|
21 | (1) |
|
|
22 | (1) |
|
|
23 | (2) |
|
3 Leader Election in a Synchronous Ring |
|
|
25 | (26) |
|
|
25 | (2) |
|
3.2 Impossibility Result for Identical Processes |
|
|
27 | (1) |
|
|
27 | (4) |
|
3.4 An Algorithm with O (n log n) Communication Complexity |
|
|
31 | (4) |
|
3.5 Non-Comparison-Based Algorithms |
|
|
35 | (3) |
|
3.5.1 The TimeSlice Algorithm |
|
|
35 | (1) |
|
3.5.2 The VariableSpeeds Algorithm |
|
|
36 | (2) |
|
3.6 Lower Bound for Comparison-Based Algorithms |
|
|
38 | (6) |
|
3.7 Lower Bound for Non-Comparison-Based Algorithms(*) |
|
|
44 | (1) |
|
|
46 | (1) |
|
|
47 | (4) |
|
4 Algorithms in General Synchronous Networks |
|
|
51 | (30) |
|
4.1 Leader Election in a General Network |
|
|
52 | (5) |
|
|
52 | (1) |
|
4.1.2 A Simple Flooding Algorithm |
|
|
52 | (2) |
|
4.1.3 Reducing the Communication Complexity |
|
|
54 | (3) |
|
|
57 | (4) |
|
|
57 | (1) |
|
4.2.2 A Basic Breadth-First Search Algorithm |
|
|
58 | (2) |
|
|
60 | (1) |
|
|
61 | (2) |
|
4.4 Minimum Spanning Tree |
|
|
63 | (8) |
|
|
63 | (1) |
|
|
64 | (2) |
|
|
66 | (5) |
|
4.5 Maximal Independent Set |
|
|
71 | (5) |
|
|
71 | (1) |
|
4.5.2 A Randomized Algorithm |
|
|
71 | (3) |
|
|
74 | (2) |
|
|
76 | (1) |
|
|
77 | (4) |
|
5 Distributed Consensus with Link Failures |
|
|
81 | (18) |
|
5.1 The Coordinated Attack Problem--Deterministic Version |
|
|
82 | (4) |
|
5.2 The Coordinated Attack Problem--Randomized Version |
|
|
86 | (9) |
|
|
87 | (1) |
|
|
88 | (5) |
|
5.2.3 A Lower Bound on Disagreement |
|
|
93 | (2) |
|
|
95 | (1) |
|
|
95 | (4) |
|
6 Distributed Consensus with Process Failures |
|
|
99 | (62) |
|
|
100 | (2) |
|
6.2 Algorithms for Stopping Failures |
|
|
102 | (14) |
|
|
103 | (2) |
|
6.2.2 Reducing the Communication |
|
|
105 | (3) |
|
6.2.3 Exponential Information Gathering Algorithms |
|
|
108 | (7) |
|
6.2.4 Byzantine Agreement with Authentication |
|
|
115 | (1) |
|
6.3 Algorithms for Byzantine Failures |
|
|
116 | (13) |
|
|
117 | (2) |
|
6.3.2 EIG Algorithm for Byzantine Agreement |
|
|
119 | (4) |
|
6.3.3 General Byzantine Agreement Using Binary Byzantine Agreement |
|
|
123 | (2) |
|
6.3.4 Reducing the Communication Cost |
|
|
125 | (4) |
|
6.4 Number of Processes for Byzantine Agreement |
|
|
129 | (6) |
|
6.5 Byzantine Agreement in General Graphs |
|
|
135 | (4) |
|
6.6 Weak Byzantine Agreement |
|
|
139 | (3) |
|
6.7 Number of Rounds with Stopping Failures |
|
|
142 | (10) |
|
|
152 | (1) |
|
|
153 | (8) |
|
7 More Consensus Problems |
|
|
161 | (36) |
|
|
161 | (16) |
|
|
162 | (1) |
|
|
162 | (2) |
|
|
164 | (3) |
|
7.2 Approximate Agreement |
|
|
177 | (5) |
|
|
182 | (10) |
|
|
182 | (2) |
|
|
184 | (1) |
|
|
185 | (4) |
|
7.3.4 Lower Bound on the Number of Messages |
|
|
189 | (3) |
|
|
192 | (1) |
|
|
192 | (5) |
Part II Asynchronous Algorithms |
|
197 | (38) |
|
8 Modelling II: Asynchronous System Model |
|
|
199 | (36) |
|
|
200 | (6) |
|
8.2 Operations on Automata |
|
|
206 | (6) |
|
|
207 | (5) |
|
|
212 | (1) |
|
|
212 | (3) |
|
8.4 Inputs and Outputs for Problems |
|
|
215 | (1) |
|
8.5 Properties and Proof Methods |
|
|
216 | (12) |
|
8.5.1 Invariant Assertions |
|
|
216 | (1) |
|
|
216 | (2) |
|
8.5.3 Safety and Liveness Properties |
|
|
218 | (3) |
|
8.5.4 Compositional Reasoning |
|
|
221 | (3) |
|
8.5.5 Hierarchical Proofs |
|
|
224 | (4) |
|
|
228 | (1) |
|
8.7 Indistinguishable Executions |
|
|
229 | (1) |
|
|
229 | (1) |
|
|
230 | (1) |
|
|
231 | (4) |
Part IIA Asynchronous Shared Memory Algorithms |
|
235 | (220) |
|
9 Modelling III: Asynchronous Shared Memory Model |
|
|
237 | (18) |
|
9.1 Shared Memory Systems |
|
|
237 | (4) |
|
|
241 | (3) |
|
9.3 Indistinguishable States |
|
|
244 | (1) |
|
9.4 Shared Variable Types |
|
|
244 | (6) |
|
|
250 | (1) |
|
|
251 | (1) |
|
|
251 | (1) |
|
|
251 | (1) |
|
|
252 | (3) |
|
|
255 | (80) |
|
10.1 Asynchronous Shared Memory Model |
|
|
256 | (3) |
|
|
259 | (6) |
|
10.3 Dijkstra's Mutual Exclusion Algorithm |
|
|
265 | (11) |
|
|
265 | (4) |
|
10.3.2 A Correctness Argument |
|
|
269 | (3) |
|
10.3.3 An Assertional Proof of the Mutual Exclusion Condition |
|
|
272 | (2) |
|
|
274 | (2) |
|
10.4 Stronger Conditions for Mutual Exclusion Algorithms |
|
|
276 | (2) |
|
10.5 Lockout-Free Mutual Exclusion Algorithms |
|
|
278 | (16) |
|
10.5.1 A Two-Process Algorithm |
|
|
278 | (5) |
|
10.5.2 An n-Process Algorithm |
|
|
283 | (6) |
|
10.5.3 Tournament Algorithm |
|
|
289 | (5) |
|
10.6 An Algorithm Using Single-Writer Shared Registers |
|
|
294 | (2) |
|
10.7 The Bakery Algorithm |
|
|
296 | (4) |
|
10.8 Lower Bound on the Number of Registers |
|
|
300 | (9) |
|
|
301 | (1) |
|
10.8.2 Single-Writer Shared Variables |
|
|
302 | (1) |
|
10.8.3 Multi-Writer Shared Variables |
|
|
302 | (7) |
|
10.9 Mutual Exclusion Using Read-Modify-Write Shared Variables |
|
|
309 | (17) |
|
|
310 | (1) |
|
|
311 | (8) |
|
|
319 | (3) |
|
10.9.4 A Simulation Proof |
|
|
322 | (4) |
|
10.10 Bibliographic Notes |
|
|
326 | (1) |
|
|
327 | (8) |
|
|
335 | (36) |
|
|
336 | (5) |
|
11.1.1 Explicit Resource Specifications and Exclusion Specifications |
|
|
336 | (1) |
|
11.1.2 Resource-Allocation Problem |
|
|
337 | (2) |
|
11.1.3 Dining Philosophers Problem |
|
|
339 | (2) |
|
11.1.4 Restricted Form of Solutions |
|
|
341 | (1) |
|
11.2 Nonexistence of Symmetric Dining Philosophers Algorithms |
|
|
341 | (3) |
|
11.3 Right-Left Dining Philosophers Algorithms |
|
|
344 | (10) |
|
|
344 | (2) |
|
11.3.2 The Basic Algorithm |
|
|
346 | (3) |
|
|
349 | (5) |
|
11.4 Randomized Dining Philosophers Algorithm(*) |
|
|
354 | (13) |
|
|
354 | (3) |
|
|
357 | (10) |
|
|
367 | (1) |
|
|
367 | (4) |
|
|
371 | (26) |
|
|
372 | (4) |
|
12.2 Agreement Using Read/Write Shared Memory |
|
|
376 | (11) |
|
|
376 | (1) |
|
|
376 | (1) |
|
12.2.3 Bivalent Initializations |
|
|
377 | (1) |
|
12.2.4 Impossibility for Wait-Free Termination |
|
|
378 | (5) |
|
12.2.5 Impossibility for Single-Failure Termination |
|
|
383 | (4) |
|
12.3 Agreement Using Read-Modify-Write Shared Memory |
|
|
387 | (1) |
|
12.4 Other Types of Shared Memory |
|
|
388 | (1) |
|
12.5 Computability in Asynchronous Shared Memory Systems(*) |
|
|
389 | (2) |
|
|
391 | (1) |
|
|
392 | (5) |
|
|
397 | (58) |
|
13.1 Definitions and Basic Results |
|
|
398 | (22) |
|
13.1.1 Atomic Object Definition |
|
|
398 | (10) |
|
13.1.2 A Canonical Wait-Free Atomic Object Automation |
|
|
408 | (3) |
|
13.1.3 Composition of Atomic Objects |
|
|
411 | (1) |
|
13.1.4 Atomic Objects versus Shared Variables |
|
|
411 | (8) |
|
13.1.5 A Sufficient Condition for Showing Atomicity |
|
|
419 | (1) |
|
13.2 Implementing Read-Modify-Write Atomic Objects in Terms of Read/Write Variables |
|
|
420 | (1) |
|
13.3 Atomic Snapshots of Shared Memory |
|
|
421 | (13) |
|
|
422 | (1) |
|
13.3.2 An Algorithm with Unbounded Variables |
|
|
423 | (5) |
|
13.3.3 An Algorithm with Bounded Variables(*) |
|
|
428 | (6) |
|
13.4 Read/Write Atomic Objects |
|
|
434 | (15) |
|
|
434 | (1) |
|
13.4.2 Another Lemma for Showing Atomicity |
|
|
434 | (2) |
|
13.4.3 An Algorithm with Unbounded Variables |
|
|
436 | (4) |
|
13.4.4 A Bounded Algorithm for Two Writers |
|
|
440 | (7) |
|
13.4.5 An Algorithm Using Snapshots |
|
|
447 | (2) |
|
|
449 | (1) |
|
|
450 | (5) |
Part IIB Asynchronous Network Algorithms |
|
455 | (278) |
|
14 Modelling IV: Asynchronous Network Model |
|
|
457 | (18) |
|
14.1 Send/Receive Systems |
|
|
457 | (9) |
|
|
458 | (1) |
|
14.1.2 Send/Receive Channels |
|
|
458 | (6) |
|
14.1.3 Asynchronous Send/Receive Systems |
|
|
464 | (1) |
|
14.1.4 Properties of Send/Receive Systems with Reliable FIFO Channels |
|
|
464 | (2) |
|
14.1.5 Complexity Measures |
|
|
466 | (1) |
|
|
466 | (3) |
|
|
466 | (1) |
|
|
467 | (1) |
|
14.2.3 Asynchronous Broadcast Systems |
|
|
468 | (1) |
|
14.2.4 Properties of Broadcast Systems with Reliable Broadcast Channels |
|
|
468 | (1) |
|
14.2.5 Complexity Measures |
|
|
469 | (1) |
|
|
469 | (2) |
|
|
469 | (1) |
|
|
470 | (1) |
|
14.3.3 Asynchronous Multicast Systems |
|
|
471 | (1) |
|
|
471 | (1) |
|
|
471 | (4) |
|
15 Basic Asynchronous Network Algorithms |
|
|
475 | (56) |
|
15.1 Leader Election in a Ring |
|
|
475 | (20) |
|
|
476 | (6) |
|
|
482 | (1) |
|
15.1.3 The Peterson Leader-Election Algorithm |
|
|
482 | (4) |
|
15.1.4 A Lower Bound on Communication Complexity |
|
|
486 | (9) |
|
15.2 Leader Election in an Arbitrary Network |
|
|
495 | (1) |
|
15.3 Spanning Tree Construction, Broadcast and Convergecast |
|
|
496 | (5) |
|
15.4 Breadth-First Search and Shortest' Paths |
|
|
501 | (8) |
|
15.5 Minimum Spanning Tree |
|
|
509 | (14) |
|
|
509 | (1) |
|
15.5.2 The Synchronous Algorithm: Review |
|
|
510 | (1) |
|
15.5.3 The GHS Algorithm: Outline |
|
|
511 | (2) |
|
|
513 | (4) |
|
|
517 | (2) |
|
15.5.6 Complexity Analysis |
|
|
519 | (2) |
|
15.5.7 Proving Correctness for the GHS Algorithm |
|
|
521 | (1) |
|
15.5.8 A Simpler "Synchronous" Strategy |
|
|
522 | (1) |
|
15.5.9 Application to Leader Election |
|
|
523 | (1) |
|
|
523 | (1) |
|
|
524 | (7) |
|
|
531 | (34) |
|
|
532 | (3) |
|
16.2 The Local Synchronizer |
|
|
535 | (6) |
|
16.3 The Safe Synchronizer |
|
|
541 | (5) |
|
16.3.1 Front-End Automata |
|
|
542 | (2) |
|
|
544 | (1) |
|
16.3.3 The Safe Synchronizer |
|
|
544 | (1) |
|
|
545 | (1) |
|
16.4 Safe Synchronizer Implementations |
|
|
546 | (7) |
|
16.4.1 Synchronizer Alpha |
|
|
546 | (1) |
|
|
547 | (1) |
|
16.4.3 Synchronizer Gamma |
|
|
548 | (5) |
|
|
553 | (2) |
|
|
553 | (1) |
|
16.5.2 Breadth-First Search |
|
|
554 | (1) |
|
|
554 | (1) |
|
16.5.4 Broadcast and Acknowledgment |
|
|
555 | (1) |
|
16.5.5 Maximal Independent Set |
|
|
555 | (1) |
|
|
555 | (5) |
|
|
560 | (1) |
|
|
560 | (5) |
|
17 Shared Memory versus Networks |
|
|
565 | (26) |
|
17.1 Transformations from the Shared Memory Model to the Network Model |
|
|
566 | (16) |
|
|
566 | (1) |
|
17.1.2 Strategies Assuming No Failures |
|
|
567 | (8) |
|
17.1.3 An Algorithm Tolerating Process Failures |
|
|
575 | (5) |
|
17.1.4 An Impossibility Result for n/2 Failures |
|
|
580 | (2) |
|
17.2 Transformations from the Network Model to the Shared Memory Model |
|
|
582 | (4) |
|
17.2.1 Send/Receive Systems |
|
|
583 | (2) |
|
|
585 | (1) |
|
17.2.3 Impossibility of Agreement in Asynchronous Networks |
|
|
586 | (1) |
|
|
586 | (1) |
|
|
587 | (4) |
|
|
591 | (26) |
|
18.1 Logical Time for Asynchronous Networks |
|
|
591 | (5) |
|
18.1.1 Send/Receive Systems |
|
|
592 | (2) |
|
|
594 | (2) |
|
18.2 Adding Logical Time to Asynchronous Algorithms |
|
|
596 | (4) |
|
18.2.1 Advancing the Clock |
|
|
597 | (1) |
|
18.2.2 Delaying Future Events |
|
|
598 | (2) |
|
|
600 | (10) |
|
|
600 | (4) |
|
|
604 | (2) |
|
18.3.3 Simulating a Single State Machine |
|
|
606 | (4) |
|
18.4 Transforming Real-Time Algorithms to Logical-Time Algorithms(*) |
|
|
610 | (2) |
|
|
612 | (1) |
|
|
612 | (5) |
|
19 Global Snapshots and Stable Properties |
|
|
617 | (58) |
|
19.1 Termination-Detection for Diffusing Algorithms |
|
|
618 | (7) |
|
|
618 | (1) |
|
19.1.2 The DijkstraScholten Algorithm |
|
|
619 | (6) |
|
19.2 Consistent Global Snapshots |
|
|
625 | (11) |
|
|
625 | (2) |
|
19.2.2 The Chandy-Lamport Algorithm |
|
|
627 | (5) |
|
|
632 | (4) |
|
|
636 | (1) |
|
|
637 | (4) |
|
20 Network Resource Allocation |
|
|
641 | (28) |
|
|
641 | (12) |
|
|
641 | (2) |
|
20.1.2 Simulating Shared Memory |
|
|
643 | (1) |
|
20.1.3 Circulating Token Algorithm |
|
|
643 | (3) |
|
20.1.4 An Algorithm Based on LogicalTimeME Algorithm |
|
|
646 | (3) |
|
20.1.5 Improvements to the LogicalTimeME Algorithm |
|
|
649 | (4) |
|
20.2 General Resource Allocation |
|
|
653 | (11) |
|
|
653 | (1) |
|
20.2.2 Coloring Algorithm |
|
|
654 | (1) |
|
20.2.3 Algorithms Based on Logical Time |
|
|
655 | (1) |
|
20.2.4 Acyclic Digraph Algorithm |
|
|
656 | (2) |
|
20.2.5 Drinking Philosophers(*) |
|
|
658 | (6) |
|
|
664 | (1) |
|
|
664 | (5) |
|
21 Asynchronous Networks with Process Failures |
|
|
669 | (22) |
|
|
670 | (1) |
|
21.2 Impossibility of Agreement in the Presence of Faults |
|
|
671 | (1) |
|
21.3 A Randomized Algorithm |
|
|
672 | (5) |
|
|
677 | (4) |
|
|
681 | (1) |
|
21.6 Approximate Agreement |
|
|
682 | (2) |
|
21.7 Computability in Asynchronous Networks(*) |
|
|
684 | (1) |
|
|
685 | (1) |
|
|
686 | (5) |
|
|
691 | (42) |
|
|
692 | (1) |
|
|
693 | (4) |
|
22.3 Alternating Bit Protocol |
|
|
697 | (6) |
|
22.4 Bounded Tag Protocols Tolerating Reordering |
|
|
703 | (12) |
|
22.4.1 Impossibility Result for Reordering and Duplication |
|
|
704 | (2) |
|
22.4.2 A Bounded Tag Protocol Tolerating Loss and Reordering |
|
|
706 | (6) |
|
22.4.3 Nonexistence of Efficient Protocols Tolerating Loss and Reordering |
|
|
712 | (3) |
|
|
715 | (13) |
|
22.5.1 A Simple Impossibility Result |
|
|
716 | (2) |
|
22.5.2 A Harder Impossibility Result |
|
|
718 | (3) |
|
22.5.3 A Practical Protocol |
|
|
721 | (7) |
|
|
728 | (1) |
|
|
729 | (4) |
Part III Partially Synchronous Algorithms |
|
733 | (96) |
|
23 Partially Synchronous System Models |
|
|
735 | (38) |
|
|
736 | (8) |
|
|
736 | (5) |
|
|
741 | (3) |
|
23.2 General Timed Automata |
|
|
744 | (12) |
|
|
745 | (6) |
|
23.2.2 Transforming MMT Automata into General Timed Automata |
|
|
751 | (3) |
|
|
754 | (2) |
|
23.3 Properties and Proof Methods |
|
|
756 | (12) |
|
23.3.1 Invariant Assertions |
|
|
757 | (2) |
|
23.3.2 Timed Trace Properties |
|
|
759 | (1) |
|
|
760 | (8) |
|
23.4 Modelling Shared Memory and Network Systems |
|
|
768 | (1) |
|
23.4.1 Shared Memory Systems |
|
|
768 | (1) |
|
|
768 | (1) |
|
|
769 | (1) |
|
|
770 | (3) |
|
24 Mutual Exclusion with Partial Synchrony |
|
|
773 | (22) |
|
|
773 | (1) |
|
24.2 A Single-Register Algorithm |
|
|
774 | (10) |
|
24.3 Resilience to Timing Failures |
|
|
784 | (4) |
|
24.4 Impossibility Results |
|
|
788 | (1) |
|
24.4.1 A Lower Bound on the Time |
|
|
788 | (1) |
|
24.4.2 Impossibility Result for Eventual Time Bounds(*) |
|
|
789 | (1) |
|
|
790 | (1) |
|
|
791 | (4) |
|
25 Consensus with Partial Synchrony |
|
|
795 | (34) |
|
|
795 | (1) |
|
|
796 | (2) |
|
|
798 | (5) |
|
|
798 | (3) |
|
|
801 | (2) |
|
25.4 An Efficient Algorithm |
|
|
803 | (7) |
|
|
803 | (2) |
|
|
805 | (1) |
|
25.4.3 Liveness and Complexity |
|
|
806 | (4) |
|
25.5 A Lower Bound Involving the Timing Uncertainty(*) |
|
|
810 | (8) |
|
|
818 | (5) |
|
25.6.1 Synchronous Processes, Asynchronous Channels(*) |
|
|
818 | (1) |
|
25.6.2 Asynchronous Processes, Synchronous Channels(*) |
|
|
819 | (1) |
|
25.6.3 Eventual Time Bounds(*) |
|
|
819 | (4) |
|
|
823 | (1) |
|
|
823 | (1) |
|
|
824 | (5) |
Bibliography |
|
829 | (28) |
Index |
|
857 | |