跳转至

计算机底层原理:从代码到执行


📖 教程简介

本教程专为有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-实现一个内存分配器

📚 学习理念

学习原则

  1. 循序渐进:从宏观到微观,先建立全局认知
  2. 动手实践:亲自编译、调试、观察程序运行
  3. 可视化理解:用工具观察代码的每个阶段
  4. 联系实际:结合C++和Python,理解不同语言的底层实现
  5. 不畏惧困难:底层知识确实抽象,但坚持就能理解

三遍学习法

对于每个主题,建议学习三遍:

第一遍:理解概念 - 阅读理论解释 - 理解核心思想 - 看懂示例代码

第二遍:动手实验 - 亲自运行代码 - 使用工具观察 - 修改参数看效果

第三遍:深入思考 - 回答章节问题 - 尝试解释给他人 - 总结核心要点


🛠️ 环境准备

Windows用户

  1. 安装 MSYS2 或 WSL2
  2. 安装工具链:
    Bash
    pacman -S mingw-w64-x86_64-gcc
    pacman -S mingw-w64-x86_64-gdb
    pacman -S mingw-w64-x86_64-binutils
    

Linux/Mac用户

Bash
# Ubuntu/Debian
sudo apt-get install gcc g++ gdb build-essential

# Mac
xcode-select --install
brew install gcc gdb

验证安装

Bash
gcc --version
gdb --version
python3 --version

📖 推荐资源

必读经典

  1. 《深入理解计算机系统》(CS:APP) - Bryant & O'Hallaron
  2. 涵盖编译、链接、加载、运行全流程
  3. 系统学习,必读

  4. 《程序员的自我修养》 - 俞甲子等

  5. 链接、装载与库,中文,深入浅出

  6. 《编译原理》(龙书) - Aho等

  7. 编译器设计的权威教材

  8. 《计算机体系结构:量化研究方法》 - Hennessy & Patterson

  9. CPU架构的经典教材

  10. 《操作系统导论》 - Remzi & Andrea Arpaci-Dusseau

  11. 免费开源,实践导向

在线工具


🎯 学习里程碑

  • 里程碑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. 阅读学习指南.md - 了解学习方法
  2. 阶段一开始 - 建立全局认知
  3. 跟随教程动手实验 - 每章都有实践环节
  4. 记录学习进度 - 建议用笔记记录每章的学习心得

学习建议

  • 每日学习时间:1-2小时
  • 学习周期:约9-10周完成基础学习
  • 实践比例:理论学习:动手实践 = 1:1

💡 核心理念

"底层知识虽然抽象,但它是你成为优秀工程师的基石。每理解一个底层原理,你对计算机的认知就深入一层。"

底层学习是一个长期过程,不要急于求成。坚持练习,你会看到进步!

加油!💪


最后更新日期:2026-02-12 适用版本:底层系统教程 v2026


📝 版本历史

  • v1.0 (2026-01-29) - 初始版本发布
  • 完整的7阶段学习路径
  • 前两阶段核心内容
  • 学习指南和进度追踪模板