Loading... # Linux 内核四大核心模块技术分析 # 一、概述 ## 1. Linux 内核简介 Linux 内核是操作系统的核心,负责管理 CPU、内存、设备、文件系统等所有系统资源。如果把 Linux 比作一座城市,Shell 只是路牌,发行版只是装修风格,真正决定这座城市如何运转的,是藏在地下几乎没人看见的那一层——Linux 内核。 它不写 UI,不和用户聊天,但它决定了 CPU 给谁用、内存怎么分、硬盘什么时候读、网络包怎么飞。没有内核,Linux 连开机这个动作都完成不了。 ## 2. 核心问题 Linux 内核需要解决的核心问题只有一个:如何让有限的硬件资源公平、高效地服务于所有进程和应用程序。 # 二、进程管理 ## 1. 核心问题 在任何时刻,系统里都不止一个程序在运行:浏览器、编辑器、后台服务、系统守护进程等。但现实只有一个 CPU 或有限几个核,不可能同时跑完所有事情。 进程管理要解决的问题:CPU 给谁?什么时候给?给多久? ## 2. 工作原理 ### A. 进程状态 每启动一个程序,内核都会为它创建一个进程。每个进程都有状态: - 运行中 - 就绪 - 睡眠 - 等待 I/O - 结束 ### B. 调度器 内核里的调度器不断在进程之间切换,通过时间片、优先级、调度策略,让看起来像并行的世界成立。 现代 Linux 使用的是 CFS(Completely Fair Scheduler,完全公平调度器),核心思想非常朴素:谁欠 CPU 多,谁先补;谁用得多,谁靠后。 ```mermaid graph TD A[进程调度] --> B{选择下一个进程} B --> C[就绪队列] C --> D[计算虚拟运行时间] D --> E[选择 vruntime 最小的进程] E --> F[分配 CPU 时间片] F --> G[进程执行] G --> H{时间片用完?} H -->|是| I[更新 vruntime] I --> J[放回就绪队列] J --> B H -->|否| G ```  ## 3. 解决的问题 - 多任务系统为什么不卡死 - 后台程序不会饿死前台应用 - 高负载时系统依然可控 没有进程管理,Linux 只能一次跑一个程序,直接退化成上世纪计算机。 # 三、内存管理 ## 1. 核心问题 如果说 CPU 是权力,内存就是资源,而资源永远不够用。 Linux 内存管理模块面对的核心问题只有一个:程序要的内存,比物理内存多,怎么办? ## 2. 工作原理 ### A. 虚拟内存 Linux 并不让程序直接接触物理内存,而是引入了虚拟内存的概念: - 每个进程看到的,都是一整块连续、独立的地址空间 - 实际上,这些地址会被映射到真正的物理内存页 - 不常用的内存页,会被换出到磁盘(Swap) - 需要时再换回来,程序毫无察觉 ### B. 页表管理 内核负责维护页表,将虚拟地址映射到物理地址。 ### C. 内存回收 使用 LRU(Least Recently Used)等算法回收不常用的内存页。 ### D. 安全隔离 防止进程互相踩内存,确保每个进程只能访问自己的地址空间。 ```mermaid graph LR A[进程A 虚拟地址空间] -->|页表映射| B[物理内存页1] A -->|页表映射| C[物理内存页2] D[进程B 虚拟地址空间] -->|页表映射| E[物理内存页3] D -->|页表映射| F[物理内存页4] C -->|换出| G[Swap 分区] F -->|换出| G ```  ## 3. 解决的问题 - 程序不用关心内存布局 - 单个程序不容易拖垮整个系统 - 系统能在内存紧张时优雅降级 内存管理让 Linux 学会了精打细算加障眼法。 # 四、文件系统 ## 1. 核心问题 文件系统模块负责把杂乱无章的硬盘块,变成你能理解的文件、目录、权限、挂载点。 在 Linux 世界里,有一句著名的话:Everything is a file。这不是文艺,而是内核设计哲学。 ## 2. 工作原理 ### A. VFS(虚拟文件系统) 内核提供统一的 VFS 层,不同文件系统(ext4、xfs、btrfs、NFS)挂在 VFS 下面。用户操作文件时,走的是统一接口,具体怎么读写由底层文件系统自己实现。 这也是为什么 Linux 可以同时挂载: - 本地硬盘 - U 盘 - 网络文件系统 - /proc 这种根本不存在于磁盘上的文件 ```mermaid graph TD User[用户空间应用] -->|open/read/write| VFS[VFS 虚拟文件系统] VFS -->|ext4 操作| Ext4[ext4 文件系统] VFS -->|xfs 操作| XFS[xfs 文件系统] VFS -->|nfs 操作| NFS[NFS 网络文件系统] VFS -->|proc 操作| Proc[proc 伪文件系统] Ext4 --> Disk[本地硬盘] XFS --> Disk NFS --> Network[网络存储] Proc --> Memory[内存数据] ```  ## 3. 解决的问题 - 存储介质差异被完全屏蔽 - 权限与安全统一管理 - 工具链可以高度复用 没有文件系统模块, Linux 只是会算数的铁疙瘩。 # 五、设备与 I/O 管理 ## 1. 核心问题 硬件世界是混乱的:不同厂商、不同接口、不同协议、不同中断方式。而软件世界需要的是统一、稳定、可预期。 这中间的脏活累活,全由内核的设备与 I/O 管理模块包了。 ## 2. 工作原理 ### A. 驱动程序 每种硬件由对应的驱动程序控制。驱动向内核注册自己,内核向上暴露统一接口(read / write / ioctl)。 ### B. 中断、DMA、缓冲区 中断、DMA、缓冲区等底层操作,全在内核内部消化。 ### C. 统一接口 这也是为什么: - 键盘、网卡、硬盘,看起来操作方式差不多 - 程序不用关心硬件型号 - 热插拔设备可以即插即用 ```mermaid graph TD App[应用程序] -->|系统调用| Sys[系统调用接口] Sys -->|read/write/ioctl| VFS[VFS 层] VFS -->|字符设备| CharDev[字符设备驱动] VFS -->|块设备| BlockDev[块设备驱动] VFS -->|网络设备| NetDev[网络设备驱动] CharDev -->|控制| HW1[键盘/鼠标/串口] BlockDev -->|控制| HW2[硬盘/SSD] NetDev -->|控制| HW3[网卡] HW1 -->|中断| IRQ[中断处理] HW2 -->|DMA| DMA[DMA 传输] HW3 -->|中断| IRQ ```  ## 3. 解决的问题 - 硬件差异对应用透明 - 系统稳定性显著提高 - 驱动可以独立演进,不拖垮内核核心逻辑 没有设备管理,Linux 只能活在模拟器里。 # 六、总体架构 Linux 内核并不神秘,它只是把四件事做到极致: - 进程管理:让 CPU 公平高效地服务所有程序 - 内存管理:让有限内存支撑无限野心 - 文件系统:让存储世界有秩序、有规则 - 设备与 I/O 管理:让混乱硬件变得可控、可编程 ```mermaid graph TB User[用户空间应用] -->|系统调用| Kernel[Linux 内核] Kernel --> PM[进程管理] Kernel --> MM[内存管理] Kernel --> FS[文件系统] Kernel --> IO[设备与 I/O 管理] PM --> CPU[CPU] MM --> RAM[物理内存] MM --> Swap[Swap 分区] FS --> Storage[存储设备] IO --> Devices[硬件设备] ```  你每天敲的每一条命令、跑的每一个 AI 服务、部署的每一个容器,最终都绕不开这四个模块在背后默默加班。 *** ## 参考资料 1. [真正撑起整个 Linux 世界的,不是命令行,而是这 4 个内核模块](https://mp.weixin.qq.com/s/fTCY0YO9HucW5-vG8MZ5fw) 最后修改:2026 年 01 月 15 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