E-BOOK Linux是怎样工作的 武内觉 Linux是怎样工作的

Linux是怎样工作的

👤 武内觉 📖 人民邮电出版社 📋 9787115670250 🌐 zh-CN
47
下载次数
4.8
用户评分

📦 下载本书

  • 理解系统运行机制:通过图解和实验,帮助读者透彻理解Linux内核如何管理进程、内存和设备,不再停留在命令操作层面。
  • 掌握核心原理:深入剖析进程调度、虚拟内存、文件系统等关键子系统的工作流程,解决对系统底层运作的困惑。
  • 应对性能问题:学习如何利用时间片、上下文切换等机制优化程序性能,提升系统资源利用效率。
  • 理解虚拟化与容器:新增章节详细讲解虚拟化、容器和cgroup技术,帮助读者掌握现代云原生环境的基础知识。
  • 提升调试与排障能力:通过动手实验和代码示例,学会分析和解决常见的系统故障,如僵尸进程、内存泄漏等。
★★★
中级
入门初级中级进阶高级
  • 应用程序开发人员:深入理解操作系统底层,有助于编写更高效、更稳定的代码,并解决并发与性能问题。
  • 系统设计师:掌握内核机制,能够设计出更合理的系统架构,优化资源分配和任务调度。
  • 运维管理人员:通过对进程、内存和文件系统的透彻理解,提升系统监控、故障排查和性能调优的能力。
  • 技术支持人员:在面对客户系统问题时,能快速定位根因,提供专业的解决方案。
  • 计算机专业学生:作为操作系统课程的补充读物,通过图解和实验加深对理论知识的理解。
  1. 循序渐进:建议按章节顺序阅读,前5章是核心基础,务必掌握后再学习后续内容。
  2. 动手实验:每章附带的代码示例和实验,请亲自运行并分析结果,以加深对原理的理解。
  3. 重点章节:第2、3、4章是重中之重,涉及进程、调度和内存,需反复研读。
  4. 技术专栏:对于进阶读者,不要跳过“技术专栏”,它们提供了扩展知识和前沿话题。
  5. 结合实践:在阅读虚拟化与容器章节时,建议配合Docker或KVM实际操作,巩固所学。
  • 系统认知:建立对Linux操作系统整体架构的清晰认知,明白各组件如何协同工作。
  • 原理掌握:深入理解进程调度、内存管理、文件系统等核心机制,知其然更知其所以然。
  • 实践技能:通过动手实验,掌握使用系统命令和工具分析系统状态的方法。
  • 性能优化:学会从系统层面分析程序性能瓶颈,并采取有效优化措施。
  • 现代技术:掌握虚拟化与容器的基础原理,为学习云原生技术打下坚实基础。
  • 问题排查:提升解决系统故障的能力,能够独立分析并处理常见问题。

📖 书籍简介

产品特色

编辑推荐
-“现代计算机操作系统”趣味图解版
-新增4章,20多个“技术专栏”
-200余幅插图,图解×实践,全彩印刷
-直击Linux核心工作原理,涵盖容器、虚拟化,
内容简介

本书通过丰富的插图、表格和代码示例,结合动手实验及结果分析,通俗易懂地讲解了Linux操作系统的基础知识和运行原理,包括进程管理、进程调度、内存管理、设备访问、文件系统、虚拟化和容器等机制,以及这些机制如何与硬件协同工作。本书在初版的基础上新增了设备访问、虚拟化、容器及cgroup等章节,并对原有章节内容也进行了大幅修订,以满足作者的阅读需求;开辟了“技术专栏”,以帮助希望深入了解Linux的读者拓宽知识面;源代码也从C语言编写更新为Go和Python实现,同时加入大量注释,以方便读者理解。此外,本书也全面升级为彩色印刷,让穿插于字里行间的丰富图表更加清晰易懂。
本书适合应用程序开发人员、系统设计师、运维管理人员和技术支持人员等人士阅读。

作者简介
[日]武内觉
资深计算机系统技术专家。现在知名云协同软件公司Cybozu负责分布式存储Ceph的研发。此前在富士通公司从事Linux相关技术开发多年。他是热心分享的技术专家,除了广受赞誉的本书之外,他还合著或者翻译了另外两部Linux著作。
目录
第 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性能的影响 243
9.6.1 情景A 的测试结果 243
9.6.2 情景B 的测试结果 246
技术专栏 现实中的性能测试 246

第 10章 虚拟化 249
10.1 什么是虚拟化功能 250
10.2 虚拟化软件 251
10.3 本章使用的虚拟化软件 253
技术专栏 嵌套虚拟化 255
10.4 支持虚拟化功能的CPU 255
技术专栏 CPU 不支持虚拟化功能时的虚拟化 259
10.5 宿主OS视角的虚拟机 260
10.5.1 宿主OS视角的客户OS 262
10.5.2 启动多个虚拟机 263
技术专栏 IaaS中的弹性伸缩功能 265
10.6 虚拟化环境中的进程调度 265
10.6.1 物理机上运行着其他线程的情况 267
10.6.2 统计信息 271
10.7 虚拟机与内存管理 274
10.8 虚拟机与存储设备 277
10.8.1 虚拟机的I O性能 278
10.8.2 存储设备的写入操作与页缓存 281
10.8.3 半虚拟化设备与virtio-blk 281
技术专栏 宿主OS与客户OS的I O性能逆转 282
10.8.4 virtio-blk的原理 283
技术专栏 PCI直通 286

第 11章 容器 287
11.1 虚拟机与容器的区别 288
11.2 容器的类型 290
11.3 命名空间 291
11.3.1 pid ns 291
11.3.2 容器的本质 297
11.4 安全风险 298

第 12章 cgroup 300
12.1 cgroup能够限制的资源 302
12.2 示例:限制CPU使用时间 303
技术专栏 把cgroup 机制引入内核的经过 -305
12.3 应用实例 306
技术专栏 cgroup v2 306

第 13章 总结与应用 307

📑 章节目录

  1. Linux概述:程序、进程与内核的基本概念
  2. 进程管理(基础篇):进程创建、状态与信号
  3. 进程调度:多CPU环境下的调度策略与时间片
  4. 内存管理系统:虚拟内存、按需分页与多级页表
  5. 进程管理(进阶篇):写时复制、进程间通信与线程
  6. 设备访问:设备文件、驱动与中断处理
  7. 文件系统:访问方法、一致性维护与容量管理
  8. 虚拟化技术:虚拟机的原理与实现
  9. 容器与cgroup:资源隔离与限制机制
  10. 系统启动与初始化:从开机到用户空间的完整流程
  11. 网络与套接字:内核网络栈与进程通信
  12. 综合实验与实战:构建小型系统监控工具