计算机底层原理:从代码到执行¶
📖 教程简介¶
本教程专为有C++/Python基础、对计算机底层原理感兴趣的初学者设计。通过理论+实践的方式,带你深入理解计算机系统的核心工作原理。
你能从本教程学到什么?¶
Text Only
┌─────────────────────────────────────────────────────────────────┐
│ 知识图谱全景 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 源代码 │
│ ↓ │
│ 编译系统 ───────────────────────────────────────────────┐ │
│ ├── 预处理 → 词法分析 → 语法分析 → 语义分析 │ │
│ ├── 中间代码生成 → 优化 │ │
│ └── 目标代码生成 → 汇编 → 链接 │ │
│ ↓ │ │
│ 可执行文件 ──────────────────────────────────────────────┘ │
│ ↓ │
│ 程序执行 ───────────────────────────────────────────────┐ │
│ ├── 加载 → 进程创建 → 内存分配 │ │
│ ├── 函数调用 → 栈帧管理 → 系统调用 │ │
│ └── 动态链接 → 共享库 │ │
│ ↓ │ │
│ 硬件执行 ───────────────────────────────────────────────┘ │
│ ├── CPU:取指 → 译码 → 执行 → 访存 → 写回 │ │
│ ├── 缓存层次:L1 → L2 → L3 → 内存 │ │
│ └── GPU:并行计算 → CUDA编程 → 内存模型 │ │
│ ↓ │
│ 操作系统服务 │
│ ├── 进程/线程管理 → 调度算法 → 同步机制 │ │
│ ├── 内存管理 → 虚拟内存 → 页表 → 内存分配 │ │
│ ├── 文件系统 → I/O操作 → 磁盘管理 │ │
│ └── 网络协议栈 → Socket编程 → 零拷贝 │ │
│ │
└─────────────────────────────────────────────────────────────────┘
为什么学习底层原理?¶
| 场景 | 问题 | 底层知识的作用 |
|---|---|---|
| 程序崩溃 | 段错误、内存泄漏 | 理解内存布局,快速定位问题 |
| 性能优化 | 程序运行慢 | 理解缓存、流水线,写出高效代码 |
| AI训练 | GPU利用率低 | 理解CUDA编程,优化并行计算 |
| 系统开发 | 需要开发底层组件 | 理解操作系统接口,编写系统程序 |
🎯 学习路径¶
本教程分为7个阶段,循序渐进地带你掌握计算机底层原理:
Text Only
阶段一:计算机系统概述(1周)
├── 01-计算机是如何工作的
│ ├── 冯·诺依曼架构
│ ├── 计算机五大部件
│ └── 系统层次结构
└── 02-从代码到执行的旅程
├── 编译型vs解释型语言
├── 完整编译流程
└── 各阶段详解
阶段二:编译原理基础(2周)
├── 01-编译器的工作原理
├── 02-预处理与词法分析
├── 03-语法分析与AST
├── 04-中间代码与优化
├── 05-目标代码生成
└── 06-链接器与可执行文件
阶段三:程序运行原理(1.5周)
├── 01-程序加载与进程创建
├── 02-内存布局详解
├── 03-函数调用与栈帧
├── 04-系统调用机制
└── 05-动态链接与共享库
阶段四:CPU与指令执行(1.5周)
├── 01-CPU架构基础
├── 02-指令集与汇编语言
└── 03-CPU架构对比与发展趋势(x86/ARM/RISC-V)
阶段五:GPU并行计算(2-3周)
├── 01-GPU架构概述
├── 02-GPU编程模型
├── 03-CUDA编程入门
├── 04-并行计算原理
├── 05-内存模型与数据传输
├── 06-CUDA高级优化(Tensor Core/Stream/GEMM)
└── 07-NCCL与多卡通信(DDP/FSDP/DeepSpeed/3D并行)
阶段六:操作系统交互(1.5周)
├── 01-操作系统核心概念
└── 02-eBPF与系统调用追踪(现代可观测性技术)
阶段七:实战项目(持续)
├── 01-手写一个简单的编译器
└── 02-实现一个内存分配器
📚 学习理念¶
学习原则¶
- 循序渐进:从宏观到微观,先建立全局认知
- 动手实践:亲自编译、调试、观察程序运行
- 可视化理解:用工具观察代码的每个阶段
- 联系实际:结合C++和Python,理解不同语言的底层实现
- 不畏惧困难:底层知识确实抽象,但坚持就能理解
三遍学习法¶
对于每个主题,建议学习三遍:
第一遍:理解概念 - 阅读理论解释 - 理解核心思想 - 看懂示例代码
第二遍:动手实验 - 亲自运行代码 - 使用工具观察 - 修改参数看效果
第三遍:深入思考 - 回答章节问题 - 尝试解释给他人 - 总结核心要点
🛠️ 环境准备¶
Windows用户¶
- 安装 MSYS2 或 WSL2
- 安装工具链:
Linux/Mac用户¶
Bash
# Ubuntu/Debian
sudo apt-get install gcc g++ gdb build-essential
# Mac
xcode-select --install
brew install gcc gdb
验证安装¶
📖 推荐资源¶
必读经典¶
- 《深入理解计算机系统》(CS:APP) - Bryant & O'Hallaron
- 涵盖编译、链接、加载、运行全流程
-
系统学习,必读
-
《程序员的自我修养》 - 俞甲子等
-
链接、装载与库,中文,深入浅出
-
《编译原理》(龙书) - Aho等
-
编译器设计的权威教材
-
《计算机体系结构:量化研究方法》 - Hennessy & Patterson
-
CPU架构的经典教材
-
《操作系统导论》 - Remzi & Andrea Arpaci-Dusseau
- 免费开源,实践导向
在线工具¶
- Compiler Explorer - 在线查看汇编代码
- Python Tutor - 可视化代码执行
- x86-64参考 - 指令集参考
🎯 学习里程碑¶
- 里程碑1:能解释从源代码到可执行文件的完整流程
- 里程碑2:能阅读简单的x86-64汇编代码
- 里程碑3:能用GDB调试程序,观察内存和寄存器
- 里程碑4:能解释函数调用的栈帧结构
- 里程碑5:能编写简单的CUDA程序
- 里程碑6:能理解操作系统如何管理进程和内存
- 里程碑7:能独立完成一个实战项目
📂 文件结构¶
Text Only
底层系统/
├── README.md # 本文件:总览和学习路线
├── 学习指南.md # 详细学习指南
│
├── 01-计算机系统概述/ # 阶段一
│ ├── 01-计算机是如何工作的.md
│ └── 02-从代码到执行的旅程.md
│
├── 02-编译原理基础/ # 阶段二
│ ├── 01-编译器的工作原理.md
│ ├── 02-预处理与词法分析.md
│ ├── 03-语法分析与AST.md
│ ├── 04-中间代码与优化.md
│ ├── 05-目标代码生成.md
│ └── 06-链接器与可执行文件.md
│
├── 03-程序运行原理/ # 阶段三
│ ├── 01-程序加载与进程创建.md
│ ├── 02-内存布局详解.md
│ ├── 03-函数调用与栈帧.md
│ ├── 04-系统调用机制.md
│ └── 05-动态链接与共享库.md
│
├── 04-CPU与指令执行/ # 阶段四
│ ├── 01-CPU架构基础.md
│ ├── 02-指令集与汇编语言.md
│ └── 03-CPU架构对比与发展趋势.md
│
├── 05-GPU并行计算/ # 阶段五
│ ├── 01-GPU架构概述.md
│ ├── 02-GPU编程模型.md
│ ├── 03-CUDA编程入门.md
│ ├── 04-并行计算原理.md
│ └── 05-内存模型与数据传输.md
│
├── 06-操作系统交互/ # 阶段六
│ ├── 01-操作系统核心概念.md
│ └── 02-eBPF与系统调用追踪.md
│
├── 07-实战项目/ # 阶段七
│ ├── 01-手写一个简单的编译器.md
│ └── 02-实现一个内存分配器.md
│
├── images/ # 图片资源
│ └── systems-learning-guide.svg
│
└── templates/ # 代码模板
├── c_examples/
└── python_examples/
🚀 开始学习¶
快速开始¶
学习建议¶
- 每日学习时间:1-2小时
- 学习周期:约9-10周完成基础学习
- 实践比例:理论学习:动手实践 = 1:1
💡 核心理念¶
"底层知识虽然抽象,但它是你成为优秀工程师的基石。每理解一个底层原理,你对计算机的认知就深入一层。"
底层学习是一个长期过程,不要急于求成。坚持练习,你会看到进步!
加油!💪
最后更新日期:2026-02-12 适用版本:底层系统教程 v2026
📝 版本历史¶
- v1.0 (2026-01-29) - 初始版本发布
- 完整的7阶段学习路径
- 前两阶段核心内容
- 学习指南和进度追踪模板