Linux 內核深度解析

Linux 內核深度解析

作者: 餘華兵
出版社: 人民郵電
出版在: 2019-06-01
ISBN-13: 9787115504111
ISBN-10: 7115504113





內容描述


本書基於4.x版本的Linux內核,介紹了Linux內核的若乾關鍵子系統的技術原理。本書主要內容包括內核的引導過程、內核管理和調度進程的技術原理、內核管理虛擬內存和物理內存的技術原理、內核處理異常和中斷的技術原理,以及系統調用的實現方式等。此外,本書還詳細講解了內核實現的各種保護臨界區的互斥技術,以及內核的文件系統。本書內容豐富,深入淺出,通過大量的圖例來描述數據結構之間的關系和函數的執行流程,並結合代碼分析,引導讀者閱讀和理解內核源代碼。


目錄大綱


目錄
第1章內核引導和初始化1 
1.1到哪裡讀取引導程序1 
1.2引導程序1 
1.2.1入口_start 1 
1.2.2標號reset 2 
1.2.3函數_main 4 
1.2.4函數run_main_loop 6 
1.3內核初始化8 
1.3.1彙編語言部分8 
1.3.2 C語言部分11 
1.3.3 SMP系統的引導12 
1.4 init進程15 
第2章進程管理17 
2.1進程17 
2.2命名空間18 
2.3進程標識符20 
2.4進程關係21 
2.5啟動程序23 
2.5.1創建新進程23 
2.5.2裝載程序41 
2.6進程退出48 
2.6.1線程組退出49 
2.6.2終止進程51 
2.6.3查詢子進程終止原因53 
2.7進程狀態55 
2.8進程調度55 
2.8.1調度策略55 
2.8.2進程優先級56 
2.8.3調度類57 
2.8.4運行隊列59
2.8.5任務分組60 
2.8.6調度進程65 
2.8.7調度時機75 
2.8.8帶寬管理85 
2.9 SMP調度93 
2.9.1進程的處理器親和性93 
2.9.2對調度器的擴展96 
2.9. 3限期調度類的處理器負載均衡96 
2.9.4實時調度類的處理器負載均衡98 
2.9.5公平調度類的處理器負載均衡99 
2.9.6遷移線程108 
2.9.7隔離處理器110 
2.10進程的安全上下文111 
第3章內存管理113 
3.1概述113 
3.2虛擬地址空間佈局115 
3.2.1虛擬地址空間劃分115 
3.2.2用戶虛擬地址空間佈局115 
3.2.3內核地址空間佈局121 
3.3物理地址空間122 
3.4內存映射124 
3.4.1應用編程接口125 
3.4.2數據結構129 
3.4.3創建內存映射133 
3.4.4虛擬內存過量提交策略137 
3.4.5刪除內存映射139 
3.5物理內存組織140 
3.5.1體系結構140 
3.5 .2內存模型140 
3.5.3三級結構141
3.6引導內存分配器144 
3.6.1 bootmem分配器144 
3.6.2 memblock分配器145 
3.6.3物理內存信息148 
3.7夥伴分配器151 
3.7.1基本的伙伴分配器151 
3.7.2分區的伙伴分配器152 
3.7.3根據可移動性分組158 
3.7.4每處理器頁集合162 
3.7.5分配頁163 
3.7.6釋放頁181 
3.8塊分配器184 
3.8.1編程接口185 
3.8.2 SLAB分配器186 
3.8. 3 SLUB分配器197 
3.8.4 SLOB分配器204 
3.9不連續頁分配器207 
3.9.1編程接口207 
3.9.2數據結構208 
3.9.3技術原理209 
3.10每處理器內存分配器210 
3.10.1編程接口210 
3.10.2技術原理212 
3.11頁表219 
3.11.1統一的頁錶框架219 
3.11.2 ARM64處理器的頁表222 
3.12頁表緩存226 
3.12.1 TLB表項格式226 
3.12.2 TLB管理226
3.12.3地址空間標識符228 
3.12.4虛擬機標識符232 
3.13巨型頁233 
3.13.1處理器對巨型頁的支持233 
3.13.2標準巨型頁235 
3.13.3透明巨型頁245 
3.14頁錯誤異常處理257 
3.14.1處理器架構特定部分257 
3.14.2用戶空間頁錯誤異常266 
3.14.3內核模式頁錯誤異常283 
3.15反碎片技術288 
3.15.1虛擬可移動區域289 
3.15.2內存碎片整理291 
3.16頁回收309 
3.16.1數據結構310 
3.16.2發起頁回收317 
3.16.3計算掃描的頁數320 
3.16.4收縮活動頁鍊錶321 
3.16.5回收不活動頁323 
3.16.6頁交換325 
3.16.7回收slab緩存335 
3.17內存耗盡殺手338 
3.17.1使用方法338 
3.17.2技術原理338 
3.18內存資源控制器340 
3.18.1使用方法340 
3.18.2技術原理344 
3.19處理器緩存370 
3.19.1緩存結構370
3.19.2緩存策略372 
3.19.3緩存維護374 
3.19.4 SMP緩存一致性378 
3.19.5利用緩存提高性能的編程技巧383 
3.20連續內存分配器384 
3.20.1使用方法385 
3.20.2技術原理386 
3.21 userfaultfd 391 
3.21.1使用方法391 
3.21.2技術原理395 
3.22內存錯誤檢測工具KASAN 401 
3.22.1使用方法401 
3.22.2技術原理402 
第4章中斷、異常和系統調用403 
4.1 ARM64異常處理403 
4.1. 1異常級別403 
4.1.2異常分類404 
4.1.3異常向量表405 
4.1.4異常處理407 
4.2中斷411 
4.2.1中斷控制器412 
4.2.2中斷域413 
4.2.3中斷控制器驅動初始化415 
4.2. 4 Linux中斷處理422 
4.2.5中斷線程化428 
4.2.6禁止/開啟中斷430 
4.2.7禁止/開啟單個中斷431 
4.2.8中斷親和性431 
4.2.9處理器間中斷432
4.3中斷下半部434 
4.3.1軟中斷435 
4.3.2小任務441 
4.3.3工作隊列444 
4.4系統調用457 
4.4.1定義系統調用457 
4.4.2執行系統調用459 
第5章內核互斥技術463 
5.1信號量464 
5.2讀寫信號量465 
5.3互斥鎖466 
5.4實時互斥鎖467 
5.5原子變量468 
5.6自旋鎖472 
5.7讀寫自旋鎖476 
5.8順序鎖478 
5.8.1完整版的順序鎖479 
5.8.2只提供序列號的順序鎖481 
5.9禁止內核搶占482 
5.10進程和軟中斷互斥483 
5.11進程和硬中斷互斥483 
5.12每處理器變量484 
5.12.1靜態每處理器變量484 
5.12.2動態每處理器變量484 
5.12.3訪問每處理器變量485 
5.13每處理器計數器485 
5.14內存屏障487 
5.14.1編譯器屏障488 
5.14.2處理器內存屏障489 
5.14.3 MMIO寫屏障492
5.14.4隱含內存屏障493 
5.14.5 ARM64處理器內存屏障493 
5.15 RCU 495 
5.15.1使用方法496 
5.15.2技術原理504 
5.16可睡眠RCU 533 
5.16.1使用方法533 
5.16.2技術原理534 
5.17死鎖檢測工具lockdep 542 
5.17.1使用方法543 
5.17.2技術原理543 
第6章文件系統548 
6.1概述548 
6.1.1用戶空間層面549 
6.1.2硬件層面549 
6.1.3內核空間層面550 
6.2虛擬文件系統的數據結構552 
6.2.1超級塊552 
6.2.2掛載描述符554 
6.2.3文件系統類型555 
6.2.4索引節點556 
6.2.5目錄項559 
6.2.6文件的打開實例和打開文件表561 
6.3註冊文件系統類型563 
6.4掛載文件系統564 
6.4.1系統調用mount 566 
6.4.2綁定掛載567 
6.4.3掛載命名空間568 
6.4.4掛載根文件系統574 
6.5打開文件580
6.5.1編程接口580 
6.5.2技術原理582 
6.6關閉文件591 
6.7創建文件593 
6.7.1使用方法593 
6.7.2技術原理594 
6.8刪除文件595 
6.8.1使用方法595 
6.8.2技術原理595 
6.9設置文件權限597 
6.9.1使用方法597 
6.9.2技術原理598 
6.10頁緩存599 
6.10.1地址空間600 
6.10.2基數樹601 
6.10.3編程接口602 
6.11讀文件602 
6.11.1編程接口602 
6.11.2技術原理603 
6.12寫文件606 
6.12.1編程接口606 
6.12.2技術原理607 
6.13文件回寫610 
6.13.1編程接口610 
6.13.2技術原理610 
6.14 DAX 618 
6.14.1使用方法618 
6.14.2技術原理618 
6.15常用的文件系統類型621
結束語622


作者介紹


余華兵,2005年畢業於華中科技大學計算機學院,取得碩士學位。
畢業後的十餘年一直在網絡通信行業從事軟件設計和開發工作,
研究方向包括IPv4協議棧、IPv6協議棧和Linux內核。




相關書籍

基於Linux的主機運行維護

作者 董延華 李明岩

2019-06-01

Linux Sound Programming

作者 Jan Newmarch

2019-06-01

Visual Studio Code Distilled: Evolved Code Editing for Windows, macOS, and Linux

作者 Alessandro Del Sole

2019-06-01