Computer Science 333S:
Distributed Applications

(Spring '97)

Department of Computer Science
School of Engineering and Applied Science
Washington University in St. Louis

Course Description:

This project-based course provides an introduction to fundamental concepts in the design and implementation of distributed applications. Students work alone and in small groups to develop interactive distributed applications from modular software building blocks. Through these projects, a variety of distributed application paradigms are explored, such as producer/consumer applications, distributed pipelines, process control systems, client/server applications, distributed simulation, computer-supported collaborative work, and distributed multiplayer games. Having exposed students to a variety of application domains, the course concludes with a series of projects that introduce basic synchronization primitives and distributed algorithms that are useful in the construction of distributed systems.

Students use a programming environment called The Programmers' Playground that provides graphics tools for configuring distributed applications, as well as for constructing direct-manipulation graphical user interfaces for them. No background in parallel or distributed systems is required.

Credit: 3.0 units, including 1.5 design units and 1.5 engineering science units

Prerequisites: CS241 and C++ programming experience.


The projects are divided into groups. You may work at your own pace, but you need to complete the stated minimum number of projects from each group by the date listed. You may complete additional projects from any group at any time during the semester.
Tutorials (complete these before proceeding with other projects)
  1. Configuring asynchronous systems (2 points)
  2. Distributed Program Visualization (3 points)
  3. Introduction to the Sparcworks Debugger (dbx)

Paradigms I (complete at least two by February 12)
  1. Process Control Paradigm: Syrup Factory (12 points)
  2. Distributed Pipeline Paradigm: Digital Filtering of Medical Images (22/2 points)
  3. Computer-supported Collaborative Work: Shared Spreadsheet (20/2 points)
    with optional extension: iterating spreadsheet for distributed simulation (26/2 points)

Paradigms II (complete at least one by February 26)
  1. Client/Server Paradigm: Stock Market (22/2 points)
  2. Distributed Games: Air Hockey (20/2 points)
    with optional extension: doubles (24/2 points)
    with optional extension: multi-player tournament (30/2 points)

Communication Models (complete at least one by March 26)
  1. Remote Procedure Call (24/2 points)
  2. Distributed Shared Memory (18/2 points)
  3. Data Flow (14 points)

Distributed Algorithms (complete at least two by April 16)
  1. Leader Election (8 points)
  2. Logical Clocks (10 points)
  3. Discrete Event Simulation: Car Wash (20/2 points)
  4. Mutual Exclusion: generalized dining philosophers (10 points)
    with optional extension: drinking philosophers (15/2 points)
  5. Global Snapshot (15/2 points)
  6. Alternating Bit Protocol with a lossy channel (8 points)

Administrative Information

Class Meetings:
Wednesdays and Fridays, 2:00-4:00 in Lopata 401 (the Sun workstation lab). Lecture time is minimal. Most class meetings are devoted to individual help, demonstrations, and design reviews.

Announcements: Please check these periodically.

Lab Manuals:

Ken Goldman, Jolley 512, 935-7542,
Office hours: Mondays and Thursdays 3:40-5:00, and by appointment.

Teaching Assistant:
Todd Rodgers, Jolley 513,
Consulting hours: Thursdays 1:00-2:00 (in Jolley 513 or Lopata 401) and by appointment.
Additional members of the Distributed Programming Environments Group will coordinate specific projects, as noted in the project descriptions.

This is a laboratory course. Your course grade depends upon the number and quality of projects completed. There are no other homeworks or exams. Successful completion of a project entails a working demonstration and a design/code review with the instructor or teaching assistant. Strive for a clean design. Extensive documentation is not necessary.

Point values are assigned to projects based on their level of difficulty. You are free to choose among the projects. However, to ensure a well-rounded exposure to the material and to prevent you from falling behind, the projects are divided into groups, and you must complete a minimum number of projects in each group by a specified date. The workload is expected to average approximately 10 hours per week, but will depend on the number of projects you choose to complete.

To pass the course, you must complete the stated minimum number of projects from each group by the date listed. Beyond this, your course grade will be be determined as follows.

Points EarnedCourse Grade
100 or moreA+

Team Projects:
Projects whose point designations have a "/2" (24/2, for example) may be completed by up to two people. If completed as a team, the two people must share equally in the work and must have identifiable parts of the project that they worked on. Each team member's maximum possible points will be 2/3 of the point value for the project. For example, each team member on a 24 point project can earn maximum of 16 points. Both team members must be present for the demonstration and design/code review.

IMPORTANT NOTE: A given pair of individuals may work together on at most two projects during the semester. Please ask if you find this policy unclear. It would be a shame to lose credit for a lab because you worked with the same person three times.

Home-Grown Projects:
You are encouraged to come up with your own ideas for interesting distributed applications. If you want to implement your ideas as a course project, first check with the instructor. You will need to write a brief project description and negotiate the maximum point value of the project before starting on the implementation.

Ken Goldman,