CS160 - Concurrent Programming and Parallel Systems

Course Abstract

Study of concurrent and parallel systems. Modular structure and design. Interprocess communication, synchronization, failures and persistence, concurrency control, atomic transactions, recovery, language support, distributed interprocess communication. Implementation issues.

Additional Course Information

The course introduces the fundamental concepts behind concurrent systems which are used in: operating systems, networking, real time systems, databases and multimedia systems. Concurrent systems are systems that have activites that happen at the same time. Knowing how to write concurrent programs is increasingly important, whether these programs are stand-alone programs for a single machine system or used in distributed computing systems. Concurrent programs may be written to the POSIX interface standard or Java supports concurrent programs. In this course, we will focus on the POSIX pthreads implementation of these concepts for the programming work. What you learn here can be taken to the Java environment and directly applied.

A colleague once said to me that "once the railroads are built, we need to have people that know how to run them". In fact, most organizations already support networked infrastructures, but there is an increasing demand for people that know how to write programs for these systems that are networked together. So, once the railroads are built (if you'll forgive his analogy) CS160 can be very useful. Companies need programmers who know the principles behind concurrent programming practices and can understand and construct concurrent programs. Writing concurrent programs can be trickier and more challenging that writing conventional programs that do not involve multiple concurrent activities. Despite the programming challenges, students have found this course useful background before taking other electives such as networking, operating systems, and databases. Some students have mentioned that taking the course gave them an advantage over the students that didn't prepare themselves for the other courses by learning this material.

The goal here is to learn to write programs that operate concurrently, first learning how to create concurrent activies, to synchronize them, and to put the pieces together into larger programs effectively so that components of the program operate concurrently. You will learn about the key synchronization methods which are important for programs to be able to cooperate or compete against one another while sharing resources. After we learn the basics, we study programs for distributed systems.

Knowing how to write distributed programs is particularly valuable. This year the package we will use for distributed programming is called PVM. PVM is a useful package to learn because it allows applications to be created that concurrently operate across a cluster of computer systems thus making effective use of multiple CPUs for distributed processing. PVM is used by scientists, engineers and even in business applications to harnass computers for parallel and concurrent processing.

The lecture focuses on the principles behind the concepts of these systems. The labs focus on the programming techniques that are used to write concurrent programs. The course will assign programming assignments where you will take the principles from the course and put them into practice. So, while the programming is essential, fun, and tricky it can be very time consuming (like all programming).


Syllabus and Course information

Syllabus Fall 2003 [new]

Directory of Lecture Notes for CS160

Fall 1998 Sample Midterm

Registrar info/final exam times

A paper by Andrew Birrell summarizes many of the interesting issues we discuss in this course. To read this postscript paper, click here

Programming Assignments

Assignment 1

Reading Assignments given Fall 2003

Chapters 1 and 2 in Bacon.

Chapter 4 Bacon and this link

Chapters 8 and 9 in Bacon.

Chapter 10 and 11 in Bacon.

Chapter 12, 13, 14 in Bacon.

Chapter 15, 16, 18 in Bacon.

Useful Links