This is not the current version of the class.

CS 161: Operating Systems (2019)

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, 3–4:15pm, Pierce 301
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, and even larger teams (with instructor permission), 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

Piazza

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

Lecturers: James Mickens, mickens@g.harvard.edu, MD 335
Eddie Kohler, kohler@seas.harvard.edu, MD 327
TFs: Nick Hawke, nhawke@college.harvard.edu
Samuel Hsiang, shsiang@college.harvard.edu
Derek Wang, wangd@college.harvard.edu