圖解Linux內(nèi)核(基于6.x) 姜亞華
定 價(jià):139 元
- 作者:姜亞華
- 出版時(shí)間:2024/5/1
- ISBN:9787111745471
- 出 版 社:機(jī)械工業(yè)出版社
- 中圖法分類:TP316.85-64
- 頁碼:
- 紙張:膠版紙
- 版次:
- 開本:16開
全書共五篇,以從易到難的順序詳細(xì)剖析了Linux內(nèi)核開發(fā)的核心技術(shù)!爸R(shí)儲(chǔ)備篇”介紹了Linux的數(shù)據(jù)結(jié)構(gòu)、中斷處理、內(nèi)核同步和時(shí)間計(jì)算等內(nèi)容,這些是理解后續(xù)章節(jié)的前提;之后通過“內(nèi)存管理篇”“文件系統(tǒng)篇”“進(jìn)程管理篇”詳細(xì)介紹了Linux的三大核心模塊;最后的“綜合應(yīng)用篇”則融合了前面諸多模塊知識(shí)展示了Linux內(nèi)核開發(fā)在操作系統(tǒng)、智能設(shè)備、驅(qū)動(dòng)、通信、芯片、云計(jì)算和人工智能等熱點(diǎn)領(lǐng)域的應(yīng)用。書中的重點(diǎn)、難點(diǎn)均配有圖表、代碼和實(shí)戰(zhàn)案例,力求直觀、清晰。
學(xué)習(xí)本書的讀者需要熟悉C語言,建議對(duì)Linux內(nèi)核有一定了解。推薦初學(xué)者按照本書的編排順序閱讀,而熟悉Linux內(nèi)核的讀者可以跳過知識(shí)儲(chǔ)備篇,直接從三大核心模塊篇進(jìn)行閱讀。
本書深入淺出、配圖豐富,可作為Linux初中級(jí)讀者系統(tǒng)學(xué)習(xí)Linux內(nèi)核開發(fā)的指導(dǎo)手冊(cè),也可作為從事嵌入式、操作系統(tǒng)、Linux編程、驅(qū)動(dòng)/內(nèi)核開發(fā),以及智能設(shè)備開發(fā)的工程師的案頭指南和進(jìn)階工具書。
濃縮數(shù)百萬行代碼
308張圖表深度解析
掃碼觀看教學(xué)視頻
源代碼及電子課件
本人編寫的《精通Linux內(nèi)核:智能設(shè)備開發(fā)核心技術(shù)》出版已有多年了,這期間我讀了很多書評(píng),也跟行業(yè)內(nèi)的工程師交流過多次,發(fā)現(xiàn)在編寫該書的過程中有一點(diǎn)做得并不到位,那就是當(dāng)時(shí)寫作只站在閱讀了幾百萬行內(nèi)核代碼之后做總結(jié)的角度敘述問題,而忽略了初學(xué)者學(xué)習(xí)新知識(shí)的思維過程,表現(xiàn)為其中的有些知識(shí)點(diǎn),出于慣性思維我認(rèn)為比較簡單,但實(shí)際上可能對(duì)于初學(xué)者來說并不一定容易理解。同時(shí),Linux的內(nèi)核版本又更新到了6.x時(shí)代,因此就有了《圖解Linux內(nèi)核(基于6.x)》一書的寫作想法,我希望用圖來直觀、清晰地闡述復(fù)雜的問題,讓初學(xué)者更容易理解。
當(dāng)前的Linux內(nèi)核版本已經(jīng)更新到6.x,本書隨之更新至6.2版本。其中,有少數(shù)知識(shí)的討論也涉及3.10版本,保留它們主要是希望可以讓讀者看到內(nèi)核的更新和優(yōu)化思路。建議讀者在閱讀本書時(shí)可以下載3.10和6.2兩個(gè)版本的內(nèi)核代碼作為參考。
內(nèi)容
全書分為5篇內(nèi)容。
知識(shí)儲(chǔ)備篇:包括常見的數(shù)據(jù)結(jié)構(gòu)、時(shí)間和中斷處理等內(nèi)容,它們是后面幾部分內(nèi)容的學(xué)習(xí)基礎(chǔ),希望讀者能夠從中了解內(nèi)核的概況,在后續(xù)的章節(jié)中見到相關(guān)的知識(shí)時(shí)不會(huì)感到陌生。尤其是2.1【圖解】關(guān)系型數(shù)據(jù)結(jié)構(gòu)一節(jié),它是理解其他章節(jié)數(shù)據(jù)結(jié)構(gòu)間關(guān)系的基礎(chǔ),以及2.2【圖解】內(nèi)核中常見的設(shè)計(jì)模式一節(jié)闡述了內(nèi)核程序的設(shè)計(jì)思想,對(duì)理解復(fù)雜系統(tǒng)的設(shè)計(jì)思路很有幫助。
內(nèi)存管理篇:包括內(nèi)存尋址、物理內(nèi)存、線性內(nèi)存空間的管理和缺頁異常等內(nèi)容。希望讀者能夠從中學(xué)習(xí)到內(nèi)存映射的原理,理解管理內(nèi)存的過程,在調(diào)用內(nèi)核提供的函數(shù)時(shí)明白內(nèi)核為用戶做了哪些操作。
文件系統(tǒng)篇:包括VFS的流程、sysfs和proc文件系統(tǒng)的實(shí)現(xiàn)、ext4文件系統(tǒng)的解析等內(nèi)容。希望讀者能夠掌握文件系統(tǒng)的設(shè)計(jì)思路、文件操作的實(shí)現(xiàn)、sysfs等文件系統(tǒng)的特點(diǎn)以及ext4文件系統(tǒng)的原理。尤其是ext4文件系統(tǒng),本書列舉了大量的動(dòng)手實(shí)例,希望讀者可以理解它的精髓。
進(jìn)程管理篇:包括進(jìn)程原理、進(jìn)程調(diào)度、進(jìn)程通信和信號(hào)處理等內(nèi)容。希望讀者能夠掌握進(jìn)程間的關(guān)系、進(jìn)程調(diào)度的過程、進(jìn)程通信的原理和信號(hào)的處理過程等。理解進(jìn)程的創(chuàng)建過程尤為重要,它涵蓋了進(jìn)程實(shí)現(xiàn)的原理。
綜合應(yīng)用篇:包括程序的執(zhí)行、I/O多路復(fù)用、Binder通信、Linux設(shè)備驅(qū)動(dòng)模型和V4L2架構(gòu)等內(nèi)容。本篇綜合了前幾部分的知識(shí),希望讀者可以靈活掌握它們的原理,在工作中使用起來得心應(yīng)手。
從難易度角度來講,這5篇是由淺入深的。本書僅羅列了關(guān)鍵或者復(fù)雜的代碼,從它們包含的代碼篇幅就可以知道難易程度。知識(shí)儲(chǔ)備篇偏向工具和基礎(chǔ)知識(shí),以原理分析為主。內(nèi)存管理篇、文件系統(tǒng)篇和進(jìn)程管理篇是重點(diǎn),代碼量巨大,這些代碼一方面可以幫助讀者理解整體的軟件架構(gòu),另一方面方便讀者在學(xué)習(xí)的時(shí)候不會(huì)因?yàn)槭诸^沒有代碼而感到無所適從,最重要的是代碼才是結(jié)論背后的真相,直接給出結(jié)論無疑會(huì)讓技術(shù)變成了死記硬背的工具。
特色
本書在搭建知識(shí)體系和配套學(xué)習(xí)資源的過程中進(jìn)行了如下優(yōu)化。
前言圖解Linux內(nèi)核(基于6.x) 基于新發(fā)布的Linux 6.x,包含前沿的技術(shù)(如近幾年流行的CXL)和巨量的代碼更新。
以【圖解】【看圖說話】等巧妙形式增強(qiáng)讀者的閱讀體驗(yàn),涉及的復(fù)雜機(jī)制均配圖表且提供下載,幫助讀者快速厘清脈絡(luò)。
重點(diǎn)案例和難點(diǎn)操作均制作了配套視頻教學(xué)課程,讀者在閱讀過程中,只需拿出手機(jī)掃一掃頁面相應(yīng)位置的二維碼,即可打開視頻課程學(xué)習(xí)。
提供書中所有案例的完整源代碼,幫助讀者快速學(xué)習(xí)內(nèi)核知識(shí)。
配備了授課用電子教案等教學(xué)服務(wù),滿足大中專院校及相關(guān)培訓(xùn)班教師授課所需。
致謝
首先,感謝機(jī)械工業(yè)出版社的編輯丁倫老師,丁老師與我寫《圖解Linux內(nèi)核(基于6.x)》的思路不謀而合。從確定目錄結(jié)構(gòu)就開始耐心指導(dǎo)我,對(duì)知識(shí)的內(nèi)容也提出了客觀準(zhǔn)確且專業(yè)嚴(yán)謹(jǐn)?shù)男薷囊庖。沒有丁老師的認(rèn)真負(fù)責(zé),本書就無法得到升華。
感謝我的研究生導(dǎo)師蘆鵬宇,蘆老師待人平和耐心,工作一絲不茍,讓我在校時(shí)就樹立了正確的做人和做事的方向,使得對(duì)技術(shù)不懈追求的理念在我畢業(yè)時(shí)就已經(jīng)深深烙在心里。同時(shí)還要感謝哈爾濱工業(yè)大學(xué),“規(guī)格嚴(yán)格,功夫到家”的八字校訓(xùn)一直激勵(lì)著我,無數(shù)個(gè)像蘆老師一樣的辛勤園丁用行動(dòng)將其傳授給一批又一批的學(xué)子。
感謝華為技術(shù)有限公司的陳棟,很幸運(yùn)在我第一份工作中可以遇到一個(gè)對(duì)技術(shù)有信仰的前輩,他對(duì)技術(shù)不懈追求的態(tài)度讓我在第一份工作中養(yǎng)成了良好的職業(yè)態(tài)度和習(xí)慣。
感謝英特爾(Intel)公司的劉駿、徐杰、黃衛(wèi)強(qiáng)、王龍和Foster,劉駿將我招入Intel,開闊了我的視野,改變了我的人生軌跡。我曾經(jīng)問他,他希望我在有余力的情況下學(xué)習(xí)些什么知識(shí),他的回答是“只要是學(xué)習(xí),就會(huì)有幫助,無論學(xué)什么知識(shí)”;徐杰在我的工作中,對(duì)我信任有加,處處委以重任,讓我在很短的時(shí)間內(nèi)快速成長;黃衛(wèi)強(qiáng)和王龍是我在Intel的師傅(Buddy),在工作和生活中給了我很多建議,至今受用;Foster是BIOS和x86專家,幫助我快速地熟悉x86的原理。
感謝AMD公司的Winston、Gavin和Jennifer,讓我在AMD學(xué)習(xí)到了很多芯片相關(guān)的知識(shí),完成了本書的最后一環(huán)。Jennifer交給我挑戰(zhàn)性的工作,讓我在新的角
姜亞華
先后就職于華為、Intel、AMD、壁仞科技和曦智科技。
?就職于華為期間,負(fù)責(zé)華為手機(jī)的Touch和Sensor的驅(qū)動(dòng)和軟件優(yōu)化,包括Viva、D1、Mate1、Mate2和P2等。
?就職于Intel期間,負(fù)責(zé)Intel安卓平臺(tái)的Camera和Sensor的驅(qū)動(dòng),包括Baytrail、Cherrytrail、Cherrytrail CR和Sofia等。
?就職于AMD期間,負(fù)責(zé)DMA、Interrupt、Semaphore等模塊的優(yōu)化和驗(yàn)證,包括Vega系列、Navi系列和多款A(yù)PU產(chǎn)品。
?在曦智科技負(fù)責(zé)多款產(chǎn)品的系統(tǒng)軟件開發(fā)至今,包括PCIe驅(qū)動(dòng)、設(shè)備固件和系統(tǒng)類庫等。
一直從事與Linux內(nèi)核和Linux系統(tǒng)編程相關(guān)的工作,研究內(nèi)核代碼十余年,對(duì)多數(shù)模塊的細(xì)節(jié)如數(shù)家珍。
序
前言
知識(shí)儲(chǔ)備篇
第1章Linux內(nèi)核概述
1.1基于Linux的操作系統(tǒng)生態(tài)
1.2【圖解】Linux工程師技能和領(lǐng)域
1.3內(nèi)核代碼結(jié)構(gòu)
1.4【看圖說話】Android操作系統(tǒng)
第2章數(shù)據(jù)結(jié)構(gòu)和設(shè)計(jì)模式
2.1【圖解】關(guān)系型數(shù)據(jù)結(jié)構(gòu)
2.1.1一對(duì)一關(guān)系
2.1.2一對(duì)多關(guān)系
2.1.3多對(duì)多關(guān)系
2.2【圖解】內(nèi)核中常見的設(shè)計(jì)模式
2.2.1模板方法設(shè)計(jì)模式
2.2.2觀察者設(shè)計(jì)模式
2.3【看圖說話】input子系統(tǒng)第3章中斷
3.1【圖解】中斷處理的軟硬件分工
3.2中斷的處理
3.2.1注冊(cè)中斷服務(wù)例程
3.2.2中斷處理和返回
3.3軟中斷
3.3.1tasklet小任務(wù)
3.3.2timer定時(shí)器
3.4【看圖說話】系統(tǒng)調(diào)用與程序優(yōu)化
第4章Linux的時(shí)間
4.1數(shù)據(jù)結(jié)構(gòu)
4.2時(shí)間的衡量
4.2.1時(shí)鐘芯片
4.2.2時(shí)間的計(jì)算
4.3【圖解】時(shí)鐘中斷
4.4【看圖說話】timer和hrtimer內(nèi)存管理篇
第5章內(nèi)存尋址
5.1DRAM和MMIO
5.2【圖解】內(nèi)存分頁
5.2.1尋址
5.2.2內(nèi)存映射
5.3【看圖說話】訪問GPU的
Framebuffer
第6章物理內(nèi)存的管理
6.1【圖解】物理內(nèi)存的布局
6.1.1【圖解】node
6.1.2【圖解】node的管理
6.2物理內(nèi)存申請(qǐng)的三個(gè)階段
6.2.1啟動(dòng)程序
6.2.2memblock分配器
6.2.3伙伴系統(tǒng)
6.3【看圖說話】搭建管理物理內(nèi)存的
系統(tǒng)
第7章虛擬內(nèi)存的管理
7.1線性空間的劃分
7.2【圖解】內(nèi)核線性空間布局
7.2.1直接映射區(qū)
7.2.2動(dòng)態(tài)映射區(qū)
7.2.3永久映射區(qū)
7.2.4固定映射區(qū)
7.3用戶空間內(nèi)存映射mmap
7.3.1數(shù)據(jù)結(jié)構(gòu)
7.3.2mmap的實(shí)現(xiàn)
7.4【看圖說話】/dev/mem的巧用和限制
第8章內(nèi)存管理進(jìn)階
8.1內(nèi)存申請(qǐng)
8.1.1申請(qǐng)連續(xù)物理內(nèi)存
8.1.2vmalloc的使用
8.2緩存
8.2.1TLB緩存
8.2.2內(nèi)存緩存
8.3【圖解】缺頁異常
8.3.1異常的處理
8.3.2COW的精髓
8.4【看圖說話】看似簡單的malloc
第9章內(nèi)存回收
9.1【圖解】內(nèi)存回收調(diào)用棧
9.2掃描過程的控制
9.3選擇掃描對(duì)象
9.4掃描inactive鏈表
9.4.1頁隔離
9.4.2folio的原理
9.4.3回收隔離頁
9.4.4掃尾
9.5掃描active鏈表
9.6【看圖說話】反向映射
9.6.1匿名映射的mapping
9.6.2文件映射的mapping文件系統(tǒng)篇
第10章虛擬文件系統(tǒng)
10.1數(shù)據(jù)結(jié)構(gòu)
10.2【圖解】文件系統(tǒng)的掛載
10.3文件查找
10.4文件操作
10.4.1軟鏈接和硬鏈接
10.4.2創(chuàng)建和刪除目錄
10.4.3打開和關(guān)閉文件
10.4.4創(chuàng)建節(jié)點(diǎn)
10.4.5刪除文件
10.5文件的IO
10.5.1讀寫
10.5.2ioctl操作
10.6【看圖說話】proc文件系統(tǒng)
第11章sysfs文件系統(tǒng)
11.1基本框架
11.2數(shù)據(jù)結(jié)構(gòu)
11.3創(chuàng)建文件
11.4文件的IO
11.5【看圖說話】sysfs和驅(qū)動(dòng)
第12章ext4文件系統(tǒng)
12.1【圖解】ext4布局
12.2數(shù)據(jù)結(jié)構(gòu)
12.2.1ext4_super_block結(jié)構(gòu)體
12.2.2ext4_group_desc結(jié)構(gòu)體
12.2.3ext4_inode結(jié)構(gòu)體
12.2.4ext4_sb_info結(jié)構(gòu)體
12.2.5ext4_inode_info結(jié)構(gòu)體
12.3ext4的掛載
12.4【圖解】ext4目錄結(jié)構(gòu)
12.4.1線性目錄
12.4.2哈希樹目錄
12.4.3硬鏈接
12.5【圖解】ext4文件的IO
12.5.1映射
12.5.2區(qū)段樹
12.6【看圖說話】文件的恢復(fù)進(jìn)程管理篇
第13章進(jìn)程
13.1概述
13.1.1數(shù)據(jù)結(jié)構(gòu)
13.1.2擴(kuò)展討論
13.2進(jìn)程的創(chuàng)建
13.2.1dup_task_struct函數(shù)
13.2.2復(fù)制creds
13.2.3設(shè)置時(shí)間
13.2.4sched_fork函數(shù)
13.2.5復(fù)制資源
13.2.6申請(qǐng)pid
13.2.7重要的雜項(xiàng)
13.3創(chuàng)建進(jìn)程
13.3.1fork/vfork系統(tǒng)調(diào)用
13.3.2創(chuàng)建線程
13.3.3創(chuàng)建內(nèi)核線程
13.4進(jìn)程“三巨頭”
13.5進(jìn)程退出
13.5.1退出方式
13.5.2退出過程
13.5.3使用wait等待子進(jìn)程
13.6【看圖說話】Android的thread
目錄圖解Linux內(nèi)核(基于6.x)第14章進(jìn)程調(diào)度
14.1數(shù)據(jù)結(jié)構(gòu)
14.2進(jìn)程調(diào)度的過程
14.2.1進(jìn)程被創(chuàng)建
14.2.2喚醒進(jìn)程
14.2.3時(shí)鐘中斷
14.2.4進(jìn)程切換
14.3stop調(diào)度類
14.4實(shí)時(shí)調(diào)度類
14.4.1優(yōu)先級(jí)和搶占
14.4.2task_tick_rt函數(shù)
14.4.3選擇下一個(gè)進(jìn)程
14.5【圖解】完全公平調(diào)度類
14.5.1task_fork_fair函數(shù)
14.5.2enqueue_task和check_preempt
14.5.3task_tick_fair函數(shù)
14.5.4進(jìn)程切換
14.6最后期限調(diào)度類
14.7idle調(diào)度類
14.8進(jìn)程優(yōu)先級(jí)
14.9【看圖說話】idle進(jìn)程
第15章進(jìn)程通信
15.1經(jīng)典的管道
15.1.1創(chuàng)建pipe
15.1.2pipe的操作
15.1.3命名管道
15.2POSIX通信
15.2.1POSIX信號(hào)量
15.2.2POSIX共享內(nèi)存
15.2.3POSIX消息隊(duì)列
15.3XSI通信
15.3.1IPC對(duì)象的key和id
15.3.2XSI信號(hào)量
15.3.3XSI消息隊(duì)列
15.3.4XSI共享內(nèi)存
15.4【看圖說話】多線程和多進(jìn)程
第16章信號(hào)
16.1數(shù)據(jù)結(jié)構(gòu)
16.2捕捉信號(hào)
16.3發(fā)送信號(hào)
16.4【圖解】信號(hào)處理的過程
16.4.1處理信號(hào)的時(shí)機(jī)和方式
16.4.2處理信號(hào)后如何返回
16.5【看圖說話】監(jiān)控文件的IO綜合應(yīng)用篇
第17章玩轉(zhuǎn)操作系統(tǒng)——程序的
執(zhí)行
17.1【圖解】elf文件
17.1.1概述
17.1.2文件格式
17.2exec函數(shù)族
17.2.1數(shù)據(jù)結(jié)構(gòu)
17.2.2系統(tǒng)調(diào)用
17.3【看圖說話】main函數(shù)的來龍去脈
第18章玩轉(zhuǎn)操作系統(tǒng)——IO多路
復(fù)用
18.1select機(jī)制
18.2poll機(jī)制
18.3【圖解】epoll
18.3.1數(shù)據(jù)結(jié)構(gòu)
18.3.2epoll的使用
18.4【看圖說話】改良管道通信
第19章玩轉(zhuǎn)操作系統(tǒng)—