Skip to content

系统专栏导览 ​

标签
基本功/系统
字数
1373 字
阅读时间
6 分钟

这一栏收录操作系统的内部机制:CPU 怎么执行指令、内存怎么被虚拟化、进程与线程在内核里是什么、多个执行流怎么共享内存又怎么互相等待、文件怎么落到磁盘上、一次 I/O 要穿过哪些层,以及服务端怎么用一套线程处理海量连接。

不收去哪看本专栏只关心
数据在网络上怎么传输、协议怎么握手基本功/网络数据到了本机之后,内核怎么处理它
具体编程语言与工具链的使用语言/、AI/infra/与语言无关的操作系统机制
数据库与中间件自己的锁、日志、缓存设计中间件操作系统给所有程序提供的那一层

目录 ​

  • 01 · 01-硬件结构与 CPU —— 图灵机与冯诺依曼模型、存储器金字塔为什么必须分层、CPU Cache 与 MESI 缓存一致性协议、CPU 怎么选下一个线程、软中断,以及浮点数的 IEEE 754 表示
  • 02 · 02-内核结构与设备管理 —— 内核态与用户态的分界、宏内核与微内核的取舍、四种 I/O 控制方式的演进、驱动与通用块层,以及键盘敲一个字母的完整链路
  • 03 · 03-虚拟内存与页面置换 —— 分段与分页、多级页表与 TLB、缺页中断的完整路径、四种页面置换算法与近似 LRU、Linux 的伙伴系统与 slab,以及 OOM 与 swap 的排查
  • 04 · 04-进程、线程与调度 —— 进程的地址空间与五态模型、僵尸与孤儿进程、上下文切换保存了什么、MLFQ 与 CFS 的调度判据,以及负载高却 CPU 空闲这类排查
  • 05 · 05-进程间通信 —— 管道、消息队列、共享内存、信号量、信号与 Socket 六种方式的内核结构与限额,拷贝次数的对比,以及各自的失败模式
  • 06 · 06-死锁与锁策略 —— 死锁四条件与逐条破坏法、资源分配图与 pstack/jstack 的抓栈步骤、银行家算法的算例,以及互斥与自旋、读写锁、乐观锁与悲观锁的选型
  • 07 · 07-多线程与并发 —— 同步原语的实现、原子操作与内存序、乱序执行与内存屏障、伪共享的成因与规避,以及加锁时最容易犯的几类错
  • 08 · 08-文件系统与 IO 栈 —— inode 与目录项、VFS 的四个核心对象、索引分配的寻址上限推导、ext4 块组布局、软硬链接的区别、PageCache 回写、零拷贝的三条路径与磁盘调度
  • 09 · 09-IO 多路复用与 Reactor —— 从多进程到 epoll 的演进、红黑树与就绪链表、LT 与 ET 的编程约束,以及 Reactor 与 Proactor 两种网络编程模型
  • 10 · 10-Linux 性能观测 —— USE 方法、CPU 与内存与磁盘与网络四类资源的观测入口、ss/sar/iperf3 的读法,以及 awk 流水线做 PV·UV 分析时的性能陷阱

阅读顺序 ​

01 → 02 → 03 → 04 → 05 → 06 → 07 → 08 → 09 → 10。这条顺序是一条依赖链:先有硬件,才有内核,才有内核提供的各种抽象。

01 从最底层开始 —— 不懂 Cache 与缓存一致性,后面读「为什么上下文切换贵」「为什么伪共享致命」时就没有量级感。02 接在 01 之后,讲内核本身的结构与它怎么和硬件设备打交道,其中「一次 I/O 要穿过哪些层」是全栏的地基。03 与 04 是一组:内存管理与进程管理是内核的两大子系统,虚拟内存是进程地址空间的前提,而页表又与上下文切换的开销直接相关。05 → 06 → 07 是并发这一侧的三段 —— 多个执行流要协作就得通信(05),要共享就得同步、同步用错就是死锁(06),而这两篇反复回指的那套同步原语的实现细节在 07(原子操作、内存序、内存屏障、伪共享)。08 换到存储这一侧,把 I/O 从文件系统一路铺到设备,并收进零拷贝的三条路径。09 是最上层的一次综合:把「一次 I/O 要穿过哪些层」与「怎么同时处理很多连接」合起来。10 收尾,把前面所有机制的观测入口收成一套可执行的排查剧本。

相关 ​

参考 ​

贡献者 ​

文件历史 ​