Kernel is the software that manages the execution state of the program under
operation, manages the hardware resources, and provides a means for the application
software to utilize the function of the hardware. It handles basic functions for software and
hardware interaction , such as schedule management for concurrently executing multiple
processes , memory management, and access control to input / output devices. Kernel
provides an abstracted access method that manages hardware resources that make up a
computer, such as CPU, main memory, storage, input / output device, network, etc., and can
be used from the program by the same procedure regardless of the difference in the device.
Functions provided by the kernel to programs are called system calls or supervisor calls. Any
programming error in the kernel resulting in a blue screen. We can classify the kernels in
several types:

?  Monolithic kernel: The monolithic kernels place a maximum of systems programs in
kernel space. Their performances are therefore excellent, as there are few system
calls to make. On the other hand, their reliability is rather weak.

?  Micro kernel: The micro kernel prefer to place the fewest things in user space. Their
security is excellent, the majority of programming errors not leading to a crash, but
simply the display of an error message. But the number of system calls is much
higher than for monolithic cores, which is a source of relatively low performance.

?  Hybrid kernels: The hybrid kernels are an intermediate between the Monolithic and
micro kernel.

?  Others: Some relatively extreme versions of monolithic kernel, where all the OS is
placed in the core space, are called megalithic Kernel . Similarly, there are extreme
versions of micro-kernels, where the entire OS is composed of software libraries
executed in user space, with the exception of the subsistence level. This is called
exokernel or nanokernel .