|Instructor:||Peter A. Dinda (Office Hours: Mondays 10:30-12 and Tuesdays 3:30-5, Tech L463)|
|Teaching Assistant:||Lei Xia (Office Hours: Tuesdays 10:30-12 and Thursdays 12:30-2, Ford 2-215)|
|Time:||Winter 2011, Tuesdays and Thursdays, 2-3:20pm|
|Location:||Tech M349 (we will try to move to a conference room)|
|Course number:||EECS 441|
|Recitation Section||Tuesdays, 6-7pm, Ford 3-340|
The bulk of the time in this class is spent examining a virtual machine monitor (VMM) in depth, at the source code level. The course explains the hardware/software interface of a modern x86 computer in detail. A VMM is an operating system that is implemented directly on top of the hardware interface, and itself presents a hardware interface to higher-level software.
Both Computer Science students and Computer Engineering students can benefit from EECS 441, as it focuses on the hardware/software interface. Students will also acquire valuable kernel development skills by working on projects related to virtualization. In short, students will learn how a real modern machine and operating system work, and how to extend them.
We will examine the implementation of the Palacios VMM from my V3VEE Research Project. In particular, we will take a look at the "bleeding edge" of the devel branch. Palacios is an embeddable VMM, and we will consider its embedding into Linux.
Within the undergraduate CS major, EECS 441 counts for breadth or depth credit in the systems area. Undergraduates are welcome.
For graduate students, EECS 441 counts as a graduate course.
Coming into this course, you mustIn addition, if you have taken an operating systems course (e.g., EECS 343) and/or a computer architecture course (e.g., EECS 361), you may get a deeper understanding of the concepts in the class.
For the most part, we will be examining and discussing real code on a real machine in the class. There is no required textbook. This makes it essential that you attend class, and use office hours/recitation. Also, this is a learn by doing class, so it is essential that you get your feet wet quickly.
The following reference book is a good explanation of virtual machines in general:
The Linux kernel is a powerful, practical operating systems codebase that is free for anyone to download and use. In addition to the code itself, you will find the following book to be very helpful in that it explains the structure and theory of operation of Linux in high quality way.Whatever Linux books you read, for the purposes of this course, make sure that they are about version 2.6 of the kernel, which is substantially different from prior versions.
You may find it helpful to have general introductory books on systems, operating systems, and architecture available for reference. I would recommend these:
Unfortunately, I am not aware of a good single book covering the modern x86 architecture from an OS perspective. We will use the Intel and AMD architecture manuals as needed (links given below).
I may also provide links to internal materials on Palacios and Kitten during the class. Note that you can now examine the codebase of Palacios online. The codebase of Linux can be examine online too. Finally, we may also make use of the Kitten kernel. Kitten is a lightweight kernel that is much much smaller than Linux, and Palacios can also be embedded in it. The codebase of Kitten is also available.
The components of the class will break down as follows:Note that a very substantial portion of the grade is project-related. It is important that you dive into the code soon!
We will use a Google group for discussion and to help with scribing. You can request access to our group using the following:
|Subscribe to EECS 441 Resource Virtualization|
|Visit this group|
I will arrange for you to have accounts on a machine that is set up correctly. This will also give you read access to the main repository for Palacios VMM development. You should also have accounts in the TLab or Wilkinson Lab so that you can work together more easily. If you have a laptop computer, you will find it very useful to bring it to class.
This is a course in operating systems (OS) design and implementation where the example OS is a VMM. OSes operate very differently from application programs, and the development process is also markedly different. In part, this is because OSes interact directly with the hardware interface provided by the processor and system architecture. A VMM is a particularly interesting kind of OS to learn about because it also has to implement what looks like a hardware interface. By studying a VMM, you will be exposed to both sides of the hardware/software interface. This class will do this by considering a real VMM running on top of real hardware. Some specific examples of what you will learn include:
Over the course of the quarter, you will apply what you're learning in a project, and then document your project in a high quality paper and open presentation. Project topics will be chosen in consultation with me, and will primarily focus on the development of extensions or components for Palacios. Such projects will give you the opportunity to enhance your kernel development skills, and create something that can ship (and certainly be part of a portfolio). Exceptional projects can also lead to publications.
Projects can be done in groups. We will discuss potential projects in detail a week or two into the course. I will expect weekly project reports. All projects will be presented at a public colloquium at the day/time of the final exam.