《深入理解计算机系统》第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/O | read/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讲系统层面
学习建议
- 配合课程: 网上有CMU 15-213课程视频,与本书配套
- 动手实验: 务必完成书中的lab作业
- 阅读汇编: 学会阅读和理解x86-64汇编
- 调试工具: 熟练使用gdb、valgrind、perf等工具
- 反复阅读: 这是值得反复研读的经典教材
笔记说明
本笔记基于pdf-inspector文本提取结果整理,文件为mixed类型(混合了文本和扫描页),已提取全部内嵌文本。