The kernel of every operating system builds the bridge between the application and the actual processing on the hardware level.
A typical UNIX kernel is responsible for:
- CPU Program execution
- Memory Management
- Processes (Scheduling, Synchronization, Interprocess Communication)
- Signals (Exceptions, Interrupts)
- Filesystems (Virtual, Block)
- I/O Architecture (Devices, Files, Networking)
The two most common architectures for UNIX kernels are:
Monolithic kernel: Every kernel layer is integrated in into the whole kernel and therefore runs in kernel space. Every user application has to access the kernel through a high-level interface. Most UNIX(-like) kernel follow this approach.
Microkernel: Only the essential parts of the kernel run in kernel space. Applications are allowed to directly address different kernel layers (device drivers, filesystems, ..).
The linux kernel is a UNIX-like kernel initially created by Linus Torvalds in 1991 and now is maintained by developers around the world.
Linux kernel compilation
Linux kernel internals
- LDD = Linux Device Drivers: a book (on paper or free online) on Linux kernel internals
- LWN = Linux Weekly News: kernel evolutions explained
- LKML = the linux-kernel mailing list, a high-volume high-technicity discussion list (archives)
- LXR = the Linux cross-reference: a nice way to browse the kernel source