Before going into Linux kernel, let’s first see what is a kernel?
So, What is Kernel?
An operating system is a set of system software whose purpose is to give an interface to the final user to perform tasks which are performed with the help of underlying hardware.
So how this operating system communicates with the hardware of the computer. This is where Kernel and shell come in. In simple terms,
A kernel is a utility which provides an interface between the user applications and the hardware. It is the core component of an Operating System.
All the functions such as memory management, process management, device management, I/O communications are handled by the Kernel.
For shell, you can refer my another post on Linux Shell.
It is a piece of code which provides the utility for the user level applications to do the desired tasks.
There are 2 types of kernels:
- Monolithic Kernel
- Micro Kernel
In monolithic kernels, All the functionality of an OS run from a single space that is from the kernel only. File systems, device drivers, and applications are running from kernel space only. There is no separate defined space in architecture to do so. These type of kernels also define a high-level virtual interface over the system’s hardware. Since everything is executing from a single architecture space only, functions can be evoked directly from the Kernel hence giving more power to it for performing resource extensive tasks. Also, having a single address space provides a great level of security to the system.
In micro kernels, there are servers which are only broken down parts of a kernel. These servers have the responsibility to run defined tasks out of which some are performed into kernel space and some in user space. All the servers have their own address space. This provides modularity to the architecture. Also if one server fails then it does not impact the functionality of other servers. Both the servers can communicate with each other via interprocess communication to send and receive the message for processes that are dependent on each other.
Created in 1991 by Linus Torvalds, a Linux kernel is one of the largest open source projects in the market. Around 12,000 developers from all around the globe have contributed to it in making it what it is today.
So a Linux kernel is Monolithic Kernel which is the underlying kernel behind any Linux Operating system. It does not include applications like file-system utilities, graphical desktops, system administrator commands, text editors, compilers etc.
So many companies use this kernel and add their user interface along with other applications like text editors, web browsers, graphics, compilers in it for making their own distribution of Linux. Some of the famous distribution of Linux are Ubuntu, Kali Linux, Fedora, and CentOS.
Linux Kernel is written in C programming language along with many short instances of code written in assembly language too. (it is too complex. believe me!)
Generally, in all Linux distributions, Kernel is located in the /boot folder of OS. There can be a certain level of changes in the kernel of each Linux distributions as it can be modified as per the user need but the core component of the kernel remains the same.
As of 2013, the 3.10 release of the Linux kernel had 15,803,499 lines of code. It is so much large that some analyst has believed the redevelopment of the project from the start now will cost around $1.2 billion.
The Linux Kernel is different from the kernel of Windows operating system as it includes drivers at the kernel level and makes many things supported “out of the box”.
It is in active development form and thousands of programmers from all over the globe actively contribute to it. For having a glimpse of its complexity and its structure, have a look.