This is not the current version of the class.

CS 161: Operating Systems (2021)

Overview

This is an in-depth course in operating systems design and implementation, focusing on multicore operating systems kernels. Operating systems are some of the most complex software artifacts that exist. Kernels abstract the features provided by computer hardware, making those features safer and more convenient to use. This means that OS designers have to understand how hardware works (at least at the level of specifications) and how software works. OS programmers also must become comfortable with navigating in, and contributing to, code bases too large to wholly understand. Most of us can pick up this important skill.

The course uses Chickadee, an operating system based on CS 61 WeensyOS. Chickadee takes advantage of newer hardware, language, and OS design features than many teaching operating systems.

Lecture: Monday/Wednesday, 1:30–2:45pm; see the Canvas site for the lecture Zoom links.
Section: Biweekly mandatory sections (see schedule).

Coursework

Policies

CS 161 labs may be completed in groups, but we expect every student to turn in a separate code repository—even if partners’ code is very similar. Here’s what that means and why we’re doing it.

Partner/group work is an important part of CS 161. Students benefit from talking through their code with partners. There’s less stress and loneliness and easier debugging.

But partner dynamics can hurt too. We want every student to understand the work of every problem set. In partner classes, though, sometimes students shirk work, or trade off (“you do pset 4 and I’ll do pset 5”), which isn’t fair to others and reliably causes problems later. CS 161 has even broken up some relationships! And partner issues force us to put more grading weight on exams.

We seek a happy medium. We want to allow partners but avoid the pathologies of group turnin. So, we ask every student to turn in separate code for each lab. Partners may create this code together, but the code partners turn in must not be wholly identical. A good way to ensure this would be for partners to discuss ideas and code and help each other debug, but type their code individually.

All coursework other than labs must be completed individually.

Collaboration is encouraged on all aspects of the course except exams. You are welcome to communicate with your classmates about strategies for solutions and about specific bugs, and you are welcome to use Internet resources for general information. However:

Do not post your solutions in a public place.

Textbooks and resources

The class will use Ed, not Piazza, to host the discussion board. Go the Canvas page for CS 161 to find the sign-up link for the Ed board!

There are no mandatory texts for CS 161, but we can recommend some helpful texts if you like that sort of thing. They can be rented for Kindle.

There are also extensive online resources on kernel design, architecture, and operating systems development.

And also many online resources (of varying quality and age) on C++. Here are some good ones.

Course staff

Lecturer:
James Mickens: mickens+cs161@g.harvard.edu
Office hours: Monday/Wednesday 2:45pm–3:15pm; Thursday noon–1pm

TFs:
Eric Zhang: ekzhang@college.harvard.edu
Office hours: Wednesday 7pm–9pm

Milan Bhandari: milanbhandari@college.harvard.edu
Office hours: Sunday 11am–noon; Friday 3pm–5pm

Justin Zhu: justinzhu@college.harvard.edu
Office hours: Sunday noon–2pm

James Conant: james_conant@college.harvard.edu
Office hours: Monday 7pm–8 pm; Friday 3pm–5pm

Hong-Long (Kit) Nguyen: honglongnguyen@college.harvard.edu
Office hours: Tuesday 3:30–5:30pm