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. Time
permitting, we will focus on security-related questions. 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 UT.) Starting in fall 2010, this course counts as a diversity
course in Systems (thread 1).
The work
The class will consist of assigned readings, twice-weekly discussions,
labs, a midterm 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 contains detail about 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 some
cold-calling (the exact fraction is TBD). 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 midterm exam will cover the first two-thirds of
the 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, 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. As the semester goes
on, we will post some project ideas in this second category. For all
projects, you must write a proposal that is accepted by the course
staff.
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, that is probably less
okay, but you can always try to take this course and see how it goes.)
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".