A microkernel is a very small kernel, which provides the very rudiments of functionality expected from a kernel, such as regulating access to the hardware interfaces, some form of task scheduling (cooperative multitasking, perhaps), possibly memory protection, and a distinction between kernel and user mode. On top of the microkernel run kernel processes, providing more high-level services such as user-mode task scheduling, security, memory management, device drivers, etc. User-space processes are typically not scheduled by the microkernel, but by a kernel process.

The advantage of this approach, especially with regards to real-time systems, is that any parts of the microkernel that are not needed can be removed. The modularity of the microkernel makes it much simpler to implement complex task scheduling (Supporting hard deadlines, for instance), and the abstraction of high-level things talking to the microkernel instead of the hardware makes it much easier to port to different platforms.

Now that we know what a microkernel is, it's simple to say whether linux (which is the name given to the kernel, distributions more correctly called GNU/Linux) is a microkernel or not. It isn't.

Linux is a monolithic kernel. In a monolithic kernel, the functionality of the microkernel and kernel processes is rolled up into one large kernel. The linux kernel handles everything from memory management and task scheduling to filesystems, security and networking.

An area where there may be some confusion is linux' concept of kernel modules. Kernel modules may appear to be similar to a microkernel's kernel processes, in that they may be added and removed from a running kernel, but they are quite different. A kernel built to allow modules is still monolithic, but allows code to be added and removed dynamically by adding an abstraction layer.

As an aside, Windows NT does not 'supposedly' use a microkernel, it does use a microkernel. Windows NT was designed from the outset to be easily ported to other architectures than i386 (such as the DEC Alpha). To this end, NT was written using a microkernel, meaning that the vast majority of code is platform-independent, leaving only a portion of the microkernel, the Hardware Abstraction Layer to be rewritten for each new platform. A common feature of microkernels on platforms which offer a protected mode is to run the kernel threads in user mode, protecting the microkernel from a malfunctioning kernel thread. NT does not do this. Microkernel, however, is not a subjective quality. A kernel is either microkernel based or not. Saying that linux is not a microkernel while NT is is like saying that a Boeing 747 is not an SUV, while a Ford Explorer is. 'Microkernel' is not an indication of quality, it's an architectural pattern.

Log in or register to write something here or to contact authors.