Haris Kundan Prasad
Published: 2020-05-02
Total Pages: 236
Get eBook
"Linux internals simplified" is a book which discusses the basics of Linux kernel internals in a code driven approach. It picks the major subsystems of the kernel which are important, and tries to simplify its internal working and data structures. As such, this book is aimed at engineers who wish to start learning about the Linux kernel.This book starts with the basic steps to acquire the Linux kernel code. It then shows ways of customizing the build options and lastly kernel compilation. Next it looks at a number of hacking tools which will help one to debug and trace in a live Linux system. Practical examples of ftrace, kprobes and crash tool are discussed. These tools are useful in trying to understand the way the Linux system works. Chapter 3 discusses the details of a running process in a Linux system. It touches topics such as address spaces of a running process, user and kernel spaces, system calls, Linux process descriptor, Linux process creation, and so on. This chapter builds a foundation of a program in execution in the Linux system.Once the reader knows about the running processes, chapter 4 discusses about the Linux process scheduling subsystem. This chapter discusses different data structures and code paths of the Linux scheduler, which controls the scheduling of processes in the Linux system. Chapter 5 discusses Interrupts, which play a significant role in the Linux operating system. The chapter discusses edge and level triggered interrupts, interrupt handlers and their registration, shared interrupt handlers, and so on. It also shows the ftrace of the do_irq function.Chapter 6 discusses the signal subsystem. It starts with a little introduction of the design of the signal subsystem. It then traces the code execution of delivering and handling of signals in the Linux kernel. The chapter then discusses signal overloading and how it is performed, while exploring the kernel code which handles this. Chapter 7 covers Linux synchronization primitives, and why they are needed. It shows the detailed implementation of primitives like atomic variables, spinlocks, semaphores and mutexes in the Linux kernel.Chapter 8 discusses various ways of Linux kernel memory allocation. It discusses Buddy allocator, Resource map allocator and Slab allocator. It discusses various APIs used for these allocators (alloc_page/s, kmem_cache_alloc, kmalloc etc.). It also discusses how user space malloc results in memory allocation in the Linux kernel.Chapter 9 discusses the Linux dynamic modules, Linux character driver framework, internal functions which are used while creating a character driver, UDEV events and IOCTL interface. It also discusses Linux device model. It discusses example of bus, device and device_driver components. It illustrates device model when used in PCI BUS. Chapter 10 covers the subsystem related to block IOs. It starts with an introduction of filesystem and its purpose. It then traces the path an IO takes, right from the "write()" system call, to the moment it gets written to the disk. The chapter covers basic data structures and design elements while going down the IO stack.