Monolithic kernel

From Wikipedia, the free encyclopedia

Graphical overview of a monolithic kernel
Graphical overview of a monolithic kernel

A monolithic kernel is a kernel architecture where the entire kernel is run in kernel space in supervisor mode. In common with other architectures (microkernel, hybrid kernels), the kernel defines a high-level virtual interface over computer hardware, with a set of primitives or system calls to implement operating system services such as process management, concurrency, and memory management in one or more modules.[citation needed]

Even if every module servicing these operations is separate from the whole, the code integration is very tight and difficult to do correctly, and, since all the modules run in the same address space, a bug in one module can bring down the whole system. However, when the implementation is complete and trustworthy, the tight internal integration of components allows the low-level features of the underlying system to be effectively utilized, making a good monolithic kernel highly efficient. In a monolithic kernel, all the systems such as the filesystem management run in an area called the kernel mode.[citation needed]

[edit] Loadable modules

Most modern monolithic kernels such as OpenVMS, Linux, BSD variants such as FreeBSD and NetBSD, and Solaris can dynamically load (and unload) executable modules at runtime. This modularity of the kernel is at the binary (image) level and is not at the kernel architecture level. Modular monolithic kernels are not to be confused with the architectural level of modularity inherent in microkernels or hybrid kernels. Practically, dynamically loading modules is simply a more flexible way of handling the kernel image at runtime - as opposed to rebooting with a different kernel image. The modules allow easy extension of the kernel's capabilities as required. Dynamically loadable modules incur a small overhead when compared to building the module into the kernel image. However in some cases loading modules dynamically (as-needed) helps to keep the amount of code running in kernel space to a minimum for example to minimize kernel footprint for embedded devices with limited hardware resources. Namely, an unloaded module need not be stored in the scarce random access memory.

[edit] Monolithic kernel examples

[edit] See also