奔跑吧 Linux 內核

張天飛

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

商品描述

本書內容基於Linux 4.x內核,主要選取了Linux內核中比較基本和常用的內存管理、進程管理、並發與同步,以及中斷管理這4個內核模塊進行講述。

全書共分為6章,依次介紹了ARM體系結構、Linux內存管理、進程調度管理、並發與同步、中斷管理、內核調試技巧等內容。

本書的每節內容都是一個Linux內核的話題或者技術點,讀者可以根據每小節前的問題進行思考,進而圍繞問題進行內核源代碼的分析。

本書內容豐富,講解清晰透徹,不僅適合有一定Linux相關基礎的人員,包括從事與Linux相關的開發人員、操作系統的研究人員、嵌入式開發人員及Android底層開發人員等學習和使用,而且適合作為對Linux感興趣的程序員的學慣用書,也可以作為大專院校相關專業師生的學慣用書和培訓學校的教材。

海報:

作者簡介

張天飛,筆名“笨叔叔”。

Linux內核愛好者,從事Linux內核和驅動開發十餘年,在多家芯片公司從事過手機芯片底層軟件開發和客戶支持工作。

目錄大綱

LINUX內核奔跑卷1 

第1章處理器體系結構4 
本章思考題4 

第2章內存管理32 
本章思考題32 
2.1物理內存初始化36 
2.1.1內存管理概述36 
2.1.2內存大小37 
2.1.3物理內存映射38 
2.1.4 zone初始化40 
2.1.5空間劃分44 
2.1.6物理內存初始化45 
2.2頁表的映射過程51 
2.2.1 ARM32頁表映射51 
2.2.2 ARM64頁表映射60 
2.3內核內存的佈局圖67 
2.3.1 ARM32內核內存佈局圖67 
2.3.2 ARM64內核內存佈局圖70 
2.4分配物理頁面72 
2.4.1夥伴系統分配內存72 
2.4.2釋放頁面85 
2.4.3小結89 
2.5 slab分配器90 
2.5. 1創建slab描述符91 
2.5.2分配slab對象103 
2.5.3釋放slab緩衝對象108 
2.5.4 kmalloc分配函數111 
2.5.5小結112 
2.6 vmalloc 113 
2.7 VMA操作120 
2.7.1查找VMA 122 
2.7.2插入VMA 124 
2.7.3合併VMA 129 
2.7.4紅黑樹例子131 
2.7.5小結133 
2.8 malloc 133 
2.8.1 brk實現134 
2.8.2 VM_LOCK情況138 
2.8.3小結148 
2.9 mmap 150 
2.9.1 mmap概述151 
2.9.2小結153 
2.10缺頁中斷處理155 
2.10.1 do_ page_fault() 157 
2.10.2匿名頁面缺頁中斷165 
2.10.3文件映射缺頁中斷169 
2.10.4寫時復制175 
2.10.5小結183 
2.11 page引用計數184 
2.11.1 struct page數據結構185 
2.11.2 _count和_mapcount的區別188 
2.11.3頁面鎖PG_Locked 192 
2.11.4小結192 
2.12反向映射RMAP 192 
2.12.1父進程分配匿名頁面193 
2.12.2父進程創建子進程198 
2.12.3子進程發生COW 200 
2.12.4 RMAP應用201 
2.12.5小結202 
2.13回收頁面204 
2.13.1 LRU鍊錶204 
2.13.2 kswapd內核線程216 
2.13.3 balance_pgdat函數219 
2.13.4 shrink_zone函數228 
2.13.5 shrink_active_list函數233 
2.13.6 shrink_inactive_list函數238 
2.13.7跟踪LRU活動情況244 
2.13.8 Refault Distance算法244 
2.13.9小結249 
2.14匿名頁面生命週期251 
2.14.1匿名頁面的誕生251 
2.14.2匿名頁面的使用252 
2.14.3匿名頁面的換出252 
2.14.4匿名頁面的換入254 
2.14.5匿名頁面銷毀254 
2.15頁面遷移254 
migrate_pages()函數255 
2.16內存規整(memory compaction) 262 
2.16.1內存規整實現263 
2.16.2小結272 
2.17 KSM 273 
2.17.1 KSM實現274 
2.17.2匿名頁面和KSM頁面的區別293 
2.17.3小結294 
2.18 Dirty COW內存漏洞296 
2.19總結內存管理數據結構和API 309 
2.19.1內存管理數據結構的關係圖309 
2.19.2內存管理中常用API 312 
2.20最新更新和展望315 
2.20.1頁面回收策略從zone遷移到node 315 
2.20.2 OOM Killer改進316 
2.20.3 swap優化317 
2.20.4展望318 

