Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

4. 主干纵贯: CPU/内存 → OS/Linux → 网络/Web → DB → 编译 → 分布式 → AI 的承接链

TL;DR

前面 history 讲时间线、abstraction-layers 讲层级、mainframe-xpu 讲形态. 这一节反过来 — 沿"承接链"反向回到纵贯主线: 每条技术都因"上层拿它做啥"才有意义, 每条新技术大概率是对上层需求的回响.

承接链 (dependency-of-statements):

物理 → 晶体管 → 数字 → ISA → 微架构 → 内存 → OS → 进程 / 虚存
                                            ↓
          → 文件系统 → 网络 → Web → 数据库 → 应用 → 业务
                  ↘
                   → 编译器 → 高级语言 → 框架
                                              ↘
                                               → 分布式 → 共识 → 一致性 → 云
                                                                   ↓
                                                                   → AI 训练 → 推理

每一节都讲: 它的上一站契约是什么 / 它对下一站提供什么 / 没有它上一步走不动.

读完应能: 把任意一份你做过 / 你读过的工程问题挂到这条承接链某节点上, 知道"上一站是怎么影响它"和"它对下一站指挥谁".


一、CPU 与内存: 1945 年那纸契约的开始

1.1 von Neumann 架构

     CPU  ←─── shared bus ───  Memory
                                   │
                                 IO

存储程序 + 共享总线 + 取指 → 解码 → 执行 → 写回. 这套循环在一台机器上仍是 2026 主流 (除 Harvard / NUMA / DSP variant).

1.2 第一道承接: 性能 vs 内存之间的-frequency gap

1980  CPU 5MHz, DRAM 100ns     到 CPU 一致
1995  CPU 100MHz, DRAM 60ns   缓慢拉开
2000  CPU 1GHz, DRAM 6ns       10x 差距
2010  CPU 3GHz, DRAM 0.3ns    100x 差距 ← cache 不可缺
2026  CPU 5GHz, HBM 0.2ns     memory wall; cache + HBM + CXL

→ 这就是为什么 第八部分 memory-hierarchy / TLB / DRAM / HBM 全是必需. 内存是 CPU 的最薄弱点, 没有第二选项, 没有它后整个 OS / 编译 / AI 承接链都得重.

1.3 为何 OS 出现: 单机内部多任务化的契约

  • 主机仍单 CPU 时, OS 把"硬件时序"封成"时序进程"; 进程 / 线程 / 上下文切换 = 虚拟时间 + 虚空间.
  • 一旦有保护模式 + 虚拟内存 + 系统态分, 用户程序不必对每个硬件细节了如指掌 — 这是 OS 出现的核心动因.

二、OS/Linux: 让程序员不再写硬件

2.1 进程 + 虚拟内存 = 抽象母机

  • 进程 = 一份拥有独立虚地址空间的执行单位; 内核为每个建 page table, 给"独立空间"幻觉.
  • 调度器 (Linux CFS / EDF / RT) 将 CPU 时间切片让多进程并发"幻觉".
  • 上下文切换挂上下文 + TLB; 延迟 ~ 1-10us (见 os/sched).

2.2 文件系统: 让 IO 字节流化

OS 抽象物理对应
open(path)inode 解析 + dentry cache
read/write(fd)page cache + direct IO
mmap(fd)TLB + page dirty
fsync(fd)WAL flush + 块设备 cache flush
sendfile(out, in)zero-copy, DMA

→ 见 os/fs.

2.3 网络栈与 epoll/io_uring

  • socket() 复用 fd 抽象; TCP 4 层 + IP + 驱动.
  • C10K 问题 (2002): 单机 10000 连接压力 → epoll (2002) + kqueue; 后 100K / 1M 由 io_uring (2019) 实现.

2.4 同步原语与内存模型

  • 进程内 sync: mutex / semaphore / rwlock; kernel 内 futex + CAS; 浪费大批 lock-free / RCU 设计.

