奔跑吧 Linux內核 (捲2):調試與案例分析, 2/e

笨叔

  • 出版商: 人民郵電
  • 出版日期: 2021-03-01
  • 定價: $659
  • 售價: 8.5$560
  • 語言: 簡體中文
  • 頁數: 360
  • ISBN: 7115552525
  • ISBN-13: 9787115552525
  • 相關分類: Linux

下單後立即進貨 (約4週~6週)

  • 奔跑吧 Linux內核 (捲2):調試與案例分析, 2/e-preview-1
  • 奔跑吧 Linux內核 (捲2):調試與案例分析, 2/e-preview-2
奔跑吧 Linux內核 (捲2):調試與案例分析, 2/e-preview-1

買這商品的人也買了...

相關主題

商品描述

本書基於Linux 5.0內核的源代碼講述Linux內核的調試技巧和案例。本書共6章。主要內容包括並發與同步,中斷管理,內核調試和性能優化,基於x86_64的宕機難題解決方案,基於ARM64的宕機題解決方案,安全漏洞的產生原理與修復方案等。

本書適合從事Linux系統開發人員、嵌入式系統開發人員及Android開發人員閱讀,也可供電腦相關專業的師生閱讀。

作者簡介

笨叔,Linux内核爱好者,出版过《奔跑吧Linux内核》《奔跑吧 Linux内核 入门篇》。创建了奔跑吧Linux社区。

目錄大綱

 

目  錄

 

 

 

第 1章 並發與同步 1

1.1 原子操作 3

1.1.1 原子操作 3

1.1.2 atomic_add()函數分析 6

1.1.3 比較並交換指令 7

1.2 內存屏障 11

1.2.1 經典內存屏障接口函數 11

1.2.2 內存屏障擴展接口函數 13

1.3 經典自旋鎖 14

1.3.1 自旋鎖的實現 15

1.3.2 自旋鎖的變體 18

1.3.3 spin_lock()和raw_spin_lock()

函數 19

1.4 MCS鎖 20

1.4.1 快速申請通道 21

1.4.2 中速申請通道 22

1.4.3 慢速申請通道 23

1.4.4 釋放鎖 26

1.5 排隊自旋鎖 27

1.5.1 快速申請通道 29

1.5.2 中速申請通道 30

1.5.3 慢速申請通道 32

1.5.4 釋放鎖 36

1.5.5 案例分析:為什麽這里

pending域要清零 36

1.5.6 小結 38

1.6 信號量 39

1.6.1 信號量簡介 39

1.6.2 小結 43

1.7 互斥鎖 43

1.7.1 mutex數據結構 43

1.7.2 互斥鎖的快速通道 44

1.7.3 互斥鎖的慢速通道 46

1.7.4 樂觀自旋等待機制 47

1.7.5 mutex_unlock()函數分析 50

1.7.6 案例分析 51

1.7.7 小結 52

1.8 讀寫鎖 52

1.9 讀寫信號量 53

1.9.1 rw_semaphore數據結構 53

1.9.2 申請讀者類型信號量 55

1.9.3 釋放讀者類型信號量 58

1.9.4 申請寫者類型信號量 58

1.9.5 釋放寫者類型信號量 64

1.9.6 小結 64

1.10 RCU 64

1.10.1 關於RCU的一個簡單例子 65

1.10.2 經典RCU和Tree RCU 68

1.11 案例分析:內存管理中的鎖 69

1.11.1 mm->mmap_sem 70

1.11.2 mm->page_table_lock 71

1.11.3 PG_Locked 72

1.11.4 anon_vma->rwsem 72

1.11.5 zone->lru_lock 74

1.11.6 RCU 75

1.11.7 RCU停滯檢測 78

第 2章 中斷管理 81

2.1 中斷控制器 82

2.1.1 中斷狀態和中斷觸發方式 82

2.1.2 ARM GIC-V2中斷控制器 83

2.1.3 關於ARM Vexpress V2P

開發板的例子 85

2.1.4 關於QEMU虛擬機平臺的

例子 86

2.2 硬件中斷號和Linux中斷號的映射 87

2.3 註冊中斷 98

2.4 ARM64底層中斷處理 105

2.4.1 異常向量表 105

2.4.2 IRQ處理 107

