内容简介
本书通过丰富的插图、表格和代码示例,结合动手实验及结果分析,通俗易懂地讲解了Linux操作系统的基础知识和运行原理,包括进程管理、进程调度、内存管理、设备访问、文件系统、虚拟化和容器等机制,以及这些机制如何与硬件协同工作。本书在初版的基础上新增了设备访问、虚拟化、容器及cgroup等章节,并对原有章节内容也进行了大幅修订,以满足作者的阅读需求;开辟了“技术专栏”,以帮助希望深入了解Linux的读者拓宽知识面;源代码也从C语言编写更新为Go和Python实现,同时加入大量注释,以方便读者理解。此外,本书也全面升级为彩色印刷,让穿插于字里行间的丰富图表更加清晰易懂。
本书适合应用程序开发人员、系统设计师、运维管理人员和技术支持人员等人士阅读。
目录
第 1章 Linux概述 1
1.1 程序与进程 2
1.2 内核 2
1.3 系统调用 4
1.3.1 系统调用的可视化 5
1.3.2 执行系统调用的时间占比 7
技术专栏 监控、警报及仪表盘 10
1.3.3 系统调用的执行时间 11
1.4 库 11
1.4.1 C标准库 12
1.4.2 系统调用的包装函数 13
1.4.3 静态库与共享库 14
技术专栏 静态链接的复兴 17
第 2章 进程管理(基础篇) 19
2.1 创建进程 20
2.1.1 fork() 函数 21
2.1.2 execve() 函数 23
2.1.3 地址空间布局随机化 27
技术专栏 除fork()函数与execve()函数之外的进程创建方法 29
2.2 进程的父子关系 30
2.3 进程的状态 31
2.4 结束进程 33
2.5 僵尸进程与孤儿进程 34
2.6 信号 35
技术专栏 “必杀”的SIGKILL信号与“不死”的进程 -37
2.7 shell环境中的作业管理 37
2.7.1 会话 38
2.7.2 进程组 39
2.8 守护进程 41
第3章 进程调度 43
3.1 预备知识:运行时间和执行时间 44
3.2 只有一个逻辑CPU时的调度 46
3.3 存在多个逻辑CPU时的调度 48
3.4 user+sys>real 的个例 50
3.5 时间片 51
技术专栏 时间片原理 56
3.6 上下文切换 61
3.7 性能 63
3.8 程序并行执行的重要性 69
第4章 内存管理系统 70
4.1 获取内存的相关信息 71
4.1.1 used 72
4.1.2 buff cache 74
4.1.3 通过sar命令获取内存信息 75
4.2 内存回收 76
4.3 虚拟内存 79
4.3.1 为什么需要虚拟内存 80
4.3.2 虚拟内存做了什么 82
4.3.3 虚拟内存怎样解决问题 88
技术专栏 恐怖的“熔断”漏洞 90
4.4 为进程分配新内存 91
4.4.1 分配内存区域:系统调用mmap() 91
4.4.2 分配内存:按需分页 93
技术专栏 编程语言处理系统的内存管理 102
4.5 多级页表 102
4.5.1 大页 105
4.5.2 透明大页 106
第5章 进程管理(进阶篇) 108
5.1 进程创建的高速化 109
5.1.1 fork()函数的高速化:写时复制 109
5.1.2 execve() 函数的高速化:按需分页 114
5.2 进程间通信 116
5.2.1 共享内存 116
5.2.2 信号 119
5.2.3 管道 120
5.2.4 套接字 121
5.3 互斥锁 121
5.4 互斥锁中的怪圈 125
5.5 多进程与多线程 126
技术专栏 内核级线程与用户级线程 128
第6章 设备访问 132
6.1 设备文件 133
6.1.1 字符设备 135
6.1.2 块设备 136
技术专栏 回环设备 138
6.2 设备驱动程序 139
6.2.1 内存映射I O 140
6.2.2 轮询 144
6.2.3 中断 146
技术专栏 主动利用轮询机制的情形 148
6.3 设备文件名 149
第7章 文件系统 152
7.1 访问文件的方法 156
7.2 内存映射文件 157
7.3 普通的文件系统 160
7.4 容量限制(磁盘配额) 161
7.5 文件系统的一致性 162
7.5.1 日志技术 163
7.5.2 写时复制技术 166
7.5.3 首要之事是备份 168
7.6 Btrfs提供的高级功能 169
7.6.1 快照 169
7.6.2 卷 171
技术专栏 应该使用哪种文件系统? 173
7.7 数据损坏的检测与修复 173
7.8 其他文件系统 175
7.8.1 基于内存的文件系统 175
7.8.2 网络文件系统 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
技术专栏 转译后备缓冲区 195
8.3 页缓存 195
8.4 缓冲区缓存 201
8.5 回写的时间点 202
8.6 direct I O 203
8.7 交换机制 204
8.8 统计信息 207
第9章 通用块层 211
9.1 HDD 的特征 212
9.2 通用块层的基本功能 217
9.3 块设备的性能指标与性能测试方法 219
9.3.1 有且仅有 1 个进程发出I O请求的情形 219
9.3.2 多个进程并行发出I O请求的情形 222
技术专栏 不要推测, 要实打实地测试 226
9.3.3 性能测试工具:fio 226
9.4 通用块层对HDD性能的影响 229
9.4.1 情景A 的测试结果 238
技术专栏 性能测试的目的 -238
9.4.2 情景B 的测试结果 241
9.5 随着技术革新而变化的通用块层 241
9.6 通用块层对NVMe SSD性能的