EECS 441: Resource Virtualization, Winter 2010

Instructor:Peter A. Dinda (Office Hours: Thursdays, 2-4 or by Appointment)
Time:Winter 2010, Tuesdays and Thursdays, 9:30-10:50am
Location:Tech L170 (we will probably move to a conference room)
Course number:EECS 441
Undergraduate AssistantAndy Gocke (Office Hours: Tuesdays, 1-3pm, Wilkinson Lab, or by Appointment)
Recitation SectionWednesdays, 7:30pm, Tech L160

Similar to the previous iteration of this course (Winter 2009), we will spend the bulk of the time in this class examining a virtual machine monitor (VMM) in depth, at the source code level. In particular, we will examine the implementation of the Palacios VMM from my V3VEE Research Project.

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.

Both Computer Science students and Computer Engineering students can benefit from EECS 441, as it focuses on the hardware/software interface. 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. The understanding and kernel development skills you will gain in this course are also lucrative.

Basic Information

Prerequisites: Coming into this course, you should

  • have a basic familiarity with systems, to the level of EECS 213 or EECS 205, and
  • be familiar with the C programming language.
  • In 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.

    Books: For the most part, we will be examining and discussing real code on a real machine in the class. There is no required textbook, but the following reference book is a good explanation of virtual machines in general:

  • J. Smith, R. Nair, Virtual Machines: Versatile Platforms for Systems and Processess, Morgan Kaufman, 2005.
  • 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). You may also find that the EECS 213 textbook is a helpful reference. Two copies are on reserve at the library.

    I will 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 Kitten is also available.

    Grading: The components of the class will break down as follows:
  • In-class discussion: 30%
  • Project: 50% (including weekly progress reports)
  • Project paper and presentation: 20%
  • Communication: We will use a Google group for discussion and to help with scribing. You can request access to our group using the following:
    Google Groups
    Subscribe to EECS 441 Resource Virtualization
    Visit this group

    Computers: 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.

    What You Will Learn

    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:

  • The hardware interface of Intel and AMD x86 and x86_64 processors from an OS perpective. These processors underly almost all modern PCs, Macs, laptops, workstations, and servers.
    Modes and privilege levels, exceptions and interrupts, address translation, control registers, IPI, etc.
  • The basic PC systems architecture. This architecture underlies almost all modern PCs, Macs, workstations, and servers.
  • Modern kernel development.
    Version control (git and hg), compilers, assemblers, bintools, image compilation and linking, emulator (qemu), serial debugging, PXE, kgdb, etc.
  • Interrupts and I/O models.
  • Virtual memory.
  • Devices and device drivers.
  • The boot process.
  • Synchronization in an OS kernel.
  • Implementation of basic OS abstractions, such as kernel threads.
  • Hardware virtualization interface (focusing on AMD SVM with some discussion of Intel VT's differences).
  • Whole system virtualization versus paravirtualization.
  • Virtualizing machine modes.
  • Virtualizing virtual memory with shadow and nested paging.
  • Virtual devices - programs that emulate hardware devices.
  • Multicore issues.
  • Project

    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.


  • We will be studying the Palacios Virtual Machine Monitor in depth. You will have access to an internal git repository on a machine set up to support development.
  • You should have a Tlab and Wilkinson Lab accounts. The renovated Wilkinson Lab is quite a nice place to work as a group.
  • If you haven't used Linux or Unix remotely before, you will want to read Using Unix Remotely Without the Excruciating Pain.
  • You will want to have the Intel Architecture Manuals and the AMD Architecture Manuals handy.
  • QEMU is a free x86 emulator that runs on most operating systems. It is very helpful in supporting OS and VMM development.
  • The version of Palacios you will be using is embedded into Sandia National Lab's Kitten Lightweight Kernel, which has its own useful documentation and description.

  • Peter Dinda
    Last modified: Mon Jan 25 20:07:58 CST 2010