国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

奔跑吧Linux內(nèi)核(第2版)卷1:基礎(chǔ)架構(gòu)

2023-06-08 23:44 作者:叫什么名字好呢隨便吧  | 我要投稿

鏈接:https://pan.baidu.com/s/1NUH8KNKJGAluvRQupRfUbw?pwd=ij5g?

提取碼:ij5g

基于Linux 5.0內(nèi)核和ARM64/x86_64架構(gòu),全面修訂,分析和總結(jié)大量項目經(jīng)驗。
基于GCC的“O0”選項編譯的Linux5.0實驗平臺,通過大量實戰(zhàn)案例、高頻面試題,剖析Linux內(nèi)核的源代碼
基于Linux 5.0內(nèi)核的源代碼進(jìn)行案例分析。
新增了ARM64架構(gòu)等方面的內(nèi)容。
涵蓋實戰(zhàn)案例,可操作性強。

相對于Linux 4.0內(nèi)核,Linux 5.0內(nèi)核中增加了很多新特性,并且內(nèi)核的實現(xiàn)已經(jīng)發(fā)生了很大變化。本書旨在介紹Linux內(nèi)核中核心模塊的實現(xiàn),主要內(nèi)容包括ARM64架構(gòu),ARM64在Linux內(nèi)核中的實現(xiàn),內(nèi)存管理的理論知識和案例,以及進(jìn)程管理的基礎(chǔ)知識與案例等。本書適合Linux系統(tǒng)開發(fā)人員、嵌入式系統(tǒng)開發(fā)人員及Android開發(fā)人員閱讀。

內(nèi)容簡介

本書基于Linux 5.0內(nèi)核的源代碼講述Linux內(nèi)核中核心模塊的實現(xiàn)。本書共9章,主要內(nèi)容包括處理器架構(gòu)、ARM64在Linux內(nèi)核中的實現(xiàn)、內(nèi)存管理之預(yù)備知識、物理內(nèi)存與虛擬內(nèi)存、內(nèi)存管理之高級主題、內(nèi)存管理之實戰(zhàn)案例、進(jìn)程管理之基本概念、進(jìn)程管理之調(diào)度和負(fù)載均衡、進(jìn)程管理之調(diào)試與案例分析。
本書適合Linux系統(tǒng)開發(fā)人員、嵌入式系統(tǒng)開發(fā)人員及Android開發(fā)人員閱讀,也可供計算機(jī)相關(guān)專業(yè)的師生閱讀。

作者簡介

笨叔,Linux內(nèi)核愛好者,出版過《奔跑吧Linux內(nèi)核》《奔跑吧 Linux內(nèi)核 入門篇》。創(chuàng)建了奔跑吧Linux社區(qū),為廣大Linux愛好者布道。

目錄

