In operating systems, the most important piece of code/software is the kernel.


The kernel controls all functions of the system: manage memory, connect software to the hardware, dictate what processes get CPU time and when, etc.

There are two types of kernel design: monolithic kernels and microkernels. Monolithic kernel "architecture" is where all functions are grouped together in a single program. Examples of this type of kernel design include Microsoft Windows (not NT-derived like Win2k or XP), Linux, Unix, and MacOS.

Microkernel architecture is more complex. Specific functions of the kernel (memory management, etc.) are separated into individual processes running on their own. They all communicate to each other using messages and semaphores. The advantages to this design are that a kernel could be configured to fit a specific function and thus use resources more efficently than a monolithic kernel; individual kernels can be rebooted without having to reboot the entire system. Examples of microkernel design include NeXTStep, Microsoft Windows NT/2k/XP, Linux's Networking System (see below), Mac OSX (based on NeXTStep), Mach (the microkernel behind NeXTStep and to a degree OSX), GNU Hurd, and BeOS.


Whether one architecture is better has not been settled.

The reason Linux's Networking System is under microkernel is because the design of the system is very modular and is largely based on microkernel theory, despite being only part of Linux and not necessarily the kernel itself.