Linux

What is the Linux kernel?

The Linux® kernel is the main component of a Linux operating system (OS) and is the core interface between a computer’s hardware and its processes. It communicates between the two, managing resources as efficiently as possible.

The kernel is so named because—like a seed inside a hard shell—it exists within the OS and controls all the major functions of the hardware, whether it’s a phone, laptop, server, or any other kind of computer.


What the kernel does

The kernel has 4 jobs:

  1. Memory management: Keep track of how much memory is used to store what, and where
  2. Process management: Determine which processes can use the CPU, when, and for how long
  3. Device drivers: Act as mediator/interpreter between the hardware and processes
  4. System calls and security: Receive requests for service from the processes

The kernel, if implemented properly, is invisible to the user, working in its own little world known as "kernel space," where it allocates memory and keeps track of where everything is stored.

What the user sees—web browsers, files, etc.—are known as the "user space." These applications interact with the kernel via a system call interface (SCI).

It may be helpful to think of the kernel is as a busy personal assistant for a powerful executive (the hardware). It’s the assistant’s job to relay messages and requests (processes) from the employees and the public (users) to the executive, to remember what is stored where (memory) in order to find files at a moment’s notice, and to determine who has access to the executive at any given time and for how long.


Where the kernel fits within the OS

To put the kernel in context, you can think of a Linux machine as having 3 layers:

  1. The hardware: The physical machine--the bottom or base of the system, made up of memory (RAM) and the processor or central processing unit (CPU), as well as I/O devices such as storage, networking, and graphics. The CPU performs computations and reads from, and writes to, memory.
  2. The Linux kernel: The core of the operating system (See? It’s right in the middle). It’s  software residing in memory that tells the CPU what to do.
  3. The processes (aka "user processes"): These are the running programs that the kernel manages. Processes are what collectively make up user space and are also known as user processes, regardless of whether or not a user interacts with them directly. For example, web servers run as user processes. Something else interesting to note is that the kernel also allows these processes/servers to communicate with each other (known as inter-process communication, or IPC).

Code executed by the system runs on CPUs in 1 of 2 modes: kernel mode or user mode. Code running in the kernel mode has unrestricted access to the hardware, while user mode restricts access to the CPU and memory to the system call interfaces. As briefly mentioned earlier, a similar separation exists for memory (kernel space and user space). These two small details form the base for some complicated operations like privilege separation for security to building containers and virtual machines.

This also means that if a process fails in user mode, the damage is limited and can be recoverable by the kernel. However, because of its access to memory and the processor, a kernel process crash can crash the entire system. Since there are safeguards in place and permissions required to cross boundaries, user process crashes can’t cause too many problems. That’s the idea, anyway.


Why choose Red Hat?

At Red Hat, Linux is the foundation of everything we do. Red Hat is the second largest corporate contributor to the Linux kernel, bringing with it the experience and expertise of 25 years and a large community of partners, customers, and experts from across the industry. That’s a long relationship, with a history and level of experience that’s hard to come by.

The Linux kernel is open-source, and open source is at the core of Red Hat’s values. Learn why we’ve built our company on our conviction that Red Hat® Enterprise Linux is the best.