2.2. Important parts of the kernel
The Linux kernel consists of several important
management, memory management, hardware device drivers, filesystem
drivers, network management, and various other bits and pieces.
shows some of them.
Figure 2-1. Some of the more important parts of the Linux kernel
Probably the most important parts of the kernel (nothing else
works without them) are memory management and
process management. Memory management takes care of assigning
memory areas and swap space areas to processes, parts of the
kernel, and for the buffer cache. Process management
processes, and implements multitasking by switching the
active process on the processor.
At the lowest level, the kernel contains a hardware device
driver for each kind of hardware
it supports. Since the world is
full of different kinds of hardware, the number of hardware device
drivers is large. There are often many otherwise similar pieces
of hardware that differ in how they are controlled by software.
The similarities make it possible to have general classes of
drivers that support similar operations; each member of the class
has the same interface to the rest of the kernel but differs in
what it needs to do to implement them. For example, all disk
drivers look alike to the rest of the kernel, i.e., they all
have operations like `initialize the drive', `read sector N',
and `write sector N'.
Some software services provided by the kernel itself have
similar properties, and can therefore be abstracted into classes.
For example, the various network protocols have been abstracted
into one programming interface, the BSD socket library. Another
example is the virtual filesystem
layer that abstracts the filesystem operations away from their
implementation. Each filesystem type provides an implementation
of each filesystem operation. When some entity tries to use
a filesystem, the request goes via the VFS, which routes the
request to the proper filesystem driver.
A more in-depth discussion of kernel internals can be found
at https://www.tldp.org/LDP/lki/index.html. This document was
written for the 2.4 kernel. When I find one for the 2.6 kernel, I
will list it here.