CS 698Z: Linux Kernal Programming

 

Course Contents     

Understanding a full fledged operating system is desirable to develop new OS level functionalities in research and technology development. The goal of this course is to expose students to Linux OS (a.k.a. Linux Kernel) internals to provide an up-close view of its design and features. At the end of the course, students are expected to be confident to approach designing new OS level features when required. The course will primarily be structured around exercises, assignments and a project. Every topic will be introduced before its corresponding hands-on component. The exercises and assignments, meant to get an inside view of the kernel, will lead up to a project that will have to be submitted as the final submission for the course. For some of the concepts, recent research works proposing extensions/optimizations will also be covered.

Course objectives:

   1. Understanding the design of Linux kernel components
   2. Experiencing the kernel by passive/active observation
   3. Extending the Linux kernel for understanding, self satisfaction/falsification ...
   4. Exploring current research trends in OS, Linux being the reference OS

Prerequisites:

    1. Undergraduate OS course, C programming proficiency
    2. Access to a personal laptop or remote computer from the class room

Syllabus                

    1. Introduction: OS concepts catch-up, Linux kernel overview, Extending the kernel: building a modified kernel, writing simple kernel modules

    2. User-kernel interfacing: system calls, proc/sysfs, character devices, device memory maps

    3. Kernel execution contexts: processes, threads, kernel threads, interrupts, bottom halves/softIRQs

    4. Process management: Linux kernel scheduler, context switching, kernel synchronization   

    5. Memory management: Virtual memory, page cache
 
    6. Filesystems: The VFS layer, kernel-Filesystem interfacing
    
    7. Generic block layer: Block I/O interfacing, kernel block I/O scheduler

    8. Device drivers: Device probe and sw/hw configurations, event registration, communication


Grading

   In class exercises: 10%
   Assignments: 30% (3 to 4 assignments)
   Project: 30%   (Group of maximum two students)
   Midsem/Quizzes + Endsem : 30%
   

Reference

    Books

    Understanding the Linux Kernel, Daniel P. Bovet, Marco Cesati.
    Linux Kernel Development, 3rd Edition, Robert Love.
    Linux Device Drivers, 3rd Edition, By Jonathan Corbet, Greg Kroah-Hartman, Alessandro Rubini.

    Web

    www.kernel.org
    LWN.net
    Research papers