→ 见 os/lock.

2.5 OS 对承接链"承诺"的清单一句话

  • 进程隔离的虚空间
  • 通用 IO 的字节流
  • 跨进程的协议: socket / IPC / pipe
  • 命名隔离: filesystem
  • 安全 / 权限: uid / cgroup / capability

这一组契约就是后续一切软件的"地基".


三、网络与 Web: 让孤立的机器互连

3.1 IP/TCP 契约

  • IP: 不可靠的、按 packet; 上层自己保序 / 重传可靠性.
  • TCP: reliable byte stream; congestion control (Reno/Cubic/BBR); 3-way handshake + 4-way close.

3.2 HTTP / TLS: 最薄一英里

  • HTTP/0.9-1.1 一条 TCP 一个 request; HTTP/2 (2015) 一条连接多路 stream; HTTP/3 over QUIC (2022+) → 见 networking/quic.
  • TLS 1.3 (2018) 1-RTT + 0-RTT; X.509 + PKI + CT.

3.3 Web 把客户端拉成终端

  • 浏览器是 OS 上的一个 "虚拟机"; HTML/CSS/JS DOM/WASM/WebGPU 成熟.
  • 2024+ WebGPU 让浏览器可调 GPU 算 + WASI 让 WASM 调本地 file. 浏览器从文档看待器 → 通用客户端 → 实际计算平台.

3.4 网络对 DB / 应用的影响

  • DB 出现 single machine 邦联后就受网络影响; 网络 RTT 决定 commit 时间 → 数据库 replication 的延迟很关键.
  • 应用从 monolith → SOA → micro-service → service mesh 全由于网络可靠性 / IP/TLS / k8s / 等成熟.

四、数据库系统: 让状态在并发 / 故障下成立

4.1 为什么需要 DB 而不是文件

OS 文件系统只承诺 "字节流", 没说"原子写 / 多 client 并发 / crash 后一致". DB 把这些不变式钉死:

  • ACID (事务原子性 / 一致性 / 隔离性 / 持久性).
  • MVCC + WAL + 2PL + snapshot isolation.
  • 主流: PostgreSQL / MySQL (OLTP), ClickHouse / Snowflake (OLAP), Redis / Dynamo (KV).

→ 见 databases. 这是承接链 保存状态 的核心一层.

4.2 数据库如何依赖 OS / 网络 / 硬件

  • 依赖文件 + fsync 确保持久性 (write-ahead log); 这是个 OS 与块设备之间的契约. 一旦块设备"写入但未 flush" 破坏这一契约, ACID 就有空洞 (e.g. SSD cache 丢).
  • 依赖网络做 replication; latency → Paxos / Raft 单写 1 RTT trip.
  • 依赖 page cache / direct IO / io_uring / NVMe 多队列 → 与 OS / 块设备协同.

4.3 DB 是 web 后端的"状态核心"

  • Web 上层把所有"状态"丢 DB, 自己做无状态服务 + 容器; K8s + RDS 模型 一切都这么搭.
  • DB 与分布式系统的 cap 线 / 一致性范畴都来自这条承接.

五、编译器 / 高级语言: 让机器可读变成人可写

5.1 编译器史的简线

  • 1957 FORTRAN; 1972 C; 1990 GCC; 2000 LLVM; 2010 V8 Tiered JIT; 2020 Rust + LLVM + Miri.
  • 编译器把"人工可写"高级语言转到"机器可执行" ISA, 同时做优化: SSA / CFG / constant folding / dead-code / loop unroll / auto-vectorize / IPO.
  • compilers.

5.2 编译器承接了"OS 加上后程序可点点"

  • OS 提供 syscall ABI; 编译器知道怎么写出对 ABI 正确的代码 (caller/callee saved regs, stack frame).
  • 语言层 → 库 → syscall → kernel → driver.

