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, 2:15–3:30pm, SEC LL2.224
Section: Biweekly mandatory sections, locations and times TBD
Class participation is mandatory.
Problem sets. There will be five.
These labs will use the Chickadee framework. For some labs, you will also need to engage with (meaning, read code from) other operating systems, such as Linux. Each student has a total of 6 late days.
Students may work with one another. However, each student will turn in individual code. Don’t stress out; see the section on collaboration below.
Papers. In some sections we will discuss OS research papers. You’ll need to read the papers before class and engage in paper discussion on Ed.
Exams. There will be an in-class midterm exam and final exam.
Grading schema. A student's final numerical grade will be calculated using this formula:
Problem set 1: 8%
Problem set 2: 15%
Problem set 3: 15%
Problem set 4: 15%
Problem set 5: 22%
Midterm 1: 8%
Midterm 2: 12%
Participation: 5%
Final letter grades will be assigned using numerical grade bands that span at least 10 points. For example, if your final numerical grade is between 100 and 90, you are guaranteed to get an A or an A-; if your final numerical grade is between 89.9999 and 80, then you are guaranteed to get some kind of B. Grading bands may be more lenient than 10 points, depending on the overall performance of all students. For example, depending on the overall performance of all students, the grades of A and A- might be mapped to the range [100, 87).
Discussion, collaboration, and the exchange of ideas are essential to doing academic work, and to engineering. You are encouraged to collaborate with your classmates as you work on problem sets; for instance, you may have one or more partners who you frequently collaborate with. You are welcome to discuss general strategies for solutions as well as specific bugs and code structure questions. You may also browse Internet resources for general information (though you may not access prior solutions that may or may not be available on the web).
However, the work you turn in must be your own—the result of your own efforts. You should understand your code well enough that given enough time, you could replicate your solution from scratch, without collaboration and with access to only general reference material. Every student will turn in a separate code base, and we will check that these code bases show evidence of individual work.
You must cite any books, articles, online resources, and so forth that helped you with your work, using appropriate citation practices. We also ask you to list the names of students with whom you have collaborated on labs, and briefly describe how you collaborated. (You do not need to list course staff.)
Limitations and caveats:
In addition to this policy, college students are subject to Harvard College’s academic integrity policies as described in the College Handbook for Students.
Generative AI note: Do not ask generative AI tools like ChatGPT or GitHub Copilot to write code for you. Submitting code that was written by or directly inspired by these tools is a violation of the academic integrity policy. Using generative AI tools as a search engine to find and/or summarize relevant technical documents or discussions is allowed, but when you submit your psets, you must check in full transcripts of relevant chats with generative AI tools. We recommend that students use extreme caution when interacting with generative AI models (or random content on the web)--that content may be incorrect, sometimes in subtly ways!
Rationale: Students benefit from talking through their code with partners. There’s less stress and loneliness and easier debugging. But we want every student to understand the work of every problem set—that’s what the class is about.
The class will use Ed to host the discussion board. Go the Canvas page for CS 1610 to find the sign-up link for the Ed board!
There are no mandatory textbooks for CS 1610, 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.
There are also many online resources (of varying quality and age) on C++. Here are some good ones:
Lecturer: James Mickens, mickens+cs161@g.harvard.edu
Office hours: SEC LL2.224, Monday/Wednesday 3:30pm–4:30pm (i.e., immediately after class)
TF: Victoria Kauffman (victoriakauffman@college.harvard.edu)
Office hours: Leverett dining hall, Tuesday/Thursday 8:00pm-9:00pm
TF: Anthony Malysz (anthonymalysz@college.harvard.edu)
Office hours: Eliot dining hall, Sunday 8:00pm-10:00pm
TF: Vikram Singh (vikramsingh@college.harvard.edu)
Office hours: Mather dining hall, Monday 8:00pm--10:00pm
TF: Austin Wilson (amwilson@college.harvard.edu)
Office hours: Winthrop CS Night, Wednesday 8:00pm-10:00pm