作者介绍
挖坑的张师傅,应用软件副总工@希沃。目前主要从事 DevOps 后端、多云架构、边缘计算等相关开发工作,深耕一线开发。下面是作者的一些标签:
- Vim 爱好者;
- Java 逃兵(出版过一本 JVM 字节码的书),狂爱 Go、Rust,现在每天日常写 Go 和 Rust;
- 喜欢造一些没什么用的轮子,用 Rust 重写过 Flannel,用 Go 实现过 DDIA 中的一些算法和数据结构;
- 喜欢排查各类疑难杂症,对 Linux 内核、网络等有较多兴趣,掘金上写过 50+ 问题排查的文章,还写过一个《深入理解 TCP 协议:从原理到实战》的小册子;
- 热衷于分享,掘金优秀作者,在掘金上架了两本小册子,销量
1W+
。「Go 夜读」、「掘金开发者大会」讲师。
为什么写这本小册
我目前的主要工作集中在基础架构、DevOps 和边缘计算等领域。在日常工作中,我经常会遇到业务方面奇奇怪怪的问题,涉及容器网络、文件 I/O、内存等方面。在解决这些问题的过程中,我意识到,要找到问题的根因,需要扎实的底层原理知识作为支撑,否则只能靠“算命”。
另外,我在掘金上发表了近 60 篇文章,几乎全部都与底层原理和问题排查定位相关。通过解决大量疑难杂症,我开始思考其中是否存在一些共通的知识点,可以总结出来帮助我们团队的成员提高定位问题的能力。
于是,就有了这本《给开发者的底层原理课》的小册。
其实算下来,本小册断断续续写了好久(历时 2 年+),一开始,我对如何定位这本书感到困惑,因为底层原理浩如烟海,但顾虑太多反而寸步难行。于是,我硬着头皮把这本小册子肝出来了,也算是自己的一个阶段性的总结吧。
这本小册涉及的主题非常广泛,每个主题都可以展开写一本书。在有限的篇幅内,我无法涵盖所有内容。因此,我选择从自己实际工作中遇到并解决过的问题出发,提炼出小册的知识点, 侧重于动手实践
,太偏的知识我不介绍,尽量做到每个知识点都可以得到验证, 尽可能每个知识点你后面工作中都有可能会遇到
。
小册介绍
本小册共分为五大模块,它们彼此相对独立,你可以选择你感兴趣的任意章节开始阅读。
模块一,基础篇
。 涵盖多个核心工具和技术的使用及原理,主要包含下面这些内容:
- 掌握 GDB 的基本使用方法和工作机制;
- 讲解如何使用 QEMU 和 GDB 调试 Linux 内核;
- 结合搜索引擎和大模型看懂理解汇编代码,从汇编的角度理解 C/C++、Go 的诸多细节;
- 探讨同步机制和锁的实现原理,介绍计算机先驱们是如何优化锁的;
- 深入理解线程本地存储 TLS 的实现原理;
- Linux 系统中的时钟源和高性能计时方法,以及 vdso 系统调用的实现和应用;
- 零拷贝技术的原理和实现,了解如何通过零拷贝提高数据传输效率;
LD_PRELOAD
的使用方法和应用场景,介绍在审计、故障注入、性能分析上的应用;- 深入分析系统调用的实现原理,如何传参,系统调用涉及的上下文切换等;
- ftrace 和 trace-cmd 工具的使用方法,方便你追踪内核调用过程;
- 手写 tcpdump。
模块二,CPU 篇
。 包含:
- 进程线程的本质,详细讲解 Linux 内核中 task_struct 结构;
- 进程的各种状态及其转换条件,帮助你理解进程的生命周期;
- 孤儿进程和僵尸进程的概念及其处理方法;
- Kubernetes 中的 pause 容器和僵尸进程问题;
- D 状态进程的含义及其对系统负载的影响;
- 进程上下文切换的本质,了解其对系统性能的影响;
- 完全公平调度(CFS)算法的原理和实现,理解线程是如何分配到 CPU 时间的;
- 实时进程调度算法的原理和实现;
- 火焰图的概念和使用方法,帮助你分析和优化 CPU 性能;
- CPU 亲和性和超线程技术的原理和应用,了解在多核处理器中应该注意什么;
- 通过实际代码示例,讲解如何手写协程,帮你了解协程的本质。
模块三,内存篇
。 包含:
- 理解虚拟内存和物理内存的概念;
- 比较 brk 和 mmap 两种内存分配系统调用的原理和应用场景,了解内存是如何分配的;
- 介绍进程内存分布的基本概念和结构,这在分析进程的内存占用时十分有用;
- 了解什么是缺页中断 PageFault;
- 深入分析 Linux OOM 机制,了解 overcommit、oom_score_adj 等概念;
- 讲解 malloc 和 free 函数的底层实现原理,理解 ptmalloc、jemalloc 等内存分配器的角色。
模块四,IO 篇
。 包含:
- 介绍虚拟文件系统(VFS)的概念和四大数据结构,理解 Linux 一切皆文件的精妙设计;
- 了解文件描述符(fd)分配的最低未使用原则;
- 理解文件描述符表(进程级)、打开文件列表(系统级)、i-node 表(系统级)三者之间的关系;
- 剖析 epoll 源码,理解等待队列、epoll 数据结构、事件回调等知识。
模块五,容器篇
。主要介绍容器原理以及网络相关的知识:
- 支撑容器实现的实现原理:cgroup、namespace、rootfs 等概念;
- 容器网络基石:veth、bridge、tun/tap 等;
- 剖析内核层 conntrack 的实现;
- 理解 iptables 的基础概念与自定义规则链;
- DNS 的实现原理以及在各大语言中的注意事项;
- ARP 的基础知识以及 GC 的注意事项;
- 通过源码走读,介绍 socket 编程中的核心函数的内核层实现。
为了方便你全面概览小册子的内容,我列了一个这本小册的思维导图
:
你将获得
- 五大板块,全面覆盖开发者必备关键理论知识;
- 深入底层,从根儿理解各技术工作原理和思想;
- 实战驱动,沉浸式学习,在动手中内化知识;
- 授之以渔,带你学会独立思考和解决问题。
适宜人群
这本小册覆盖的主题是比较广泛的,适用于下面这些人群:
-
开发工程师:无论是前端、后端、全栈还是移动端开发,深入理解 Linux 内核原理和系统编程,有助于写出更高质量、性能更好的代码。比如,通过学习内存管理原理,可以优化内存使用、分析内存泄露等问题。
-
运维/DevOps 工程师:运维工作与 Linux 系统密不可分。学习 Linux 内核,可以从根本上理解系统的方方面面,快速定位和解决各种疑难杂症。比如,GDB 和 ftrace 等调试工具的原理和使用,可以帮助更高效地排查故障。
-
测试开发工程师:学习 Linux 系统编程,更高效地排查问题根因、开发更强大的测试工具。
-
技术爱好者:对于热爱技术、喜欢探索的人来说,Linux 内核一直是一个神秘而有吸引力的领域。这本小册可以满足你的好奇心,让你对操作系统和计算机体系结构有更深刻的认识。
最低价:上新特惠,限时 6 折中
学习底层原理,是程序员打磨内功、提升技术修为的必经之路。希望通过此小册,你可以习得攻克“疑难杂症”的内力,掌握精进的方法,成为独当一面的技术高手。期待你的加入!!
6 月 19 日~6 月 26 日,上新限时 6 折,原价 ¥69.9,算下来仅需 ¥41.94,现在购买最省钱!!!
赶紧点击下方图片
或者扫描海报二维码
,一起加入学习吧!