This course is an in-depth study of important concepts and techniques found in modern computer operating systems. The main objective is to turn operating systems from "magical black boxes" that somehow make computers work to well-understood software systems that you can debug, dissect, improve or even design from scratch.
To this end, we will consider operating system design and implementation along four main dimensions, namely, services, abstractions, architectures and algorithms: services that a typical operating system should provide to user applications, abstractions that operating systems expose in order to provide these services, and the different software architectures and algorithms that they internally use to implement those abstractions.
The course takes an in-depth look at classical OS issues such as virtual memory, file systems, networking, multiprocessor support, isolation, security and scalability. We will also take an introductory look at some of the more recent trends in operating systems research and practice such as virtual machines, advanced file systems, etc. Textbook readings are supplemented, where appropriate, by papers from the research literature.
An important part of the course is the case study of an educational, but real, operating system called JOS. Students study the source code for this operating system, and do programming exercises and projects that involve modifying JOS and implementing new features in it. JOS provides skeleton code for much of the less interesting components of the OS, allowing you to focus on key implementation details. In addition, as JOS' design philosophy and architecture is significantly different from conventional operating systems such as Linux and Windows, its study will help you see (and think about) operating systems from a very different perspective.
An undergraduate course in operating systems and a working knowledge of the C language are assumed.
This course will consist of two parts. In Part 1, classical operating systems concepts are covered, using Linux as the concrete example, and students are expected to do programming assignments where they implement these concepts in an instructional operating system, called JOS.
In Part 2, we will introduce more advanced topics such as alternative operating system architectures or security issues in modern OSes. Paper reading and analysis will be an integral aspect of this component of the class. This part, therefore, serves two purposes: 1) to introduce students to some advanced issues that can be potentially useful in their PhD research, and 2) to improve paper reading skills that are essential to your success as a graduate student.
Lab assignments are explained in detail here. There will be 6 assignments in Part 1 of the course.
In Part 2 of the course (after the midterm exam), student groups will do presentations on advanced Operating Systems topics such as OS security, virtual machine monitors, advanced file system issues, etc. I will provide a list of topics to select from after the midterm.
Students will be evaluated based on their performance in the following categories:
The guaranteed letter grades for the course are as follows: [A, A-, B+, B, ..., D, F] = [85, 80, 75, 70, ..., 45, <45]. A curve might be applied on top of this to improve the letter grades but it is not guaranteed.
There are no required textbooks for the class. Readings will be assigned as needed from
materials that are available online or from the library. In addition, you can find a list of
useful references and reading materials here.
The following two books are highly recommended for the course. The first one is closely related to our discussions of the Linux kernel. The second one is a good (and free) introductory textbook on operating systems by two well-respected academic figures in the field.
The following are some other useful references. You can find them on Amazon or other online book stores. Some are also available for free on campus through Safari online. Also, make sure to check the university library for hard or electronic copies of these and other books that you may need. If not already available, you can request the library to be purchase them.
Most of the materials for this class are based on Don Porter's offering of the course and some, through Don's work, come from Mike Walfish and Erez Zadok. JOS labs were developed by Operating Systems course staff at MIT and several other universities and significantly enhanced by Stony Brook TAs and students. I am very grateful to all these individuals.