本書通過豐富的插圖、表格和代碼示例,結(jié)合動手實(shí)驗(yàn)及結(jié)果分析,通俗易懂地講解了Linux操作系統(tǒng)的基礎(chǔ)知識和運(yùn)行原理,包括進(jìn)程管理、進(jìn)程調(diào)度、內(nèi)存管理、設(shè)備訪問、文件系統(tǒng)、虛擬化和容器等機(jī)制,以及這些機(jī)制如何與硬件協(xié)同工作。本書在初版的基礎(chǔ)上新增了設(shè)備訪問、虛擬化、容器及cgroup等章節(jié),并對原有章節(jié)內(nèi)容也進(jìn)行了大幅修訂,以滿足作者的閱讀需求;開辟了技術(shù)專欄,以幫助希望深入了解Linux的讀者拓寬知識面;源代碼也從C語言編寫更新為Go和Python實(shí)現(xiàn),同時加入大量注釋,以方便讀者理解。此外,本書也全面升級為彩色印刷,讓穿插于字里行間的豐富圖表更加清晰易懂。
本書適合應(yīng)用程序開發(fā)人員、系統(tǒng)設(shè)計(jì)師、運(yùn)維管理人員和技術(shù)支持人員等人士閱讀。
-現(xiàn)代計(jì)算機(jī)操作系統(tǒng)趣味圖解版
-新增4章,20多個技術(shù)專欄
-200余幅插圖,圖解實(shí)踐,全彩印刷
-直擊Linux核心工作原理,涵蓋容器、虛擬化,
[日]武內(nèi)覺
資深計(jì)算機(jī)系統(tǒng)技術(shù)專家,F(xiàn)在知名云協(xié)同軟件公司Cybozu負(fù)責(zé)分布式存儲Ceph的研發(fā)。此前在富士通公司從事Linux相關(guān)技術(shù)開發(fā)多年。他是熱心分享的技術(shù)專家,除了廣受贊譽(yù)的本書之外,他還合著或者翻譯了另外兩部Linux著作。
第 1章 Linux概述 1
1.1 程序與進(jìn)程 2
1.2 內(nèi)核 2
1.3 系統(tǒng)調(diào)用 4
1.3.1 系統(tǒng)調(diào)用的可視化 5
1.3.2 執(zhí)行系統(tǒng)調(diào)用的時間占比 7
技術(shù)專欄 監(jiān)控、警報及儀表盤 10
1.3.3 系統(tǒng)調(diào)用的執(zhí)行時間 11
1.4 庫 11
1.4.1 C標(biāo)準(zhǔn)庫 12
1.4.2 系統(tǒng)調(diào)用的包裝函數(shù) 13
1.4.3 靜態(tài)庫與共享庫 14
技術(shù)專欄 靜態(tài)鏈接的復(fù)興 17
第 2章 進(jìn)程管理(基礎(chǔ)篇) 19
2.1 創(chuàng)建進(jìn)程 20
2.1.1 fork() 函數(shù) 21
2.1.2 execve() 函數(shù) 23
2.1.3 地址空間布局隨機(jī)化 27
技術(shù)專欄 除fork()函數(shù)與execve()函數(shù)之外的進(jìn)程創(chuàng)建方法 29
2.2 進(jìn)程的父子關(guān)系 30
2.3 進(jìn)程的狀態(tài) 31
2.4 結(jié)束進(jìn)程 33
2.5 僵尸進(jìn)程與孤兒進(jìn)程 34
2.6 信號 35
技術(shù)專欄 必殺的SIGKILL信號與不死的進(jìn)程 -37
2.7 shell環(huán)境中的作業(yè)管理 37
2.7.1 會話 38
2.7.2 進(jìn)程組 39
2.8 守護(hù)進(jìn)程 41
第3章 進(jìn)程調(diào)度 43
3.1 預(yù)備知識:運(yùn)行時間和執(zhí)行時間 44
3.2 只有一個邏輯CPU時的調(diào)度 46
3.3 存在多個邏輯CPU時的調(diào)度 48
3.4 user sys>real 的個例 50
3.5 時間片 51
技術(shù)專欄 時間片原理 56
3.6 上下文切換 61
3.7 性能 63
3.8 程序并行執(zhí)行的重要性 69
第4章 內(nèi)存管理系統(tǒng) 70
4.1 獲取內(nèi)存的相關(guān)信息 71
4.1.1 used 72
4.1.2 buff cache 74
4.1.3 通過sar命令獲取內(nèi)存信息 75
4.2 內(nèi)存回收 76
4.3 虛擬內(nèi)存 79
4.3.1 為什么需要虛擬內(nèi)存 80
4.3.2 虛擬內(nèi)存做了什么 82
4.3.3 虛擬內(nèi)存怎樣解決問題 88
技術(shù)專欄 恐怖的熔斷漏洞 90
4.4 為進(jìn)程分配新內(nèi)存 91
4.4.1 分配內(nèi)存區(qū)域:系統(tǒng)調(diào)用mmap() 91
4.4.2 分配內(nèi)存:按需分頁 93
技術(shù)專欄 編程語言處理系統(tǒng)的內(nèi)存管理 102
4.5 多級頁表 102
4.5.1 大頁 105
4.5.2 透明大頁 106
第5章 進(jìn)程管理(進(jìn)階篇) 108
5.1 進(jìn)程創(chuàng)建的高速化 109
5.1.1 fork()函數(shù)的高速化:寫時復(fù)制 109
5.1.2 execve() 函數(shù)的高速化:按需分頁 114
5.2 進(jìn)程間通信 116
5.2.1 共享內(nèi)存 116
5.2.2 信號 119
5.2.3 管道 120
5.2.4 套接字 121
5.3 互斥鎖 121
5.4 互斥鎖中的怪圈 125
5.5 多進(jìn)程與多線程 126
技術(shù)專欄 內(nèi)核級線程與用戶級線程 128
第6章 設(shè)備訪問 132
6.1 設(shè)備文件 133
6.1.1 字符設(shè)備 135
6.1.2 塊設(shè)備 136
技術(shù)專欄 回環(huán)設(shè)備 138
6.2 設(shè)備驅(qū)動程序 139
6.2.1 內(nèi)存映射I O 140
6.2.2 輪詢 144
6.2.3 中斷 146
技術(shù)專欄 主動利用輪詢機(jī)制的情形 148
6.3 設(shè)備文件名 149
第7章 文件系統(tǒng) 152
7.1 訪問文件的方法 156
7.2 內(nèi)存映射文件 157
7.3 普通的文件系統(tǒng) 160
7.4 容量限制(磁盤配額) 161
7.5 文件系統(tǒng)的一致性 162
7.5.1 日志技術(shù) 163
7.5.2 寫時復(fù)制技術(shù) 166
7.5.3 首要之事是備份 168
7.6 Btrfs提供的高級功能 169
7.6.1 快照 169
7.6.2 卷 171
技術(shù)專欄 應(yīng)該使用哪種文件系統(tǒng)? 173
7.7 數(shù)據(jù)損壞的檢測與修復(fù) 173
7.8 其他文件系統(tǒng) 175
7.8.1 基于內(nèi)存的文件系統(tǒng) 175
7.8.2 網(wǎng)絡(luò)文件系統(tǒng) 177
7.8.3 procfs 178
7.8.4 sysfs 179
第8章 存儲層次 181
8.1 高速緩存 182
8.1.1 局部性原理 187
8.1.2 多級高速緩存 187
8.1.3 測試高速緩存的訪問速度 188
8.2 同時多線程 193
技術(shù)專欄 轉(zhuǎn)譯后備緩沖區(qū) 195
8.3 頁緩存 195
8.4 緩沖區(qū)緩存 201
8.5 回寫的時間點(diǎn) 202
8.6 direct I O 203
8.7 交換機(jī)制 204
8.8 統(tǒng)計(jì)信息 207
第9章 通用塊層 211
9.1 HDD 的特征 212
9.2 通用塊層的基本功能 217
9.3 塊設(shè)備的性能指標(biāo)與性能測試方法 219
9.3.1 有且僅有 1 個進(jìn)程發(fā)出I O請求的情形 219
9.3.2 多個進(jìn)程并行發(fā)出I O請求的情形 222
技術(shù)專欄 不要推測, 要實(shí)打?qū)嵉販y試 226
9.3.3 性能測試工具:fio 226
9.4 通用塊層對HDD性能的影響 229
9.4.1 情景A 的測試結(jié)果 238
技術(shù)專欄 性能測試的目的 -238
9.4.2 情景B 的測試結(jié)果 241
9.5 隨著技術(shù)革新而變化的通用塊層 241
9.6 通用塊層對NVMe SSD性能的影響 243
9.6.1 情景A 的測試結(jié)果 243
9.6.2 情景B 的測試結(jié)果 246
技術(shù)專欄 現(xiàn)實(shí)中的性能測試 246
第 10章 虛擬化 249
10.1 什么是虛擬化功能 250
10.2 虛擬化軟件 251
10.3 本章使用的虛擬化軟件 253
技術(shù)專欄 嵌套虛擬化 255
10.4 支持虛擬化功能的CPU 255
技術(shù)專欄 CPU 不支持虛擬化功能時的虛擬化 259
10.5 宿主OS視角的虛擬機(jī) 260
10.5.1 宿主OS視角的客戶OS 262
10.5.2 啟動多個虛擬機(jī) 263
技術(shù)專欄 IaaS中的彈性伸縮功能 265
10.6 虛擬化環(huán)境中的進(jìn)程調(diào)度 265
10.6.1 物理機(jī)上運(yùn)行著其他線程的情況 267
10.6.2 統(tǒng)計(jì)信息 271
10.7 虛擬機(jī)與內(nèi)存管理 274
10.8 虛擬機(jī)與存儲設(shè)備 277
10.8.1 虛擬機(jī)的I O性能 278
10.8.2 存儲設(shè)備的寫入操作與頁緩存 281
10.8.3 半虛擬化設(shè)備與virtio-blk 281
技術(shù)專欄 宿主OS與客戶OS的I O性能逆轉(zhuǎn) 282
10.8.4 virtio-blk的原理 283
技術(shù)專欄 PCI直通 286
第 11章 容器 287
11.1 虛擬機(jī)與容器的區(qū)別 288
11.2 容器的類型 290
11.3 命名空間 291
11.3.1 pid ns 291
11.3.2 容器的本質(zhì) 297
11.4 安全風(fēng)險 298
第 12章 cgroup 300
12.1 cgroup能夠限制的資源 302
12.2 示例:限制CPU使用時間 303
技術(shù)專欄 把cgroup 機(jī)制引入內(nèi)核的經(jīng)過 -305
12.3 應(yīng)用實(shí)例 306
技術(shù)專欄 cgroup v2 306
第 13章 總結(jié)與應(yīng)用 307