Linux内核--五大子系统

news2024/11/25 15:14:01

Linux内核有五大核心子系统,分别是进程调度系统、虚拟文件系统(VFS)、内存管理单元(MMU)、网络单元、进程间通信(IPC)。
在Linux内核中的主要组件中,五个核心子系统是最为重要的组成部分,它与系统调用接口(System Call Interface)、以及Arch层组成了整个Linux的内核的框架。
Alt

其中,System Call Interface(SCI)提供从用户空间到内核空间执行接口调用的方法,该接口可以依赖于体系结构,即使在同一处理器系列中也是如此。可以在 ./linux/kernel 中找到 SCI 的实现,与体系结构相关的部分在 ./linux/arch 中。

1、进程调度系统

此内核子系统负责为在系统上同时运行的所有进程之间公平地分配CPU时间,是Linux内核最重要的子系统。

进程管理的重点是进程的执行。在内核中,这被称为线程,代表处理器的单独虚拟化(线程代码、数据、堆栈和 CPU 寄存器)。在用户空间中,通常使用术语“进程”,但Linux实现并未区分这两个概念(进程和线程)。内核通过 SCI 提供应用程序接口(API)来创建新进程(fork、exec 或可移植操作系统接口POSIX函数)、停止进程(kill、exit)以及它们之间的通信和同步机制(信号或 POSIX 机制)。

在进程管理中,需要在活动线程之间共享 CPU。内核实现了一种新的调度算法,无论有多少线程争夺CPU,该算法都以恒定的时间运行,这被称为 O(1) 调度程序,表示调度一个线程与调度多个线程所花费的时间相同。 O(1) 调度程序还支持多个处理器(称为对称多处理或 SMP)。(可以在 /linux/kernel中找到进程管理源代码,在/linux/arch目录中可找到与体系结构相关的源代码。)

2、虚拟文件系统

该子系统负责提供统一的接口,以访问跨不同文件系统和物理存储介质的存储数据。

虚拟文件系统(VFS)是 Linux 内核的一个有趣的方面,因为它为文件系统提供了通用的接口抽象。 VFS 在 SCI 和内核支持的文件系统之间提供了一个交换层(参见下图)。
![VFS 提供用户和文件系统之间的交换结构]Alt

VFS 的顶部是诸如打开、关闭、读取和写入等功能的通用 API 抽象。 VFS的底层是文件系统抽象,定义了上层功能的实现方式。这些是给定文件系统的插件(现在有50多个)。可以在./linux/fs 中找到文件系统源码。

文件系统层下面是高速缓冲区,它为文件系统层提供一组通用的功能(独立于任何特定的文件系统)。该缓存层通过短时间保留数据(或推测性地预读,以便在需要时提供数据)来优化对物理设备的访问。高速缓冲区下方是设备驱动程序,它们实现特定物理设备的接口。

关于设备驱动程序,Linux 内核中的绝大多数源代码都存在于使特定硬件设备可用的设备驱动程序中。 Linux 源代码树提供了一个驱动程序子目录,该子目录按支持的各种设备(例如蓝牙、I2C、串行等)进一步划分。可以在./linux/drivers 中找到设备驱动程序源。

3、内存管理单元

该内核子单元负责在系统上运行的各种进程之间正确分配内存资源。它不仅仅是为每个进程提供单独的虚拟地址空间。

内存是Linux内核管理的重要资源。为了提高效率,考虑到硬件管理虚拟内存的方式,内存是在所谓的页中管理的(大多数体系结构的大小为4KB)。Linux内核提供了管理可用内存的方法,以及物理和虚拟映射的硬件机制。

但是内存管理远不止管理4KB缓冲区。Linux在提供了超过4KB缓冲区的虚拟内存,例如slab分配器。此内存管理方案使用4KB缓冲区作为其基础,但随后从内部分配结构,跟踪哪些页已满、哪些部分使用和哪些已经为空。这使得该方案可以根据更大的系统需求动态增长和减小内存。

支持多个用户的内存,有时会出现可用内存耗尽的情况。因此,页可以从内存中移出到磁盘上。这个过程被称为交换,可以在Linux内核源码的/linux/mm目录下找到内存管理源代码。

