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:
(highly recomended) Linux Kernel Development (3rd edition), By Robert Love
(optional) Professional Linux Kernel Architecture, by Wolfgang Mauerer
(optional) Understanding the Linux Kernel, by Daniel P. Bovet, Marco Cesat
(optional) Linux Device Drivers, 3rd Edition, by Jonathan Corbet, Alessandro Rubini, Greg Kroah-Hartman
(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:
OSTEP, Operating Systems: Three Easy Pieces, by Remzi Arpaci-Dusseau and Andrea Arpaci-Dusseau, free OS textbook!
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:
- The Linux Kernel Source Code
- Why not?
- The Linux Kernel Documentation
- The Linux Kernel Module Programming Guide
- Free guide/book
- Linux Kernel Programming, by Kaiwan N Billimoria
- VT students can access this book online for free, check instructions here
Research Papers
File Systems
- GFS, The Google File System, by Sanjay Ghemawat, Howard Gobioff, Shun-Tak Leung
- LFS, Design and Implementation of the Log-structured File System, by Mendel Rosenblum, John Ousterhout
- BtrFS, BTRFS: The Linux B-Tree Filesystem, by Ohad Rodeh, Josef Bacik, Chris Mason
- FFS, A Fast File System for UNIX, by Marshall K. McKusick, William N. Joy, Sam J. Leffler, Robert S. Fabry
- WAFL, File System Design for an NFS File Server Appliance, by Dave Hitz, James Lau, Michael Malcolm
Memory Management
- SDF, Software-Defined Far Memory in Warehouse-Scale Computers, by Google researchers
- TMO, TMO: transparent memory offloading in datacenters, by Meta researchers
Scheduling
- Syrup, Syrup: User-Defined Scheduling Across the Stack
Shenango, Shenango: Achieving High CPU Efficiency for Latency-sensitive Datacenter Workloads
- (Optional) gHost, ghOSt: Fast & Flexible User-Space Delegation of Linux Scheduling
- (Optional) Caladan, Caladan: Mitigating Interference at Microsecond Timescales
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: