最实用、最核心的知识是晦涩的、难学的,对于这个学习大纲希望对于正在学Linux内核路上的同学能有所帮助。

进程管理和调度
进程的优先级
进程生命周期
进程表示
- 进程类型
 - 命名空间
 - 进程ID号
 - 进程关系.
 
进程管理相关的系统调用
- 进程复制
 - 内核线程
 - 启动新进程
 - 退出进程
 
调度器的实现
- 概观
 - 数据结构
 - 处理优先级
 - 核心调度器
 
完全公平调度类
- 数据结构
 - CFS操作
 - 队列操作
 - 选择下一个进程
 - 处理周期性调度器
 - 唤醒抢占
 - 处理新进程
 
实时调度类
- 性质
 - 数据结构
 - 调度器操作
 
调度器增强
- SMP调度器
 - 调度域和控制组
 - 内核抢占和低延迟相关工作
 
内存管理
(N)UMA模型中的内存组织
- 概述
 - 数据结构
 
页表
- 数据结构
 - 页表项的创建和操作
 
初始化内存管理
- 建立数据结构
 - 特定于体系结构的设置
 - 启动过程期间的内存管理
 
物理内存管理
- 伙伴系统的结构
 - 避免碎片
 - 初始化内存域和结点数据结构
 - 分配器API
 - 分配页
 - 释放页
 - 内核中不连续页的分配
 - 内核映射
 
slab分配器
- 备选分配器
 - 内核中的内存管理
 - slab分配的原理
 - 实现
 - 通用缓存
 
处理:器高速缓存和TLB控制
进程虚拟内存
进程虚拟地址空间
- 进程地址空间的布局
 - 建立布局
 
内存映射的原理
数据结构
- 树和链表
 - 虚拟内存区域的表示
 - 优先查找树
 
对区域的操作
- 将虚拟地址关联到区城
 - 区域合并
 - 插入区域
 - 创建区域
 
内存映射
- 创建映射
 - 删除映射
 - 非线性映射
 
反向映射
- 数据结构
 - 建立逆向映射
 - 使用逆向映射
 
用户空间缺页异常的校正
- 按需分配/调页
 - 匿名页
 - 写时复制
 - 获取非线性映射
 
内核缺页的异常
在内核和用户空间之间复制数据
锁与进程间通信
控制机制
- 竞态条件
 - 临界区
 
内核锁机制
- 对整数的原子操作
 - 自旋锁
 - 信号量
 - RCU机制
 - 内存和优化屏障
 - 读者/写者锁
 - 大内核锁
 - 互斥量
 - 近似的per-CPU计数器
 - 锁竞争与细粒度锁
 
System V进程间通信
- System V机制
 - 信号量
 - 消息队列
 - 共享内存
 
其他IPC机制
- 信号
 - 管道与套接字
 
设备驱动程序
I/0体系结构
访问设备
- 设备文件
 - 字符设备、块设备和其他设备
 - 使用ioct进行设备寻址
 - 主从设备号的表示
 - 注册
 
与文件系统关联
- inode中的设备文件成员
 - 标准文件操作
 - 用于字符设备的标准操作
 - 用于块设备的标准操作
 
字符设备操作
- 表示字符设备
 - 打开设备文件
 - 读写操作
 
块设备操作
- 块设备的表示
 - 数据结构
 - 向系统添加磁盘和分区
 - 打开块设备文件
 - 请求结构
 - BIO
 - 提交请求
 - I/O调度
 - ioct的实现
 
资源分配
- 资源管理.
 - 1/O内存
 - 1/O端口
 
总线系统
- 通用驱动程序模型
 - PCI总线
 - USB
 
模块
使用模块
- 添加和移除
 - 依赖关系
 - 查询模块信息
 - 自动加载
 
插入和删除模块
- 模块的表示
 - 依赖关系和引用
 - 模块的二进制结构
 - 插入模块
 - 移除模块
 
自动化与热插拔
- kmod实现的自动加载
 - 热插拔
 
版本控制
- 校验和方法
 - 版本控制函数
 
虚拟文件系統
文件系统类型
通用文件模型
- inode
 - 链接
 - 编程接口
 - 将文件作为通用接口
 
VFS的结构
- 结构概观
 - inode
 - 特定于进程的信息
 - 文件操作
 - 目录项缓存
 
处理VFS对象
- 文件系统操作
 - 文件操作
 
标准函数
- 通用读取例程
 - 失效机制
 - 权限检查
 
系统调用
系统程序设计基础
- 追踪系统调用
 - 支持的标准
 - 重启系统调用
 
内核活动
中断
- 中断类型
 - 硬件IRQ
 - 处理中断
 - 数据结构
 - 中断电流处理
 - 初始化和分配IRQ
 - 处理IRQ
 
软中断
- 开启软中断处理
 - 软中断守护进程
 
tasklet
- 创建tasklet
 - 注册tasklet
 - 执行tasklet
 
等待队列和完成量
- 等待队列
 - 完成量:
 - 工作队列
 
系统调用的实现
- 系统调用的结构
 - 访问用户空间
 - 追踪系统周用
 
Ext文件系统族
Ext2文件系统
- 物埋结构
 - 数据结构
 - 创建文件系统
 - 文件系统操作
 
Ext3文件系统
- 数据结构.
 
Ext4文件系统
- 数据结构
 - 加密部分
 - 扩展部分
 