4、 网络单元

该单元允许Linux系统通过网络连接到其他系统。它支持许多可能的硬件设备,以及许多可以使用的网络协议。网络子系统抽象了这两个实现细节,以便用户进程和其他内核子系统可以访问网络,而不必知道正在使用的物理设备或协议。
根据设计,网络堆栈遵循以协议本身为模型的分层架构。回想一下,互联网协议(IP)是位于传输协议(最常见的是传输控制协议或TCP)之下的核心网络层协议。TCP之上是套接字层,通过SCI调用。

套接字层是网络子系统的标准 API,并为各种网络协议提供用户界面。从原始帧访问到 IP 协议数据单元 (PDU),再到 TCP 和用户数据报协议 (UDP),套接字层提供了一种标准化方法,来管理连接和在端点之间移动数据。可以在内核中的 ./linux/net 中找到网络源码。

5、进程间通信

该单元实现进程间的相互通信,并与内核通信,以协调其活动。Linux支持许多进程间通信(IPC)机制,信号和管道是其中的两个,Linux也支持以Unix TM版本命名的System V IPC机制。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/783652.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

docker-compose安装redis一主二从三哨兵集群

准备 docker安装参考: CentOS 安装 docker详解_centos安装docker_慕菲烟云的博客-CSDN博客 docker-compose安装参考:docker之docker-compose_docker compose no-cache_慕菲烟云的博客-CSDN博客 准备一台Linux服务器(IP :192.1…

连连看小游戏(html+css+js)

花费了2个小时的摸鱼时间,我成功地编写了一个精彩的连连看小游戏,让我感到非常开心和满足。这款游戏玩起来相当出色,现在我很高兴地与大家分享。 在这个连连看小游戏的设计过程中,我注重细节和用户体验。通过精心安排的图形和布局…

Linux学习笔记--如何在ubuntu中启用root用户和安装软件的方法(解决安装依赖)

一、ubuntu启用root用户 打开Terminal(终端),右键点击桌面,选择终端,弹出终端窗口。(使用快捷键ctrlaltt,也可以调出Terminal)。 指令su,该指令可切换用户或者切换到超级管理员root。 su 在终端…

操作系统_进程与线程(一)

目录 1. 进程与线程 1.1 进程的概念 1.2 进程的特征 1.3 进程的状态与转换 1.4 进程的组织 1.4.1 进程控制块PCB 1.4.2 程序段 1.4.3 数据段 1.5 进程控制 1.5.1 进程的创建 1.5.2 进程的终止 1.5.3 进程的阻塞和唤醒 1.6 进程的通信 1.6.1 共享存储 1.6.2 消息…

C语言写杨辉三角

上来先展示一下运行结果吧&#xff1a; 接下来就是分析过程&#xff0c;先来画图分析一番&#xff1a; 根据画图分析的结果&#xff0c;就可以编写代码了&#xff1a; #include<stdio.h> #define row 20 //定义行数常量&#xff0c;更改数值改变行数 #define col 20 …

Alluxio加速器部署

目录 一、Alluxio概述 二、优势 三、Alluxio架构 Ⅰ).Masters HA集群角色 a).Leading Master b).Standby Master c).Secondary Master d).Job Master Ⅱ).Workers 1.Alluxio Workers Ⅲ).Client 1.前期准备 2.下载 Alluxio 3.配置 Alluxio 4.验证 Alluxio 运行环境 5…

macOS系统下编译linux-adk源码

1.下载 linux-adk源码 https://github.com/gibsson/linux-adk.git 2.安装libusb库 brew install libusb 3.修改Makefile CFLAGS += -Isrc -I/usr/local/Cellar/libusb/1.0.26/include/libusb-1.0 4.编译 make ./linux-adk -h 查看用法 查看系统已连接USB设备 system_p…

Spring Data Redis操作Redis

在Spring Boot项目中&#xff0c;可以使用Spring Data Redis来简化Redis操作&#xff0c;maven的依赖坐标&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></…

STM32使用DMA实现GPIO的高速翻转

