Jul 15, 2022
What Is A Linux Kernel: Complete Guide On Kernel And Its Working
Excerpt: By whatever metric you use, Linux is one of the most commonly used operating system software in the world. It's already staggeringly popular amongst techno-enthusiasts. As of 2020, 77% of software developers listed Linux as the operating system they prefer to work with. No less than 100% of the world's five hundred most powerful supercomputers also operated on the basis of this software.
Table of contents:
- What is a Linux kernel?
- History of Linux Kernel
- How does the Linux kernel work?
- There are three main levels to the Linux Kernel
- The architecture of the Linux Kernel
- Linux Kernel as a monolithic kernel
- How is the Linux kernel different from the classic Unix kernels?
- The Linux kernel and Android
But even outside the tech community, Linux is surprisingly prolific. In fact, by one estimate, 3 to 3.5 billion people directly or indirectly use Linux across the world! You may very well wonder how this can be true. For all its popularity, Linux is still far behind Microsoft and Apple when it comes to operating systems for PCs. A paltry 1.69% of home desktop computers used Linux as of July 2020. It's a similar story when it comes to mobile phones. Android and iOS dominate the market, with Linux lagging far behind.
So, how is it that so many people still use Linux in one way or another? The answer to this question is a fascinating piece of technology called the Linux kernel. To learn more about what a Linux kernel and how it works, keep reading!
What is a Linux kernel?
At the core of any Linux operating system is the Linux Kernel. It serves as the interface between the computer's hardware and its software processes. It is the lowest level of software that can communicate with the machine's hardware. All of Linux's various applications and servers also interface with the kernel.
The kernel is called so because it exists at the heart of the Linux operating system and controls all its aspects – be it a phone, laptop, server, or any other kind of computing device.
All of the roughly six hundred Linux distributions that we know and love are built on the basis of this very kernel. It is this same kernel that gives Linux its aforementioned ubiquity.
Remember how we said that when it comes to mobile phones, Linux's market share is insignificant against Androids?
This is very true: currently, only 0.81% of mobile phones directly use a Linux operating system. This pales in comparison to the 38.3% of mobile devices which are using Android. But here's the fun part: every Android phone indirectly uses the Linux kernel! In addition to this, a large number of websites and platforms (including leading cloud solutions like Amazon Web services and Google Cloud) are built around Linux. Hence the earlier figure of 3 to 3.5 billion people using Linux, directly or indirectly! As to how the Android phones use the Linux kernel, we'll discuss that in greater detail later in this article. Explore Linux Kernel Tutorial for more information.
History of Linux Kernel
The Linux kernel was originally developed in 1991 by the eponymous Linus Torvalds as an operating system to use on his personal computer. Composed of over twenty-three million lines of code, it is definitely one of the largest open-source software projects out there. The Linux kernel is made publicly available under the GNU, General Public License version 2. Each version of the kernel is supported for six years.
The Linux kernel manages the resources of any operating system in the most efficient way possible. It optimizes processor usage, makes sure there is memory space available for all applications to run and manages competing application demands to prevent system deadlocks. The great stability of the kernel is a major reason for it being a favorite of many cloud solution developers.
Now that we've introduced you to the famous Linux kernel let's talk a little bit about how exactly this intriguing piece of tech works!
How does the Linux kernel work?
A kernel, in essence, is something that manages the resources on your computer. The resource in question can be a process, a memory, or a hardware device. The programming languages used to write the Linux kernel are Assembly and C.
The kernel exists in something called the kernel space. This is an elevated memory state, which includes protected memory space and unfettered access to the machine's hardware components. The user's applications, on the other hand, will be executed in something called the user space. The user space can communicate with some of the machine's available resources through kernel system calls. The kernel space communicates with the user space through a GNU C Library, which provides a forum for the system call interface to link up with the kernel space.
Check out Linux Online Training & Certification Course to get yourself certified in Linux with industry-level skills.
There are three main levels to the Linux Kernel:
- System call interface: This is the topmost level that executes the most basic actions like reading and writing.
- Kernel Code: This is located below the system interface. This is found in all the processor architectures that Linux supports.
- Architecture-dependent code: This is the bottommost layer, in contrast to the kernel code, which is the architecture-independent code. It forms what is termed a Board Support Package (BSP). This is a small program containing the bootloader, which places the operating system and device drivers in the memory.
The architecture of the Linux Kernel
From an architectural point of view, Linux Kernel has the following components:
- System call interface: This thin layer executes calls from the user space to the kernel space.
- Process management: As the name suggests, this layer primarily manages processes. Each process is termed as a thread in the kernel and represents the virtualization of an individual processor.
- Memory management: The Linux kernel manages memory in pages to achieve the utmost efficiency. Methods to manage available memory, alongside the hardware mechanisms for physical and virtual mappings, are present here. Swap memory is also included here to facilitate those instances when singular processes need more space than the system is physically capable of providing.
- Virtual file system: This is the standard interface abstraction for the file systems. It acts as the switching layer between the system call interface and the file systems which the kernel supports.
- Network stack: This is a type of layered architecture. It facilitates communication between applications and physical network devices.
- Device drivers: The device drivers enclose a significant portion of the Linux source code. Each device driver acts as a software interface between a particular device or class of devices and the rest of the operating system. Without the device drivers, the hardware devices would not function.
- Architecture-dependent code: Source code for the various architecture families and processors supported by Linux is found in this layer. The architecture family encloses common boot support files, as well as various other elements common to that particular architectural family. This can include hardware interfaces such as the DMA, memory interfaces for the MMU setup, and interrupt handling features. Finally, the layer also provides board-specific source code for the most popular board vendors.
Linux Kernel as a monolithic kernel:
Any given operating system kernel is one of three types: monolithic, microkernel, or hybrid. The Linux kernel is monolithic. Examples of microkernels are the Mac OS X and the Phantom OS. Windows NT, on the other hand, is a great example of hybrid kernel architecture.
Much of the core design elements of the Linux kernel are inspired by those found in Unix. Unlike the microkernel, the monolithic kernel contains not just the central processing unit, memory space, and instructions per cycle (IPC) but the device drivers, system server calls, and file system management also. The benefit of this architecture is that it makes it easier to communicate with hardware and to perform multiple tasks simultaneously. The monolithic architecture is what gives the Linux kernel its fast speed of completing processes.
However, there are certain downsides to monolithic kernels. The install and memory footprint required is immense, and since everything operates in supervisor mode, the security is not as strong as one might want. Microkernels, in contrast, separate the user services and the kernel. As a result, the kernel will react comparatively slowly to application calls. On the upside, it will be smaller in size and thus have a smaller footprint. Microkernels are more extensible, but you need more code to write them in the first place.
How is the Linux kernel different from the classic Unix kernels?
When Linus Torvalds first wrote the Linux kernel, most of the design principles he incorporated into his invention had already been established in Unix architecture in the 70s and 80s. Hence the name Linux, paying homage to the inventor Linus and his muse Unix!
But as expected, there are several key differences between the Linux kernel and the other conventional Unix kernels, which have contributed to the greater popularity of the former.
The differences between the Linux kernel and other Unix kernels are as follows:
- Linux supports the dynamic loading of kernel modules, i.e. models can be loaded at any time, not just during start-up.
- The Linux kernel is preemptive, i.e. it always executes the highest priority task, which is ready to run.
- Linux is equipped with symmetric multiprocessor support. This increases the throughput of the system. It also increases reliability since even if one processor fails, the system as a whole won't be affected.
- Linux is an open-source project. Hence, it is completely free to use. You can even write your variations of Linux without anyone stopping you. This is why Linux has so many distinct distributions!
- Linux eliminates certain Unix features which did not appeal to Torvalds.
- Linux makes use of an object-oriented device model with device classes, hot-pluggable events, and a user-space file-device system.
- The Linux kernel does not differentiate between threads and normal processes. All processes are characterized as threads in the kernel space.
The above differences set the Linux kernel apart from its Unix predecessors.
The Linux kernel and Android:
As we talked about earlier, the Android operating system indirectly uses the Linux kernel. This means that billions of people across the world are indirectly using Linus Torvalds' creation without even knowing it!
Since Linux was an open-source project, Google's developers simply modified the Linux kernel to suit their requirements when they were developing the Android OS. This saved them the time and money required to design a kernel of their own. In fact, if you go to the "About phone" section in the settings of any Android phone, you'll see that it is operating the version of the Linux kernel.
There are, of course, radical differences between the Linux kernel found in Android and any other Linux distribution. When you are booting your Android device, the Linux kernel will load in the same manner as it would on any other Linux distribution. But that's mostly where the similarities end. Instead of running normal Linux applications, Android employs the Dalvik virtual machine to run applications that are written in Java. These applications are specifically built for Android devices, and the APIs used on them, rather than Linux distributions in general.
The lack of a graphical X server or GNU libraries prevents you from running desktop Linux software on Android. But despite all these differences, Android is undoubtedly running on the Linux kernel. So if you're an Android user in any capacity, you are benefiting from the Linux kernel!
The Linux kernel is undoubtedly a quite brilliant piece of technology. Its portability to various platforms, free and open-source nature, and general reliability and high performance have made it a favorite of software developers and other tech enthusiasts. But beyond that, it has affected the lives of literally billions across the globe through its presence in Android! Indeed, it's a testament to how good a piece of code it is that Android's developers chose it as the basis of their operating systems.
For any budding software developer, knowledge of the Linux kernel is essential. And even if you're not a developer, it never hurts to know a little about this essential piece of tech history! On that note, we hope you enjoyed this guide to what the Linux kernel is and its workings!
Sai Priya Ravuri is a Digital Marketer, and a passionate writer, who is working with MindMajix, a top global online training provider. She also holds in-depth knowledge of IT and demanding technologies such as Business Intelligence, Machine Learning, Salesforce, Cybersecurity, Software Testing, QA, Data analytics, Project Management and ERP tools, etc.