Training » All Courses » Linux » Linux Internals

Course Summary

This course focuses on the elements of the Linux kernel that allow programmers to build software components that are linked to the hardware level. Students gain a general understanding of basic tools and interfaces in order to successfully modify features and develop new aspects of the kernel.

Duration

5 days.

Audience

Programmers, software designers, and technical managers who plan to use Linux below the application level.
Advanced UNIX Programming is recommended. Strong C programming skills and intermediate knowledge of UNIX/Linux shell commands are required. UNIX/Linux application development experience is recommended.

Outline

Introduction to Linux Internals

  • Introduction and environmental setup
  • Main characteristics of the Linux operating system
  • Linux distributions
  • Kernel configuration facilities
  • Building the kernel
  • Location of components
  • Compiling

Kernel Overview

  • Important data structures
  • Processes and tasks
  • Files and inodes
  • Dynamic memory management
  • Queues and semaphores
  • System time and timers
  • Primary algorithms
  • Signals
  • Interrupts
  • System booting
  • Timer interrupt
  • Scheduler
  • System call implementation
  • Description of system calls
  • Practical examples
  • Adding new system calls

Memory Management

  • Architecture-dependent memory model Pages
  • Virtual address space
  • Linear address conversion
  • Page table and page directory
  • Middle page directory
  • Virtual address space model
  • User segment
  • Virtual memory
  • The brk system call
  • Mapping functions
  • Kernel segment
  • Static and dynamic memory allocation in the kernel
  • Block device caching
  • Block buffering
  • Update and bdflush
  • List structures for the buffer cache
  • How to use the buffer cache
  • Paging in Linux
  • Page cache management
  • Finding free pages
  • Page exceptions

Inter-Process Communication

  • Synchronization
  • Communication via files
  • Pipes
  • Debugging using ptrace
  • System V IPC
  • Socket-based communications

File System

  • Basic aspects
  • VFS
  • Mouting a file system
  • Superblock
  • The Inode concept and operations
  • File operations
  • Directory cache
  • Proc filesystem
  • Ext2 filesystem
  • Structure
  • Directories
  • Block allocation
  • Extensions

System Calls

  • Initialization
  • Process management
  • Memory management
  • Communication
  • Filesystem

Kernel-Related Commands

  • ps
  • top
  • free
  • init
  • shutdown
  • strace
  • traceroute
  • mount

Device Drivers

  • Character vs block devices
  • Polling and interrupts
  • Polling and interrupt mode
  • Interrupt sharing
  • Bottom halves
  • Task queues
  • Implementation
  • Setup
  • Init
  • Open and release
  • Read and write
  • Ioctl
  • Select
  • Lseek
  • Mmap
  • Readdir
  • Fsync and fasync

Module Management

  • Interfaces to modules
  • Adding/removing modules to the Kernel
  • Insmod
  • Modprobe
  • Rmmod
  • Implementation details

Network

  • Layer model
  • Network communications
  • Data structures
  • Socket
  • sk_buff
  • Inet socket
  • proto
  • Devices
  • Ethernet
  • SLIP and PPP
  • Loopback
  • Dummy device
  • Protocols
  • Arp
  • IP
  • Functions
  • Routing
  • Multicasting
  • Packet filters
  • Accounting
  • Firewalls
  • UDP
  • Standard and extra functions
  • TCP
  • Standard functions
  • Communication details

SCSI Subsystem

  • Architecture overview
  • Names and conventions
  • Upper level
  • Block devices (hard disks, CD-ROM)
  • Character devices (tape)
  • Generic drivers
  • Mid level (boot parameters, proc interface)
  • Lower (hardware) level and pseudo drivers

Boot Process

  • Booting details
  • LILO
  • Started by MBR
  • Started by a boot manager
  • Structure in the MBR
  • Files
  • Parameters
  • Start-up messages
  • Error messages

Debugging Tools

  • ptrace
  • SysRq
  • KDB
  • User Mode Linux
  • kgdb