5.3 高级语言运行时: 抽象 GC 与线程的延展

  • Java / Python / Go / Rust / JS 等, 加 GC / 协程 / async / await / Future / channel; 都把 OS 线程 + sqlite / pipe 的细节包到运行时.

六、分布式系统: 一台机器不够用后 N 台协同

6.1 必来

  • 单机扩展到 +10GHz 时 CPU 与内存墙都搅过; 一台机器能跑的 QPS / 数据量 / HA 都不可满足 → 必须多机.
  • 多机 = 网络 → 延迟 + 故障 + 异构 → 必须协议 (CAP / 一致性).
  • Multi-Paxos / Raft / Gossip + CRDT; 见 distributed.

6.2 共识 = 状态机复制的工具

  • 1990 Lamport Paxos; 2014 Raft.
  • 任何"被许多机器共享的状态"几乎都用这俩或其变种. -共识是承接链中调度多机, 把"不可靠网络 + 部分机器丢"转成"一组虚拟主机机".

6.3 一致性与时间

  • 物理时钟不可同步全 → logical clock (Lamport, vector clock, HLC) → 全序 / 偏序隔离.
  • TrueTime (Spanner) / HLC (CockroachDB) 借 GPS + 原子钟做单亿误差.

6.4 把"集群"抽象成"单机"

  • K8s 把 10000 台集群抽象成一组 control-plane API; 用户提 YAML 即一份声明式资源 → 内部 reconciliation loop → 自动调拨.
  • system-design/case/k8s-control-plane.

七、Web 后端 / 微服务 / 系统设计

7.1 估算 → 缓存 → 队列 → 限流

  • Little's Law + Little's Law → 平均 response = arrival_time / (1 - rho); back-of-envelope 计算 QPS / IOPS / 带宽 / 存储.
  • cache-aside / write-through / write-behind; 失效 (穿透 / 击穿 / 雪崩).
  • 队列 Kafka / Pulsar / SQS; at-least-once vs exactly-once; outbox pattern.

7.2 系统设计 = 反推与分解

  • 任务需求 → 估算 → 主组件 → 数据流 → 失败模式 → 可观测 → 上云.
  • system-design.

7.3 微服务网格的承接

  • 服务网格 (Istio / Linkerd / Envoy) 在 K8s 之上加: mTLS + routing + 重试 / timeout / 熔断 + observability + sidecar proxy.

八、AI: 状态机的"高维"模式化

8.1 它从哪里踏上承接链

  • 数学 (第零部分): 反向传播 + 链式法则 + softmax / SVD + 概率分布 → 是 AI 训练算法本身.
  • 硬件 (第八部分): GPU/TPU/NPU 异构芯片 + HBM + 互联 → 性能 + 显存决定 能不能训.
  • OS (第二部分): Linux + cgroup + nccl + RDMA → GPU 集群的互联.
  • 网络 (第三部分): RoCE v2 / nvBandwidth → 多卡通信快; HTTPS 推理 API.
  • 数据库 (第四部分): 训练数据集存储; vector database 给 LLM 工具调用 / RAG.
  • 分布式 (第六部分): model 并行 / data 并行 / pipeline 并行 / ZeRO-3 → 8 卡变 65K 卡.
  • 系统设计 (第七部分): inference service 设计 / KV cache 共享 / 多 tenant / autoscaling.

8.2 AI 反过来反推这条承接链

  • GPU/NPU 出来前: CPU 单线喂不饱; 现在 GPU 训练一批 7B 模型 1000 卡密集用; NCCL + RDMA + GPUDirect-RDMA 是新协议栈; 这把承接链的工具形态全部改.
  • LLM 推理: 把反向 AD 的 cache 改成 KV cache, 不是梯度是 attention 中间结果 → 这反过来推 HBM / CXL / 互联带宽.
  • Agent (2025+) 反推 RPC / tool/API 框架: MCP 协议让 LLM 配 SQL / fs / browser 成为可工程交互.

