Linux后台开发/架构师学习——Linux内核学习大纲

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

Linux后台开发/架构师学习——Linux内核学习大纲_第1张图片

进程管理和调度

进程的优先级

进程生命周期

进程表示

  • 进程类型
  • 命名空间
  • 进程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等等.),有需要的可以自行添加哦!~Linux后台开发/架构师学习——Linux内核学习大纲_第2张图片

你可能感兴趣的:(Linux,C/C++,Linux,C/C++,内核)