Understanding systems from the inside

In-depth writing on Linux internals, assembly, software engineering, and the infrastructure that keeps production systems alive: source-code readings, experiments, and practical notes from the field.

your application
syscall / API
kernel
process memory fs net ...
drivers
hardware

Linux Inside

An in-depth book about Linux kernel internals: boot process, memory management, interrupts, system calls, scheduling, synchronization, and more.

64 chapters · in progress 12%

Contents

1 / 7

Part II. Initialization

  1. First steps in the kernel
  2. Early interrupts handler
  3. Last preparations before the kernel entry point
  4. Kernel entry point
  5. Continue architecture-specific boot-time initializations
  6. Architecture-specific initializations, again...
+ 4 more →

Part III. Interrupts

  1. Introduction
  2. Start to dive into interrupts
  3. Interrupt handlers
  4. Initialization of non-early interrupt gates
  5. Implementation of some exception handlers
  6. Handling Non-Maskable interrupts
+ 4 more →

Part IV. System calls

  1. Introduction to system calls
  2. How the Linux kernel handles a system call
  3. vsyscall and vDSO
  4. How the Linux kernel runs a program
  5. Implementation of the open system call
  6. Limits on resources in Linux

Part V. Timers and time management

  1. Introduction
  2. Clocksource framework
  3. The tick broadcast framework and dyntick
  4. Introduction to timers
  5. Clockevents framework
  6. x86 related clock sources
+ 1 more →

Part VI. Synchronization primitives

  1. Introduction to spinlocks
  2. Queued spinlocks
  3. Semaphores
  4. Mutex
  5. Reader/Writer semaphores
  6. SeqLock

Part VII. Memory management

  1. Memblock
  2. Fixmaps and ioremap
  3. kmemcheck

Part VIII. Cgroups

  1. Introduction to Control Groups

Part IX. Kernel mechanisms

  1. Per-CPU variables
  2. Cpumasks
  3. The initcall mechanism
  4. Notification Chains

Part X. Data structures

  1. Doubly linked list
  2. Radix tree
  3. Bit arrays

Part XI. x86 fundamentals

  1. Paging
  2. Interrupt Descriptor Table

Part XII. Toolchain and binaries

  1. How the kernel is compiled
  2. Linkers
  3. Executable and Linkable Format
  4. Inline assembly
  5. Program startup process in userspace

Part XIII. Contributing to the Linux kernel

  1. Contributing to the Linux kernel

Assembly

A set of posts on learning x86-64 assembly for Linux: registers, addressing modes, the stack, system calls, and writing complete programs from scratch.

7 posts · finished 100%