Linux内核源码分析课程-第五代大纲
零声教育
2022-08-01
零声教育-Linux内核源码分析课程大纲 V5.2 进程管理专题 内存管理专题 网络协议栈专题 设备驱动管理专题 文件系统及内核活动组件专题 零声服务与内核参考书籍资料 1.3 进程调度进阶部分 1.2 进程管理提高部分 1.1 进程管理基础部分 2.1 内存管理基础部分 2.2 内存管理进阶部分 3.1 网络协议栈架构(一) 3.2 网络协议栈架构(二) 4.1 设备驱动基础架构 4.2 Linux设备模型 4.4 字符设备操作 4.5 块设备操作 5.1 虚拟文件系统 5.2 磁盘文件系统 1.1.1 Linux操作系统进程分析 1.1.2 存储器结构与分区存储管理 1.1.4 文件管理基础架构 1.1.5 x86处理器架构 1.1.6 汇编基础与寻址方式 1.2.1 Linux内核源码组织结构分析 1.2.2 进程原理与生命周期及系统调用 1.2.6 进程内核do_fork()/kernel_clone()函数分析 1.2.5 task_struct数据结构分析 实战操作:内核数据结构(链表和红黑树) 1.3.1 进程调度策略 1.3.2 四种进程优先级 1.3.3 五大调度类解析 1.3.4 多核调度分析 1.3.5 SMP调度类处理器负载均衡 实战操作:进程优先级与调度策略 实战操作:调试Linux内核模块 实战操作:动手编译自己Linux内核 实战操作:进程间通信详解与实现 SCHED_DEADLINE SCHED_FIFO SCHED_RR SCHED_NORMAL 调度优先级 静态优先级 正常优先级 实时优先级 stop_sched_class dl_sched_class rt_sched_class cfs_sched_class idle_shced_class 调度组与调度域 负载计算与均衡算法 2.1.2 SMP/NUMA模型组织 2.1.3 物理内存组织结构与模型 2.1.4 页表/页表缓存原理 2.1.5 处理器缓存机制及SMP缓存一致性 2.1.6 内存分配器(bootmem/memblock) 实战操作:伙伴系统算法与实现 2.1.7 块分配器(Slab/Slub/Slob)原理实现 实战操作:slab缓存API系统调用实现详解 实战操作:进程地址空间在内核(VMA实现) 实战操作:kmalloc/vmalloc(系统调用实现) 2.2.1 不连续内存分配器原理 2.2.3 LRU算法与反向映射 2.2.4 缺页异常分析 2.2.5 内存反碎片技术 2.2.6 内存检测与死锁检测 2.2.7 内核调优参数 2.2.8 内存屏障与内核互斥原理 2.2.9 内存与Kasan工具分析 2.2.10 页回收原理机制 实战操作:内存池原理及实现 2.2.12 内核调试方法printk/oops分析 实战操作:perf性能分析工具 写时复制缺页异常 do_page_fault函数分析 文件映射缺页中断 匿名页面缺页异常 计算扫描页数 收缩活动页链表 回收不活动页 页交换与回收slab缓存 perf原理机制与安装配置 perf采集数据命令29种工具应用 perf采集数据至火焰图分析 编译器屏障 3.1.1 套接字及分层模型 3.1.3 TCP/UDP协议栈分析 3.1.6 传输层分析 3.1.7 IPsec(互联网安全协议) 3.1.8 IPv4策略路由选择 3.1.9 无线子系统分析 802.11 MAC帧结构分析 扫描/身份验证/关联 高吞吐量(802.11n) 网状网络(802.11s) 3.2.1 Linux内核邻接子系统分析 3.2.2 高级路由选择 3.2.3 IPv6协议分析 3.2.4 InfiniBand栈的架构 3.2.5 NIC数据包接收与发送分析 3.1.10 Netfilter内核防火墙报文处理 组播路由选择 策略路由选择 多路径路由选择 InfiniBand组件与编址 InfiniBand功能与数据包 4.6 NIC网络接口卡 4.1.1 I/O体系结构 4.1.2 内核块设备详解 块设备I/O操作集合及源码分析 通用磁盘及分区源码分析 4.2.1 深度剖析LDM 4.2.2 设备模型和sysfs LDM数据结构分析 设备驱动程序原理与实现 kobject结构分析 kobj_type/内核对象集合 sysfs文件及属性 轮询sysfs属性文件 4.4.1 主设备与次设备 4.4.2 打开设备文件 4.4.3 分配与注册字符设备 4.4.4 写文件操作实现 open/release方法 read/write方法 llseek/poll方法 填充file_operations结构体 4.5.1 块设备表示与数据结构 4.5.4 BIO数据结构 4.5.6 ioctl系统调用详解 4.5.7 总线系统模块 ISA总线 PCI/PCI-E总线 USB总线 4.6.1 数据结构 4.6.2 缓冲区管理与并发控制 实战操作:NIC网卡驱动架构实现 套接字缓冲区 网络设备接口 5.2.1 Ext2文件系统 实战操作:proc文件系统分析与实现 Ext2物理结构 Ext2数据结构分析 Ext2文件系统操作 5.1.1 文件系统类型与文件模型研究 5.1.2 VFS数据结构 5.1.3 文件系统调用 5.1.4 挂载文件系统 5.1.5 无持久文件系统 超级块(super_block) 挂载描述符(mount结构体) 索引结点(inode结构体) 目录项缓存(dentry结构体) 打开/关闭文件 创建/删除文件 读/写文件实现 文件回写技术原理/接口实现 系统调用mount处理流程 绑定挂载/挂载命名空间 挂载/注册rootfs文件系统 proc文件系统 proc数据结构 初始化及装载proc 数据读写实现 计算机基础技术 进程原理 Linux特性与内核版本 进程特征与调度算法 死锁产生必要条件 进程状态及转换 进程调度策略与调度依据 主存储器结构及技术指标 分区存储管理技术 物理内存与虚拟内存 1.1.3 存储管理 CPU(中央处理器)和内存 64位通用寄存器结构 x86平台 Linux内核(五大子系统关系) 内核源码目录结构详解 如何快速掌握阅读内核源码方法与技巧 1.2.7 RCU机制及内存优化屏障 1.2.8 内核内存布局和堆管理 1.2.4 实时调度类及SMP和NUMA 1.2.3 调度器及CFS调度器 写时复制原理 进程内存布局 进程堆栈管理 系统调用实现 2.1.1 虚拟地址空间布局架构 FIB信息_缓存_下一跳 生成及接收ICMPv4重定向消息 内存管理架构 用户虚拟地址空间布局 内核地址空间布局 系统调用sys_mmap/sys_munmap 物理内存组织三级结构 五大常见内存访问错误 Kasan内核检测工具应用 /proc/sys/kernel/ /proc/sys/vm/ /proc/sys/fs/ 2.2.2 页表缓存(TLB)与巨型页 TLB表项格式及管理 ASID原理/VMID原理 处理器对巨型页的支持 标准巨型页原理及查看 bootmem分配器原理 memblock分配器原理及分配流程 伙伴系统原理机制 分配页和释放页实现 发起页回收 内存碎片整理算法 虚拟可移动区域技术原理 处理器屏障 ARM64处理器内存屏障分析 套接字通信基础 网络分层模型 套接字分析 发送与接收UDP数据包分析 发送与接收TCP数据包分析 IPsec基础知识部分 XFRM框架/策略/状态 传输模式/隧道模式/IPsec高可靠性 NIC实现原理与NIC分类 NIC数据包发送与接收流程分析 实战操作:内核Netlink套接字及实战 Netfilter5种挂接点详解 注册Netfilter钩子回调函数源码分析 Iptables基础/表和链及过滤规则 流控制传输协议(SCTP) 数据报拥塞控制协议(DCCP) 5.2.2 Ext4_日志JBD2 Ext4文件系统特性 Ext4文件系统数据结构 Ext4_日志JBD2 2.2.11 缓存着色 内存缓存数据结构 空闲对象链表及着色 数据结构设计与API系统调用 内核模块与用户应用程序设计 创建与释放邻居API接口分析 ARP协议(IPv4)发送与接收请求分析 Netfilter框架简介 数据包选择Iptables 数据包过滤 NAT(网络地址转换) 连接跟踪与数据包操纵 NAT钩子回调函数分析 NIC网卡驱动的recv与sk_buff NIC网卡open与stop的实现 NIC编译与用户态协议栈 系统总线(PCI、ISA、SCSI、USB等) 与外设交互及控制设备 访问设备详解 4.6.3 网络吞吐量 协议性能 驱动程序性能 实战操作:字符设备驱动通信 字体设备驱动数据结构设计 数据发送端设计 数据读取端设计 Makefile文件设计 make及字符设备驱动测试 删除字符设备驱动模块 4.5.2 向系统添加磁盘及分区 4.5.3 打开块设备文件 通用驱动程序模型 4.5.5 I/O调度 4.3 资源分配 4.3.1 资源管理 4.3.2 I/O内存分析 4.3.3 I/O端口分析 USB设备驱动分析 磁盘文件系统(DF) 网络文件系统(NF) inode 链接 API编程接口 管理proc数据项 系统控制机制 sysfs文件系统 sysfs数据结构 装载文件系统 文件和目录操作 向sysfs添加数据内容 PCI设备驱动分析 5.3 数据同步 5.3.1 内核定时器 5.3.2 原子操作与屏障 5.3.3 自旋锁机制 5.3.4 互斥锁 5.3.5 读写锁与RCU 实战操作:同步管理RCU实现 5.4 内核活动组件 5.4.1 中断处理流程及IRQ 5.4.2 irq_desc数据结构分析 5.4.3 开启_禁止中断 5.4.4 软硬中断分析 5.4.5 中断控制器及域详解 5.4.6 tasklet_等待队列_工作队列 5.4.7 审计规则及数据结构分析 5.5 开源社区介绍 5.5.1 如何参与开源社区 5.5.2 如何提交Linux内核补丁 实战操作:内存映射详解 数据结构分析 系统调用实现 创建/删除内存映射 自旋锁的实现与变体 spin_lock()/raw_spin_lock()函数分析 mutex数据结构分析 互斥锁的快速与慢速通道 乐观自旋锁等待机制 mutex_unlock()函数分析 6.1 零声服务 6.2 内核参考书籍资料 6.2.1 《Linux设备驱动开发详解》 宋宝华 编著 6.2.2 《深入Linux内核架构》(德)莫尔勒著 郭旭 译 6.2.3 《Linux内核设计与实现》 原书第3版 作者:拉芙(RobertLove) 6.2.4 《深入理解LINUX网络技术内幕》 作者[意] Christian Benvenuti 著 6.2.5 《深入理解LINUX内核》 第三版 [美] 博韦 著, 陈莉君,张琼声,张宏伟 译 6.1.1 学习方法 每次课的知识体系 总结到技术博客 不理解的技术点 与老师们进行沟通 6.1.2 面试跳槽 简历梳理 技术凸显 模拟面试 技术表示 薪资谈判 福利争取 offer选择 职业规划 段式存储管理 页式存储管理 文件基础知识部分 Linux文件系统 VFS(虚拟文件系统) 汇编基础技术部分 常用寻址方式 总线速度及主机控制器 传输模式与寻址方法 USB驱动总线数据结构分析 PCI基础架构 PCI数据结构分析 PCI驱动讲解 网络接口及IP地址实现 实战操作:epoll原理及系统调用 epoll原理与API分析 epoll内核实现 水位调优参数min_free_kbytes 页面分配参数lowmem_reserve_ratio 3.1.2 sk_buff与net_device详解 从套接字缓冲区获取TCP首部 net_device结构分析 sk_buff结构分析 ipv6协议基础架构 接收IPv6数据包 发送IPv6数据包 3.1.5 网络层分析 接收分组原理与分析 发送分组原理与分析 分组转发原理与分析 3.1.4 ICMP协议分析 发送/接收ICMPv4消息 发送/接收ICMPv6消息 proc分析与常用文件模块 proc文件调用与实现