一、层级架构框架图(标准内核分层)
二、五大核心子系统内部结构&实现原理
内部结构
• 进程描述符:struct task_struct(PCB核心)
• 调度实体:sched_entity
• 调度类:CFS普通进程、实时进程、空闲进程
• 核心队列:就绪队列、等待队列、睡眠队列
实现实例
1. 创建进程:fork() → 调用内核do_fork()
2. 执行程序:execve() → 清空地址空间加载新程序
3. 调度逻辑:CFS 计算虚拟运行时间,择优抢占CPU
4. 命令实测:ps -ef、top、nice 修改进程优先级
2. 内存管理子系统(MM)
内部结构
• 分层:页帧管理 → 伙伴系统 → Slab分配器 → 虚拟地址映射
• 核心结构:struct page、页表、vm_area_struct虚拟区间
• 机制:缺页异常、OOM查杀、Swap交换分区
实现实例
1. 应用malloc → glibc调用brk/mmap系统调用
2. 内核分配物理页,建立页表映射虚拟内存
3. 内存不足触发kswapd进程回收内存
4. 实操:free -h、cat /proc/meminfo、swapon
3. 虚拟文件系统 VFS(最核心抽象层)
四层核心对象(实现骨架)
1. super_block:文件系统超级块
2. inode:文件底层索引节点
3. dentry:目录项(路径缓存)
4. file:进程打开文件结构体
实现实例(读取文件全流程)
1. 用户程序 open("test.txt",O_RDONLY)
2. 进入内核sys_open,VFS解析路径找dentry→inode
3. 检查页缓存(内存管理),有数据直接拷贝
4. 无缓存调用块设备驱动读取磁盘扇区
5. 数据存入页缓存,拷贝至用户缓冲区
6. 对应实操:cat test.txt、mount挂载磁盘
4. 网络协议栈子系统
内核网络五层实现结构
Socket层 → 传输层(TCP/UDP) → 网络层(IP) → 链路层 → 网卡驱动
核心结构体:struct sk_buff 网络数据包载体
实现实例(TCP通信)
1. 服务端socket()->bind()->listen()->accept()
2. 客户端socket()->connect()建立三次握手
3. 内核协议栈封装IP+TCP报文
4. 下发网卡驱动完成报文收发
5. 实操:netstat -ntlp、curl、tcpdump抓包
5. 设备驱动子系统
三大分类实现
• 字符设备:串口、键盘、鼠标 / 主设备号驱动
• 块设备:硬盘、SSD、U盘(按块IO)
• 网络设备:网卡设备结构体net_device
实现实例
1. 硬盘读写:应用IO请求 → 通用块层 → IO调度器 → 磁盘驱动
2. 网卡收包:硬件中断 → 内核软中断 → 协议栈解析
3. 实操:lsblk查看块设备、dmesg查看驱动加载日志
三、内核全局调用关系(最简流程实例)
实例1:运行一条Linux命令 ls
1. Shell进程调用execve加载ls程序
2. 进程管理创建运行上下文,分配CPU时间片
3. ls调用readdir系统调用遍历目录
4. VFS通过inode读取磁盘目录数据
5. 内存管理分配临时缓冲区存放数据
6. 驱动读取硬件数据,逐层返回打印到终端
实例2:Java程序运行底层内核支撑
1. JVM 依赖内核进程调度分配CPU
2. JVM堆内存由内核内存管理虚拟内存映射
3. 日志读写依赖VFS文件系统
4. 网络请求走内核TCP协议栈
5. 磁盘持久化调用块设备驱动
四、内核源码目录对应框架(实战对应)
linux内核源码
├─ kernel/ 进程调度、系统调用、时钟核心
├─ mm/ 内存管理全部实现
├─ fs/ VFS+各类文件系统实现
├─ net/ 网络协议栈全套代码
├─ drivers/ 所有硬件驱动
├─ arch/ CPU架构适配(x86/arm)
├─ include/ 内核头文件、结构体定义
五、极简总结
1. 框架核心:用户态→系统调用→五大内核子系统→硬件
2. 所有功能全部依靠进程管CPU、内存管空间、VFS管文件、网络管通信、驱动管硬件联动实现
3. 所有应用行为,最终都会落到对应内核子系统完成硬件交互