The document discusses the architecture of the Linux kernel. It describes the user space and kernel space components. In user space are the user applications, glibc library, and each process's virtual address space. In kernel space are the system call interface, architecture-independent kernel code, and architecture-dependent code. It then covers several kernel subsystems like process management, memory management, virtual file system, network stack, and device drivers.
1. Architecture of the Linux Kernel
by Dominique Gerald M Cimafranca
dominique.cimafranca@gmail.com
This work is licensed under the Creative Commons Attribution-Share Alike 3.0 Philippines License. To view a copy of this
license, visit http://creativecommons.org/licenses/by-sa/3.0/ph/ or send a letter to Creative Commons, 171 Second Street,
Suite 300, San Francisco, California, 94105, USA.
2. Fundamental Architecture
User Applications
User Space
GNU C Library (glibc)
System Call Interface
Kernel
Kernel Space
Architecture Dependent Kernel Code
Hardware Platform
3. User Space Components
● User applications
● glibc
● Provides the system call interface that connects to
the kernel
● Provides the mechanism to transition between user-
space application and kernel
● Each user space process occupies its own
virtual address space (vs the kernel which runs
on the single address space)
4. Kernel Space Components
● System Call Interface
● Provides the basic functions such as read() and
write()
● Kernel
● Architecture-independent kernel code
● Common to all processor architectures supported by
Linux
● Architecture-Dependent Code
● Processor- and platform-specific code
● Also known as Board Support Package
5. Kernel Subsystems
System Call Interface
Process Management Virtual File System
Memory Management Network Stack
Arch Device Drivers
6. System Call Interface
● Provides the means to perform function calls
from user space into the kernel.
● This interface can be architecture dependent,
even within the same processor family.
● Can be found in
● ./linux/kernel
● ./linux/arch
7. Process Management
● Focused on the execution of processes
● Each has an individual virtualization of the
processor (thread code, data, stack, and
registers)
● Kernel provides API through SCI to start, stop,
and communicate with processes
● Processes are managed by a scheduler
8. Scheduler
● Kernel implements a scheduling algorithm
● Operates in constant time, regardless of threads
● O(1), meaning, same time to schedule one thread
or many threads
● Can be found in
● ./linux/kernel
● ./linux/arch
9. Memory Management
● Memory is managed in pages
● Typically 4KB per page for most architectures
● Can be adjusted
● Support for hardware mechanisms for physical
and virtual mappings, e.g. MMU on Pentium
● Keeps tracks of which pages are full, partially
used, or empty
● Or if physical memory runs out, swap to disk
● Can be found in ./linux/mm
10. Virtual File System
Virtual File System
ext3 ... FAT32 /proc
Buffer Cache
Device Drivers
Physical Devices
11. Virtual File System
● Presents a common API abstraction of
functions such as open, close, read, and write
● Translates to abstractions specific to a file
system
● Support for over 50 different file systems
● Can be found in ./linux/fs
12. Buffer Cache
● Caching layer that optimizes access to the
physical devices by keeping data around for a
short time
● Provides a common set of functions to the file
system layer (independent of any particular file
system)
13. Network Stack
● Follows a layered architecture modeled after
the TCP/IP protocols
● TCP layer communicates with SCI via sockets
● Sockets provide a standard API to the
networking subsystem
● Manage connections
● Move data between endpoints
● Can be found in ./linux/net
14. Device Drivers and Architecture-
Dependent Code
● Most of the Linux kernel source code consists
of device drivers
● Can be found in ./linux/drivers
● While Linux kernel is mostly architecture
● Can be found in ./linux/arch
16. References
● Anatomy of the Linux Kernel, M. Tim Jones, IBM Developerworks
(http://www.ibm.com/developerworks/linux/library/l-linux-kernel/)
17. Architecture of the Linux Kernel
by Dominique Gerald M Cimafranca
dominique.cimafranca@gmail.com
This work is licensed under the Creative Commons Attribution-Share Alike 3.0 Philippines License. To view a copy of this
license, visit http://creativecommons.org/licenses/by-sa/3.0/ph/ or send a letter to Creative Commons, 171 Second Street,
Suite 300, San Francisco, California, 94105, USA.