1.基于Linux 5.0内核和ARM64/x86_64架构,全面修订; 2.新增实战案例分析,帮助读者提升实战能力; 3.新增了内核调试和优化技巧,通过分析宕机案例和安全漏洞,总结调试技巧; 4.新增了ARM64架构等方面的内容; 5.新增了大量插图和表格。 相对于Linux 4.0内核,Linux 5.0内核中加了很多新特性,并且很多内核的实现已经发生了很大变化。本书旨在介绍Linux内核中核心模块的实现,主要内容包括ARM64架构,ARM64在Linux内核中的实现,内存管理的理论知识和案例,以及程管理的基础知识与案例等。
售 价:¥
纸质售价:¥73.70购买纸书
温馨提示:数字商品不支持退换货,不提供源文件,不支持导出打印
为你推荐
版 权
内容提要
第2版前言
致 谢
如何阅读本书
服务与支持
第1章 并发与同步
本章高频面试题
1.1 原子操作
1.1.1 原子操作
1.1.2 atomic_add()函数分析
1.1.3 比较并交换指令
1.2 内存屏障
1.2.1 经典内存屏障接口函数
1.2.2 内存屏障扩展接口函数
1.3 经典自旋锁
1.3.1 自旋锁的实现
1.3.2 自旋锁的变体
1.3.3 spin_lock()和raw_spin_lock()函数
1.4 MCS锁
1.4.1 快速申请通道
1.4.2 中速申请通道
1.4.3 慢速申请通道
1.4.4 释放锁
1.5 排队自旋锁
1.5.1 快速申请通道
1.5.2 中速申请通道
1.5.3 慢速申请通道
1.5.4 释放锁
1.5.5 案例分析:为什么这里pending域要清零
1.5.6 小结
1.6 信号量
1.6.1 信号量简介
1.6.2 小结
1.7 互斥锁
1.7.1 mutex数据结构
1.7.2 互斥锁的快速通道
1.7.3 互斥锁的慢速通道
1.7.4 乐观自旋等待机制
1.7.5 mutex_unlock()函数分析
1.7.6 案例分析
1.7.7 小结
1.8 读写锁
1.9 读写信号量
1.9.1 rw_semaphore数据结构
1.9.2 申请读者类型信号量
1.9.3 释放读者类型信号量
1.9.4 申请写者类型信号量
1.9.5 释放写者类型信号量
1.9.6 小结
1.10 RCU
1.10.1 关于RCU的一个简单例子
1.10.2 经典RCU和Tree RCU
1.11 案例分析:内存管理中的锁
1.11.1 mm->mmap_sem
1.11.2 mm->page_table_lock
1.11.3 PG_Locked
1.11.4 anon_vma->rwsem
1.11.5 zone->lru_lock
1.11.6 RCU
1.11.7 RCU停滞检测
第2章 中断管理
本章高频面试题
2.1 中断控制器
2.1.1 中断状态和中断触发方式
2.1.2 ARM GIC-V2中断控制器
2.1.3 关于ARM Vexpress V2P开发板的例子
2.1.4 关于QEMU虚拟机平台的例子
2.2 硬件中断号和Linux中断号的映射
2.3 注册中断
2.4 ARM64底层中断处理
2.4.1 异常向量表
2.4.2 IRQ处理
2.4.3 栈框
2.4.4 保存中断上下文
2.4.5 恢复中断上下文
2.5 ARM64高层中断处理
2.5.1 汇编跳转
2.5.2 handle_arch_irq处理
2.5.3 小结
2.6 软中断和tasklet
2.6.1 软中断
2.6.2 tasklet
2.6.3 local_bh_disable()和local_bh_enable()函数分析
2.6.4 小结
2.7 工作队列
2.7.1 工作队列的相关数据结构
2.7.2 工作队列初始化
2.7.3 创建工作队列
2.7.4 添加和调度一个work
2.7.5 处理一个work
2.7.6 取消一个work
2.7.7 和调度器的交互
2.7.8 小结
第3章 内核调试与性能优化
本章高频面试题
3.1 打造ARM64实验平台
3.1.1 使用“O0”优化等级编译内核
3.1.2 QEMU虚拟机+Debian实验平台
3.1.3 单步调试ARM64 Linux内核
3.1.4 以图形化方式单步调试内核
3.1.5 单步调试head.S文件
3.2 ftrace
3.2.1 irqs跟踪器
3.2.2 function跟踪器
3.2.3 动态ftrace
3.2.4 事件跟踪
3.2.5 添加跟踪点
3.2.6 trace-cmd和kernelshark
3.2.7 跟踪标记
3.2.8 小结
3.3 内存检测
3.3.1 slub_debug
3.3.2 KASAN内存检测
3.4 死锁检测
3.5 内核调试方法
3.5.1 printk
3.5.2 动态输出
3.5.3 oops分析
3.5.4 BUG_ON()和WARN_ON()宏分析
3.6 使用perf优化性能
3.6.1 安装perf工具
3.6.2 perf list命令
3.6.3 perf record/report命令
3.6.4 perf stat命令
3.6.5 perf top命令
3.7 SystemTap
3.8 eBPF和BCC
3.8.1 BCC工具集
3.8.2 编写BCC脚本
第4章 基于x86_64解决宕机难题
本章高频面试题
4.1 Kdump和Crash工具
4.2 x86_64架构基础知识
4.2.1 通用寄存器
4.2.2 函数参数调用规则
4.2.3 栈的结构
4.2.4 寻址方式
4.3 在CentOS 7.6中安装和配置Kdump和Crash
4.4 crash命令
4.5 案例1:一个简单的宕机案例
4.6 案例2:访问被删除的链表
4.7 案例3:一个真实的驱动崩溃案例
4.8 死锁检查机制
4.9 案例4:一个简单的死锁案例
4.10 案例5:分析和推导参数的值
4.11 案例6:一个复杂的宕机案例
4.11.1 问题描述
4.11.2 分析ps进程
4.11.3 分析test进程
4.11.4 计算一个进程被阻塞了的时间
4.12 关于Crash工具的调试技巧汇总
第5章 基于ARM64解决宕机难题
本章高频面试题
5.1 搭建Kdump实验环境
5.2 案例1:一个简单的宕机案例
5.3 案例2:恢复函数调用栈
5.4 案例3:分析和推导参数的值
5.5 案例4:一个复杂的宕机案例
5.5.1 分析ps进程
5.5.2 分析test进程
第6章 安全漏洞分析
本章高频面试题
6.1 侧信道攻击
6.2 CPU熔断漏洞分析
6.2.1 乱序执行、异常处理和地址空间
6.2.2 修复方案:KPTI技术
6.3 CPU“幽灵”漏洞
6.3.1 分支预测
6.3.2 攻击原理
6.3.3 修复方案
附录A 使用DS-5调试ARM64 Linux内核
A.1 DS-5社区版下载和安装
A.2 使用DS-5调试内核的优势
A.2.1 查看系统寄存器的值
A.2.2 内置ARMv8芯片手册
A.3 FVP模拟器使用
A.4 单步调试内核
A.4.1 调试配置
A.4.2 调试EL2的汇编代码
A.4.3 切换到EL1
A.4.4 打开MMU以及重定位
A.4.5 调试C语言代码
附录B ARM64中的独占访问指令
附录C 图解MESI状态转换
C.1 初始化状态为I
C.2 初始化状态为M
C.3 初始化状态为S
C.4 初始化状态为E
附录D 高速缓存与内存屏障
D.1 存储缓冲区与写内存屏障
D.2 无效队列与读内存屏障
D.3 内存屏障指令总结
D.4 ARM64的内存屏障指令的区别
买过这本书的人还买过
读了这本书的人还在读
同类图书排行榜