If you need to speak to me about course material, please come to
office hours. For other concerns, my availability can be found on
the calendar page. Please check there
before emailing to ask when I can meet.
Course policies (including grading information) is posted in the
CS 361 Syllabus.
Course Description
Concurrent systems—software that supports multiple operations at the same
time—are everywhere. They allow Visa to process billions of transactions per
year accurately, help BitTorrent distribute files efficiently world-wide, and
facilitate modeling climate phenomena. At the same time, their failures have
destroyed equipment ($100,000,000 for the NASA Mars Polar Lander), left millions
of New Yorkers without power for two weeks (2003 blackout), and played a role in
killing people (Toyota and Boeing crashes).
The problems arise when independent pieces of code share data or communicate
in other ways. These interactions lead to behaviors that often cannot be predicted.
There are principles and design patterns that we can apply to make concurrent
systems safer and more reliable, though it’s important to understand the limits of
these techniques.
In this course, we will explore the models used to build and analyze complex
systems software. We will use multiple techniques for exchanging information between
code running on a single machine or across a network. We will also explore techniques
used to prevent data corruption and discuss the drawbacks of these approaches. We will
end with an introduction to foundational concepts in parallel and distributed computing.
Intermediate exploration of modern interrupt-driven computer systems. Explores
models of computation and complex systems, techniques for communication and
synchronization of parallel and concurrent software, and the protocols that make
up the Internet. Prerequisites: Grades of 'C-' or better in CS 240 and CS 261.
Course Objectives
Mastery of this material allows students to develop a more sophisticated
view of computing and the power of high-level software abstractions.
Students who complete this course can expect to meet the following
objectives:
- Write safe and robust C code that uses concurrency and synchronization.
- Accurately assess one's mastery of course material and identify opportunities for improvement.
- Compare and contrast architectures that are commonly used in concurrent systems.
- Interpret and implement UML statechart and sequence diagrams of concurrent systems.
- Make progress toward improving one's technical and interpersonal professional skill set.
- Summarize the relationship between signals and the process life cycle.
- Distinguish the relative merits of various forms of IPC and when to use each.
- Compare and contrast processes and threads as concurrent execution mechanisms.
- Classify network protocols according to their layer and intended purpose.
- Select and combine appropriate synchronization mechanisms for solving advanced problems.
- Distinguish the notions of concurrency and parallelism.
- Explore a modern systems language with integrated concurrency semantics and mechanisms.
- Summarize the key challenges and foundational results of distributed systems.
- Implement a concurrent system based on technical specifications.