Teaching Operating Systems at Columbia University

Operating system courses teach students much more when they provide hands-on kernel-level project experience with a real operating system. However, enabling a large class of students to do kernel development can be difficult, especially in terms of providing the necessary infrastructure support. To address this problem, we introduce both a new approach to providing teaching infrastructure and kernel-level programming projects to take advantage of this infrastructure for both Linux and Android.

We introduced a new approach to managing and grading operating system homework assignments based on virtual appliances and a distributed version control system. Our solution is easy to deploy and use with students' personal computers, and obviates the need to provide a computer laboratory for teaching purposes. It supports the most demanding course projects, such as those that involve operating system kernel development, and can be used by both on-campus and remote distance learning students even with intermittent network connectivity.

Building on this infrastructure, we have developed a set of pedagogically-effective kernel programming projects for both Linux and Android suitable for a one semester introductory operating systems course. Each assignment introduces students to a core topic and major component of an operating system while implicitly teaching them about various aspects of a real-world operating system. Projects are of modest coding complexity, but require students to understand and leverage core components of the Linux operating system. The learning benefits for students from this approach include learning from real-world operating system code examples by expert kernel designers and gaining software engineering experience managing production code complexity. We have successfully used these structured kernel projects to teach over a thousand students in the introductory operating systems course at Columbia University.

We have also developed GradeBoard, a pedagogic grading and classroom management system that integrates the use of Review Board and Git to teach operating systems. GradeBoard is designed to simplify grading for instructors, and enable students to understand and learn from their errors. GradeBoard provides an easy-to-use Web interface that allows instructors to annotate student code submissions with grading comments and scores, and students to discuss the comments and scores with instructors. We have successfully used GradeBoard in a large operating systems course involving our structured Linux kernel programming projects.

More Info

Operating Systems I (COMS W4118) is taught by: Prof. Jason Nieh and Prof. Junfeng Yang

GradeBoard Source (on GitHub):

GradeBoard Admin              Review Board

Related Publications

Teaching Operating Systems Using Code Review

Proceedings of the 45th ACM Technical Symposium on Computer Science Education (SIGCSE 2014), March 2014

Teaching Operating Systems Using Android

Proceedings of the 43rd ACM Technical Symposium on Computer Science Education (SIGCSE 2012), February 2012

Structured Linux Kernel Projects for Teaching Operating Systems Concepts

Proceedings of the 42nd ACM Technical Symposium on Computer Science Education (SIGCSE 2011), March 2011

Teaching Operating Systems Using Virtual Appliances and Distributed Version Control

Proceedings of the 41st ACM Technical Symposium on Computer Science Education (SIGCSE 2010), March 2010

Experiences Teaching Operating Systems Using Virtual Platforms and Linux

Jason Nieh, Chris Vaill
Operating Systems Review (OSR), April 2006

Experiences Teaching Operating Systems Using Virtual Platforms and Linux

Jason Nieh, Chris Vaill
Proceedings of the 36th ACM Technical Symposium on Computer Science Education (SIGCSE 2005), February 2005

Examining VMware

Jason Nieh, Ozgur Can Leonard
Dr. Dobb's Journal, August 2000