2.4.3 棧框 108

2.4.4 保存中斷上下文 110

2.4.5 恢復中斷上下文 112

2.5 高層中斷處理 114

2.5.1 匯編跳轉 114

2.5.2 handle_arch_irq處理 115

2.5.3 小結 123

2.6 軟中斷和tasklet 125

2.6.1 軟中斷 125

2.6.2 tasklet 129

2.6.3 local_bh_disable()和

local_bh_enable()函數分析 134

2.6.4 小結 135

2.7 工作隊列 136

2.7.1 工作隊列的相關數據結構 137

2.7.2 工作隊列初始化 141

2.7.3 創建工作隊列 143

2.7.4 添加和調度一個work 149

2.7.5 處理一個work 153

2.7.6 取消一個work 157

2.7.7 和調度器的交互 159

2.7.8 小結 161

第3章 內核調試與性能優化 164

3.1 打造ARM64實驗平臺 165

3.1.1 使用O0優化等級編譯

內核 165

3.1.2 QEMU虛擬機+Debian

實驗平臺 166

3.1.3 單步調試ARM64 Linux

內核 171

3.1.4 以圖形化方式單步調試

內核 172

3.1.5 單步調試head.S文件 176

3.2 ftrace 181

3.2.1 irqs跟蹤器 182

3.2.2 function跟蹤器 184

3.2.3 動態ftrace 185

3.2.4 事件跟蹤 186

3.2.5 添加跟蹤點 188

3.2.6 trace-cmd和kernelshark 191

3.2.7 跟蹤標記 192

3.2.8 小結 195

3.3 內存檢測 196

3.3.1 slub_debug 197

3.3.2 KASAN內存檢測 202

3.4 死鎖檢測 204

3.5 內核調試方法 210

3.5.1 printk 210

3.5.2 動態輸出 212

3.5.3 oops分析 213

3.5.4 BUG_ON()和WARN_ON()宏

分析 217

3.6 使用perf優化性能 217

3.6.1 安裝perf工具 218

3.6.2 perf list命令 218

3.6.3 perf record/report命令 219

3.6.4 perf stat命令 220

3.6.5 perf top命令 221

3.7 SystemTap 222

3.8 eBPF和BCC 224

3.8.1 BCC工具集 224

3.8.2 編寫BCC腳本 225

第4章 基於x86_64解決宕機難題 229

4.1 Kdump和Crash工具 230

4.2 x86_64架構基礎知識 230

4.2.1 通用寄存器 230

4.2.2 函數參數調用規則 231

4.2.3 棧的結構 232

4.2.4 尋址方式 232

4.3 在CentOS 7.6中安裝和配置Kdump

和Crash 233

4.4 crash命令 235

4.5 案例1:一個簡單的宕機案例 244

4.6 案例2:訪問被刪除的鏈表 250

4.7 案例3:一個真實的驅動崩潰案例 254

4.8 死鎖檢查機制 259

4.9 案例4:一個簡單的死鎖案例 261

4.10 案例5:分析和推導參數的值

變量 263

4.11 案例6:一個復雜的宕機案例 270

4.11.1 問題描述 271

4.11.2 分析ps進程 276

4.11.3 分析test進程 281

4.11.4 計算一個進程被阻塞了多長

時間 283

第5章 基於ARM64解決宕機難題 285

5.1 搭建Kdump實驗環境 285

5.2 案例1:一個簡單的宕機案例 287

5.3 案例2:恢復函數調用棧 288

5.4 案例3:分析和推導參數的值 291

5.5 案例4:一個復雜的宕機案例 294

5.5.1 分析ps進程 296

5.5.2 分析test進程 299

第6章 安全漏洞分析 303

6.1 側通道攻擊 303

6.2 CPU熔斷漏洞分析 306

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6.2.1 亂序執行、異常處理和地址

空間 306

6.2.2 修復方案:KPTI技術 307

6.3 CPU“幽靈”漏洞 317

6.3.1 分支預測 317

6.3.2 攻擊原理 320

6.3.3 修復方案 321

附錄A 使用DS-5調試ARM64 Linux

內核 325

附錄B ARM64中的獨占訪問指令 341

附錄C 圖解MESI狀態轉換 345

附錄D 高速緩存與內存屏障 350