注冊 | 登錄讀書好,好讀書,讀好書!
讀書網(wǎng)-DuShu.com
當(dāng)前位置: 首頁出版圖書科學(xué)技術(shù)計(jì)算機(jī)/網(wǎng)絡(luò)操作系統(tǒng)深入理解Linux進(jìn)程與內(nèi)存:修煉底層內(nèi)功,掌握高性能原理

深入理解Linux進(jìn)程與內(nèi)存:修煉底層內(nèi)功,掌握高性能原理

深入理解Linux進(jìn)程與內(nèi)存:修煉底層內(nèi)功,掌握高性能原理

定 價(jià):¥198.00

作 者: 張彥飛(@開發(fā)內(nèi)功修煉)
出版社: 電子工業(yè)出版社
叢編項(xiàng):
標(biāo) 簽: 暫缺

ISBN: 9787121485596 出版時(shí)間: 2024-07-01 包裝: 平裝-膠訂
開本: 16開 頁數(shù): 字?jǐn)?shù):  

內(nèi)容簡介

  國內(nèi)大部分的開發(fā)者和公司都從事的是應(yīng)用層的開發(fā),平時(shí)大家更多關(guān)注的是應(yīng)用層的開發(fā)技術(shù)。但應(yīng)用層是建立在CPU和內(nèi)存等硬件、操作系統(tǒng)內(nèi)核、語言運(yùn)行時(shí)的基礎(chǔ)之上的。如果缺乏對這些底層知識的理解,駕馭技術(shù)的能力就無法精進(jìn),也很難開發(fā)出高性能、高穩(wěn)定性的應(yīng)用。 本書主要包括CPU和內(nèi)存硬件、進(jìn)程創(chuàng)建和調(diào)度原理、虛擬內(nèi)存底層機(jī)制、Go 用戶態(tài)協(xié)程實(shí)現(xiàn)、容器cgroup資源限制,以及throttle、CPU利用率和負(fù)載等性能指標(biāo)統(tǒng)計(jì)原理等內(nèi)容,最后過渡到性能優(yōu)化手段,帶領(lǐng)大家修煉底層內(nèi)功,掌握高性能原理。

作者簡介

  張彥飛,有十多年一線大廠大型互聯(lián)網(wǎng)公司項(xiàng)目經(jīng)驗(yàn)。善于歸納總結(jié)內(nèi)核等底層技術(shù)原理。他的技術(shù)文章幫助很多讀者提升了對底層的理解,深受廣大技術(shù)愛好者好評。個(gè)人微信公眾號“開發(fā)內(nèi)功修煉”在全網(wǎng)超過十萬讀者。

圖書目錄

