《深入理解计算机系统》第2版 - CS:APP

元信息

  • 书名: Computer Systems: A Programmer’s Perspective (2nd Edition)
  • 作者: Randal E. Bryant, David R. O’Hallaron
  • 来源: 田浩然上传的资料/电子书
  • 原始文件: [深入理解计算机系统(第2版)].(Computer.Systems:A.Programmer's.Perspective).Bryant&O'Hallaron.文字版.pdf
  • 文件大小: 6.75 MB
  • 页数: 1078 页
  • PDF类型: mixed(混合类型,有内嵌文本)
  • 处理日期: 2026-09-02
  • 处理方法: pdf-inspector 文本提取
  • 状态: done

书籍概要

《深入理解计算机系统》(CS:APP)是卡内基梅隆大学经典课程15-213的教材,由Bryant和O’Hallaron编写。第2版于2010年出版,是计算机科学领域最具影响力的教材之一。

本书从程序员视角出发,系统讲解计算机系统的工作原理,帮助读者建立对计算机系统的整体理解。核心理念是:理解底层原理有助于写出更高效、更可靠的程序。


全书结构

本书分为三大部分:

Part I: Program Structure and Execution(程序结构与执行)

  • 第2章: Representing and Manipulating Information(信息与数据表示)
    • 二进制、十六进制、字节序
    • 整数与浮点数表示
    • 位级操作与逻辑运算
  • 第3章: Machine-Level Representation of Programs(机器级表示)
    • IA-32与x86-64汇编语言
    • 过程调用与栈帧
    • 链接与加载
  • 第4章: Processor Architecture(处理器架构)
    • Y86简化指令集
    • 组合逻辑与时序逻辑
    • 单周期与流水线处理器
  • 第5章: Optimizing Program Performance(性能优化)
    • 代码优化策略
    • 并行性与向量化

Part II: Running Programs on a System(系统运行)

  • 第6章: The Memory Hierarchy(存储层次)
    • Cache设计原理
    • 内存映射与虚拟内存
    • 存储层次的性能权衡
  • 第7章: Linking(链接)
    • 静态链接与动态链接
    • 共享库
  • 第8章: Exceptional Control Flow(异常控制流)
    • 进程与线程
    • 信号处理
    • 异步I/O

Part III: Interaction and Communication(交互与通信)

  • 第9章: System-Level I/O(系统级I/O)
    • Unix文件I/O
    • 文件共享与并发
  • 第10章: Network Programming(网络编程)
    • Socket编程
    • TCP/UDP
  • 第11章: Concurrent Programming(并发编程)
    • 线程同步
    • 锁与条件变量
    • 并发陷阱

核心概念

1. 信息即比特+上下文

  • 所有数据在计算机内部都表示为比特序列
  • 相同的比特序列可以被解释为整数、浮点数、字符串或机器指令
  • 理解这种”解释”的差异是编程的关键

2. 程序翻译链

源代码 → 预处理器 → 编译器 → 汇编器 → 链接器 → 可执行文件
  • 每个阶段都有特定的职责和转换规则
  • 理解翻译过程有助于调试和优化

3. 存储层次

  • 寄存器 > Cache (L1/L2/L3) > 主存 > 磁盘
  • 速度越快,容量越小,成本越高
  • 好的程序应充分利用层次结构

4. 抽象的重要性

  • 操作系统提供进程、文件、套接字等抽象
  • 硬件提供指令集架构抽象
  • 抽象使得程序可移植、可维护

5. 并发与并行

  • 并发:多个任务同时执行(逻辑上)
  • 并行:多个任务同时执行(物理上)
  • 正确管理并发是编程的高级技能

重要主题

主题关键要点
数据表示补码、IEEE 754浮点、字节序
汇编语言栈帧、调用约定、寄存器命名
缓存直接映射、组相联、全相联
虚拟内存地址翻译、TLB、页面替换
链接符号解析、重定位、共享库
进程fork/exec/wait、地址空间
信号异步通知、信号处理函数
I/Oread/write/mmap、缓冲I/O
网络Socket API、TCP三次握手
线程创建/.join、互斥锁、条件变量

实践价值

本书配有大量实验室作业(labs),包括:

  • Bomb Lab: 逆向工程密码炸弹
  • Attack Lab: buffer overflow攻击
  • Cache Lab: 实现和优化缓存模拟器
  • Shell Lab: 实现Unix shell
  • Malloc Lab: 实现动态内存分配器
  • Proxy Lab: 实现并发Web代理

这些实验帮助学生将理论应用于实践。


与其他知识的关联

  • [[SICP-计算机程序的构造和解释]] - SICP侧重抽象,CS:APP侧重底层
  • [[The_C++_Programming_Language_4th_Edition]] - C++语言规范,CS:APP讲底层实现
  • [[现代体系结构的优化编译器]] - 编译器优化,CS:APP讲系统性能
  • [[数据结构与算法]]-Rust实现.md - 算法层面,CS:APP讲系统层面

学习建议

  1. 配合课程: 网上有CMU 15-213课程视频,与本书配套
  2. 动手实验: 务必完成书中的lab作业
  3. 阅读汇编: 学会阅读和理解x86-64汇编
  4. 调试工具: 熟练使用gdb、valgrind、perf等工具
  5. 反复阅读: 这是值得反复研读的经典教材

笔记说明

本笔记基于pdf-inspector文本提取结果整理,文件为mixed类型(混合了文本和扫描页),已提取全部内嵌文本。