《用“芯”探核基於龍芯的Linux核心探索解析》是2020年人民郵電出版社出版的圖書,作者是陳華才。
基本介紹
- 中文名:用“芯”探核基於龍芯的Linux核心探索解析
- 作者:陳華才
- 出版社:人民郵電出版社
- 出版時間:2020年8月1日
- ISBN:9787115444929
內容簡介,圖書目錄,
內容簡介
這是一本基於龍芯平台,結合Linux-5.4.x 版本的核心原始碼來解析Linux 核心的書籍。本書首先介紹了有關龍芯處理器和Linux 核心的基礎知識,然後重點講解了核心啟動、異常與中斷、記憶體管理、進程管理、顯示卡驅動、網卡驅動和電源管理這7 大板塊的內容。本書甚少涉及代碼的細枝末節,而是重點關注代碼實現的主幹流程,並且創造性地引入了樹形視圖和鏈式視圖這兩種比流程圖更好用的代碼解析方法。
本書適合Linux 系統相關的開發人員,特別是基於龍芯處理器做核心開發的技術人員學習參考。
圖書目錄
第01 章 基礎知識
1.1 龍芯處理器簡介 002
1.1.1 龍芯3 號功能特徵 004
1.1.2 龍芯3 號處理器核 008
1.1.3 龍芯電腦基本結構 015
1.2 Linux 核心簡介 018
1.2.1 Linux 核心發展簡史 019
1.2.2 Linux 核心的開發模式 021
1.2.3 關於長期維護穩定版 025
1.2.4 龍芯的核心版本選型 025
1.3 如何高效閱讀代碼 027
1.3.1 找準入口點 028
1.3.2 理清主脈絡 029
1.3.3 顧名思義看功能 040
1.3.4 理解補丁檔案 042
1.4 如何開發健壯核心 045
1.4.1 核心代碼風格 046
1.4.2 合理生成補丁 048
1.4.3 謹慎對待創新 049
第02 章 核心啟動解析
2.1 核心原始碼目錄結構 054
2.2 核心啟動過程:主核視角 055
2.2.1 第一入口:kernel_entry 056
2.2.2 第二入口:start_kernel() 063
2.2.3 重要函式:setup_arch() 070
2.2.4 重要函式:trap_init() 083
2.2.5 重要函式:init_IRQ() 087
2.2.6 重要函式:time_init() 092
2.2.7 1 號進程:kernel_init() 096
2.3 核心啟動過程:輔核視角 104
2.3.1 第一入口:smp_bootstrap 105
2.3.2 第二入口:start_secondary() 107
2.4 本章小結 110
第03 章 異常與中斷解析
3.1 暫存器操作 113
3.2 異常處理解析 114
3.2.1 復位異常和NMI 115
3.2.2 快取錯誤異常 116
3.2.3 TLB/XTLB 異常 117
3.2.4 其他通用異常 126
3.3 中斷處理解析 137
3.3.1 中斷處理的入口 137
3.3.2 中斷處理的分派 140
3.4 軟中斷、小任務與工作佇列 151
3.4.1 軟中斷softirq 151
3.4.2 小任務tasklet 154
3.4.3 工作佇列workqueue 156
3.5 本章小結 159
第04 章 記憶體管理解析
4.1 記憶體管理相關概念 161
4.1.1 龍芯3 號的高速快取 161
4.1.2 龍芯3 號的TLB 168
4.1.3 龍芯的虛擬地址空間 170
4.2 物理記憶體頁幀管理 171
4.2.1 物理地址空間 177
4.2.2 夥伴系統算法 183
4.3 核心記憶體對象管理 201
4.3.1 數據結構與API 202
4.3.2 核心函式解析 209
4.4 分頁映射記憶體管理 217
4.4.1 持久核心映射 221
4.4.2 臨時核心映射 226
4.4.3 非連續記憶體管理 229
4.5 進程地址空間管理 241
4.5.1 數據結構與API 241
4.5.2 記憶體映射 250
4.5.3 堆區管理 257
4.5.4 缺頁異常處理 258
4.6 記憶體管理其他話題 266
4.6.1 反向映射 267
4.6.2 記憶體回收 271
4.6.3 巨頁機制 274
4.7 本章小結 275
第05 章 進程管理解析
5.1 進程描述符 278
5.1.1 運行狀態相關 285
5.1.2 標識調度相關 289
5.1.3 其他重要部分 295
5.2 進程創建 296
5.2.1 複製新進程 296
5.2.2 執行新程式 308
5.3 進程銷毀 314
5.3.1 退出程式執行 314
5.3.2 清理進程資源 317
5.4 進程調度 327
5.4.1 基本概念 328
5.4.2 發展歷史 330
5.4.3 公平調度策略 334
5.4.4 調度核心解析 347
5.4.5 進程切換解析 360
5.5 其他話題 364
5.5.1 CPU 負載 364
5.5.2 調度域與調度組 370
5.5.3 NUMA 均衡調度 374
5.6 本章小結 380
第06 章 顯示卡驅動解析
6.1 顯示卡概述 382
6.1.1 發展簡史及有關概念 382
6.1.2 現代顯示卡的硬體結構 385
6.2 Linux 圖形系統架構 388
6.2.1 X-Window 和Wayland 388
6.2.2 直接渲染、間接渲染和顯示卡驅動 391
6.3 Linux 核心顯示卡驅動 392
6.3.1 暫存器讀寫 393
6.3.2 常用數據結構 394
6.3.3 顯示卡初始化 411
6.3.4 命令流處理 435
6.3.5 存儲區域間數據交換 439
6.3.6 GPU 重置(Reset) 443
6.4 本章小結 446
第07 章 網卡驅動解析
7.1 網路子系統概述 448
7.2 Linux 乙太網卡驅動 449
7.2.1 常用數據結構 449
7.2.2 網卡初始化 452
7.2.3 網卡的開與關 456
7.2.4 數據傳送與接收 457
7.2.5 故障檢測與修復(看門狗) 466
7.3 本章小結 468
第08 章 電源管理解析
8.1 電源管理概述 470
8.2 運行時電源管理 473
8.2.1 動態變頻 474
8.2.2 自動調核 488
8.3 系統級睡眠管理 507
8.3.1 睡眠到記憶體(待機) 509
8.3.2 睡眠到磁碟(休眠) 520
8.4 本章小結 527
附錄A 並發與同步原語
A.1 記憶體屏障 529
A.2 每CPU 變數 533
A.3 原子操作 535
A.4 開關搶占 539
A.5 自旋鎖 540
A.6 順序鎖 544
A.7 信號量 546
A.8 互斥量 548
A.9 RCU 機制 549
A.10 其他原語 556
附錄B Linux 核心大事記
B.1 史前時代 560
B.2 奇偶時代 560
B.3 快速演進時代 562
B.4 極速演進時代 564
後記
參考文獻