TOPICS IN COMPUTER SYSTEMS: VIRTUAL MACHINESCOMS E6998, Dept of Computer Science, Columbia University
Home | Lectures | Homework | Project | Discussion

Meeting Times and Location: Spring 2018 T 10:10-12:00pm Location 834 Mudd
Prerequisites: COMS W4118 Operating Systems I or instructor approval.
Description: Virtualization is a key technology underlying cloud computing infrastructure made available by and used by major computing service providers today. This course will cover the design and implementation of virtual machine technology as well other recent trends in virtualization. The primary focus of the course will be on hypervisors and traditional virtual machines, but the course will also cover container technology that is increasingly popular as an alternative to hardware virtualization. The first half of the course will cover the design and implementation of hypervisors, including CPU virtualization via trap-and-emulate, memory virtualization including shadow page tables, and device virtualization. The course will cover hardware virtualization features in all modern CPUs from Intel, AMD, and ARM. The second half of the course will survey research papers and other recent developments in virtualization.

Instructor: Prof. Jason Nieh. 212-939-7160, office hours: T1-3PM CSB 518.
TA: Shih-Wei Li,, office hours: R3-5PM CSB 509
Required Text: Hardware and Software Support for Virtualization, Edouard Bugnion, Jason Nieh, and Dan Tsafrir, Synthesis Lectures on Computer Architecture, Morgan & Claypool Publishers, February 2017. (available from and Columbia University Bookstore).
Computing Requirements: You should also have your own computer to take this class, on which you will install either VMware Workstation for Windows or Linux, or VMware Fusion for Mac. A CS account will provide access to VMware licenses and software at no additional cost. If you do not yet have a CS account, you may request one and list the instructor as the sponsor.
20%: Homework Assignment: There will be one homework assignment that involves a small programming mini-project assigned to everyone in the class. The project will involve systems programming.
60%: Final Project: The project is an opportunity for you to take an active part in exploring the subject area, as appropriate for an advanced course. You can choose any project you want, so long as it has something to do with virtualization. The project should be chosen so that it clearly extends your knowledge and understanding of some area of virtualization. Projects are to be done in teams of your own choosing. Projects can focus on new applications of virtualization, new virtualization mechanisms implemented in the context of an existing virtualization system, performance evaluation of virtualization mechanisms, etc.
20%: Course Participation: The course is discussion-based and students are expected to read materials in advanced and be prepared to participate in discussions. We will also discuss research papers in virtualization and students will be asked to lead some of those discussions.
0%: No "extra credit" work

We would like the course to run smoothly and enjoyably. Feel free to let us know what you find just, good, and interesting about the course. Let us know sooner about the reverse. See us, leave us a note, or send us email.