Linux kernel programming is a challenging process that requires a thorough understanding of kernel, the system environment and CPU architecture. For Linux-based products that demand high performance or custom features from the kernel or modules, developers must work directly with kernel data structures, synchronization models, hardware models, process, memory and IO management at a much deeper level, and with little source code documentation. This course builds on the kernel knowledge and provides the next level details needed for real-world Linux product development.
This course begins with a brief review of CPU (X86) architecture, basic system and kernel programming models, and socket programming. The discussion goes on to cover data structures and inter-workings of the kernel to build a deeper understanding of file system creation, process scheduling, memory management, and network stack management. Students learn the latest multicore, multi-thread management and inter-processor scheduling at the kernel and process level. The instructor will present practical examples of each topic throughout the course.
This course includes programming assignments for students to practice on their own computers. Either kernel version 2.6 or 3.x can be used in this course. Ubuntu distribution is preferred. Upon completion of the course, students will have advanced, expert-level kernel knowledge and experience.
- Review and overview
- File system creation and usage
- Network stack management
- Process scheduling and signaling
- Single processor single-user process creation
- Kernel process creation in the context of multi-tasking
- Inter-processor (MPx) scheduling
- Multi-threaded applications and kernel scheduling
Skills Needed: Proficiency in C programming and an understanding of networking basics is required.