无持久存储的文件系统
proc文件系统
- /pro的内容
 - 数据结构
 - 初始化
 - 装载proc文件系统
 - 管理/proc数据项
 - 进程相关的信息
 - 系统控制机制
 
简单的文件系统
- 顺序文件.
 - 用libfs编写文件系统
 - 调试文件系统
 - 伪文件系统
 
sysfs
- 数据结构
 - 装载文件系统
 - 文件和目录操作
 - 向sysfs添加内容
 
扩展属性和访问控制表
扩展属性
- 到虚拟文件系统的接口
 - Ext4中的实现
 - Ext3中的实现
 - Ext2中的实现
 
访问控制表
- 通用实现
 - Ext4中的实现
 - Ext3中的实现
 - Ext2中的实现
 
网络
ISO/OSI和TCP/IP参考模型
通过套接字通信
- 创建套接字
 - 使用套接字
 - 数据报套接字
 
网络实现的分层模型
网络命名空间
套接字缓冲区
- 使用套接字缓冲区管理数据
 - 管理套接字缓冲区数据
 
网络访问层
- 网络设备表示
 - 接收分组
 - 发送分组
 
网络层
- IPv4
 - IPv6
 - 接收分组
 - 交付到本地传输层
 - 分组转发
 - 发送分组
 - netfilter
 
传输层
- UDP
 - TCP
 
应用层
- socket数据结构
 - 套接字和文件
 - socketcall系统调用
 - 创建套接字
 - 接受数据
 - 发送数据
 
内核内部的网络通信
- 通信函数
 - netlink机制
 
系统调用
系统程序设计基础
- 追踪系统调用
 - 支持的标准
 - 重启系统调用
 
可用的系统调用
系统调用的实现
- 系统调用的结构
 - 访问用户空间
 - 追踪系统调用
 
时间管理
概述
- 定时器类型
 - 配置选项
 
低分辨率定时器的实现
- 定时器激活与进程统计
 - 处理jiffies
 - 数据结构
 - 动态定时器
 
通用时间子系统
- 概述
 - 配置选项
 - 时间表示
 - 用于时间管理的对象
 
高分辨率定时器
- 数据结构
 - 设置定时器
 - 实现
 - 周期时钟仿真
 - 切换到高分辨率定时器
 
动态时钟
- 数据结构
 - 低分辨率系统下的动态时钟
 - 高分辨率系统下的动态时钟
 - 停止和启动周期时钟
 
广播模式
定时器相关系统调用的实现
- 时间基准
 - alarm和setitimer系统调用
 - 获取当前时间
 
管理进程时间
页缓存和块缓存
页缓存的结构
- 管理和查找缓存的页
 - 回写修改的数据
 
块缓存的结构
地址空间
- 数据结构
 - 页树
 - 地址空间操作
 
页缓存的实现
- 分配页
 - 查找页
 - 在页上等待
 - 对整页的操作
 - 页缓存预读
 
块缓存的实现
- 数据结构
 - 操作
 - 页缓存和块缓存的交互
 - 独立的缓存区
 
数据同步
pdflush机制
启动新线程
线程初始化
执行实际工作
周期性刷出
相关数据结构
- 页状态
 - 回写控制
 - 可调参数
 
中央控制
超级块同步
inode同步
- 遍历超级块
 - 考察超级块inode
 - 回写单个inode
 
拥塞
- 数据结构
 - 阈值
 - 拥塞状态的设置和清除
 - 在拥塞队列上等待.
 
强制回写
膝上模式
用于同步控制的系统调用
完全同步
- inode的同步
 - 单个文件的同步
 - 内存映射的同步
 
页面回收和页交换
概述
- 可换出页
 - 页顛簸
 - 页交换算法
 
Linux内核中的页面回收和页交换
- 交换区的组织
 - 检查内存使用情况
 - 选择要换出的页
 - 处理缺页异常
 - 减缩内核缓存
 
管理交换区
- 数据结构
 - 创建交换区
 - 激活交换区
 
交换缓存
- 标识换出页
 - 交换缓存的结构
 - 添加新页.
 - 搜索一页
 
数据回写
页面回收
- 概述
 - 数据结构
 - 确定页的活动程度
 - 收缩内存域
 - 隔离LRU页和集 中回收
 - 收缩活动页链表
 - 回收不活动页
 
交换令牌
处理交换缺页异常
- 换入页
 - 读取数据
 - 交换预读
 
发起内存回收
- kswap d进行周期性内存回收
 - 在严重内存不足时换出页
 
收缩其他缓存
- 数据结构
 - 注册和删除收缩器
 - 收缩缓存
 
审计
审计规则
实现
- 数据结构
 - 初始化
 - 处理请求
 - 记录事件
 - 系统调用审计
 
推荐书籍
《Linux内核设计与实现》
《深入理解Linux内核》
《深入Linux内核架构》
《Linux内核完全剖析》
《Linux内核源代码情景分析》
如果是自学的话,会比较困难,这里推荐一位大佬的免费课程,这个跟以往所见到的只会空谈理论的有所不同,正在学习的朋友可以体验一下
https://ke.qq.com/course/417774?flowToken=1031343
另外Linux、C/C++技术交流群:【960994558】整理了一些个人觉得比较好的学习书籍、大厂面试题、和热门技术教学视频资料共享在里面(包括C/C++,Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等等.),有需要的可以自行添加哦!~









