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 多,谁先补;谁用得多,谁靠后。

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

mermaid

3. 解决的问题

  • 多任务系统为什么不卡死
  • 后台程序不会饿死前台应用
  • 高负载时系统依然可控

没有进程管理,Linux 只能一次跑一个程序,直接退化成上世纪计算机。

三、内存管理

1. 核心问题

如果说 CPU 是权力,内存就是资源,而资源永远不够用。

Linux 内存管理模块面对的核心问题只有一个:程序要的内存,比物理内存多,怎么办?

2. 工作原理

A. 虚拟内存

Linux 并不让程序直接接触物理内存,而是引入了虚拟内存的概念:

  • 每个进程看到的,都是一整块连续、独立的地址空间
  • 实际上,这些地址会被映射到真正的物理内存页
  • 不常用的内存页,会被换出到磁盘(Swap)
  • 需要时再换回来,程序毫无察觉

B. 页表管理

内核负责维护页表,将虚拟地址映射到物理地址。

C. 内存回收

使用 LRU(Least Recently Used)等算法回收不常用的内存页。

D. 安全隔离

防止进程互相踩内存,确保每个进程只能访问自己的地址空间。

graph LR
    A[进程A 虚拟地址空间] -->|页表映射| B[物理内存页1]
    A -->|页表映射| C[物理内存页2]
    D[进程B 虚拟地址空间] -->|页表映射| E[物理内存页3]
    D -->|页表映射| F[物理内存页4]
    C -->|换出| G[Swap 分区]
    F -->|换出| G

mermaid

3. 解决的问题

  • 程序不用关心内存布局
  • 单个程序不容易拖垮整个系统
  • 系统能在内存紧张时优雅降级

内存管理让 Linux 学会了精打细算加障眼法。

四、文件系统

1. 核心问题

文件系统模块负责把杂乱无章的硬盘块,变成你能理解的文件、目录、权限、挂载点。

在 Linux 世界里,有一句著名的话:Everything is a file。这不是文艺,而是内核设计哲学。

2. 工作原理

A. VFS(虚拟文件系统)

内核提供统一的 VFS 层,不同文件系统(ext4、xfs、btrfs、NFS)挂在 VFS 下面。用户操作文件时,走的是统一接口,具体怎么读写由底层文件系统自己实现。

这也是为什么 Linux 可以同时挂载:

  • 本地硬盘
  • U 盘
  • 网络文件系统
  • /proc 这种根本不存在于磁盘上的文件
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[内存数据]

mermaid

3. 解决的问题

  • 存储介质差异被完全屏蔽
  • 权限与安全统一管理
  • 工具链可以高度复用

没有文件系统模块, Linux 只是会算数的铁疙瘩。

五、设备与 I/O 管理

1. 核心问题

硬件世界是混乱的:不同厂商、不同接口、不同协议、不同中断方式。而软件世界需要的是统一、稳定、可预期。

这中间的脏活累活,全由内核的设备与 I/O 管理模块包了。

2. 工作原理

A. 驱动程序

每种硬件由对应的驱动程序控制。驱动向内核注册自己,内核向上暴露统一接口(read / write / ioctl)。

B. 中断、DMA、缓冲区

中断、DMA、缓冲区等底层操作,全在内核内部消化。

C. 统一接口

这也是为什么:

  • 键盘、网卡、硬盘,看起来操作方式差不多
  • 程序不用关心硬件型号
  • 热插拔设备可以即插即用
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

mermaid

3. 解决的问题

  • 硬件差异对应用透明
  • 系统稳定性显著提高
  • 驱动可以独立演进,不拖垮内核核心逻辑

没有设备管理,Linux 只能活在模拟器里。

六、总体架构

Linux 内核并不神秘,它只是把四件事做到极致:

  • 进程管理:让 CPU 公平高效地服务所有程序
  • 内存管理:让有限内存支撑无限野心
  • 文件系统:让存储世界有秩序、有规则
  • 设备与 I/O 管理:让混乱硬件变得可控、可编程
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[硬件设备]

mermaid

你每天敲的每一条命令、跑的每一个 AI 服务、部署的每一个容器,最终都绕不开这四个模块在背后默默加班。


参考资料

  1. 真正撑起整个 Linux 世界的,不是命令行,而是这 4 个内核模块
最后修改:2026 年 01 月 15 日
如果觉得我的文章对你有用,请随意赞赏