零声教育-Linux内核源码分析课程-第六代大纲
零声教育 2024-02-08
零声教育-Linux内核源码分析课程大纲 V6.0 进程管理专栏 内存管理专栏 设备驱动专栏 文件系统专栏 中断管理和基础专栏 1.2 进程管理案例分析 1.1 进程管理基础部分 2.1 内存管理基础部分 2.2 内存管理案例分析 3.1 设备驱动基础部分 3.2 设备驱动案例分析 3.1.8 字符设备操作 4.1 文件系统基础部分 1.1.1 Linux内核源码组织结构 1.1.2 进程原理及系统调用详解 1.1.6 RCU机制及内存优化屏障 1.1.5 进程优先级与调度策略案例分析 1.1.9 内核数据结构:链表和红黑树案例分析 1.2.1 编译自己Linux内核实战分析 1.2.2 进程管理4大常用API案例分析 1.2.7 模拟cfs调度器案例分析 2.2.6 分配物理页实战分析 2.1.5 伙伴分配器 2.1.5.1 伙伴分配器原理 2.1.5.2 分配页及释放页 1.2.3.2 wake_up_process案例分析 1.2.4.1 获取进程NICE值案例分析 1.2.4.2 设置进程NICE值案例分析 1.2.3.1 kthread_create_on_node案例分析 1.2.3 系统调用API1 1.2.4 系统调用API2 1.2.5 系统调用API3 1.2.6 RCU案例实战分析 1.2.5.2 __wake_up_sync_key案例分析 1.2.8 进程间通信案例分析 1.2.9 SMP调度详解 1.2.5.1 complete_all案例分析 2.1.2 内存映射原理机制 2.1.3 物理内存组织结构 2.1.6 Slab分配器详解 2.1.7 不连续页分配器及页表 2.1.4 引导内存分配器原理 2.1.8 用户空间缺页异常 2.1.10 页回收机制详解 2.1.10.6 回收slab缓存 2.1.12 Linux内核内存池案例分析 2.2.1 伙伴系统算法案例分析 2.2.2 设计per-cpu变量案例分析 2.2.3 缺页异常分析 2.2.5 内存管理meminfo&zoneinfo信息分析 2.1.11 内存反碎片技术 2.1.13 内存检测与死锁检测 2.2.4 内核调优参数 2.2.8 vmalloc案例实战分析 2.2.19 内存与Kasan工具分析 2.2.18 文件页缓存 2.2.3.1 写时复制缺页异常 2.2.3.4 do_page_fault函数分析 2.2.3.2 文件映射缺页中断 2.2.3.3 匿名页面缺页异常 2.2.13 slab分配器案例实战分析 2.2.14 内存映射案例实战分析 2.2.15 统计进程虚拟区间页数案例分析 2.2.17 处理器缓存机制 2.2.9 kmalloc案例实战分析 3.1.1 I/O体系结构 3.1.2 内核块设备详解 3.1.2.1 块设备I/O操作及源码分析 3.1.2.2 通用磁盘及磁盘分区源码分析 3.2.1 USB设备驱动架构分析 3.2.3 以太网驱动分析 3.2.2 USB驱动分析 3.1.8.1 主设备与次设备 3.1.8.2 打开设备文件 3.1.8.3 分配与注册字符设备 3.1.8.4 写文件操作实现 3.1.8.4.1 open/release方法 3.1.8.4.2 read/write方法 3.1.8.4.3 llseek/poll方法 3.1.8.4.4 填充file_operations结构体 4.1.4 Ext2文件系统 4.1.4.1 Ext2物理结构 4.1.4.2 Ext2数据结构分析 4.1.4.3 Ext2文件系统操作 4.1.1 通用文件模型 4.1.2 VFS数据结构 4.1.10 文件系统调用 4.1.9 挂载文件系统 4.1.2.1 超级块(super_block) 4.1.2.2 挂载描述符(mount结构体) 4.1.2.3 索引结点(inode结构体) 4.1.2.4 目录项缓存(dentry结构体) 4.1.10.1 打开/关闭文件 4.1.10.2 创建/删除文件 4.1.10.3 读/写文件实现 4.1.10.4 文件回写技术原理/接口实现 4.1.9.1 系统调用mount处理流程 4.1.9.2 绑定挂载/挂载命名空间 4.1.9.3 挂载/注册rootfs文件系统 4.1.6 proc文件系统 4.1.6.1 proc数据结构 4.1.6.2 初始化及装载proc 4.1.6.4 数据读写实现 1.1.1.1 Linux内核5个子系统关系 1.1.1.2 Linux内核源码目录结构详解 1.1.1.3 如何快速掌握阅读内核源码方法与技巧 1.1.7 内存布局和堆管理 1.1.8 多核调度分析 1.1.4 实时调度类/SMP/NUMA 1.1.3 调度器及CFS调度器 1.1.2.1 进程/进程生命周期 1.1.2.2 task_struct数据结构 1.1.2.3 进程优先级/系统调用 2.1.1 虚拟地址空间布局架构 2.2.1.1 内存管理架构分析 2.2.1.2 虚拟地址空间布局 2.1.3.1 系统调用sys_mmap/sys_munmap 2.1.3.2 内存模块及三级结构 2.2.19.1 五大常见内存访问错误 2.2.19.2 Kasan内核检测工具应用 2.2.4.1 /proc/sys/kernel/ 2.2.4.2 /proc/sys/vm/ 2.2.4.3 /proc/sys/fs/ 2.1.9页表缓存(TLB)与巨型页 2.1.9.1 TLB表项格式及管理 2.1.9.2 ASID原理/VMID原理 2.1.9.3 处理器对巨型页的支持 2.1.9.4 标准巨型页原理及查看 2.1.4.1 bootmem分配器原理 2.1.4.2 memblock分配器原理 2.1.9.5 巨型页池 2.1.10.1 发起页回收 2.2.12 创建内存池案例实战分析 2.1.11.2 内存碎片整理算法 2.1.11.1 虚拟可移动区域技术原理 2.2.10 kzalloc&kcallolc案例实战分析 2.2.11 创建slab缓存案例实战分析 4.1.5 Ext4_日志JBD2 4.1.5.1 Ext4文件系统特性 4.1.5.2 Ext4文件系统数据结构 4.1.5.3 Ext4_日志JBD2 2.2.7 进程虚拟区间实战分析 2.2.16 缓存着色 3.1.1.1 系统总线(PCI、ISA、SCSI、USB等) 3.1.1.2 外设交互及总线控制设备 3.1.1.3 访问设备深度详解 3.2.8 字符设备驱动通信案例分析 3.2.8.1 字体设备驱动数据结构设计 3.2.8.2 数据发送端设计 3.2.8.3 数据读取端设计 3.2.8.4 Makefile文件设计 3.2.8.5 make及字符设备驱动测试 3.2.8.6 删除字符设备驱动模块 3.2.5 输入设备驱动程序 3.1.7 USB设备驱动详解 4.1.1.1 磁盘文件系统(DF) 4.1.1.2 虚拟文件系统(VF) 4.1.1.4 链接 4.1.1.5 API编程接口 4.1.6.3 管理proc数据项 4.1.6.5 系统控制机制 4.1.11 sysfs文件系统 4.1.11.1 sysfs数据结构 4.1.11.2 装载文件系统 4.1.11.3 文件和目录操作 4.1.11.4 向sysfs添加数据内容 4.2 文件系统案例分析 4.2.1 proc文件系统案例实战分析 4.2.2 debugfs案例实战分析 2.1.10.5 收缩活动页链表 2.1.10.2 回收不活动页 2.1.10.3 页交换 2.1.10.4 计算扫描页数 6.1 中断管理部分 6.2 内核基础部分 3.1.7.1 总线速度及主机控制器 3.1.7.2 传输模式与寻址方法 3.1.7.3 USB驱动总线数据结构分析 2.2.4.4 水位调优参数min_free_kbytes 2.2.4.5 页面分配参数lowmem_reserve_ratio 3.1.3 文件系统关联及字符设备操作 3.1.3.1 inode/字符设备及块设备操作 3.1.3.2 cdev数据结构及读写操作 3.1.4 资源分配及总线系统 3.1.4.1 资源分配_I/O内存_I/O端口 3.1.4.2 device数据结构/PCI总线/USB总线 3.1.5 内核插入模块及删除模块 3.1.5.1 内核模块基础知识 3.1.5.2 module_init/module_exit 3.1.5.3 insmod/rmmod/dmesg 3.1.6 PCI设备驱动讲解 3.1.6.1 PCI基础及拓扑关系 3.1.6.2 pci_host_bridge/pci_bus/pci_dev 3.1.6.3 PCI驱动讲解与实现 3.2.4 USB3.0设备控制器驱动分析 3.2.7 字符设备驱动项目实战分析 3.2.9 杂项(MISC)驱动实例分析 3.2.1.1 USB系统架构 3.2.1.2 传输模式与寻址方法 3.2.1.3 USB驱动总线数据结构分析 3.2.2.1 USB基础及层次详解 3.2.2.2 USB驱动常见数据结构 3.2.3.1 网络设备驱动框架 3.2.3.2 sk_buff/net_device/napi_struct 3.2.4.1 USB控制器分析 3.2.4.2 dwc3_event/dwc3_event_buffer 3.2.5.1 输入设备驱动程序基础及分析 3.2.5.2 核心数据结构input_dev 3.2.5.3 常用内核编程API接口 3.2.6 V4l2视频设备驱动框架 3.2.6.1 V4L2视频设备驱动 3.2.6.2 V4L2驱动数据结构分析 3.2.6.3 V4l2框架常用API详解 网络协议栈专栏 5.1 网络协议栈基础部分 5.2网络协议栈案例分析 5.1.1 套接字及分层模型 5.1.6 TCP/UDP协议栈分析 5.1.7 传输层分析 5.1.10 IPsec(互联网安全协议) 5.1.17 无线子系统分析 5.1.17.1 802.11 MAC帧结构分析 5.1.17.2 扫描/身份验证/关联 5.1.17.3 高吞吐量(802.11n) 5.1.17.4 网状网络(802.11s) 5.2.1 epoll原理及系统调用案例分析 5.1.14 高级路由选择 5.1.15 IPv6协议分析 5.1.16 InfiniBand架构 5.1.9 NIC数据包接收与发送分析 5.2.4 Netfilter内核防火墙报文处理 5.1.14.1 组播路由选择 5.1.14.2 策略路由选择 5.1.16.1 InfiniBand组件与编址 5.1.16.2 InfiniBand功能与数据包 5.1.1.1 套接字通信基础 5.1.1.2 网络分层模型 5.1.6.1 套接字分析 5.1.6.2 发送与接收UDP数据包分析 5.1.6.3 发送与接收TCP数据包分析 5.1.10.1 IPsec基础知识部分 5.1.10.2 XFRM框架/策略/状态 5.1.10.3 传输模式/隧道模式/IPsec高可靠性 5.1.9.1 NIC原理机制 5.1.9.2 NIC数据包接收与发送流程分析 5.1.4 内核Netlink套接字案例分析 5.2.4.2 Netfilter5种挂接点详解 5.2.4.3 netfilter注册和注销钩子函数 5.2.4.1 Iptables基础/表和链及过滤规则 5.1.7.1 流控制传输协议(SCTP) 5.1.7.2 数据报拥塞控制协议(DCCP) 5.1.4.1 数据结构设计与API系统调用 5.1.4.2 内核模块与用户应用程序设计 5.1.4.3 网络接口及IP地址实现 5.1.2 套接字缓冲区及net_device 5.1.2.3 从套接字缓冲区获取TCP首部 5.1.2.2 net_device数据结构分析 5.1.2.1 sk_buff数据结构分析 5.1.15.1 IPv6协议基础架构 5.1.15.2 接收IPv6数据包 5.1.15.3 发送IPv6数据包 5.1.5 网络层分析 5.1.5.1 接收分组原理与分析 5.1.5.3 发送分组原理与分析 5.1.5.2 分组转发原理与分析 5.1.8 ICMP协议分析 5.1.8.1 发送/接收ICMPv4消息 5.1.8.2 发送/接收ICMPv6消息 4.1.1.3 网络文件系统(NF) 4.1.3 处理VFS对象及标准函数 4.1.7 简单文件系统 4.1.7.1 顺序文件 4.1.7.2 使用libfs编写FS 4.1.7.3 调试文件系统 4.1.8 文件系统API:vfs_fstat/fget/get_max_files 4.2.3 super_block案例分析 5.1.3 内核邻接子系统 5.1.3.1 邻接子系统基础 5.1.3.2 ARP协议(IPv4) 5.1.11 Netfilter框架分析 5.1.11.1 Netfilter架构分析 5.1.11.3 Netfilter连接跟踪 5.1.11.2 Netfilter挂接点 5.1.12.1 epoll系统调用 5.1.12 epoll分析 5.1.12.2 epoll数据结构 5.1.12.3 epoll内核实现 5.1.13 IPv4路由选择子系统 5.1.13.1 FIB表 5.1.13.2 ICMPv4重定向消息 5.2.2 NIC网卡驱动案例实战分析 5.2.3 RDMA栈架构 零声服务与内核参考资料 6.1 零声服务 6.1.1 学习方法 6.1.1.1 每次课的知识体系 总结到技术博客 6.1.1.2 不理解的技术点 与老师们进行沟通 6.1.2 面试跳槽 6.1.2.1 简历梳理 技术凸显 项目技术梳理 6.1.2.2 模拟面试 技术表达 6.1.2.3 薪资谈判 福利争取 6.1.2.4 offer选择 职业规划 技术前景 6.1.1.3 老师答疑 工作问题 课程问题 6.1.1.4 全套138个课时,每天坚持2-3小时 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.15 开源社区 6.1.15.1 如何参与开源社区 6.1.15.2 如何提交Linux内核补丁 5.2.2.1 NIC网卡驱动的recv与sk_buff 5.2.2.2 NIC网卡open与stop的实现 5.2.2.3 NIC编译与用户态协议栈 6.2.1 Linux操作系统进程 6.2.2 存储器结构与分区存储管理 6.2.4 文件管理基础架构 6.2.5 x86处理器架构 6.2.6 汇编基础与寻址方式 6.2.1.1 计算机基础技术 6.2.1.2 进程原理 6.2.1.3 Linux特性与内核版本 6.2.1.4 进程特征与调度算法 6.2.1.5 死锁产生必要条件 6.2.1.6 进程状态及转换 6.2.1.7 进程调度策略与调度依据 6.2.2.1 主存储器结构及技术指标 6.2.2.2 分区存储管理技术 6.2.2.3 物理内存与虚拟内存 6.2.3 存储管理 6.2.5.1 CPU(中央处理器)和内存 6.2.5.3 64位通用寄存器结构 6.2.5.2 x86平台 6.2.3.1 段式存储管理 6.2.3.2 页式存储管理 6.2.4.1 文件基础知识 6.2.4.2 Linux文件系统 6.2.4.3 VFS(虚拟文件系统) 6.2.6.1 汇编基础技术 6.2.6.2 常用寻址方式 6.1.1 ARM64异常处理技术 6.1.1.1 异常级别与分类 6.1.1.2 异常向量表与异常处理 6.1.2 中断及软中断 6.1.3 tasklet_等待队列_工作队列 6.1.4 中断控制器及域 6.1.5 中断处理流程 6.1.6 禁止_开启中断 6.1.7 处理器间中断 6.1.8 软中断分析 6.1.9 审计规则及数据结构 6.1.10 中断管理API案例分析 6.1.10.1 tasklet_init/tasklet_schedule 6.1.10.2 __tasklet_hi_schedule/tasklet_kill 6.1.10.3 tasklet_disable_nosync/tasklet_disable 6.1.10.4 setup_irq/request_threaded_irq/irq_set_chip_data 6.1.11 中断管理之保存中断上下文 6.1.12 内核调试方法printk案例分析 6.1.14 perf性能分析工具案例分析 6.1.14.1 perf原理机制与安装配置 6.1.14.2 perf采集数据命令29种工具应用 6.1.14.3 perf采集数据至火焰图分析 6.1.13 gdb调试内核和模块案例分析 6.2.6.2.1 立即寻址 6.2.6.2.2 直接寻址 6.2.6.2.3 间接寻址 6.2.6.2.4 变址寻址 6.2.6.2.5 相对寻址 6.2.6.2.6 基址寻址 6.2.7 KVM架构基础 6.2.7.1 CPU虚拟化技术 6.2.7.2 I/O虚拟化技术 6.2.7.3 内存虚拟化技术 6.2.7.4 网络虚拟化技术 6.2.8 内核定时器 6.2.9 互斥锁分析 6.2.10 自旋锁机制 6.2.6 《奔跑吧Linux内核》作者:张天飞 6.2.7 《奔跑吧Linux内核 调试与案例分析》作者:笨叔 6.2.8 《Linux内核尝试解析》作者:余华兵 6.2.11 原子变量案例实战分析 6.2.12 信号量案例实战分析 6.2.14 顺序锁案例实战分析 6.2.13 自旋锁项目实战分析 6.2.15互斥锁项目实战分析