CSEP 551, Computer Operating Systems, Winter 2017

Lectures: Thursdays 18:30-21:20 CSE 305

Who Office Hours
Tom Anderson, Instructor
tom at cs.washington.edu
Thursdays, 5:30pm, CSE 305, or by appointment
Antoine Kaufmann, TA
antoinek at cs.washington.edu
By appointment

Course Summary

Summary: The course focuses on the design and implementation of operating systems, with an emphasis on technologies of commercial importance.


Cox, Kaashoek, and Morris, xv6: A Simple UNIX-like Teaching Operating System (available for free)

Operating Systems: Principles and Practice, Second Edition, Thomas Anderson and Michael Dahlin, with Mt. Rainier on the cover. The print version is ISBN-10 0985673524. There is also a Kindle version (free reader apps available for most smartphones), as a four volume set.

Various research papers (listed on the calendar page for each week). For optional additional reading, the ACM SIGOPS Hall of Fame list is the (roughly) forty most important research papers in operating systems and distributed systems.

Note: The two textbooks cover much of the same material, in complementary ways. Both books cover operating systems concepts down to the level of working code. xv6 is much shorter, so it can be terse and hard to follow in places, and it has less comprehensive topic coverage. However, xv6 also includes the code for a complete, working operating system, so it is sometimes more directly useful for some of the project assignments. Where possible I have assigned both, and students are free to read either or both depending on which they find most helpful. Most students will probably find it useful to read OSPP first and then xv6.

Note: xv6 and OSPP use opposite conventions for visual representations of memory. In xv6, memory with smaller addresses start at the bottom of the figure, and in OSPP, at the top.


We will assume a basic knowledge of operating systems concepts (as well as C programming). If you have not had a prior course in operating systems, please read, from Anderson and Dahlin (OSPP): Chapter 1, 2.1-2.3, 3.1-3.3, 4.1-4.5, 6.5, 7.1, 9.5-9.6, 13.2-13.3

Likewise, if you have not read Christensen, The Innovator's Dilemma, please do so. Either edition is ok. Operating system innovations are often driven by hardware trends, and the hardware side of the computer industry is best explained by this book. In particular, we will discuss some of the history of disk drive manufacturing, covered in Chapter 1 of Christensen.

Assignments: Problem Sets and Blogs

There is no midterm or final exam for this course.

There are seven problem sets, spaced roughly evenly throughout the quarter. The problem sets include a few questions based on the reading or the xv6 code, as well as some longer programming assignments that are the majority of the grade. We plan to lightly grade, rather than rigorously and independently test, the programming assignments. We are more interested in whether you understand and can apply the course concepts, versus whether you can prove that you have removed every last bug. If you can’t get your code to work at all, we will give you some credit for a (correct) design sketch.

All assignments must be turned in by the end of the last day of finals, but within that constraint you are permitted two slip weeks – you can turn in any two problem sets up to one week late, without penalty and without prior approval. You may also skip one problem set without penalty (or equivalently, we’ll count it as extra credit). You may skip additional problem sets at a cost of a 0.35 penalty, each, in your final grade. In other words, in order to pass, you need to complete at least three of the assignments. Some of the assignments build on others, and the later ones are harder, so be careful in picking which to skip.

Most weeks have a research paper assigned as reading. I will post a set of discussion questions for each paper. By 4pm before class, you are to post a unique, short comment, observation, or question relative to one of the assigned papers. A few sentences is sufficient. Blog posts can: (i) ask a question about something you didn’t understand about the paper, (ii) answer someone else’s question, (iii) compare the design to some system you know, (iv) argue that the goal of the paper is useless, etc. I plan to read and grade blog posts before class, so posting after 4pm will risk my not counting the post.

Blog posts will also be lightly graded, primarily on whether your post adds to the conversation. The blog posts are collectively equal to one problem set; that is, you can skip them entirely in exchange for doing one extra problem set.

In all aspects of the course, we encourage collaboration. We will leave time in class for a group discussion of possible solutions, to help you get started. You are permitted to discuss the blogs and problem sets, including possible solutions, with anyone. You are also permitted to consult any Internet resource. As far as I know, there are no Internet solution sets available to these problems.

The specific answers, including code for the programming assignments, should be in your own words and not a direct copy.

Getting Started

To get started, follow the directions in the links on the right to set up the build toolchain on your computer (or login to one of the CSE lab machines where the toolchain is already set up). The toolchain is designed to work with both JOS and xv6; our projects are all centered on xv6, but the build environment is the same. Browse the instructions to boot JOS (parts 1 and 2); then follow the instructions to download and boot xv6. NOTE: the JOS and xv6 boot instructions were part of an assignment in 451 last quarter; you do not need to do the 451 assignment, just follow the instructions to get started, then start in on Problem Set 1.

We will use a combination of gitlab and catalyst dropbox for solutions. Create a UW gitlab project, and then pull the xv6 source tree into it. Create project from URL, using


You can then push/pull changes your own changes to this version. Invite Antoine to be a reader of your gitlab repository; he can then see your changes.

For each assignment, e.g., problem set 3, create a file, ps3.txt, to hold question answers and a brief description of your code changes. Then, tag your solution in git, using -a, as ps3, and push. This will allow us to do a simple diff to tell what changes you made to complete the assignment.

In addition, when you are done and have tagged your solution in gitlab, please upload a short screen capture video (e.g., less than one minute) illustrating the code in action, to catalyst.

Anonymous Feedback

Anonymous feedback can be sent to the instructor or TAs using this anonymous feedback form.