Operating systems are a critical and complex piece of software that does the heavy lifting of managing computing devices for other software. It is also one of the few kind of software that has been extensively engineered, studied, refined, debated, and even overhauled for over decades. While one might consider operating systems as a mature software already, its evolution is far from complete with exciting new ideas that keep being proposed.
This course exposes students to the operating systems as a research field and study operating systems, and more broadly computer systems in general, from a design point of view. We will examine different systems in both important historical context and recent research developments. In addition to teaching various system techniques, the objectives of the course also include helping students learn:
This course involves readings on classic and new papers. Topics include OS structure and extension techniques, virtualization, synchronization, communication, file systems, cloud systems, reliability, formal verification, security, and history and experience of systems.
Prerequisites: 601.318/418/618 (Principles of Operating Systems).
This course does not have a required textbook. However, it is useful to use an undergraduate operating systems textbook as a reference, such as the ones recommended in CS 318.
The major material of the course comes from seminal, noteworthy, or representative papers from the literature. Each lecture will have one or two assigned papers to read. You MUST read the required papers before the class, and be prepared to discuss them. In-class questions or quizzes will confirm you do the reading.
For some of the topics, we will also list recommended papers. You are encouraged, but not required, to read those. Students often find it useful to form a reading group to discuss papers together before the class period, and we encourage the practice. The reading load will be heavy. So be sure to allocate enough time for it.
You are required to submit a brief review for each lecture’s reading task. If there are two required papers, you can choose one of them to write a review. You can refer to the provided review template in writing your review. A helpful guide written by Bill Griswold on how to read and critique a research paper is linked here.
I have setup a class blog with each paper to be discussed as a blog post. Reviews and discussions will be comments posted to these posts. You need to submit your reviews as comments by 12pm of each lecture. The benefit of blog-based reviewing is that you can get different perspectives from your peers (comments will be made visible after each class). You are also welcome to submit questions that you would like to be discussed as a comment beforehand. If a paper is too confusing to understand, please write a critique to demonstrate your effort to engage, and hopefully encourage discussion from others who struggled similarly.
The structure of this course is unusual in that there are NO lectures or presentations during the class period. Instead, we will discuss research papers that we will have all read before each class period. Because of this format, class participation is vital to the success of the course. I will lead discussions by asking questions of students at random in class. Note that your answers to these questions will be part of your overall grade.
If you cannot do the reading for a particular class, please contact me. In general, I would prefer students who haven’t done the reading do not come to class. You are allowed three absences but you must consult me if there will be more. I will ask direct questions about the paper and will expect you to be able to answer.
The course syllabus and materials are heavily influenced by the UCSD CSE 221, Harvard CS 261, and UT Austin CS 380L courses. We are particularly indebted to Geoff Voelker (UCSD) for his generous sharing of his lecture notes, which he had carefully crafted and refined for more than 10 years.