封面
版权信息
序一
序二
前言
第1章 内核引导和初始化
1.1 到哪里读取引导程序
1.2 引导程序
1.2.1 入口_start
1.2.2 标号reset
1.2.3 函数_main
1.2.4 函数run_main_loop
1.3 内核初始化
1.3.1 汇编语言部分
1.3.2 C语言部分
1.3.3 SMP系统的引导
1.4 init进程
第2章 进程管理
2.1 进程
2.2 命名空间
2.3 进程标识符
2.4 进程关系
2.5 启动程序
2.5.1 创建新进程
2.5.2 装载程序
2.6 进程退出
2.6.1 线程组退出
2.6.2 终止进程
2.6.3 查询子进程终止原因
2.7 进程状态
2.8 进程调度
2.8.1 调度策略
2.8.2 进程优先级
2.8.3 调度类
2.8.4 运行队列
2.8.5 任务分组
2.8.6 调度进程
2.8.7 调度时机
2.8.8 带宽管理
2.9 SMP调度
2.9.1 进程的处理器亲和性
2.9.2 对调度器的扩展
2.9.3 限期调度类的处理器负载均衡
2.9.4 实时调度类的处理器负载均衡
2.9.5 公平调度类的处理器负载均衡
2.9.6 迁移线程
2.9.7 隔离处理器
2.10 进程的安全上下文
第3章 内存管理
3.1 概述
3.2 虚拟地址空间布局
3.2.1 虚拟地址空间划分
3.2.2 用户虚拟地址空间布局
3.2.3 内核地址空间布局
3.3 物理地址空间
3.4 内存映射
3.4.1 应用编程接口
3.4.2 数据结构
3.4.3 创建内存映射
3.4.4 虚拟内存过量提交策略
3.4.5 删除内存映射
3.5 物理内存组织
3.5.1 体系结构
3.5.2 内存模型
3.5.3 三级结构
3.6 引导内存分配器
3.6.1 bootmem分配器
3.6.2 memblock分配器
3.6.3 物理内存信息
3.7 伙伴分配器
3.7.1 基本的伙伴分配器
3.7.2 分区的伙伴分配器
3.7.3 根据可移动性分组
3.7.4 每处理器页集合
3.7.5 分配页
3.7.6 释放页
3.8 块分配器
3.8.1 编程接口
3.8.2 SLAB分配器
3.8.3 SLUB分配器
3.8.4 SLOB分配器
3.9 不连续页分配器
3.9.1 编程接口
3.9.2 数据结构
3.9.3 技术原理
3.10 每处理器内存分配器
3.10.1 编程接口
3.10.2 技术原理
3.11 页表
3.11.1 统一的页表框架
3.11.2 ARM64处理器的页表
3.12 页表缓存
3.12.1 TLB表项格式
3.12.2 TLB管理
3.12.3 地址空间标识符
3.12.4 虚拟机标识符
3.13 巨型页
3.13.1 处理器对巨型页的支持
3.13.2 标准巨型页
3.13.3 透明巨型页
3.14 页错误异常处理
3.14.1 处理器架构特定部分
3.14.2 用户空间页错误异常
3.14.3 内核模式页错误异常
3.15 反碎片技术
3.15.1 虚拟可移动区域
3.15.2 内存碎片整理
3.16 页回收
3.16.1 数据结构
3.16.2 发起页回收
3.16.3 计算扫描的页数
3.16.4 收缩活动页链表
3.16.5 回收不活动页
3.16.6 页交换
3.16.7 回收slab缓存
3.17 内存耗尽杀手
3.17.1 使用方法
3.17.2 技术原理
3.18 内存资源控制器
3.18.1 使用方法
3.18.2 技术原理
3.19 处理器缓存
3.19.1 缓存结构
3.19.2 缓存策略
3.19.3 缓存维护
3.19.4 SMP缓存一致性
3.19.5 利用缓存提高性能的编程技巧
3.20 连续内存分配器
3.20.1 使用方法
3.20.2 技术原理
3.21 userfaultfd
3.21.1 使用方法
3.21.2 技术原理
3.22 内存错误检测工具KASAN
3.22.1 使用方法
3.22.2 技术原理
第4章 中断、异常和系统调用
4.1 ARM64异常处理
4.1.1 异常级别
4.1.2 异常分类
4.1.3 异常向量表
4.1.4 异常处理
4.2 中断
4.2.1 中断控制器
4.2.2 中断域
4.2.3 中断控制器驱动初始化
4.2.4 Linux中断处理
4.2.5 中断线程化
4.2.6 禁止/开启中断
4.2.7 禁止/开启单个中断
4.2.8 中断亲和性
4.2.9 处理器间中断
4.3 中断下半部
4.3.1 软中断
4.3.2 小任务
4.3.3 工作队列
4.4 系统调用
4.4.1 定义系统调用
4.4.2 执行系统调用
第5章 内核互斥技术
5.1 信号量
5.2 读写信号量
5.3 互斥锁
5.4 实时互斥锁
5.5 原子变量
ARM64处理器的原子变量实现
5.6 自旋锁
5.7 读写自旋锁
5.8 顺序锁
5.8.1 完整版的顺序锁
5.8.2 只提供序列号的顺序锁
5.9 禁止内核抢占
5.10 进程和软中断互斥
5.11 进程和硬中断互斥
5.12 每处理器变量
5.12.1 静态每处理器变量
5.12.2 动态每处理器变量
5.12.3 访问每处理器变量
5.13 每处理器计数器
5.14 内存屏障
5.14.1 编译器屏障
5.14.2 处理器内存屏障
5.14.3 MMIO写屏障
5.14.4 隐含内存屏障
5.14.5 ARM64处理器内存屏障
5.15 RCU
5.15.1 使用方法
5.15.2 技术原理
5.16 可睡眠RCU
5.16.1 使用方法
5.16.2 技术原理
5.17 死锁检测工具lockdep
5.17.1 使用方法
5.17.2 技术原理
第6章 文件系统
6.1 概述
6.1.1 用户空间层面
6.1.2 硬件层面
6.1.3 内核空间层面
6.2 虚拟文件系统的数据结构
6.2.1 超级块
6.2.2 挂载描述符
6.2.3 文件系统类型
6.2.4 索引节点
6.2.5 目录项
6.2.6 文件的打开实例和打开文件表
6.3 注册文件系统类型
6.4 挂载文件系统
6.4.1 系统调用mount
6.4.2 绑定挂载
6.4.3 挂载命名空间
6.4.4 挂载根文件系统
6.5 打开文件
6.5.1 编程接口
6.5.2 技术原理
6.6 关闭文件
6.7 创建文件
6.7.1 使用方法
6.7.2 技术原理
6.8 删除文件
6.8.1 使用方法
6.8.2 技术原理
6.9 设置文件权限
6.9.1 使用方法
6.9.2 技术原理
6.10 页缓存
6.10.1 地址空间
6.10.2 基数树
6.10.3 编程接口
6.11 读文件
6.11.1 编程接口
6.11.2 技术原理
6.12 写文件
6.12.1 编程接口
6.12.2 技术原理
6.13 文件回写
6.13.1 编程接口
6.13.2 技术原理
6.14 DAX
6.14.1 使用方法
6.14.2 技术原理
6.15 常用的文件系统类型
结束语
关于本书
更新时间:2020-04-14 15:16:33