用“芯”探核 基于龍芯的Linux內(nèi)核探索解析
定 價(jià):118 元
- 作者:陳華才
- 出版時(shí)間:2020/8/1
- ISBN:9787115444929
- 出 版 社:人民郵電出版社
- 中圖法分類:TP316.85
- 頁(yè)碼:568
- 紙張:
- 版次:01
- 開本:16開
這是一本基于龍芯平臺(tái),結(jié)合Linux-5.4.x 版本的內(nèi)核源代碼來(lái)解析Linux 內(nèi)核的書籍。本書首先介紹了有關(guān)龍芯處理器和Linux 內(nèi)核的基礎(chǔ)知識(shí),然后重點(diǎn)講解了內(nèi)核啟動(dòng)、異常與中斷、內(nèi)存管理、進(jìn)程管理、顯卡驅(qū)動(dòng)、網(wǎng)卡驅(qū)動(dòng)和電源管理這7 大板塊的內(nèi)容。本書甚少涉及代碼的細(xì)枝末節(jié),而是重點(diǎn)關(guān)注代碼實(shí)現(xiàn)的主干流程,并且創(chuàng)造性地引入了樹形視圖和鏈?zhǔn)揭晥D這兩種比流程圖更好用的代碼解析方法。
本書適合Linux 系統(tǒng)相關(guān)的開發(fā)人員,特別是基于龍芯處理器做內(nèi)核開發(fā)的技術(shù)人員學(xué)習(xí)參考。
Linux內(nèi)核中龍芯3號(hào)的Maintainer十年磨一劍
基于MIPS/龍芯架構(gòu)的Linux-5.x版本內(nèi)核
立足龍芯而包羅萬(wàn)象
創(chuàng)造性地使用“樹形視圖”和“鏈?zhǔn)揭晥D”來(lái)解析源代碼
胡偉武/龍芯中科技術(shù)有限公司董事長(zhǎng)
金海/CCF副理事長(zhǎng),華中科技大學(xué)教授
作序推薦
陳華才
博士,高級(jí)工程師。現(xiàn)任江蘇航天龍夢(mèng)信息技術(shù)有限公司副總工程師,負(fù)責(zé)龍芯3號(hào)處理器的內(nèi)核開發(fā)。作為L(zhǎng)inux內(nèi)核中MIPS/ 龍芯3 號(hào)的Maintainer,向Linux 內(nèi)核官方提交了大量的代碼。陳華才畢業(yè)于華中科技大學(xué)計(jì)算機(jī)學(xué)院,攻讀博士學(xué)位期間,先后在中國(guó)電力科學(xué)院、英特爾開源技術(shù)中心實(shí)習(xí),參與高可靠冗余系統(tǒng)、Xen 虛擬機(jī)監(jiān)控器和Linux 內(nèi)核的研發(fā)。2012年進(jìn)入中國(guó)科學(xué)院計(jì)算技術(shù)研究所博士后流動(dòng)站,同時(shí)被派往江蘇夢(mèng)蘭集團(tuán)企業(yè)博士后工作站從事博士后研究工作,其間獲得“江蘇省科技創(chuàng)新團(tuán)隊(duì)”和“常熟市科技創(chuàng)新創(chuàng)業(yè)領(lǐng)軍人才”等人才計(jì)劃資助。
第01 章 基礎(chǔ)知識(shí)
1.1 龍芯處理器簡(jiǎn)介 002
1.1.1 龍芯3 號(hào)功能特征 004
1.1.2 龍芯3 號(hào)處理器核 008
1.1.3 龍芯電腦基本結(jié)構(gòu) 015
1.2 Linux 內(nèi)核簡(jiǎn)介 018
1.2.1 Linux 內(nèi)核發(fā)展簡(jiǎn)史 019
1.2.2 Linux 內(nèi)核的開發(fā)模式 021
1.2.3 關(guān)于長(zhǎng)期維護(hù)穩(wěn)定版 025
1.2.4 龍芯的內(nèi)核版本選型 025
1.3 如何高效閱讀代碼 027
1.3.1 找準(zhǔn)入口點(diǎn) 028
1.3.2 理清主脈絡(luò) 029
1.3.3 顧名思義看功能 040
1.3.4 理解補(bǔ)丁文件 042
1.4 如何開發(fā)健壯內(nèi)核 045
1.4.1 內(nèi)核代碼風(fēng)格 046
1.4.2 合理生成補(bǔ)丁 048
1.4.3 謹(jǐn)慎對(duì)待創(chuàng)新 049
第02 章 內(nèi)核啟動(dòng)解析
2.1 內(nèi)核源代碼目錄結(jié)構(gòu) 054
2.2 內(nèi)核啟動(dòng)過(guò)程:主核視角 055
2.2.1 第一入口:kernel_entry 056
2.2.2 第二入口:start_kernel() 063
2.2.3 重要函數(shù):setup_arch() 070
2.2.4 重要函數(shù):trap_init() 083
2.2.5 重要函數(shù):init_IRQ() 087
2.2.6 重要函數(shù):time_init() 092
2.2.7 1 號(hào)進(jìn)程:kernel_init() 096
2.3 內(nèi)核啟動(dòng)過(guò)程:輔核視角 104
2.3.1 第一入口:smp_bootstrap 105
2.3.2 第二入口:start_secondary() 107
2.4 本章小結(jié) 110
第03 章 異常與中斷解析
3.1 寄存器操作 113
3.2 異常處理解析 114
3.2.1 復(fù)位異常和NMI 115
3.2.2 緩存錯(cuò)誤異常 116
3.2.3 TLB/XTLB 異常 117
3.2.4 其他通用異常 126
3.3 中斷處理解析 137
3.3.1 中斷處理的入口 137
3.3.2 中斷處理的分派 140
3.4 軟中斷、小任務(wù)與工作隊(duì)列 151
3.4.1 軟中斷softirq 151
3.4.2 小任務(wù)tasklet 154
3.4.3 工作隊(duì)列workqueue 156
3.5 本章小結(jié) 159
第04 章 內(nèi)存管理解析
4.1 內(nèi)存管理相關(guān)概念 161
4.1.1 龍芯3 號(hào)的高速緩存 161
4.1.2 龍芯3 號(hào)的TLB 168
4.1.3 龍芯的虛擬地址空間 170
4.2 物理內(nèi)存頁(yè)幀管理 171
4.2.1 物理地址空間 177
4.2.2 伙伴系統(tǒng)算法 183
4.3 內(nèi)核內(nèi)存對(duì)象管理 201
4.3.1 數(shù)據(jù)結(jié)構(gòu)與API 202
4.3.2 核心函數(shù)解析 209
4.4 分頁(yè)映射內(nèi)存管理 217
4.4.1 持久內(nèi)核映射 221
4.4.2 臨時(shí)內(nèi)核映射 226
4.4.3 非連續(xù)內(nèi)存管理 229
4.5 進(jìn)程地址空間管理 241
4.5.1 數(shù)據(jù)結(jié)構(gòu)與API 241
4.5.2 內(nèi)存映射 250
4.5.3 堆區(qū)管理 257
4.5.4 缺頁(yè)異常處理 258
4.6 內(nèi)存管理其他話題 266
4.6.1 反向映射 267
4.6.2 內(nèi)存回收 271
4.6.3 巨頁(yè)機(jī)制 274
4.7 本章小結(jié) 275
第05 章 進(jìn)程管理解析
5.1 進(jìn)程描述符 278
5.1.1 運(yùn)行狀態(tài)相關(guān) 285
5.1.2 標(biāo)識(shí)調(diào)度相關(guān) 289
5.1.3 其他重要部分 295
5.2 進(jìn)程創(chuàng)建 296
5.2.1 復(fù)制新進(jìn)程 296
5.2.2 執(zhí)行新程序 308
5.3 進(jìn)程銷毀 314
5.3.1 退出程序執(zhí)行 314
5.3.2 清理進(jìn)程資源 317
5.4 進(jìn)程調(diào)度 327
5.4.1 基本概念 328
5.4.2 發(fā)展歷史 330
5.4.3 公平調(diào)度策略 334
5.4.4 調(diào)度核心解析 347
5.4.5 進(jìn)程切換解析 360
5.5 其他話題 364
5.5.1 CPU 負(fù)載 364
5.5.2 調(diào)度域與調(diào)度組 370
5.5.3 NUMA 均衡調(diào)度 374
5.6 本章小結(jié) 380
第06 章 顯卡驅(qū)動(dòng)解析
6.1 顯卡概述 382
6.1.1 發(fā)展簡(jiǎn)史及有關(guān)概念 382
6.1.2 現(xiàn)代顯卡的硬件結(jié)構(gòu) 385
6.2 Linux 圖形系統(tǒng)架構(gòu) 388
6.2.1 X-Window 和Wayland 388
6.2.2 直接渲染、間接渲染和顯卡驅(qū)動(dòng) 391
6.3 Linux 內(nèi)核顯卡驅(qū)動(dòng) 392
6.3.1 寄存器讀寫 393
6.3.2 常用數(shù)據(jù)結(jié)構(gòu) 394
6.3.3 顯卡初始化 411
6.3.4 命令流處理 435
6.3.5 存儲(chǔ)區(qū)域間數(shù)據(jù)交換 439
6.3.6 GPU 重置(Reset) 443
6.4 本章小結(jié) 446
第07 章 網(wǎng)卡驅(qū)動(dòng)解析
7.1 網(wǎng)絡(luò)子系統(tǒng)概述 448
7.2 Linux 以太網(wǎng)卡驅(qū)動(dòng) 449
7.2.1 常用數(shù)據(jù)結(jié)構(gòu) 449
7.2.2 網(wǎng)卡初始化 452
7.2.3 網(wǎng)卡的開與關(guān) 456
7.2.4 數(shù)據(jù)發(fā)送與接收 457
7.2.5 故障檢測(cè)與修復(fù)(看門狗) 466
7.3 本章小結(jié) 468
第08 章 電源管理解析
8.1 電源管理概述 470
8.2 運(yùn)行時(shí)電源管理 473
8.2.1 動(dòng)態(tài)變頻 474
8.2.2 自動(dòng)調(diào)核 488
8.3 系統(tǒng)級(jí)睡眠管理 507
8.3.1 睡眠到內(nèi)存(待機(jī)) 509
8.3.2 睡眠到磁盤(休眠) 520
8.4 本章小結(jié) 527
附錄A 并發(fā)與同步原語(yǔ)
A.1 內(nèi)存屏障 529
A.2 每CPU 變量 533
A.3 原子操作 535
A.4 開關(guān)搶占 539
A.5 自旋鎖 540
A.6 順序鎖 544
A.7 信號(hào)量 546
A.8 互斥量 548
A.9 RCU 機(jī)制 549
A.10 其他原語(yǔ) 556
附錄B Linux 內(nèi)核大事記
B.1 史前時(shí)代 560
B.2 奇偶時(shí)代 560
B.3 快速演進(jìn)時(shí)代 562
B.4 極速演進(jìn)時(shí)代 564
后記
參考文獻(xiàn)