8.3 新承接: AI → 系统 / OS 的反向输入

  • GPU 集群调度: Borg/Omega/Kubernetes 都要支持 device plugin + topology-aware; Linux 内核对 GPU 的 cgroup 隔离还很弱 (2024+ 才有 NVIDIA MIG 与 DPDK 隔离成熟).
  • ML 监控与 trace: OpenTelemetry 增强 ML metrics; 单步训练几百次需 trace-blame 与 schema.
  • 推理直接接 OS syscall (e.g. AI tool use) → 安全沙箱新关注.

九、整个承接链图

物理 ─ 晶体管 ─ 数字 ─ ISA ─ microarch
                                  ↓
                            虚拟内存 + CPU cache
                                  ↓
            ┌───────── OS (Linux Kernel) ─────┐
            ↓             ↓                 ↓
        File System    网络 (TCP/IP)      进程 + 调度
            ↓             ↓                 ↓
        块设备 / SSD   HTTP / TLS          线程/协程
            ↓             ↓                 ↓
            DB          Web/REST        编译器 / 语言运行时
            ↓             ↓                 ↓
            OLAP / OLTP    LAMP/MEAN/MERN   JIT/HotSpot/V8
            ↓             ↓                 ↓
            分布式: KV / Queue / Consensus / K8s
            ↓             ↓                 ↓
───────────────────────────────────────────
                            ↓
                    AI: Training + Inference
                            ↓
                  GPU / NPU / TPU / 异构 XPU
                            ↓
                  HBM4 + NVLink + CXL 3.x
                            ↓
                  Agent + MCP + 推理 SDK
                            ↓
                  === 下一波新抽象 ===

每一节点都为前一节点顺承不变式; 跳一节点工程就断了.


十、五个"如果是新工程师, 你正在哪段承接"的练习

你做的事你主要在哪段承接
写 Web 后端 + DB RDSWeb 后端 / DB / OS (epoll+socket)
写 mobile app高级语言运行时 / Android/iOS SDK / NPU
写 CUDA kernel 训大模型物理层之上的 microarch / ISA (PTX) / AI 调度栈
写 Kubernetes operator分布式 / 系统 / OS
写 Linux 内核 driverOS / ISA / 微架构

→ 这套表帮你定位"读完哪几章本书就可以接入你工作".


十一、与第零部分数学的加乘

数学 (第零部分) 不在承接链有自己的节点 — 它横跨所有节点:

  • 第 1-2 物理层 - 信息论/熵与极限.
  • ISA 与微架构 - 不必数学.
  • OS / 调度 - 概率 + 排队 + 极限.
  • 网络 - 概率分布 + 信息论熵 / 信道容量.
  • DB - 关系代数 + 估计 + 一致性序.
  • 分布式 - 偏序 + 概率 + 信息论.
  • AI - 微积分 + 线代 + 概率 + 优化.

→ 这就是为什么数学放在第零部分: 每段承接都要用到, 不能单挑一节点上.


十二、结束 + 速查表

tip

一页唤回:

  • 承接链: 物理 → ISA → 微架构 → 内存 → OS → 进程 + 文件 + 网络 → 编译器 → DB → 分布式 → AI.
  • 每一段都需要上段提供契约; 没有它下段最后一段不动.
  • OS 给"进程 + 字节流文件 + socket"; 没它再好硬件也只是 DSP.
  • DB 提供并发 + 故障下状态一致; ACID = WAL + 2PL + MVCC 等.
  • 网络把孤立机器拥成集群; CAP / 共识 / 一致性序随之而来.
  • 分布式抽象集群为虚拟机; K8s + Raft + CRDT 这套套餐现成.
  • AI 反过来给承接链压力, 推 GPU/互联/HBM/CXL/MCP.
  • 数学横跨所有节点 = 第零部分必须放最前.

下一篇: 5. 全书地图: 13 部分与导论的交叉索引.