会员   密码 您忘记密码了吗?
1,470,674 本书已上架      购物流程 | 常见问题 | 联系我们 | 关于我们 | 用户协议

有店 App


当前分类

商品分类

浏览历史

当前位置: 首页 > 简体书 > 奔跑吧 Linux內核
奔跑吧 Linux內核
上一张
下一张
prev next

奔跑吧 Linux內核

作者: 張天飛
出版社: 人民郵電出版社
出版日期: 2017-09-01
商品库存: 点击查询库存
以上库存为海外库存属流动性。
可选择“空运”或“海运”配送,空运费每件商品是RM14。
配送时间:空运约8~12个工作天,海运约30个工作天。
(以上预计配送时间不包括出版社库存不足需调货及尚未出版的新品)
市场价格: RM170.43
本店售价: RM151.68
用户评价: comment rank 5
购买数量:
collect Add to cart Add booking
详细介绍 商品属性 商品标记
內容簡介

本書內容基於Linux4.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 添加tracepoint 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