Latest Announcements

12/07: Lecture 23 is posted
12/05: Lecture 22 is posted
11/29: Lecture 21 and homework 5 are posted
11/28: Lecture 20 is posted
11/27: Homework 4 solution is posted
11/15: Lecture 19 is posted
11/14: Lecture 18 is posted
11/07: Lecture 17 and homework 4 are posted
11/02: Lecture 16 is posted
10/26: Lecture 15 is posted
10/24: Midterm grade and Lecture 14 is posted
10/19: Lecture 13 is posted
10/15: Homework 3 solution is posted
10/12: Midterm review slide is posted
10/09: Lecture 11 and homework 3 are posted
10/07: Homework 2 solution is released
10/05: Lecture 10 is posted
10/03: Lecture 9 is posted
09/27: Lab 1 deadline extended by 1 day
09/27: Lecture 8 and homework 2 are posted
09/26: Lecture 7 is posted
09/21: Lecture 6 is posted
09/19: Lab 1 overview session at 3pm 09/19 in Malone 228
09/18: Lecture 5 is posted
09/14: Lecture 4 is posted
09/11: Lecture 3 and homework 1 are posted
09/06: Lecture 2 is posted. Group request form is created (see Piazza note)
09/04: Lecture 1 is posted
08/30: Welcome the CA team: Guoye, Ying and Dewank!
08/14: Project website is setup
07/14: Course website is setup

Course Overview

This course gives an introduction to the basic concepts and core principles used to structure modern computer operating systems. The goal of the class is to explain those concepts and principles that are likely to survive for many years to come. The course is a departure point for research in operating and distributed systems. Specifically, the course introduces the concepts of processes, concurrency, synchronization, scheduling, multiprogramming, memory management, and file systems.

600.120 (Intermediate Programming), 600.211 (Unix Systems Programming), 600.226 (Data Structures), 600.233 (Computer Systems Fundamentals). This course involves significant kernel programming tasks. You should: 1). be comfortable and fluent in programming in low-level languages (C and x86 assembly in particular); 2). have experiences of developing in UNIX environment.



Ryan Huang
Address: Malone 231
Phone: (410) 516-4522
Office Hours: Tue 4-5pm, Thu 11am-12pm, Malone 231 (or by appointment)

Head CA

Guoye Zhang
Office Hours: Mon, Wed 4:30-6pm, Malone 122 (ugrad lab)


Dewank Pant
Office Hours: Tue 12-1:30pm, Thu 1-2pm Malone 239
Discussion Section: Thu 12-1pm, Malone 228

Ying Liu
Office Hours: Wed, Fri 9:30–11:00am, Malone 239

Staff list


Lecture: Tuesday/Thursday 09:00am-10:15am
Ames Hall 234
Discussion Section: Thursday 12-1pm Malone 228
Midterm Exam: Tuesday Oct. 17th, 09:00am-10:20am Ames Hall 234
Final Exam: Wednesday Dec. 20th, 2pm-5pm Ames Hall 234



Operating Systems: Three Easy Pieces

by Remzi H. Arpaci-Dusseau and Andrea C. Arpaci-Dusseau, available online for free!

Other recommended textbooks:


This course is organized as a series of lectures taught by the instructors, assigned readings, discussion sections, homework, projects, and exams. They are complementary to each other, helping you reinforce learning on the core concepts in operating systems. Questions on examinations will be based on material covered in class, assigned readings, and projects.

Lectures: Core material of the course.
Readings: The textbook and supplementary readings provide references to lectures, and are good preparations before class. But they are not a substitute for the lectures. In other words, you should come to class.
Projects: Five programming assignments, each completed individually or in groups (of no more than 3). They are essential for you to turn the theories you learned into practices.
Homework: Optional homework questions for exam preparation (not to be turned in)
Exams: Midterm examination and a final exam


Your final grade for the course will be based on the following weights:

  • Projects: 50%
  • Midterm: 15%
  • Final exam: 35%

For the programming assignments, there are no partial credits. You must turn in working code.


Unless otherwise noted, all work must be completed individually. Homework assignments (if any) may be discussed, but solutions must be completed individually. Projects may be completed in established groups, and implementation approaches may be discussed across groups, but programming code cannot be shared across groups.
Don’t do it. All students are required to know and adhere to the JHU CS Department Academic Integrity Code and university policies. Failure to do so will result in serious consequences outlined in the policy. Simply stated, do no cheat. The consequences are very high for the time/effort saved.


The course syllabus, lecture and project materials are heavily influenced by UCSD CSE 120 and Stanford CS 140 class. Credits are particularly due to Geoff Voelker (UCSD), Yuanyuan Zhou (UCSD), and David Mazières (Stanford).