第3章進程管理319 
本章思考題319 
3.1進程的誕生320 
3.1.1 init進程321 
3.1.2 fork 325 
3.1.3小結344 
3.2 CFS調度器345 
3.2.1權重計算346 
3.2.2進程創建358 
3.2.3進程調度369 
3.2.4 scheduler tick 379 
3.2.5組調度382 
3.2.6 PELT算法改進386 
3.2.7小結387 
3.3 SMP負載均衡389 
3.3.1 CPU域初始化389 
3.3. 2 SMP負載均衡401 
3.3.3喚醒進程415 
3.3.4調試421 
3.3.5小結422 
3.4 HMP調度器422 
3.4.1初始化423 
3.4.2 HMP負載調度425 
3.4.3新創建的進程436 
3.4.4小結437 
3.5 NUMA調度器438 
3.5.1 node和 page的關係439 
3.5.2掃描進程441 
3.5.3 NUMA缺頁中斷442 
3.5.4進程遷移450 
3.5.5小結455 
3.6 EAS綠色節能調度器457 
3.6.1能效模型459 
3.6.2 WALT算法465 
3.6. 3喚醒進程480 
3.6.4 CPU動態調頻491 
3.6.5小結494 
3.7實時調度496 
3.8最新更新與展望500 
3.8.1進程管理更新500 
3.8.2展望500 

第4章並發與同步501 
本章思考題501 
4.1原子操作與內存屏障503 
4.1.1原子操作503 
4.1.2內存屏障506 
4.2 spinlock 508 
4.2.1 spinlock實現509 
4.2.2 spinlock變種511 
4.2.3 spinlock和raw_spin_lock 512 
4.3信號量513 
4.3.1信號量513 
4.3.2小結516 
4.4 Mutex互斥體517 
4.4.1 MCS鎖機制518 
4.4.2 Mutex鎖的實現525 
4.4.3小結531 
4.5讀寫鎖531 
4.5.1讀者信號量532 
4.5.2寫者鎖538 
4.5.3小結544 
4.6 RCU 544 
4.6.1經典RCU和Tree RCU 547 
4.6.2 Tree RCU設計551 
4.6.3小結573 
4.7內存管理中的鎖574 
4.8最新更新與展望584 
4.8.1 Queued Spinlock 584 
4.8. 2讀寫信號量優化591 
4.8.3展望592 
4.8.4推薦書 籍593 

第5章中斷管理594 
本章思考題594 
5.1 Linux中斷管理機制595 
5.1.1 ARM中斷控制器595 
5.1.2硬件中斷號和Linux中斷號的映射599 
5.1.3註冊中斷610 
5.1.4 ARM底層中斷處理618 
5.1.5高層中斷處理626 
5.1.6小結636 
5.2軟中斷和tasklet 637 
5.2.1 SoftIRQ軟中斷638 
5.2.2 tasklet 642 
5.2.3 local_bh_disable/local_bh_enable 647 
5.2.4小結649 
5.3 workqueue工作隊列650 
5.3.1初始化工作隊列652 
5.3.2創建工作隊列659 
5.3.3調度一個work 665 
5.3.4取消一個work 675 
5.3.5和調度器的交互680 
5.3.6小結682 

第6章內核調試684 
6.1 QEMU調試Linux內核684 
6.1.1 QEMU運行ARM Linux內核684 
6.1.2 QEMU調試ARM Linux內核687 
6.1.3 QEMU運行ARMv8開發平台688 
6.1.4文件系統支持690 
6.1.5圖形化調試691 
6.1.6實驗進階693 
6.2 ftrace 694 
6.2.1 irqs跟踪器695 
6.2.2 preemptoff跟踪器696 
6.2.3 preemptirqsoff跟踪器697 
6.2.4 function跟踪器698 
6.2.5動態ftrace 699 
6.2.6事件跟踪700 
6.2.7添加tracepoin t 702 
6.2.8 trace-cmd和kernelshark 705 
6.2.9 trace marker 707 
6.2.10小結709 
6.3 SystemTap 710 
6.4內存檢測714 
6.4.1 slub_debug 714 
6.4.2內存洩漏檢測kmemleak 718 
6.4.3 kasan內存檢測720 
6.5死鎖檢測722 
6.6內核調試秘籍728 
6.6.1 printk 728 
6.6.2動態打印730 
6.6.3 RAM Console 731 
6.6.4 OOPS分析731 
6.6.5 BUG_ON()和WARN_ON() 734