STM32使用DMA实现GPIO的高速翻转 一、前言二、原理三、配置IO口四、配置DMA五、程序内容5.1 gpio配置5.2 keil中添加.C和.h文件&#xff08;需要DMA发送控制GPIO的数组波形文件&#xff09;如不想这么麻烦的可以略过&#xff0c;在main函数中定义一个数组即可&#xff0c;因为我…

0基础学C#笔记07:选择排序法

文章目录 前言一、选择排序原理二、使用步骤三、打印结果总结 前言 我们常用的排序方法有十种&#xff0c;分别是&#xff1a; 冒泡排序&#xff1b;选择排序&#xff1b;插入排序&#xff1b;希尔排序&#xff1b;归并排序&#xff1b;快速排序&#xff1b;堆排序&#xff1…

全志F1C200S嵌入式驱动开发(spi-nor驱动)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 和v3s一样,f1c200s本身也支持spi-nor flash。当然,不管是norflash,还是nandflash,都是为了能够让程序脱离sd卡,直接依靠板子上面的flash,就可以完成正常地加载和运行工作。tf…

《Docker容器编排模式:了解Sidecar、Ambassador等模式,构建高效稳定的容器化应用》

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

基于 Graviton2处理器构建容器化基因分析工作负载

概述 相对于基于传统 x86架构的处理器来说&#xff0c;Amazon 设计的基于 ARM 架构的 Graviton 处理器为 EC2中运行的云工作负载提供了更佳的性价比。基于 Graviton2 的实例支持广泛的通用型、突发型、计算优化型、内存优化型、存储优化型和加速计算型工作负载&#xff0c;包括…

重生之我要学c++第二课

在上期内容&#xff0c;我们讲述了c相比于C语言的更简易之处&#xff0c;本期就让我们继续学习相关的知识&#xff0c;了解c宇宙 引用(起别名) 引用不是新定义一个变量&#xff0c;而是给已存在变量取了一个别名&#xff0c;编译器不会为引用变量开辟内存空 间&#xff0c;它…

基于 KubeKey 扩容 Kubernetes v1.24 Worker 节点实战

前言 知识点 定级&#xff1a;入门级KubeKey 扩容 Worker 节点openEuler 操作系统的基本配置Kubernets 基本命令 实战服务器配置(架构 1:1 复刻小规模生产环境&#xff0c;配置略有不同) 主机名IPCPU内存系统盘数据盘用途ks-master-0192.168.9.912450100KubeSphere/k8s-mas…

新能源汽车的发展

目录 1.什么是新能源 2.什么是新能源汽车 3.新能源汽车的优点 4.新能源汽车的危害 5.新能源汽车未来的发展 1.什么是新能源 新能源是指与传统能源&#xff08;如化石燃料&#xff09;相比&#xff0c;更具可再生性、清洁性和低碳排放的能源形式。它主要通过利用自然资源和可…

C语言---每天小练习,从大到小输出

题目&#xff1a;从大到小输出 写代码将三个整数数按从大到小输出。 例如&#xff1a; 输入&#xff1a;2 3 1 输出&#xff1a;3 2 1 int main() {// 初始化int a 0;int b 0;int c 0;int d 0;scanf("%d %d %d", &a, &b, &c);if (a < b) {…

Unity Shader - UI/Default shader 优化示例

文章目录 环境优化示例Texture Format : Alpha 8 和 shaderlab : _TextureSampleAddshaderlab : _UIMaskSoftnessX 和 _UIMaskSoftnessYshaderlab _Colorshader ARM Mobile Studio - Graphics Analyzer优化前优化后 环境 Unity : 2020.3.37f1 Pipeline : BRP 优化 做性能优化…

laravel10.x nginx服务推荐配置文件

laravel10.x 服务器配置 如果您正在将应用程序部署到运行Nginx的服务器&#xff0c;则可以使用以下配置文件作为配置web服务器的起点。很可能&#xff0c;此文件需要根据服务器的配置进行自定义。如果你想在管理服务器方面获得帮助&#xff0c;可以考虑使用第一方Laravel服务器…

3分钟搭建一个springboot项目并运行起来

第一步&#xff1a; 创建一个maven项目。 第二步&#xff1a; 导入maven依赖&#xff0c;代码如下&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http:/…