Latest Announcements

12/05: Lecture 22 is uploaded
12/03: Lecture 21 is uploaded
11/21: Lecture 20 is uploaded
11/19: Lecture 19 is uploaded
11/14: Lecture 18 is uploaded
11/12: Lecture 17 is uploaded; Homework 5 is posted
10/31: Lecture 16 is uploaded
10/29: Lecture 15 is uploaded
10/24: Lecture 14 is uploaded; Lab 3 overview session scheduled.
10/17: Lecture 13 is uploaded; Midterm exam is next Tuesday 1:30-2:45pm.
10/16: Homework 4 is posted
10/10: Lecture 12 is uploaded
10/08: Lecture 11 is uploaded
10/03: Lecture 10 is uploaded
10/02: Lab 2 overview session scheduled; Homework 3 is posted
10/01: Lecture 9 is uploaded
09/30: Homework 2 is posted
09/26: Lecture 8 is uploaded
09/24: Lecture 7 is uploaded
09/19: Lecture 6 is uploaded
09/17: Lecture 5 is uploaded
09/16: Lab 1 overview session scheduled
09/15: Homework 1 is posted
09/12: Lecture 4 is uploaded
09/10: Lecture 3 is uploaded
09/05: Lecture 2 is uploaded
09/03: Lab 0 overview session scheduled
09/03: Lecture 1 is uploaded
08/20: Course website is up

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 4-5pm, Malone 231 (or by appointment)


Yigong Hu
Office Hours: Tue 4:30-6pm, Thu 4-5:30pm, Malone 122 (ugrad lab)


Parv Saxena
Office Hours: Wed 1-2:30pm, Fri 4-5:30pm, Malone 122 (ugrad lab)

Eric Feldman
Office Hours: Mon 4-5:30pm, Wed 4-5:30pm, Malone 122 (ugrad lab)

Andrew Rojas
Office Hours: Mon 11am-12:30pm, Fri 11am-12:30pm, Malone 122 (ugrad lab)

Staff list (preferred email channel for the course staff)


Lecture: Tuesday/Thursday 01:30pm-02:45pm, Hodson Hall 213
Midterm Exam: October 22, Tuesday 01:30pm-02:45pm, Hodson Hall 213
Final Exam: December 18, Wednesday 9am-12pm, Hosdon Hall 213

Project Discussion Section:

  • Lab 0 Overview — Sept 6, Friday 3-4pm, Malone G33/35
  • Lab 1 Overview — Sept 18, Wednesday 3-4pm, Malone G33/35
  • Lab 2 Overview — Oct 3, Thursday 3-4pm, Malone G33/35
  • Lab 3 Overview — Oct 25, Friday 5-6pm, Malone G33/35
  • Lab 4 Overview — TBD, Malone G33/35



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