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).
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
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.