返回资源列表

Dive into Systems

Dive into Systems(在线书)

从 C 语言与内存出发学习底层计算机系统。

打开官方课程
难度
见前置条件
形式
书籍
语言
英文
规模
18 个课节
内容费用
免费
动手
打开即可学习
  1. 选择学习环境

    按你的电脑系统准备;提示词在你自己的电脑上使用。

    在本机动手

    建议用 Docker 或虚拟机中的 Ubuntu:书中 x86-64 汇编、gdb、valgrind 在 Apple Silicon Mac 上无法直接对应。

    浏览器即可开始阅读;配套代码与实验按原站说明准备。

  2. 准备工具和账号

    标“选用”的可以跳过。

    运行费用:实践无额外费用,阅读公开页面无需额外费用;配套实践另计。

  3. 让 AI Agent 一次搭好课程

    复制开课提示词发给你常用的 AI Agent。它会下载允许保存的官方材料、建立课节目录并自检;需要账号、权限或费用时会先问你。

    开课提示词 · 只需用一次此提示词尚未实测验证
    请帮我把「Dive into Systems(在线书)」的学习环境一次准备好,让我之后只需要按顺序学习和做练习。
    开始前先问我:课程放在哪个目录(等我给出完整路径),确认我的操作系统和已有工具。确认前不要创建文件或安装软件。
    
    课程入口:https://diveintosystems.org/book/
    我的系统:macOS。如果实际不符,先调整方案。
    本次路线:macOS:在本机动手。只准备这条路线需要的工具;只读路线不安装运行环境、不配置模型密钥。
    练习:多数章节末有 Exercises 页(如 C1-C_intro/exercises.html),公开阅读,无提交与评分。可在本地编写并运行代码自查;书中示例需自己敲入或复制。
    课节(官方顺序):
    1. Introduction:https://diveintosystems.org/book/introduction.html
    2. By the C, the Beautiful C:https://diveintosystems.org/book/C1-C_intro/index.html
    3. A Deeper Dive Into C:https://diveintosystems.org/book/C2-C_depth/index.html
    4. C Debugging Tools:https://diveintosystems.org/book/C3-C_debug/index.html
    5. Binary and Data Representation:https://diveintosystems.org/book/C4-Binary/index.html
    6. What von Neumann Knew: Computer Architecture:https://diveintosystems.org/book/C5-Arch/index.html
    7. Under the C: Dive into Assembly:https://diveintosystems.org/book/C6-asm_intro/index.html
    8. 64-bit x86 Assembly:https://diveintosystems.org/book/C7-x86_64/index.html
    9. 32-bit x86 Assembly:https://diveintosystems.org/book/C8-IA32/index.html
    10. ARMv8 Assembly:https://diveintosystems.org/book/C9-ARM64/index.html
    11. Key Assembly Takeaways:https://diveintosystems.org/book/C10-asm_takeaways/index.html
    12. Storage and the Memory Hierarchy:https://diveintosystems.org/book/C11-MemHierarchy/index.html
    13. Code Optimization:https://diveintosystems.org/book/C12-CodeOpt/index.html
    14. The Operating System:https://diveintosystems.org/book/C13-OS/index.html
    15. Leveraging Shared Memory in the Multicore Era:https://diveintosystems.org/book/C14-SharedMemory/index.html
    16. Looking Ahead: Other Parallel Systems:https://diveintosystems.org/book/C15-Parallel/index.html
    17. Appendix 1: Chapter 1 for Java Programmers:https://diveintosystems.org/book/Appendix1/index.html
    18. Appendix 2: Using Unix:https://diveintosystems.org/book/Appendix2/index.html
    
    1. 环境
    - 推荐用 Docker Desktop 运行 ubuntu 容器(docker run -it -v "$PWD":/work ubuntu),在容器内 apt install build-essential gdb valgrind。
    - 只做前两章 C 语法时可用 xcode-select --install 提供的 clang,但 gdb/valgrind 与 x86 汇编章节需在 Linux 环境中完成。
    - 安装前先列出要装的软件和命令,等我同意;已装好的直接复用。
    2. 材料
    - 在线书全文:只记录链接 https://diveintosystems.org/book/(CC BY-NC-ND 4.0;在线阅读)
    3. 目录(最外层放在我确认的位置)
    dive-into-systems/
    ├── README.md        # 课程入口、课节清单、每次怎么开始
    ├── progress.md      # 每课:读讲义 / 做练习 / 记笔记
    ├── questions.md     # 待解决的问题
    ├── check-env.sh     # 环境自检,按 README 操作
    ├── data/            # 练习用到的样例数据
    └── lessons/         # 每课一个文件夹:notes.md + exercises/
        ├── 01-introduction/
        ├── 02-c-intro/
        ├── 03-c-depth/
        ├── 04-c-debug/
        ├── 05-binary/
        ├── 06-architecture/
        ├── 07-asm-intro/
        ├── 08-x86-64/
        ├── 09-ia32/
        ├── 10-arm64/
        ├── 11-asm-takeaways/
        ├── 12-memory-hierarchy/
        ├── 13-code-optimization/
        ├── 14-operating-system/
        ├── 15-shared-memory/
        ├── 16-parallel-systems/
        ├── 17-c-for-java-programmers/
        └── 18-using-unix/
    - 每课文件夹里建 notes.md(顶部写本课官方链接)和 exercises/;课节文件夹名称与上面一致。
    - 已有课程目录先检查并复用;不覆盖笔记、作业或 progress.md,不重置已有进度。尚未发布的课节保留入口并注明未发布,不能代写讲义或虚构练习。
    4. 自检
    - 创建 check-env.sh,逐项检查并记录“通过/未通过”:
    - 在课程根目录运行;每项检查独立执行,进入子目录不能影响下一项。使用当前系统的终端运行。
      - gcc --version  → 输出 gcc 版本
      - gdb --version  → 输出 GDB 版本
      - valgrind --version  → 输出 valgrind 版本
      - make --version  → 输出 GNU Make 版本
      - printf '#include <stdio.h>\nint main(){puts("ok");}\n' > /tmp/t.c && gcc /tmp/t.c -o /tmp/t && /tmp/t  → 输出 ok
    - 标注为人工检查、浏览器操作或 notebook 单元的项目,按相应方式操作,不直接粘贴进 shell;脚本只包含当前系统可执行的命令。
    - 仅在当前路线需要、对应材料已获准保存、工具已安装时运行该项;需要登录、付费或尚未开放的材料记为“需要我操作/未验证”,不能伪报通过。不执行会调用付费 API、提交作业或修改云服务的检查。
    - 运行一次,把结果给我看;未通过的项目说明原因和修复办法。
    5. 学习计划
    - README.md:课程入口、课节清单(带链接)、每次学习怎么开始(使用“每课提示词”)。
    - progress.md:每课三项勾选——读讲义、做练习、记笔记。
    6. 最后分三部分汇报:已完成、需要我自己操作的、尚未验证的。
    
    边界:
    - 需要管理员权限、会产生费用或需要填写密钥的操作,先告诉我原因,等我同意。密钥由我在本机配置,不发到聊天,不写进笔记或版本库;原项目需要 .env 时确认已被 Git 忽略。
    - 不替我写练习或作业答案,也不替我提交。我卡住时只给提示;我明确要求时才给解答。
    - 只下载许可允许个人保存的材料;其余只放链接。不把未运行的命令说成成功。
    如果你不能直接操作我的文件系统,请在确认目录后给出适用于我的系统、可直接执行的命令和需要保存的文件内容。
    搭好后的课程目录
    dive-into-systems/
    ├── README.md        # 课程入口、课节清单、每次怎么开始
    ├── progress.md      # 每课:读讲义 / 做练习 / 记笔记
    ├── questions.md     # 待解决的问题
    ├── check-env.sh     # 环境自检,按 README 操作
    ├── data/            # 练习用到的样例数据
    └── lessons/         # 每课一个文件夹:notes.md + exercises/
        ├── 01-introduction/
        ├── 02-c-intro/
        ├── 03-c-depth/
        ├── 04-c-debug/
        ├── 05-binary/
        ├── 06-architecture/
        ├── 07-asm-intro/
        ├── 08-x86-64/
        ├── 09-ia32/
        ├── 10-arm64/
        ├── 11-asm-takeaways/
        ├── 12-memory-hierarchy/
        ├── 13-code-optimization/
        ├── 14-operating-system/
        ├── 15-shared-memory/
        ├── 16-parallel-systems/
        ├── 17-c-for-java-programmers/
        └── 18-using-unix/
准备好了,开始学习

来源与使用须知

原始资源
Dive into Systems 收录版本:原站当前版本(2026-10-10 核对)
收录时间
本站首次收录 2026-10-10

版权与转载

  • CC BY-NC-ND 4.0:可原样转载,需署名;不得修改;仅限非商业用途。原站说明
  • 本站只提供原始链接和学习指南,不转载、不镜像课程材料;课程图像来自原站,版权与商标归原权利人;引用时请注明原作者与出处。