# CMU CS15213: CSAPP

## 课程简介

- 所属大学：CMU
- 先修要求：CS61A, CS61B
- 编程语言：C
- 课程难度：🌟🌟🌟🌟🌟
- 预计学时：150 小时

CMU 大名鼎鼎的镇系神课，以其内容庞杂，Project 巨难而闻名遐迩。课程内容覆盖了汇编语言、体系结构、操作系统、编译链接、并行、网络等，作为系统入门课，兼具深度和广度，如果自学确实需要相当的毅力和代码功底。

这门课配合的教材由 CMU 计算机系主任 Bryant 教授执笔，也即所谓的 CSAPP。这也是我第一本认认真真一页一页读过去的计算机教材，虽然很难啃，但着实收获良多。

北大购买了这门课的版权并开设了 Introduction to Computer System 这门课，但其实 CSAPP 所有的课程资源和实验代码都能在它的官方主页上访问到（具体参见下方链接）。

这门课由于过于出名，全世界的码农争相学习，导致其 Project 的答案在网上几乎唾手可得。但如果你真的想锻炼自己的代码能力，希望你不要借鉴任何第三方代码。

认真学完这一门课，你对计算机系统的理解绝对会上升一个台阶。

## 课程资源

- 课程网站：<http://csapp.cs.cmu.edu/>
- 课程视频：<https://www.bilibili.com/video/BV1iW411d7hd>
- 课程教材：Computer Systems: A Programmer's Perspective, 3/E
- 课程作业：11 个 Project，[代码框架全部开源](http://csapp.cs.cmu.edu/3e/labs.html)

英语有困难的同学可以参考B站UP主[九曲阑干](https://space.bilibili.com/354767108/)对 CSAPP 的[中文讲解](https://www.bilibili.com/video/BV1cD4y1D7uR)（据说CMU的中国留学生也在CMU的课堂上看这个视频呢）。另外如果大家在看完 CSAPP 后对书中的第七章链接有一定的疑问，推荐阅读《程序员的自我修养》这本书，书的副标题是链接，装载与库。这本书能够帮助我们完善对程序链接的理解，相信你在看完这本书以后可以对程序的链接，ELF 文件，动态库都将有一个更加深入的理解。十分推荐在读完 CSAPP，对计算机系统有一定的了解以后作为补充资料来阅读。

有关 Lab 部分，同学们亦可参考 [Arthals](https://arthals.ink/about-me) 在北大计算机系统导论（ICS）课程中所做的详尽笔记：

- [Data Lab](https://arthals.ink/posts/experience/data-lab)
- [Bomb Lab](https://arthals.ink/posts/experience/bomb-lab)
- [Attack Lab](https://arthals.ink/posts/experience/attack-lab)
- [Arch Lab](https://arthals.ink/posts/experience/arch-lab)
- [Cache Lab](https://arthals.ink/posts/experience/cache-lab)
- [Tsh Lab](https://arthals.ink/posts/experience/tsh-lab)
- [Malloc Lab](https://arthals.ink/posts/experience/malloc-lab)
- [Proxy Lab](https://arthals.ink/posts/experience/proxy-lab)
