CS 361 Computer Systems II (Fall 2023)

Prof. Michael S. Kirkpatrick


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.


James Madison University logo


© 2011-2024 Michael S. Kirkpatrick.
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.