目 錄
第1章 CPU硬件原理 / 1
1.1 CPU的生產(chǎn)過程 / 2
1.2 個(gè)人電腦CPU硬件簡介 / 3
1.2.1 個(gè)人電腦CPU代際簡介 / 4
1.2.2 個(gè)人電腦CPU內(nèi)部架構(gòu) / 6
1.3 服務(wù)器CPU硬件簡介 / 7
1.3.1 服務(wù)器CPU代際簡介 / 8
1.3.2 服務(wù)器CPU內(nèi)部架構(gòu) / 9
1.3.3 服務(wù)器CPU片內(nèi)總線 / 10
1.3.4 服務(wù)器CPU片間互聯(lián) / 12
1.4 CPU核原理 / 15
1.4.1 CPU核內(nèi)部結(jié)構(gòu) / 15
1.4.2 CPU的工作頻率 / 19
1.4.3 物理核與邏輯核 / 20
1.4.4 CPU的L1/L2/L3緩存查看 / 22
1.4.5 CPU的TLB緩存查看 / 25
1.5 本章總結(jié) / 28
第2章 內(nèi)存硬件原理 / 30
2.1 CPU對內(nèi)存的硬件支持 / 31
2.1.1 CPU的內(nèi)存控制器 / 31
2.1.2 CPU支持的內(nèi)存代際 / 32
2.1.3 CPU支持的內(nèi)存模塊規(guī)格 / 34
2.1.4 服務(wù)器CPU支持的ECC內(nèi)存 / 36
2.2 內(nèi)存硬件內(nèi)部結(jié)構(gòu) / 44
2.2.1 內(nèi)存的Rank與位寬 / 45
2.2.2 內(nèi)存Chip內(nèi)部構(gòu)成 / 45
2.2.3 服務(wù)器內(nèi)存顆粒構(gòu)成 / 47
2.3 內(nèi)存IO原理 / 48
2.3.1 內(nèi)存延遲 / 48
2.3.2 內(nèi)存IO過程 / 49
2.3.3 內(nèi)存Burst IO / 51
2.4 存儲性能測試 / 52
2.4.1 延時(shí)測試 / 52
2.4.2 帶寬測試 / 55
2.5 本章總結(jié) / 57
第3章 進(jìn)程、線程的對比 / 58
3.1 進(jìn)程、線程定義 / 59
3.1.1 進(jìn)程、線程狀態(tài) / 61
3.1.2 進(jìn)程ID與線程ID / 62
3.1.3 進(jìn)程樹關(guān)系 / 63
3.1.4 進(jìn)程調(diào)度優(yōu)先級 / 63
3.1.5 進(jìn)程地址空間 / 64
3.1.6 進(jìn)程文件系統(tǒng)信息(當(dāng)前目錄等) / 65
3.1.7 進(jìn)程打開的文件信息 / 66
3.1.8 命名空間 / 67
3.2 進(jìn)程的創(chuàng)建 / 69
3.2.1 Nginx使用fork創(chuàng)建worker / 69
3.2.2 fork系統(tǒng)調(diào)用原理 / 70
3.2.3 本節(jié)小結(jié) / 84
3.3 線程的創(chuàng)建 / 85
3.3.1 線程與進(jìn)程創(chuàng)建的異同 / 87
3.3.2 fork創(chuàng)建線程的詳細(xì)過程 / 88
3.4 進(jìn)程與線程的異同匯總 / 93
3.5 本章總結(jié) / 94
第4章 進(jìn)程加載啟動(dòng)原理 / 96
4.1 可執(zhí)行文件格式 / 97
4.1.1 ELF文件頭 / 98
4.1.2 Program Header Table / 100
4.1.3 Section Header Table / 102
4.1.4 各種Section / 103
4.1.5 入口進(jìn)一步查看 / 104
4.2 shell啟動(dòng)用戶進(jìn)程 / 106
4.3 Linux的可執(zhí)行文件加載器 / 108
4.4 execve加載用戶程序 / 110
4.4.1 alloc_bprm初始化linux_binprm對象 / 112
4.4.2 bprm_execve執(zhí)行加載 / 114
4.5 ELF文件加載過程 / 115
4.5.1 讀取ELF文件頭 / 116
4.5.2 讀取Program Header / 117
4.5.3 清空父進(jìn)程繼承來的資源 / 118
4.5.4 執(zhí)行Segment加載 / 120
4.5.5 數(shù)據(jù)內(nèi)存申請和堆初始化 / 122
4.5.6 跳轉(zhuǎn)到程序入口執(zhí)行 / 123
4.6 本章總結(jié) / 125
第5章 系統(tǒng)物理內(nèi)存初始化 / 127
5.1 固件介紹 / 128
5.2 物理內(nèi)存安裝檢測 / 129
5.3 初期memblock內(nèi)存分配器 / 133
5.3.1 memblock內(nèi)存分配器的創(chuàng)建 / 133
5.3.2 向memblock分配器申請內(nèi)存 / 136
5.4 NUMA信息感知 / 139
5.4.1 非一致性內(nèi)存訪問原因 / 139
5.4.2 Linux獲取NUMA信息 / 140
5.5 物理頁管理之伙伴系統(tǒng) / 143
5.5.1 伙伴系統(tǒng)相關(guān)數(shù)據(jù)結(jié)構(gòu) / 143
5.5.2 伙伴系統(tǒng)管理空閑頁面 / 145
5.5.3 memblock向伙伴系統(tǒng)交接物理內(nèi)存 / 148
5.6 本章總結(jié) / 149
第6章 進(jìn)程如何使用內(nèi)存 / 153
6.1 虛擬內(nèi)存和物理頁 / 154
6.1.1 虛擬地址空間 / 154
6.1.2 缺頁中斷 / 157
6.2 虛擬內(nèi)存使用方式 / 162
6.2.1 進(jìn)程啟動(dòng)時(shí)對虛擬內(nèi)存的使用 / 162
6.2.2 mmap / 166
6.2.3 sbrk和brk / 168
6.3 進(jìn)程棧內(nèi)存的使用 / 170
6.3.1 進(jìn)程棧的初始化 / 170
6.3.2 棧的自動(dòng)增長 / 172
6.3.3 進(jìn)程??偨Y(jié) / 176
6.4 線程棧是如何使用內(nèi)存的 / 176
6.4.1 glibc線程對象 / 178
6.4.2 確定??臻g大小 / 178
6.4.3 申請用戶棧 / 180
6.4.4 創(chuàng)建線程 / 182
6.4.5 線程棧小結(jié) / 183
6.5 進(jìn)程堆內(nèi)存管理 / 183
6.5.1 ptmalloc內(nèi)存分配器定義 / 184
6.5.2 malloc內(nèi)存分配過程 / 190
6.6 本章總結(jié) / 192
第7章 進(jìn)程調(diào)度器 / 196
7.1 Linux進(jìn)程調(diào)度發(fā)展簡史 / 197
7.1.1 O(n)調(diào)度發(fā)展過程 / 197
7.1.2 Linux 2.5 O(1)調(diào)度器 / 201
7.1.3 完全公平調(diào)度器誕生 / 205
7.2 Linux調(diào)度器定義 / 205
7.2.1 實(shí)時(shí)調(diào)度器 / 208
7.2.2 完全公平調(diào)度器 / 209
7.3 進(jìn)程的任務(wù)隊(duì)列選擇 / 211
7.3.1 新進(jìn)程創(chuàng)建時(shí)加入 / 212
7.3.2 老進(jìn)程喚醒時(shí)加入 / 220
7.4 調(diào)度時(shí)機(jī) / 221
7.4.1 調(diào)度節(jié)拍 / 221
7.4.2 真正的調(diào)度 / 232
7.5 任務(wù)切換開銷實(shí)測 / 234
7.5.1 進(jìn)程切換開銷 / 235
7.5.2 線程切換開銷 / 237
7.6 Linux調(diào)度器相關(guān)命令 / 238
7.6.1 調(diào)度策略 / 238
7.6.2 nice值設(shè)置 / 239
7.6.3 taskset命令 / 241
7.7 本章總結(jié) / 242
第8章 性能統(tǒng)計(jì)原理 / 246
8.1 負(fù)載 / 247
8.1.1 理解負(fù)載查看過程 / 247
8.1.2 內(nèi)核負(fù)載計(jì)算過程 / 249
8.1.3 平均負(fù)載和CPU消耗的關(guān)系 / 254
8.1.4 負(fù)載計(jì)算整體流程 / 256
8.2 CPU利用率 / 256
8.2.1 方案思考 / 257
8.2.2 top命令使用的數(shù)據(jù)在哪里 / 259
8.2.3 統(tǒng)計(jì)數(shù)據(jù)是怎么來的 / 262
8.2.4 CPU利用率統(tǒng)計(jì)流程 / 266
8.3 指令統(tǒng)計(jì) / 268
8.4 本章總結(jié) / 270
第9章 用戶態(tài)協(xié)程 / 274
9.1 Go的GMP原理 / 275
9.1.1 Go中的線程 / 276
9.1.2 Go中的協(xié)程 / 277
9.1.3 Go中的虛擬處理器 / 278
9.2 Go程序啟動(dòng)過程 / 280
9.2.1 尋找執(zhí)行入口 / 281
9.2.2 執(zhí)行入口分析 / 282
9.2.3 main函數(shù)真正運(yùn)行 / 290
9.3 協(xié)程的棧內(nèi)存 / 292
9.3.1 回憶進(jìn)程棧和glibc 線程棧 / 292
9.3.2 Go的線程棧與協(xié)程棧 / 293
9.3.3 Go協(xié)程棧的擴(kuò)張 / 296
9.4 使用協(xié)程封裝epoll / 299
9.4.1 Go net包使用方式 / 300
9.4.2 Listen底層過程 / 301
9.4.3 Accept過程 / 305
9.4.4 Read和Write內(nèi)部過程 / 310
9.4.5 Go喚醒協(xié)程 / 312
9.5 協(xié)程切換性能測試 / 314
9.6 本章總結(jié) / 316
第10章 容器化技術(shù) / 318
10.1 容器發(fā)展過程 / 319
10.1.1 虛擬機(jī)時(shí)代 / 319
10.1.2 容器化技術(shù) / 320
10.2 PID命名空間 / 326
10.2.1 默認(rèn)命名空間 / 327
10.2.2 新PID命名空間創(chuàng)建 / 330
10.2.3 在命名空間中申請pid / 334
10.2.4 容器進(jìn)程pid查看 / 337
10.3 本章總結(jié) / 339
第11章 容器的CPU資源限制 / 340
11.1 CPU cgroup的創(chuàng)建原理 / 341
11.1.1 使用cgroupfs創(chuàng)建cgroup / 341
11.1.2 內(nèi)核中cgroup的相關(guān)定義 / 344
11.1.3 創(chuàng)建cgroup對象原理 / 349
11.1.4 將進(jìn)程PID寫進(jìn)cgroup / 351
11.2 容器CPU權(quán)重分配實(shí)現(xiàn) / 354
11.2.1 容器CPU權(quán)重設(shè)置 / 354
11.2.2 容器CPU權(quán)重分配實(shí)現(xiàn) / 355
11.3 容器CPU限制分配實(shí)現(xiàn) / 358
11.3.1 設(shè)置CPU限制 / 358
11.3.2 設(shè)置CPU限制底層原理 / 360
11.3.3 進(jìn)程CPU帶寬控制過程 / 362
11.3.4 進(jìn)程的可運(yùn)行時(shí)間的分配 / 368
11.3.5 容器CPU性能 / 372
11.4 K8s中的limits與requests / 375
11.5 容器中的CPU利用率 / 377
11.5.1 獲取容器CPU利用率的思路 / 377
11.5.2 cgroup v1 CPU 利用率統(tǒng)計(jì)原理 / 381
11.5.3 cgroup v2 CPU利用率統(tǒng)計(jì)原理 / 385
11.6 本章總結(jié) / 391
第12章 容器的內(nèi)存資源限制 / 394
12.1 內(nèi)存cgroup的創(chuàng)建原理 / 395
12.1.1 內(nèi)存cgroup定義 / 395
12.1.2 創(chuàng)建內(nèi)存cgroup / 395
12.1.3 內(nèi)存cgroup中的接口文件 / 397
12.2 設(shè)置內(nèi)存cgroup內(nèi)存限制 / 397
12.3 容器物理內(nèi)存的分配 / 399
12.3.1 記賬過程 / 401
12.3.2 容器內(nèi)存超出限制時(shí)的處理 / 402

本目錄推薦

掃描二維碼
Copyright ? 讀書網(wǎng) ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號 鄂公網(wǎng)安備 42010302001612號