目  錄
第 1章 處理器架構(gòu) 1
1.1 處理器架構(gòu)介紹 3
1.1.1 精簡指令集和復(fù)雜指令集 3
1.1.2 大/小端字節(jié)序 3
1.1.3 一條存儲讀寫指令的
執(zhí)行全過程 4
1.1.4 內(nèi)存屏障產(chǎn)生的原因 8
1.1.5 高速緩存的工作方式 10
1.1.6 高速緩存的映射方式 11
1.1.7 組相聯(lián)的高速緩存 13
1.1.8 PIPT和VIVT的區(qū)別 14
1.1.9 頁表的創(chuàng)建和查詢過程 17
1.1.10 TLB 21
1.1.11 MESI協(xié)議 21
1.1.12 高速緩存?zhèn)喂蚕怼?6
1.1.13 高速緩存在Linux內(nèi)核中的
應(yīng)用 27
1.1.14 ARM的大/小核架構(gòu) 28
1.1.15 高速緩存一致性和一致性
內(nèi)存模型 30
1.1.16 高速緩存的回寫策略和
替換策略 30
1.1.17 NUMA 31
1.1.18 ARM處理器設(shè)計 32
1.1.19 最新進(jìn)展 33
1.2 ARM64架構(gòu) 34
1.2.1 ARMv8-A架構(gòu) 34
1.2.2 采用ARMv8架構(gòu)的常見處理器
內(nèi)核 35
1.2.3 ARMv8架構(gòu)中的基本概念 35
1.2.4 ARMv8處理器執(zhí)行狀態(tài) 36
1.2.5 ARMv8支持的數(shù)據(jù)寬度 36
1.2.6 不對齊訪問 37
1.3 ARMv8寄存器 37
1.3.1 通用寄存器 37
1.3.2 處理器狀態(tài) 38
1.3.3 特殊寄存器 39
1.3.4 系統(tǒng)寄存器 41
1.4 A64指令集 42
1.4.1 常用的算術(shù)和搬移指令 42
1.4.2 乘法和除法指令 43
1.4.3 移位操作指令 45
1.4.4 位操作指令 45
1.4.5 條件操作 47
1.4.6 內(nèi)存加載指令 48
1.4.7 多字節(jié)內(nèi)存加載和存儲指令 50
1.4.8 非特權(quán)訪問級別的加載和存儲
指令 50
1.4.9 內(nèi)存屏障指令簡介 51
1.4.10 獨占內(nèi)存訪問指令 51
1.4.11 跳轉(zhuǎn)與比較指令 52
1.4.12 異常處理指令 53
1.4.13 系統(tǒng)寄存器訪問指令 54
1.5 GCC內(nèi)聯(lián)匯編 55
1.6 函數(shù)調(diào)用標(biāo)準(zhǔn)和棧布局 57
1.7 ARM64異常處理 59
1.7.1 異常類型 59
1.7.2 同步異常和異步異?!?0
1.7.3 異常發(fā)生后的處理 60
第 2章 ARM64在Linux內(nèi)核中的實現(xiàn) 62
2.1 ARM64內(nèi)存管理 63
2.1.1 頁表 63
2.1.2 頁表映射 64
2.1.3 頁表項描述符 65
2.1.4 Linux內(nèi)核中的頁表 68
2.1.5 ARM64內(nèi)核內(nèi)存分布 74
2.1.6 案例分析:ARM64的頁表映射
過程 78
2.2 高速緩存管理 84
2.3 TLB管理 87
2.4 內(nèi)存屬性 90
2.4.1 內(nèi)存屬性 91
2.4.2 高速緩存共享屬性 94
2.5 內(nèi)存屏障 95
2.5.1 內(nèi)存屏障指令 95
2.5.2 加載-獲取屏障原語與存儲-
釋放屏障原語 96
2.6 Linux內(nèi)核匯編代碼分析 97
2.6.1 鏈接文件基礎(chǔ)知識 97
2.6.2 vmlinux.lds.S文件分析 99
2.6.3 啟動匯編代碼 102
2.6.4 創(chuàng)建恒等映射和內(nèi)核映像
映射 106
2.6.5 __cpu_setup函數(shù)分析 114
2.6.6 __primary_switch函數(shù)分析 117
2.7 關(guān)于頁表的常見疑問 120
2.7.1 關(guān)于下一級頁表基地址 121
2.7.2 軟件遍歷頁表 121
第3章 內(nèi)存管理之預(yù)備知識 124
3.1 從硬件角度看內(nèi)存管理 126
3.1.1 內(nèi)存管理的“遠(yuǎn)古時代” 126
3.1.2 分段機(jī)制 127
3.1.3 分頁機(jī)制 128
3.1.4 虛擬地址到物理地址的
轉(zhuǎn)換 128
3.2 從軟件角度看內(nèi)存管理 129
3.2.1 從Linux系統(tǒng)使用者的角度看
內(nèi)存管理 129
3.2.2 從Linux應(yīng)用程序開發(fā)人員的
角度看內(nèi)存管理 130
3.2.3 從內(nèi)存分布的角度看
內(nèi)存管理 131
3.2.4 從進(jìn)程的角度看內(nèi)存管理 131
3.2.5 從Linux內(nèi)核的角度看
內(nèi)存管理 135
3.3 物理內(nèi)存管理之預(yù)備知識 136
3.3.1 內(nèi)存架構(gòu)之UMA和NUMA 136
3.3.2 內(nèi)存管理之?dāng)?shù)據(jù)結(jié)構(gòu) 138
3.3.3 內(nèi)存大小 140
3.3.4 物理內(nèi)存映射 141
3.3.5 zone初始化 143
3.3.6 空間劃分 145
3.3.7 物理內(nèi)存初始化 146
第4章 物理內(nèi)存與虛擬內(nèi)存 152
4.1 頁面分配之快速路徑 153
4.1.1 分配物理頁面的接口函數(shù) 154
4.1.2 分配掩碼 155
4.1.3 alloc_pages()函數(shù) 158
4.1.4 get_page_from_freelist()函數(shù) 162
4.1.5 zone_watermark_fast()函數(shù) 164
4.1.6 rmqueue()函數(shù) 165
4.1.7 釋放頁面 167
4.1.8 小結(jié) 170
4.2 slab分配器 170
4.2.1 slab分配器產(chǎn)生的背景 170
4.2.2 創(chuàng)建slab描述符 173
4.2.3 slab分配器的內(nèi)存布局 176
4.2.4 配置slab描述符 178
4.2.5 分配slab對象 180
4.2.6 釋放slab緩存對象 183
4.2.7 slab分配器和伙伴系統(tǒng)的接口
函數(shù) 185
4.2.8 管理區(qū) 185
4.2.9 kmalloc() 188
4.2.10 小結(jié) 189
4.3 vmalloc() 190
4.4 虛擬內(nèi)存管理之進(jìn)程地址空間 194
4.4.1 進(jìn)程地址空間 194
4.4.2 mm_struct數(shù)據(jù)結(jié)構(gòu) 195
4.4.3 VMA數(shù)據(jù)結(jié)構(gòu) 197
4.4.4 VMA的屬性 199
4.4.5 查找VMA 201
4.4.6 插入VMA 203
4.4.7 合并VMA 206
4.4.8 紅黑樹例子 207
4.4.9 小結(jié) 209
4.5 malloc() 210
4.5.1 brk系統(tǒng)調(diào)用 210
4.5.2 用戶態(tài)地址空間劃分 212
4.5.3 __do_sys_brk()函數(shù) 213
4.5.4 do_brk_flags()函數(shù) 213
4.5.5 _mm_populate()函數(shù) 215
4.5.6 get_user_pages()函數(shù) 216
4.5.7 小結(jié) 220
4.6 mmap 223
4.6.1 mmap概述 223
4.6.2 小結(jié) 225
4.7 缺頁異常處理 227
4.7.1 ARM64缺頁異常的底層處理
流程 228
4.7.2 do_page_fault()函數(shù) 234
4.7.3 handle_mm_fault()函數(shù) 237
4.7.4 匿名頁面缺頁中斷 240
4.7.5 系統(tǒng)零頁 241
4.7.6 文件映射缺頁中斷 242
4.7.7 寫時復(fù)制 245
4.7.8 ARM64硬件DBM機(jī)制導(dǎo)致的
競爭問題 248
4.7.9 關(guān)于pte_offset_map()安全使用的
問題 251
4.7.10 關(guān)于寫時復(fù)制的競爭問題 253
4.7.11 為什么要在切換頁表項之前
刷新TLB 256
4.7.12 缺頁異常引發(fā)的死鎖 257
4.7.13 小結(jié) 257
第5章 內(nèi)存管理之高級主題 259
5.1 page 260
5.1.1 page數(shù)據(jù)結(jié)構(gòu) 260
5.1.2 _refcount的應(yīng)用 265
5.1.3 _mapcount的應(yīng)用 268
5.1.4 PG_Locked 269
5.1.5 mapping成員的妙用 270
5.1.6 和page相關(guān)的幾個接口函數(shù) 271
5.1.7 小結(jié) 272
5.2 RMAP 272
5.2.1 RMAP的主要數(shù)據(jù)結(jié)構(gòu) 273
5.2.2 父進(jìn)程產(chǎn)生匿名頁面 274
5.2.3 根據(jù)父進(jìn)程創(chuàng)建子進(jìn)程 277
5.2.4 子進(jìn)程發(fā)生寫時復(fù)制 280
5.2.5 RMAP的應(yīng)用 281
5.2.6 小結(jié) 283
5.3 頁面回收 285
5.3.1 LRU鏈表 285
5.3.2 第二次機(jī)會法 288
5.3.3 觸發(fā)頁面回收 293
5.3.4 kswapd內(nèi)核線程 293
5.3.5 balance_pgdat()函數(shù) 296
5.3.6 shrink_node()函數(shù) 298
5.3.7 shrink_active_list()函數(shù) 302
5.3.8 shrink_inactive_list()函數(shù) 304
5.3.9 跟蹤LRU活動情況 308
5.3.10 頁面回收機(jī)制 309
5.3.11 Refault Distance算法 312
5.3.12 小結(jié) 317
5.4 匿名頁面生命周期 318
5.4.1 匿名頁面的產(chǎn)生 319
5.4.2 匿名頁面的使用 319
5.4.3 匿名頁面的換出 319
5.4.4 匿名頁面的換入 321
5.4.5 匿名頁面的銷毀 321
5.5 頁面遷移 321
5.5.1 哪些頁面可以遷移 322
5.5.2 頁面遷移主函數(shù) 322
5.5.3 move_to_new_page()函數(shù) 324
5.5.4 遷移頁表 325
5.5.5 遷移非LRU頁面 326
5.5.6 小結(jié) 328
5.6 內(nèi)存規(guī)整 329
5.6.1 內(nèi)存規(guī)整的基本原理 329
5.6.2 觸發(fā)內(nèi)存規(guī)整 330
5.6.3 直接內(nèi)存規(guī)整 330
5.6.4 compact_zone()函數(shù) 333
5.6.5 哪些頁面適合做內(nèi)存規(guī)整 338
5.7 KSM 339
5.7.1 使能KSM 339
5.7.2 KSM基本實現(xiàn) 343
5.7.3 KSM數(shù)據(jù)結(jié)構(gòu) 345
5.7.4 新版本KSM的新特性 345
5.7.5 malloc()分配的頁面可以被
KSM掃描嗎 353
5.7.6 合并頁面 355
5.7.7 一個有趣的計算公式 358
5.7.8 page->index的值 359
5.7.9 小結(jié) 360
5.8 頁面分配之慢速路徑 362
5.8.1 alloc_pages_slowpath()函數(shù) 362
5.8.2 水位管理和分配優(yōu)先級 367
5.9 內(nèi)存碎片化管理 368
5.9.1 伙伴系統(tǒng)算法如何減少
內(nèi)存碎片 368
5.9.2 頁面遷移類型和內(nèi)存規(guī)整 370
5.9.3 Linux 5.0內(nèi)核新增的反碎片
優(yōu)化 371
第6章 內(nèi)存管理之實戰(zhàn)案例分析 375
6.1 內(nèi)存管理日志信息和調(diào)試信息 375
6.1.1 vm_stat計數(shù)值 375
6.1.2 meminfo分析 377
6.1.3 伙伴系統(tǒng)信息 383
6.1.4 查看內(nèi)存管理區(qū)的信息 383
6.1.5 查看與進(jìn)程相關(guān)的內(nèi)存信息 385
6.1.6 為什么S_swap與P_swap
不相等 387
6.1.7 解讀OOM Killer機(jī)制輸出的
日志信息 388
6.1.8 解讀缺頁異常后輸出的宕機(jī)
日志信息 394
6.2 內(nèi)存管理調(diào)優(yōu)參數(shù) 400
6.2.1 影響內(nèi)存管理區(qū)水位的調(diào)優(yōu)
參數(shù)min_free_kbytes 401
6.2.2 影響頁面分配的參數(shù)
lowmem_reserve_ratio 402
6.2.3 影響頁面回收的參數(shù) 404
6.2.4 影響臟頁回寫的參數(shù) 406
6.3 內(nèi)存管理實戰(zhàn)案例分析 407
6.3.1 案例一:缺頁異常和文件系統(tǒng)
引發(fā)的宕機(jī) 407
6.3.2 案例二:KSM和NUMA引發(fā)的
虛擬機(jī)宕機(jī) 410
6.3.3 案例三:為什么無法分配一個
頁面 415
6.3.4 案例四:秘密任務(wù)——動態(tài)修改
系統(tǒng)調(diào)用表引發(fā)的4次宕機(jī) 420
第7章 進(jìn)程管理之基本概念 430
7.1 關(guān)于進(jìn)程的基本概念 431
7.1.1 進(jìn)程的來由 431
7.1.2 進(jìn)程描述符 432
7.1.3 進(jìn)程的生命周期 434
7.1.4 進(jìn)程標(biāo)識 436
7.1.5 進(jìn)程間的家族關(guān)系 436
7.1.6 獲取當(dāng)前進(jìn)程 438
7.1.7 進(jìn)程0和進(jìn)程1 440
7.2 與進(jìn)程創(chuàng)建和終止相關(guān)的操作系統(tǒng)
原語 441
7.2.1 寫時復(fù)制技術(shù) 442
7.2.2 fork()函數(shù) 443
7.2.3 vfork()函數(shù) 444
7.2.4 clone()函數(shù) 445
7.2.5 內(nèi)核線程 445
7.2.6 終止進(jìn)程 446
7.2.7 僵尸進(jìn)程和進(jìn)程托孤 446
7.3 代碼分析:進(jìn)程的創(chuàng)建和終止 447
7.3.1 _do_fork()函數(shù)分析 447
7.3.2 copy_process()函數(shù)分析 449
7.3.3 dup_task_struct()函數(shù)分析 453
7.3.4 sched_fork()函數(shù)分析 453
7.3.5 copy_mm()函數(shù)分析 454
7.3.6 進(jìn)程創(chuàng)建后的返回 458
7.4 進(jìn)程調(diào)度原語 461
7.4.1 進(jìn)程分類 461
7.4.2 進(jìn)程優(yōu)先級和權(quán)重 461
7.4.3 調(diào)度策略 463
7.4.4 時間片 465
7.4.5 經(jīng)典調(diào)度算法 465
7.4.6 Linux內(nèi)核的O (n)調(diào)度算法 467
7.4.7 Linux內(nèi)核的O (1)調(diào)度算法 467
7.4.8 Linux內(nèi)核的CFS 468
第8章 進(jìn)程管理之調(diào)度與負(fù)載均衡 469
8.1 CFS 470
8.1.1 vruntime的計算 471
8.1.2 調(diào)度器的數(shù)據(jù)結(jié)構(gòu) 474
8.1.3 對進(jìn)程創(chuàng)建代碼的分析 479
8.1.4 對進(jìn)程加入調(diào)度器的代碼的
分析 483
8.1.5 進(jìn)程調(diào)度 485
8.1.6 進(jìn)程切換 488
8.1.7 調(diào)度節(jié)拍 497
8.1.8 組調(diào)度機(jī)制 498
8.1.9 小結(jié) 502
8.2 負(fù)載計算 503
8.2.1 如何衡量一個CPU的負(fù)載 503
8.2.2 工作負(fù)載和量化負(fù)載 504
8.2.3 歷史累計衰減的計算 505
8.2.4 量化負(fù)載的計算 506
8.2.5 實際算力的計算 507
8.2.6 sched_avg數(shù)據(jù)結(jié)構(gòu) 508
8.2.7 PELT代碼分析 510
8.2.8 PELT接口函數(shù) 516
8.3 SMP負(fù)載均衡 517
8.3.1 CPU管理位圖 517
8.3.2 CPU調(diào)度域 519
8.3.3 建立CPU調(diào)度域拓?fù)潢P(guān)系 522
8.3.4 負(fù)載均衡 529
8.3.5 喚醒進(jìn)程 536
8.3.6 wake affine特性 538
8.3.7 調(diào)試 541
8.3.8 小結(jié) 542
8.4 綠色節(jié)能調(diào)度器 542
8.4.1 量化計算能力 545
8.4.2 能效模型 548
8.4.3 OPP子系統(tǒng) 551
8.4.4 初始化CPUfreq-dt驅(qū)動程序 556
8.4.5 注冊能效模型子系統(tǒng) 557
8.4.6 該選擇哪個CPU來執(zhí)行喚醒
進(jìn)程p呢 561
8.4.7 overutilized條件判斷 569
8.4.8 CPU動態(tài)調(diào)頻 570
8.4.9 小結(jié) 573
8.5 實時調(diào)度 574
8.5.1 實時延時分析 574
8.5.2 Linux內(nèi)核實時性改進(jìn) 576
第9章 進(jìn)程管理之調(diào)試與案例分析 580
9.1 進(jìn)程管理之調(diào)試 580
9.1.1 查看與進(jìn)程相關(guān)的調(diào)度信息 580
9.1.2 查看CFS的信息 582
9.1.3 查看調(diào)度域信息 585
9.1.4 與調(diào)度相關(guān)的調(diào)試節(jié)點 586
9.2 綜合案例分析——系統(tǒng)調(diào)度 587
9.3 進(jìn)程管理 589
9.3.1 進(jìn)程的本質(zhì) 589
9.3.2 逃離不掉的進(jìn)程優(yōu)先級 590
9.3.3 調(diào)度器的選擇 591
9.3.4 用四維空間來理解負(fù)載 591
9.3.5 案例分析——為何不能
調(diào)度 592

查看全部↓


奔跑吧Linux內(nèi)核(第2版)卷1:基礎(chǔ)架構(gòu)的評論 (共 條)

分享到微博請遵守國家法律
商丘市| 正阳县| 黄龙县| 昌图县| 巴塘县| 宁河县| 荃湾区| 河池市| 航空| 朔州市| 汉中市| 嘉黎县| 旌德县| 龙游县| 玉田县| 石渠县| 四会市| 丹寨县| 固始县| 陇西县| 启东市| 五寨县| 龙游县| 黑山县| 玛纳斯县| 襄城县| 宁波市| 五河县| 阿巴嘎旗| 婺源县| 闵行区| 乌海市| 栾城县| 津南区| 买车| 凯里市| 天长市| 辉南县| 定襄县| 东莞市| 皋兰县|