作为全球应用最广泛的开源操作系统内核,Linux内核不仅支撑着Android系统、云计算平台和超级计算机,更是理解现代操作系统原理的最佳实践样本。
典型内核源码目录结构(以Linux 5.15为例):
linux-5.15/
├── arch/ # 硬件架构代码(x86, arm, riscv等)
├── block/ # 块设备层(硬盘、SSD调度)
├── crypto/ # 加密算法(AES, SHA等)
├── drivers/ # 设备驱动(占代码量60%!)
│ ├── gpu/ # 显卡驱动
│ ├── net/ # 网卡驱动
│ └── ... # 其他成千上万驱动
├── fs/ # 文件系统王国
│ ├── ext4/ # 经典日志文件系统
│ ├── nfs/ # 网络文件系统
│ └── proc/ # 虚拟文件系统(/proc)
├── include/ # 头文件库(内核API定义)
├── init/ # 内核启动流程(start_kernel()在此)
├── ipc/ # 进程间通信(信号量、共享内存等)
├── kernel/ # 核心调度器(进程/线程管理)
├── lib/ # 通用库(CRC校验、字符串操作)
├── mm/ # 内存管理(物理&虚拟内存)
├── net/ # 网络协议栈
│ ├── ipv4/ # TCP/IP协议实现
│ └── wireless/ # WiFi协议
└── tools/ # 开发工具(性能分析、测试套件)如果把内核比作一辆汽车,刚才的目录结构是零件摆放位置,现在我们要组装这些零件,看看它们如何协作实现核心功能。

(1)进程的三种状态
(2)调度算法:谁该先用 CPU?
完全公平调度(CFS,针对普通进程):
实时调度(FIFO/RR,针对实时进程):
(3)调度时机:什么时候切换进程?


(1)虚拟内存:每个进程的 "专属内存"
(2)物理内存分配策略
(3)swap 空间:内存不够时的 "临时仓库"


(1)四大核心数据结构
(2)操作流程示例(打开一个文件)
(3)支持多种文件系统的秘密
VFS 定义了一套统一的操作接口(如open/read/write),不同文件系统(EXT4/NFS/FAT32)只需实现这些接口。就像不管是 U 盘还是硬盘,你在电脑上都能用同样的复制粘贴操作,背后是 VFS 在做翻译。

(1)TCP/IP 协议栈分层实现
应用层(HTTP/FTP/SMTP)
├─ 传输层(TCP/UDP:保证数据可靠传输或快速传输)
├─ 网络层(IP:负责路由寻址,比如从北京到上海的路径规划)
└─ 数据链路层(以太网/Wi-Fi:处理数据帧的发送接收,比如局域网内的设备通信)(2)关键组件
协议处理模块:
网络设备驱动:
套接字(socket):
(3)数据发送过程(以发送微信消息为例)
当多个进程需要协作(比如浏览器的多个标签页共享 Cookie),就需要 IPC 机制。Linux 提供了多种通信方式,各有适用场景:
(1)管道(Pipe)
(2)共享内存(Shared Memory)
(3)信号量(Semaphore)
(4)消息队列(Message Queue)
IPC 方式对比表:
方式 | 速度 | 复杂度 | 数据量 | 适用场景 |
|---|---|---|---|---|
管道 | 中等 | 简单 | 小数据 | 父子进程间简单通信 |
共享内存 | 最快 | 复杂 | 大数据 | 高频数据交换 |
信号量 | 快 | 中等 | 控制信号 | 资源互斥与同步 |
消息队列 | 中等 | 中等 | 消息集合 | 异步解耦通信 |
+------------------+ 4GB(虚拟地址空间)
| 内核空间(3-4GB) | 所有进程共享,存放内核代码/数据
+------------------+
| 用户空间(0-3GB) | 每个进程独立,存放程序代码/数据/堆/栈
+------------------+当用户程序需要访问硬件(如读文件、申请内存),必须通过系统调用进入内核空间:
类比:
用户空间像普通居民区,内核空间像保护区。居民(用户程序)不能随便进入保护区,必须通过大门(系统调用),由保安(内核)检查许可后陪同进入(执行特权操作)。
Linux内核的设计哲学——模块化、可扩展性、性能优化——不仅体现在代码结构中,更渗透着Unix"做一件事并做好"的工程智慧。