| |
| |
List of Figures | |
| |
| |
Preface | |
| |
| |
| |
Introduction | |
| |
| |
| |
Introduction | |
| |
| |
| |
Distributed Systems versus Parallel Systems | |
| |
| |
| |
Overview of the Book | |
| |
| |
| |
Characteristics of Parallel and Distributed Systems | |
| |
| |
| |
Design Goals | |
| |
| |
| |
Specification of Processes and Tasks | |
| |
| |
| |
Runnable Interface | |
| |
| |
| |
Join Construct in Java | |
| |
| |
| |
Thread Scheduling | |
| |
| |
| |
Problems | |
| |
| |
| |
Bibliographic Remarks | |
| |
| |
| |
Mutual Exclusion Problem | |
| |
| |
| |
Introduction | |
| |
| |
| |
Peterson's Algorithm | |
| |
| |
| |
Lamport's Bakery Algorithm | |
| |
| |
| |
Hardware Solutions | |
| |
| |
| |
Disabling Interrupts | |
| |
| |
| |
Instructions with Higher Atomicity | |
| |
| |
| |
Problems | |
| |
| |
| |
Bibliographic Remarks | |
| |
| |
| |
Synchronization Primitives | |
| |
| |
| |
Introduction | |
| |
| |
| |
Semaphores | |
| |
| |
| |
The Producer-Consumer Problem | |
| |
| |
| |
The Reader-Writer Problem | |
| |
| |
| |
The Dining Philosopher Problem | |
| |
| |
| |
Monitors | |
| |
| |
| |
Other Examples | |
| |
| |
| |
Dangers of Deadlocks | |
| |
| |
| |
Problems | |
| |
| |
| |
Bibliographic Remarks | |
| |
| |
| |
Consistency Conditions | |
| |
| |
| |
Introduction | |
| |
| |
| |
System Model | |
| |
| |
| |
Sequential Consistency | |
| |
| |
| |
Linearizability | |
| |
| |
| |
Other Consistency Conditions | |
| |
| |
| |
Problems | |
| |
| |
| |
Bibliographic Remarks | |
| |
| |
| |
Wait-Free Synchronization | |
| |
| |
| |
Introduction | |
| |
| |
| |
Safe, Regular, and Atomic Registers | |
| |
| |
| |
Regular SRSW Register | |
| |
| |
| |
SRSW Multivalued Register | |
| |
| |
| |
MRSW Register | |
| |
| |
| |
MRMW Register | |
| |
| |
| |
Atomic Snapshots | |
| |
| |
| |
Consensus | |
| |
| |
| |
Universal Constructions | |
| |
| |
| |
Problems | |
| |
| |
| |
Bibliographic Remarks | |
| |
| |
| |
Distributed Programming | |
| |
| |
| |
Introduction | |
| |
| |
| |
InetAddress Class | |
| |
| |
| |
Sockets based on UDP | |
| |
| |
| |
Datagram Sockets | |
| |
| |
| |
DatagramPacket Class | |
| |
| |
| |
Example Using Datagrams | |
| |
| |
| |
Sockets Based on TCP | |
| |
| |
| |
Server Sockets | |
| |
| |
| |
Example 1: A Name Server | |
| |
| |
| |
Example 2: A Linker | |
| |
| |
| |
Remote Method Invocations | |
| |
| |
| |
Remote Objects | |
| |
| |
| |
Parameter Passing | |
| |
| |
| |
Dealing with Failures | |
| |
| |
| |
Client Program | |
| |
| |
| |
Other Useful Classes | |
| |
| |
| |
Problems | |
| |
| |
| |
Bibliographic Remarks | |
| |
| |
| |
Models and Clocks | |
| |
| |
| |
Introduction | |
| |
| |
| |
Model of a Distributed System | |
| |
| |
| |
Model of a Distributed Computation | |
| |
| |
| |
Interleaving Model | |
| |
| |
| |
Happened-Before Model | |
| |
| |
| |
Logical Clocks | |
| |
| |
| |
Vector Clocks | |
| |
| |
| |
Direct-Dependency Clocks | |
| |
| |
| |
Matrix Clocks | |
| |
| |
| |
Problems | |
| |
| |
| |
Bibliographic Remarks | |
| |
| |
| |
Resource Allocation | |
| |
| |
| |
Introduction | |
| |
| |
| |
Specification of the Mutual Exclusion Problem | |
| |
| |
| |
Centralized Algorithm | |
| |
| |
| |
Lamport's Algorithm | |
| |
| |
| |
Ricart and Agrawala's Algorithm | |
| |
| |
| |
Dining Philosopher Algorithm | |
| |
| |
| |
Token-Based Algorithms | |
| |
| |
| |
Quorum-Based Algorithms | |
| |
| |
| |
Problems | |
| |
| |
| |
Bibliographic Remarks | |
| |
| |
| |
Global Snapshot | |
| |
| |
| |
Introduction | |
| |
| |
| |
Chandy and Lamport's Global Snapshot Algorithm | |
| |
| |
| |
Global Snapshots for non-FIFO Channels | |
| |
| |
| |
Channel Recording by the Sender | |
| |
| |
| |
Application: Checkpointing a Distributed Application | |
| |
| |
| |
Problems | |
| |
| |
| |
Bibliographic Remarks | |
| |
| |
| |
Global Properties | |
| |
| |
| |
Introduction | |
| |
| |
| |
Unstable Predicate Detection | |
| |
| |
| |
Application: Distributed Debugging | |
| |
| |
| |
A Token-Based Algorithm for Detecting Predicates | |
| |
| |
| |
Problems | |
| |
| |
| |
Bibliographic Remarks | |
| |
| |
| |
Detecting Termination and Deadlocks | |
| |
| |
| |
Introduction | |
| |
| |
| |
Diffusing Computation | |
| |
| |
| |
Dijkstra and Scholten's Algorithm | |
| |
| |
| |
An Optimization | |
| |
| |
| |
Termination Detection without Acknowledgment Messages | |
| |
| |
| |
Locally Stable Predicates | |
| |
| |
| |
Application: Deadlock Detection | |
| |
| |
| |
Problems | |
| |
| |
| |
Bibliographic Remarks | |
| |
| |
| |
Message Ordering | |
| |
| |
| |
Introduction | |
| |
| |
| |
Causal Ordering | |
| |
| |
| |
Application: Causal Chat | |
| |
| |
| |
Synchronous Ordering | |
| |
| |
| |
Total Order for Multicast Messages | |
| |
| |
| |
Centralized Algorithm | |
| |
| |
| |
Lamport's Algorithm for Total Order | |
| |
| |
| |
Skeen's Algorithm | |
| |
| |
| |
Application: Replicated State Machines | |
| |
| |
| |
Problems | |
| |
| |
| |
Bibliographic Remarks | |
| |
| |
| |
Leader Election | |
| |
| |
| |
Introduction | |
| |
| |
| |
Ring-Based Algorithms | |
| |
| |
| |
Chang-Roberts Algorithm | |
| |
| |
| |
Hirschberg-Sinclair Algorithm | |
| |
| |
| |
Election on General Graphs | |
| |
| |
| |
Spanning Tree Construction | |
| |
| |
| |
Application: Computing Global Functions | |
| |
| |
| |
Problems | |
| |
| |
| |
Bibliographic Remarks | |
| |
| |
| |
Synchronizers | |
| |
| |
| |
Introduction | |
| |
| |
| |
A Simple Synchronizer | |
| |
| |
| |
Application: BFS Tree Construction | |
| |
| |
| |
Synchronizer [alpha] | |
| |
| |
| |
Synchronizer [beta] | |
| |
| |
| |
Synchronizer [gamma] | |
| |
| |
| |
Problems | |
| |
| |
| |
Bibliographic Remarks | |
| |
| |
| |
Agreement | |
| |
| |
| |
Introduction | |
| |
| |
| |
Consensus in Asynchronous Systems (Impossibility) | |
| |
| |
| |
Application: Terminating Reliable Broadcast | |
| |
| |
| |
Consensus in Synchronous Systems | |
| |
| |
| |
Consensus under Crash Failures | |
| |
| |
| |
Consensus under Byzantine Faults | |
| |
| |
| |
Knowledge and Common Knowledge | |
| |
| |
| |
Application: Two-General Problem | |
| |
| |
| |
Problems | |
| |
| |
| |
Bibliographic Remarks | |
| |
| |
| |
Transactions | |
| |
| |
| |
Introduction | |
| |
| |
| |
ACID Properties | |
| |
| |
| |
Concurrency Control | |
| |
| |
| |
Dealing with Failures | |
| |
| |
| |
Distributed Commit | |
| |
| |
| |
Problems | |
| |
| |
| |
Bibliographic Remarks | |
| |
| |
| |
Recovery | |
| |
| |
| |
Introduction | |
| |
| |
| |
Zigzag Relation | |
| |
| |
| |
Communication-Induced Checkpointing | |
| |
| |
| |
Optimistic Message Logging: Main Ideas | |
| |
| |
| |
Model | |
| |
| |
| |
Fault-Tolerant Vector Clock | |
| |
| |
| |
Version End Table | |
| |
| |
| |
An Asynchronous Recovery Protocol | |
| |
| |
| |
Message Receive | |
| |
| |
| |
On Restart after a Failure | |
| |
| |
| |
On Receiving a Token | |
| |
| |
| |
On Rollback | |
| |
| |
| |
Problems | |
| |
| |
| |
Bibliographic Remarks | |
| |
| |
| |
Self-Stabilization | |
| |
| |
| |
Introduction | |
| |
| |
| |
Mutual Exclusion with K-State Machines | |
| |
| |
| |
Self-Stabilizing Spanning Tree Construction | |
| |
| |
| |
Problems | |
| |
| |
| |
Bibliographic Remarks | |
| |
| |
| |
Various Utility Classes | |
| |
| |
Bibliography | |
| |
| |
Index | |