计算机
类型
可以朗读
语音朗读
368千字
字数
2021-03-01
发行日期
展开全部
主编推荐语
本书基于Linux5.0内核的源代码讲述Linux内核的调试技巧和案例。
内容简介
本书共6章。主要内容包括并发与同步,中断管理,内核调试和性能优化,基于x86_64的宕机难题解决方案,基于ARM64的宕机题解决方案,安全漏洞的产生原理与修复方案等。
本书适合从事Linux系统开发人员、嵌入式系统开发人员及Android开发人员阅读,也可供计算机相关专业的师生阅读。
目录
- 版权信息
- 内容提要
- 第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的内存屏障指令的区别
展开全部
出版方
人民邮电出版社
人民邮电出版社是工业和信息化部主管的大型专业出版社,成立于1953年10月1日。人民邮电出版社坚持“立足信息产业、面向现代社会、传播科学知识、服务科教兴国”,致力于通信、计算机、电子技术、教材、少儿、经管、摄影、集邮、旅游、心理学等领域的专业图书出版。