This article will focus on Linux kernel, which is a Monolithic Kernel based on Unix.
Other kernels may be MicroKernels delegating some functions to other programs such as external drivers.
A monolithic kernel is a kernel monopolizing all hardware and driver operations as parts of itself, in contrast with microkernels which deal with a few basic tasks while leaving the rest as external tasks, due the lack of popular operating systems using microkernels we’ll ignore their existence for now.We can think about the kernel as the first level or lower level of communication between our OS (operating system) and our physical device.
Being a “hardware-software translator” the kernel’s main task is allocating hardware resources to software processes, mainly memory and processor. The kernel also can limit memory allocation to failing devices to prevent crashes.
Let’s say we installed a new Linux system and some of our devices fail to work properly, like an undetected wifi card. After doing some checks we realize the operating system we just installed does not support our wifi card. Before such scenario we may edit our kernel’s configuration adding support for the device we need. On a previous article on LinuxHint we took this scenario to teach how to compile the Slackware Linux kernel to add hardware support. If we want we can also remove hardware support we don’t need from our kernel to make it lighter.
While modifying a kernel we can edit the hardware support as native or we can load support as a loadable module called upon need, and of course you can write your own modules if needed.
Kernel modules have advantages over regular applications with the same utility (such as external drivers) because modules only work upon need. In contrast with applications kernel modules release hardware resources terminating all it’s activity while regular applications may retain them. On the other hand it’s disadvantage is regular applications are less likely to make the system crash.
Since the Linux kernel administrates every interaction between our hardware and software, it can also regulate functions of our system. By editing the Linux kernel we can remove or add support for internet protocols as IPv6, firewall tables and every way of interaction between our hardware and software.
It is critical to keep the core of our system, the kernel updated in order to avoid security flaws such as 2018-14634 which allows privileges escalation within a system. On LinuxHint we already explained how to keep your kernel upgraded, check this article to keep your Debian’s kernel upgraded, this for your Ubuntu kernel and this one to upgrade Linux Mint kernel.
See Also this additional article written on LinuxHint: Linux Kernel Tutorial For Beginners.
I hope you found this introduction to the Linux kernel useful to understand it’s functions and potential in an easy way. Keep following us on LinuxHint for more tips and updates on Linux.