本書通過豐富的插圖、表格和代碼示例,結(jié)合動手實驗及結(jié)果分析,通俗易懂地講解了Linux操作系統(tǒng)的基礎(chǔ)知識和運行原理,包括進程管理、進程調(diào)度、內(nèi)存管理、設(shè)備訪問、文件系統(tǒng)、虛擬化和容器等機制,以及這些機制如何與硬件協(xié)同工作。本書在初版的基礎(chǔ)上新增了設(shè)備訪問、虛擬化、容器及cgroup等章節(jié),并對原有章節(jié)內(nèi)容也進行了大幅修訂,以滿足作者的閱讀需求;開辟了技術(shù)專欄,以幫助希望深入了解Linux的讀者拓寬知識面;源代碼也從C語言編寫更新為Go和Python實現(xiàn),同時加入大量注釋,以方便讀者理解。此外,本書也全面升級為彩色印刷,讓穿插于字里行間的豐富圖表更加清晰易懂。
本書適合應(yīng)用程序開發(fā)人員、系統(tǒng)設(shè)計師、運維管理人員和技術(shù)支持人員等人士閱讀。
-現(xiàn)代計算機操作系統(tǒng)趣味圖解版
-新增4章,20多個技術(shù)專欄
-200余幅插圖,圖解實踐,全彩印刷
-直擊Linux核心工作原理,涵蓋容器、虛擬化,
[日]武內(nèi)覺
資深計算機系統(tǒng)技術(shù)專家,F(xiàn)在知名云協(xié)同軟件公司Cybozu負責(zé)分布式存儲Ceph的研發(fā)。此前在富士通公司從事Linux相關(guān)技術(shù)開發(fā)多年。他是熱心分享的技術(shù)專家,除了廣受贊譽的本書之外,他還合著或者翻譯了另外兩部Linux著作。
第 1章 Linux概述 1
1.1 程序與進程 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章 進程管理(基礎(chǔ)篇) 19
2.1 創(chuàng)建進程 20
2.1.1 fork() 函數(shù) 21
2.1.2 execve() 函數(shù) 23
2.1.3 地址空間布局隨機化 27
技術(shù)專欄 除fork()函數(shù)與execve()函數(shù)之外的進程創(chuàng)建方法 29
2.2 進程的父子關(guān)系 30
2.3 進程的狀態(tài) 31
2.4 結(jié)束進程 33
2.5 僵尸進程與孤兒進程 34
2.6 信號 35
技術(shù)專欄 必殺的SIGKILL信號與不死的進程 -37
2.7 shell環(huán)境中的作業(yè)管理 37
2.7.1 會話 38
2.7.2 進程組 39
2.8 守護進程 41
第3章 進程調(diào)度 43
3.1 預(yù)備知識:運行時間和執(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 為進程分配新內(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章 進程管理(進階篇) 108
5.1 進程創(chuàng)建的高速化 109
5.1.1 fork()函數(shù)的高速化:寫時復(fù)制 109
5.1.2 execve() 函數(shù)的高速化:按需分頁 114
5.2 進程間通信 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 多進程與多線程 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ù)專欄 主動利用輪詢機制的情形 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 回寫的時間點 202
8.6 direct I O 203
8.7 交換機制 204
8.8 統(tǒng)計信息 207
第9章 通用塊層 211
9.1 HDD 的特征 212
9.2 通用塊層的基本功能 217
9.3 塊設(shè)備的性能指標(biāo)與性能測試方法 219
9.3.1 有且僅有 1 個進程發(fā)出I O請求的情形 219
9.3.2 多個進程并行發(fā)出I O請求的情形 222
技術(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)實中的性能測試 246
第 10章 虛擬化 249
10.1 什么是虛擬化功能 250
10.2 虛擬化軟件 251
10.3 本章使用的虛擬化軟件 253
技術(shù)專欄 嵌套虛擬化 255
10.4 支持虛擬化功能的CPU 255
技術(shù)專欄 CPU 不支持虛擬化功能時的虛擬化 259
10.5 宿主OS視角的虛擬機 260
10.5.1 宿主OS視角的客戶OS 262
10.5.2 啟動多個虛擬機 263
技術(shù)專欄 IaaS中的彈性伸縮功能 265
10.6 虛擬化環(huán)境中的進程調(diào)度 265
10.6.1 物理機上運行著其他線程的情況 267
10.6.2 統(tǒng)計信息 271
10.7 虛擬機與內(nèi)存管理 274
10.8 虛擬機與存儲設(shè)備 277
10.8.1 虛擬機的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 虛擬機與容器的區(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 機制引入內(nèi)核的經(jīng)過 -305
12.3 應(yīng)用實例 306
技術(shù)專欄 cgroup v2 306
第 13章 總結(jié)與應(yīng)用 307