Linux Kernel Programming

Instructor: Dr. Yongguang Zhang (ygz@hrl.com)

Objectives

This course is designed as a laboratory component in the undergrad Operating Systems curriculum. It will supplement the introductory OS course and enable students to experiment with a contemporary OS (Linux). Through a series of programming assignments, the students will develop an appreciation in systems programming in general, experience the new open source software development model, and gain necessary skills and experiences to work large system software as complex as an OS kernel.

Why Teaching/Learning Linux Kernel Programming

Linux kernel is a very complex and monolithic software system. For performance reasons, it forgoes the structural design and many other software engineering principles that we learn in CS courses. Working in the kernel requires special skills and good judgements, such as

Students taking this course will not only learn the linux 2.4/2.6 kernel, but also perfect these skills to become a great system programmer.

Furthermore, linux represents a new software development paradigm -- open source and community building. This class will be taught in such a way that allows students to learn to work in the open source community.

Prerequisites

Syllabus

  1. Introductions
  2. Linux Basics
  3. Kernel Basics
  4. Using Kernel Services
  5. Managing Memory
  6. Managing Processes
  7. Managing Times and Synchronization
  8. Linux Devices
  9. Linux Filesystems
  10. Linux Networking
  11. Linux Security
  12. Contemporary Topics
  13. Term Projects

Projects

The students will first do a series of smaller projects (one per week) to cover various aspects of a Linux kernel. Then, they will do a bigger term project to explore a particular area.

Previous offerings

I have taught this course before, see: