Building a large computer system requires understanding the complex interactions between multiple layers in the computing stack such as applications, runtimes, the operating system, and hardware. Building large systems is different than building algorithms: systems are more complex, and their requirements are less well-defined. Good system designers understand the right trade-offs between performance, utility, usability, and reliability.
In this course, we will study successful modern and classical computer systems and distil principles for building such systems. We will focus on which design decisions the designers faced, and why they made the choices that led them to successful system designs. The study of these systems and principles will prepare students for future computer systems research.
Please note that the name of this course is “Advanced Operating Systems” for historical reasons. The course is not just about advanced topics in operating systems, but about advanced topics in general computer systems.
The formal prerequisite for this course is EECS 482 (Introduction to Operating Systems) or equivalent from another university. Further background in computer networks, databases, and programming languages will be helpful. The students should be highly motivated to pursue systems research.
If in doubt about the requirements, please check with the instructor.
Please see the preliminary schedule. Please read the assigned papers for the first lecture before coming to class.