Linux Kernel

A kernel is the lowest level of easily replaceable software that interfaces with the hardware in your computer.

Details
The kernel is responsible for interfacing all of your applications that are running in “user mode” down to the physical hardware, and allowing processes, known as servers, to get information from each other using Interprocess Communication (IPC).

In other words kernel’s job is to talk to hardware and software, and to manage the system’s resources as best as possible. It talks to the hardware via the drivers that are included in the kernel (or additionally installed later on in the form of a kernel module). This way, when an application wants to do something (like change the volume setting of the speakers), it can just submit that request to the kernel, and the kernel can use the driver it has for the speakers to actually change the volume.

There are three different types of kernels, microkernel, monolithic kernel and hybrid kernel. Linux uses a monolithic kernel. Since this is a Linux wiki we will only concern ourselves with the monolithic kernel.

Monolithic Kernel
Monolithic kernels encompass not only the CPU, memory, and IPC, they also include things like device drivers, file system management, and system server calls. Monolithic kernels tend to be better at accessing hardware and multitasking because if a program needs to get information from memory or another process running it has a more direct line to access it and doesn’t have to wait in a queue to get things done. This however can cause problems because the more things that run in supervisor mode, the more things that can bring down your system if one doesn’t behave properly.

Pros


 * More direct access to hardware for programs
 * Easier for processes to communicate between eachother
 * If your device is supported, it should work with no additional installations
 * Processes react faster because there isn’t a queue for processor time

Cons


 * Large install footprint
 * Large memory footprint
 * Less secure because everything runs in supervisor mode