CATALOG DESCRIPTION:  The bulk of the time in this class 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.  Students will also acquire valuable kernel development skills.
Prof. Dinda's EECS 441 course page

  • This course satisfies the project requirement

REQUIRED TEXTBOOK : None

REFERENCE TEXTBOOKS: 

COURSE COORDINATOR: Prof. Peter Dinda

COURSE GOALS: The course will show you how a modern virtual machine monitor operates on a modern computer architecture. 

PREREQUISITES: 
Familiarity with systems, to the level of EECS 213, is required.   You must also be very comfortable 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. 

DETAILED COURSE TOPICS: 
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.
    PIC/APIC, PIT, PCI, NVRAM, BIOS, etc.
  • 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.

HOMEWORK ASSIGNMENTS:

LABORATORY PROJECTS: A full quarter group project will extend the codebase of an existing VMM or OS, or provide preliminary exploration of a research question.

GRADES: 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%

COURSE OBJECTIVES: For more information, please consult the current course web page:
http://www.eecs.northwestern.edu/~pdinda/virt

updated 2/2/2012