Description
This course is for students who want to hack on operating systems and
more generally learn how they work. Class meetings will cover research
papers (both classic and recent) and readings on operating systems, with
a significant portion of class time devoted to discussion. A crucial
component of the course is the labs. Students will implement the core of
an exokernel-style operating system, called JOS. (JOS was developed for
MIT's 6.828 and has been used in courses at several other schools,
including NYU.)
Prerequisites and suggested background
- We will assume basic systems knowledge, such as an undergraduate
course in operating systems, networking, or distributed systems. An
alternative is significant systems-building experience on a large project.
- The labs assume comfort and fluency in C programming.
- The labs require some assembly programming and provide tutorials.
- If you are planning to take this class, and you do not have all of
fluency in C, some exposure to assembly, and systems-building
experience, that is okay: you will learn these things!
However, you should leave extra time to complete the labs, particularly
at the beginning of the course. As a common example, if you are not
comfortable with C-style pointers, then this item applies to you.
- If you have never had an undergraduate course in systems, or you
are not truly comfortable programming computers, then the course is
probably not for you.
Who should take this course?
PhD students who are interested in systems.
This course satisfies the master's core OS requirement. If you are a
masters student who has had previous exposure to systems (see above),
then this course might be a good way to satisfy the core OS requirement,
provided that you are prepared to challenge yourself.
The work
The class will consist of assigned readings, twice-weekly discussions,
labs, a final exam, and a final project:
- The assigned readings are research papers, and they
should be completed before class.
- The discussions are based on the assigned readings.
The policies page details the
relationship between readings, discussion, and grading. The short
version is: participation is an important component of your grade, but
if you haven't read the paper, you should not show up for the
discussion. (Seriously.) Also, the discussion will involve
cold-calling. Cold-calling here means that
the instructor will ask a question so everyone can think about the
answer, then select a student's name using a shuffled deck of cards, and
then call on that student.
- The labs are a crucial component of this course. You will
implement (the interesting pieces of) a real operating system that will
boot on a PC. The labs are described in more detail here.
- The exam will cover the entire class.
See details here.
- The final project has some flexibility. The default option
is for you to add a significant piece of functionality to JOS,
optionally working
in pairs. However, another option is to build something that is
independent of JOS. The three requirements for this second option are as
follows. The project must (1) have a significant implementation
component, specified by deliverables (2) concern operating systems and
(3) be challenging and potentially research-worthy. For all
projects, you must write a proposal that is accepted by the course
staff.
We will assume that you check the announcements (either on this site or
by RSS) every 24 hours. Also, we will use Piazza and occasionally email
you (for the most urgent communications). You are responsible for
monitoring all three of these media.
A note about the labs
Regardless of whether you have the suggested background, we recommend
that you start the labs long before they are due. The standard advice is
"Start the labs early", but that is not quite right. The best advice, I
think, is "Start the labs on time, but on time is probably much earlier
than you think it is".
Acknowledgments
We are indebted to the staffs of related past courses
at
MIT,
UCLA,
Harvard,
Stanford, and
UT
Austin, and ancestors of these courses. This site relies on software
to generate course Web pages,
developed by Dave Andersen and Nick Feamster.