An examination of the principles and paradigms associated with the design, implementation, and analysis of distributed systems. Topics include the characterization of distributed system models, remote communication, distributed scheduling, synchronization and mutual exclusion, naming and time, consistency and replication, and fault tolerance. Selected distributed system development environments are discussed in the context of the above topics. One laboratory per week. Prerequisites: CMPSC 280 or CMPSC 440 or permission of the instructor.