Basic Information

  • Lectures: TR 3:30-4:45pm, WMS 120
  • Instructor: Huaicheng Li, huaicheng@vt.edu
    • Office hours: 10-11am on Fridays, GP 4109
  • TA: Ezekiel Cochran, ecochran@vt.edu
    • Office hours: 11:00am-1:00p on Wednesdays and Fridays, Torg 2160R
  • Online forum: Ed Discussion
    • Join via this link
    • Please turn on the notifications to avoid missing important updates!

Lecture attendance is mandatory. Each student is allowed to miss three lectures over the course of the semester; students missing more than three lectures will not receive participation credit (5%) unless there is a compelling reason for the absences.

Please ask questions during the lectures.

Lectures

The Lectures will cover

  • Various components in the Linux kernel, including
    • Syscall
    • Kernel data structures and debugging
    • Process management and scheduling (scheduler, ebpf, etc)
    • Interrupt handling
    • Kernel synchronization
    • Timer management
    • Memory management (address space, in-kernel memory allocation, page table and fault management, heterogeneous memory management)
    • File system and block layer (VFS, page cache, NVMe storage)
    • Networking stack (TCP, RDMA, TBD)
  • Recent/classic OS research papers

  • Guest lectures (TBD)
    • industry trends, emerging technologies

Gradings (tentative)

  • Participation (5%)
  • Exercise (6%: 2% x 3): small programming exercises, such as implementating your own system call, writing a Linux kernel module to extend a subsystem, etc.
  • Paper reading (15%: 3% x 5): research papers about recent OS design and implementations, to educate you about the cutting-edge systems research and practice in industry
  • Project (64%: 4% + 10% + 20% + 30%): A bunch of assigned kernel programming tasks and a final project
  • Final exam (10%): course project report and/or presentation (TBD)
  • Bonus (5%): TBD, asking great questions, helping others on Ed discussions, etc.

Reading Materials

No required textbooks for the class. The lectures are defined by the instructor to focus on topics which are not fully covered by one specific textbook. However, there are many great resources (books, online resources, etc.) I recommend if you would like to go deeper in understanding and hacking Linux/OS.

Textbooks

Linux specific:

  1. (highly recomended) Linux Kernel Development (3rd edition), By Robert Love

  2. (optional) Professional Linux Kernel Architecture, by Wolfgang Mauerer

  3. (optional) Understanding the Linux Kernel, by Daniel P. Bovet, Marco Cesat

  4. (optional) Linux Device Drivers, 3rd Edition, by Jonathan Corbet, Alessandro Rubini, Greg Kroah-Hartman

  5. (optional) Linux Kernel Programming: A Comprehensive and Practical Guide to Kernel Internals, Writing modules, and Kernel Synchronization, Second Edition, by Kaiwan N. Billimoria

OS textbooks:

  1. OSTEP, Operating Systems: Three Easy Pieces, by Remzi Arpaci-Dusseau and Andrea Arpaci-Dusseau, free OS textbook!

  2. OS:PP, Operating Systems: Principles and Practice (2nd edtion), by Tom Anderson and Michael Dahlin

Linux Kernel Programming

There are tons of online materials talking about Linux kernel programming, see below for some examples:

Research Papers

File Systems

Memory Management

Scheduling

Systems Programming

Systems programming skills are necessary for this course. If you would like to sharpen your C/C++ systems programming skills in the UNIX/Linux environment, the following books are worth reading:

Writing OSes

Interested in building an OS? See the exciting projects below: