Skip to main content

Introduction

(一)课本介绍

CS:APP(Computer Systems: A Programmer's Perspective)》是一本计算机系统经典教材,由 CMU(卡耐基梅隆大学)教授 Randal E. Bryant 和 David R. O’Hallaron 编写,主要讲解 计算机系统的底层工作原理,让程序员更深入地理解计算机如何执行代码、管理内存、处理并发等。

CS:APPC 语言和 x86-64 汇编 为基础,涵盖:

  1. 计算机数据表示(如二进制、浮点数、补码)
  2. 机器级代码(汇编语言、寄存器、指令执行)
  3. 存储系统(缓存、虚拟内存、页表)
  4. 进程和并发(进程管理、信号、线程、同步)
  5. 系统级 I/O(文件系统、网络编程)
  6. 程序性能优化(流水线、缓存优化)
  7. 计算机安全(缓冲区溢出攻击、ROP)

(二)配套课程

同时,CMU(卡耐基梅隆大学)的 15213: Introduction to Computer Systems 课程 完全基于 CS:APP,是 CMU 计算机系的核心课程之一。这门课同时检具广度和深度,并以其巨难的 project 而出名。是程序员必学的课程之一。

课程特点

  • 目标是 让程序员理解计算机系统的底层原理,而不仅仅是写高层代码。
  • 采用 CS:APP 书籍作为理论教材
  • 课程内容与书籍基本一致,但更加注重实践。
  • 学生需要完成多个 实验(Labs),涉及汇编、缓存优化、内存管理、进程、并发等。

课程视频在这里:2015 CMU 15-213 CSAPP 深入理解计算机系统 课程视频_哔哩哔哩_bilibili

中文版翻译视频在这里:【CSAPP-深入理解计算机系统】1-1.计算机系统漫游_哔哩哔哩_bilibili



(三)配套 lab

CMU 15213 课程最核心的部分是 编程实验(Labs),这些实验不是书籍的一部分,而是 课程独有的动手实践任务

做完这些 Lab,你对书中的内容有很深的理解,并会拥有很强的系统层面编程能力,包括:

  • C 语言底层编程
  • Linux 进程管理、线程控制
  • 内存管理、并发控制

Lab 对应的官网网站在这里:CS:APP3e, Bryant and O'Hallaron

但是现在下载 Lab 需要 CMU 账号,因此可以再这里找到空的Lab 文件:csapp/labs at main · XieGuochao/csapp · GitHub

或者这个也行(Star 更多些): https://github.com/Exely/CSAPP-Labs

实验名称章节对应主要内容
Data Lab第 2 章(数据表示和处理)使用受限的 C 语言实现基本的位运算、补码运算和浮点数运算,理解计算机数据的底层表示。
Bomb Lab第 3 章(机器级代码)通过逆向工程和汇编分析,拆解一个 "binary bomb" 程序,找出正确的输入防止炸弹爆炸。锻炼调试能力。
Attack Lab第 3 章(机器级代码)、第 12 章(系统级安全)通过缓冲区溢出攻击修改二进制文件的行为,涉及代码注入和 ROP(返回导向编程)攻击。
Buffer Lab (IA32)第 3 章(机器级代码)、第 12 章(系统级安全)32 位 x86 版本的缓冲区溢出实验,已被 Attack Lab 取代。
Architecture Lab第 4 章(处理器体系结构)通过修改 Y86-64 处理器的流水线和指令优化数组拷贝函数,提高 CPE(每个元素的时钟周期数)。
Cache Lab第 6 章(存储器层次结构)实现一个缓存模拟器,并优化矩阵转置算法以最小化缓存未命中率。
Performance Lab第 5 章(优化程序性能)、第 6 章(存储器层次结构)通过优化核心算法(如卷积、矩阵转置)来提升性能,关注缓存利用率。已经被Cache Lab取代了
Shell Lab第 8 章(异常控制流)实现一个简单的 Unix shell,支持作业控制(如 fg, bg, jobs),理解进程控制和信号处理。
Malloc Lab第 9 章(虚拟内存)自己实现 mallocfreerealloc,学习动态内存管理策略,如分块、空闲列表等。
Proxy Lab第 11 章(网络编程和并发)实现一个并发缓存 Web 代理服务器,涉及字节序、缓存、进程控制、信号、文件 I/O、并发和同步。

(四)前置知识

由于本书难度较大,不适合新手马上开始学。你应该需要具备这些前置知识:

  • 使用 C 或 C++ 编程的经验,只会Python这类解释性语言是不够的
  • 知晓 Linux 的使用方法