Kernel terminology gets tossed about quite a bit. One of the more common topics regarding operating system kernels is the overall design. In particular how the kernel is structured. Generally, there are three major types of kernels; monolithic, microkernel and hybrid/modular. Monolithic A monolithic kernel is one single program that contains all of the code necessary to perform every kernel related task. Most UNIX and BSD kernels are monolithic by default. Recently more UNIX and BSD systems have been adding the modular capability which is popular in the Linux kernel. The Linux kernel started off monolithic, however, it gravitated towards a modular/hybrid design for several reasons. In the monolithic kernel, some advantages hinge on these points: …show more content…
These are interfaces, usually kept in a tabular structure, that access some subsystem within the kernel such as disk operations. Essentially calls are made within programs and a checked copy of the request is passed through the system call. Hence, not far to travel at all. The disadvantages of the monolithic kernel are converse with the advantages. Modifying and testing monolithic systems takes longer than their microkernel counterparts. When a bug surfaces within the core of the kernel the effects can be far reaching. Also, patching monolithic systems can be more difficult (especially for source patching). Microkernel The microkernel architecture is very different from the monolithic. In the microkernel, only the most fundamental of tasks are are performed such as being able to access some (not necessarily all) of the hardware, manage memory and coordinate message passing between the processes. Some systems that use microkernels are QNX and the HURD. In the case of QNX and HURD, user sessions can be entire snapshots of the system itself or views as it is referred to. The very essence of the microkernel architecture illustrates some of its …show more content…
The most well known of these kernels is the Linux kernel. The modular kernel essentially can have parts of it that are built into the core kernel binary or binaries that load into memory on demand. It is important to note that a code tainted module has the potential to destabilize a running kernel. Many people become confused on this point when discussing microkernels. It is possible to write a driver for a microkernel in a completely separate memory space and test it before going live. When a kernel module is loaded, it accesses the monolithic portion's memory space by adding to it what it needs, therefore, opening the doorway to possible pollution. A few advantages to the modular kernel