


What are the subsystems of the linux kernel?
The Linux kernel has 5 subsystems: 1. Process Scheduling Control System (SCHED); 2. Memory Management System (MM), whose main function is to control multiple processes to safely share the main memory area; 3. Virtual file system (VFS); 4. Network interface (NET); 5. Inter-process communication (IPC).
The operating environment of this tutorial: Ubuntu 16.04 system, Dell G3 computer.
Kernel:
In computer science, it is a computer program used to manage data I/O (input and output) requests issued by software and translate these requests It provides instructions for data processing and is processed by the central processing unit (CPU) and other electronic components in the computer. It is the most basic part of the modern operating system. It is a piece of software that provides secure access to computer hardware for many applications. This access is limited, and the kernel determines when and how long a program can operate on a certain part of the hardware. Operating directly on the hardware is very complex. Therefore, the kernel usually provides a hardware abstraction method to complete these operations. Through inter-process communication mechanisms and system calls, application processes can indirectly control required hardware resources (especially processors and IO devices).
What are the subsystems of the Linux kernel?
The Linux kernel mainly consists of process scheduling (SCHED), memory management (MM), and virtual file system It consists of 5 subsystems (VFS), network interface (NET) and inter-process communication (IPC), as shown in the figure below.
1. Process Scheduling
Many processes in the process scheduling control system The access of a process to the CPU enables multiple processes to be executed "micro-serially and macro-parallelly" in the CPU. Process scheduling is at the center of the system, and other subsystems in the kernel depend on it because each subsystem needs to suspend or resume processes.
As shown in the figure below, the Linux process switches between several states.
Linux process state transition
In device driver programming, when the requested resources cannot be satisfied, the driver will generally schedule other processes to execute and make this process enter In the sleep state, it will not be awakened and enter the ready state until the resource it requested is released. Sleep is divided into interruptible sleep and uninterruptible sleep. The difference between the two is that interruptible sleep will wake up when receiving a signal.
A process that is completely in the TASK_UNINTERRUPTIBLE state cannot even be "killed", so the kernel after Linux 2.6.26 also has a TASK_KILLABLE state, which is equal to "TASK_WAKEKILL|TASK_UNINTERRUPTIBLE" and can respond to fatal signals.
In the Linux kernel, the task_struct structure (include/linux/sched.h) is used to describe the process. This structure contains memory resources, file system resources, file resources, tty resources, and signals that describe the process. Pointers to handle etc. Linux threads are implemented using a lightweight process model. When a thread is created in user space through the pthread_create() API, essentially the kernel just creates a new task_struct and points all resource pointers of the new task_struct to the one that created it. Resource pointer of task_struct.
The vast majority of processes (and multiple threads in the process) are created by user-space applications. When they require access to underlying resources and hardware, they will enter the kernel space through system calls. Sometimes, in kernel programming, if several tasks need to be executed concurrently, kernel threads can be started, and these threads do not have user space. The function to start the kernel thread is: pid_t kernel_thread(int (*fn)(void *), void *arg, unsigned long flags);
2. Memory management
The main function of memory management is to control multiple processes to safely share the main memory area. Linux memory management completes the conversion from virtual memory to physical memory for each process when the CPU provides a memory management unit (MMU). Linux 2.6 introduced support for MMU-less CPUs.
As shown in the figure, generally speaking, each process of Linux on a 32-bit processor enjoys 4GB of memory space, 0~3GB belongs to user space, 3~4GB belongs to kernel space, and kernel space has a certain impact on conventional memory. , I/O device memory and high-end memory have different processing methods. The specific boundaries between kernel space and user space can be adjusted. Under the kernel configuration option Kernel Features→Memory split, the boundary can be set to 2GB or 3GB.
Linux process address space
As shown in the figure above, the overall memory management of the Linux kernel is relatively large, including the underlying Buddy algorithm, which is used to manage each page. Occupancy, slab allocator in kernel space and secondary management of C library in user space. In addition, the kernel also provides page cache support, using memory to cache the disk, and the per backing device info flusher thread is used to flush dirty page cache back to the disk. Kswapd (swap process) is the kernel thread used for page recycling (including file-backed pages and anonymous pages) in Linux. It uses the least recently used (LRU) algorithm for memory recycling.
3. Virtual file system
As shown in the figure,
Linux Virtual File System
The Linux virtual file system hides the specific details of various hardware and provides a unified interface for all devices. Moreover, it is independent of each specific file system and is an abstraction of various file systems. It provides unified vfs_read(), vfs_write() and other interfaces for upper-layer applications, and calls member functions of the file_operations structure implemented in the specific underlying file system or device driver.
4. Network interface
The network interface provides access to various network standards and support for various network hardware. As shown in Figure 3.8, the network interface in Linux can be divided into network protocols and network drivers. The network protocol part is responsible for implementing every possible network transmission protocol. The network device driver is responsible for communicating with hardware devices. Every possible Hardware devices have corresponding device drivers.
Linux network architecture
The Linux kernel supports many types of protocol stacks, such as Internet, UNIX, CAN, NFC, Bluetooth, WiMAX, IrDA, etc. The upper layer Applications uniformly use the socket interface.
5. Inter-process communication
Inter-process communication supports communication between processes. Linux supports a variety of communication mechanisms between processes, including semaphores, shared memory, Message queues, pipes, UNIX domain sockets, etc. These mechanisms can assist multiple processes, mutually exclusive access to multiple resources, inter-process synchronization and message delivery. In actual Linux applications, people tend to use UNIX domain sockets rather than message queues and other mechanisms in System V IPC. The Android kernel has added a new Binder inter-process communication method.
The dependencies between the five components of the Linux kernel are as follows:
The relationship between process scheduling and memory management: these two sub- Systems depend on each other. In a multi-program environment, if a program wants to run, a process must be created for it. The first thing to do when creating a process is to load the program and data into the memory.
The relationship between inter-process communication and memory management: The inter-process communication subsystem relies on memory management to support a shared memory communication mechanism. This mechanism allows two processes to have their own private space. In addition, you can also access a common memory area.
The relationship between the virtual file system and the network interface: The virtual file system uses the network interface to support the Network File System (NFS), and also uses memory management to support RAMDISK devices.
The relationship between memory management and virtual file system: Memory management uses the virtual file system to support swapping, and the swapping process is regularly scheduled by the scheduler. This is why memory management relies on process scheduling. . When the memory map accessed by a process is swapped out, memory management issues a request to the virtual file system and, at the same time, suspends the currently running process.
In addition to these dependencies, all subsystems in the kernel also depend on some common resources. These resources include APIs used by all subsystems, such as functions for allocating and releasing memory space, functions for outputting warning or error messages, and debugging interfaces provided by the system.
Related recommendations: "Linux Video Tutorial"
The above is the detailed content of What are the subsystems of the linux kernel?. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics





As the core part of the operating system, the Linux kernel is responsible for important functions such as managing hardware resources and providing system calls. This article will delve into the five major parts of the Linux kernel, including process management, file system, network communication, device driver and memory management, and provide a detailed introduction and code examples. 1. Process Management Process Creation In the Linux kernel, process creation is implemented through the fork() system call. Here is a simple example code: #include

The previous article analyzed the page table creation for RISC-V Linux startup. It was mentioned that the RISC-V Linux entry address must be 2M aligned. Today I will talk about how to solve the 2M alignment problem, or how to optimize part of the memory.

It’s long and has a lot of technical content, so click to follow it and you won’t get lost. Preface: Understanding the Linux Kernel A computer system is a symbiosis of hardware and software. They are interdependent and inseparable. Computer hardware Linux kernel transplantation steps include peripheral devices, processors, memory, hard drives and other electronic devices that make up the computer cylinder. And without software to operate and control it, it cannot work by itself. The software that completes this control work is called the operating system. In Linux terminology, it is called the "kernel" or "core". The main modules (or components) of the Linux kernel are divided into the following parts: storage management, CPU and process management, file system, device management and driver, network communication Linux forum, and system

Hello dear readers! Here, I am honored to share with you the valuable experience and skills I have accumulated as a senior network engineer with my professional skills in the development and optimization of the Linux kernel TCP protocol stack. I believe that through this article, we can learn from each other and discuss it, and bring practical and useful reference materials to you who have a strong interest in this field or are currently working on it. 1. TCP connection establishment TCP connection establishment is a key transaction of the TCP protocol stack, but it is not uncommon to face many connection problems. After careful consideration and detailed debugging, I discovered some common and practical problems and their solutions, including preventing SYN flooding attacks (by adjusting system parameters) and dealing with network congestion (that is, using TCPFastOp

Discusses the view that the Linux kernel plays an important role in computer operating systems. Linux kernel design and implementation. Through in-depth analysis of Linux kernel design and practical applications, it reveals its prominent position and influence in this field. 1. Optimized memory management By using virtual memory management technology, the Linux kernel can efficiently complete memory allocation and recycling. With the help of the replacement page algorithm, the Linux kernel is designed and implemented to accurately handle the mapping relationship between physical memory and virtual memory. Flexible adjustments can be made based on the specific needs of the application, thereby improving overall system performance. 2. The powerful process management kernel uses its excellent multi-tasking technology to enable multiple processes to coexist harmoniously in a single system. Carefully formulated

This is a 1500-word article that explores the Linux kernel source code distribution in depth. Due to limited space, we will focus on the organizational structure of the Linux kernel source code and provide some specific code examples to help readers better understand. The Linux kernel is an open source operating system kernel whose source code is hosted on GitHub. The entire Linux kernel source code distribution is very large, containing hundreds of thousands of lines of code, involving multiple different subsystems and modules. To gain a deeper understanding of the Linux kernel source code

The Android system and the Linux kernel are two closely related entities, and the relationship between them is close and complex. In the Android system, the Linux kernel plays an important role, providing underlying hardware drivers and system call support for the Android system. This article will explore the relationship between the Android system and the Linux kernel, how they interact and work together, and provide some specific code examples. Android is a mobile operating system developed based on the Linux kernel and is mainly used for mobile devices such as smartphones and tablets. L

The Linux kernel is the core of the operating system and controls access to system resources such as the CPU, I/O devices, physical memory, and file systems. During the boot process and while the system is running, the kernel writes various messages to the kernel ring buffer. These messages include a variety of information about system operations.
