# 第01章：计算机系统漫游

[视频解说](https://www.bilibili.com/video/BV1RK4y1R7Kf/)

## **导读**

[CS:APP3e](http://csapp.cs.cmu.edu/) 是 Computer Systems: A Programmer’s Perspective的缩写，是卡内基梅隆大学（简称 CMU） 的ICS，也就是计算机导论课程的教材 ，已被全世界范围内的200多所大学用作教材，两位教授分别是 [Randal E. Bryant](https://en.wikipedia.org/wiki/Randal_Bryant) 和 [David R. O’Hallaron](https://www.cs.cmu.edu/~droh/)，该书的简体中文版名称是《深入理解计算机系統》，[豆瓣](https://book.douban.com/subject/26912767/)的评分高达9.8分，其实直译为《从程序员的角度来理解计算机系统》也许更加贴切，因为该书虽然涉及的范围很广但是讲解的内容其实并不算特别深入。

![](https://1380295634-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MV9vJFv4kmvRLgEog6g%2F-MVEig2rka3-_xDOdpIF%2F-MVEnth5MNG-UEpGGxBT%2F%E6%8D%95%E8%8E%B7.PNG?alt=media\&token=df4b53fa-e0c6-476f-aff5-462e27c20fac)

（如果你发现了书中的错误，请联系译者或者出版社，勘误列表：<http://www.yiligong.org/csapp3e/>）

看完这本书之后你会对计算机底层机制有一个概貌式的理解，实际上它糅合了计算机组成与体系结构，操作系统，链接与装载，程序优化，现代存储器，网络等基础知识，大部分时候，其中的每一章（甚至是一小节）都可以再次扩展成一本书来讲授，因此对于计算机初学者或者非CS专业出身的人来说，它会告诉你，要想成为一名优秀的程序员，你必须理解哪些计算机底层原理，或者说在你今后的自学过程中，应该重点学习哪些课程，换句话说，这是一本难得的可以当作计算机专业权威入门指南的书籍，或者说其中的内容可能会伴随你的整个程序员职业生涯。

虽然今天看起来，大部分的程序员在平时的工作中用到的计算机基础知识可能只占到了大学课程的10%，觉得以前学过的知识都没什么用，比如进程，缓存，DMA等，实际上这仅仅是一种错觉而已，要么是因为你每天都工作在很高的抽象层次上（大部分时候是在写应用程序），要么是因为你没有工作在特定的领域而已（比如设计编译器），像是fork，Copy-On-Write，I/O多路复用等等，实际上你几乎每天都在使用它们，理解了存储器的层次结构，知道了CPU，缓存，内存，硬盘，网络等不同层次之间速度的巨大差异，就能理解很多系统软件的设计的初衷，经常听程序员说一句很有意思的话 “不管了，反正这样改一改代码就正常了，我也不知道为什么”，今天我们已经被太多的抽象或者所谓的框架所包围，但是底层的工作机制依然是支撑它们的基础，最好还是能够 “知其所以然”，主动修炼内功，台湾的侯捷先生也说过类似的话 “勿以浮沙筑高台”，理解计算机系统底层的工作原理可以帮助我们更加正确，高效，安全地使用底层的资源，写出更加健壮的代码，以及比别人更加会调试代码！

![](https://1380295634-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MV9vJFv4kmvRLgEog6g%2F-MVAAUsY6QygZG4Psdjf%2F-MVAH63jY0qE82Jmd75y%2Fimage.png?alt=media\&token=82e25515-93fa-4f3d-a04b-03362fad9fac)

## **学习方式**

[CMU教授的视频教程 - Lecture1: Course Overview](https://www.bilibili.com/video/BV1a54y1k7YE?p=1)

**温馨提醒**：这是一门 “稍有深度” 的计算机系统导论课程，它和你平时阅读的那些小短文是不一样的，和培训班更是不一样的，你需要静下心来，认真思考，积极动手，如果你有毅力，建议你把自己的学习过程记录下来，将来有机会也可以分享出来，当做是给自己的礼物吧。

<div align="center"><img src="https://1380295634-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MV9vJFv4kmvRLgEog6g%2F-MZC_f_pUZpdji76lKth%2F-MZCaG3yatSqgHgG3ArH%2Fimage.png?alt=media&#x26;token=d09a6117-4992-44b9-aff1-ca8b7cffde3e" alt=""></div>

**学习建议**：学完第06章之后直接学习第09章（本质上它们属于同一主题），然后再学习第05章（因为里面的一部分优化内容与第06章介绍的CPU缓存有关联），书中讲解系统软件的部分不太完整，比如IPC等内容没有涉及，建议大家自己参考《UNIX环境高级编程》，或者《LINUX编程接口》，附录可以下载电子书。

**重点提示**：课程总共会有7个实验作业，是课程的灵魂和核心价值所在，强烈建议你后续亲自动手实验。

![](https://1380295634-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MV9vJFv4kmvRLgEog6g%2F-MZ6Euf3UIJLd28936fm%2F-MZ6F0r3EwklUMDl863h%2F2258-110520123R185.jpg?alt=media\&token=5d0d1350-08ed-44c6-9138-ff02b58b24d6)

## **作业解答**

（本章无作业：准备好实验环境即可）

## **延伸阅读**

* 为了帮助你更好理解计算机底层知识，初步了解抽象的概念，现代处理器，存储器，C系统编程等各种角度的知识，请参考本人拙作 《[计算机系统(底层)知识学习漫谈](https://www.bilibili.com/video/BV1no4y1R7M9/) 》
* Ian Wienand 撰写的 [Computer Science from the Bottom Up](https://www.bottomupcs.com/)，也是非常值得一看

## **友情赞助**

如果你发现这个网站对你的技术学习带来了些许的帮助，想请我喝杯咖啡，那么非常欢迎您打赏。

作者承诺：获得的所有赞助都会捐献给希望工程1+1，欢迎大家酌情打赏，感谢你对希望工程的支持 ！！！

**打赏方式如下&#x20;**<mark style="color:red;">**(请备注：CSAPP+希望工程)**</mark>，请允许我再次对您的爱心表达崇高的敬意！

<img src="https://1380295634-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MV9vJFv4kmvRLgEog6g%2Fuploads%2FEam4uiGcx7LOu7XERTeD%2F19f980cabd16208bea5cd859be78103.jpg?alt=media&#x26;token=b5645983-6816-4f37-86f7-793fc67ccb1a" alt="" data-size="original">                             ![](https://1380295634-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MV9vJFv4kmvRLgEog6g%2Fuploads%2FyjnGTQOw1XXHVuklpknJ%2F71190eea80fcd595fa83150197fd074.jpg?alt=media\&token=e9622a17-cae9-40b3-b31b-0a942266754b)

**提示：**&#x60A8;也可以自行向希望工程1+1捐款，捐款500元，可以为一名义务教育阶段学生提供一学期的学习生活补助；捐款1000元，可以为一名义务教育阶段学生提供一学年（两个学期）的学习生活补助。

<figure><img src="https://1380295634-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MV9vJFv4kmvRLgEog6g%2Fuploads%2FTAdbvs2PQQf98O33G7xj%2FScreenshot%202025-03-08%20093303.png?alt=media&#x26;token=2d373922-21d4-4425-aef7-9b20a80841bd" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1380295634-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MV9vJFv4kmvRLgEog6g%2Fuploads%2FLn3ctp86h5wf2ns81IR7%2Fimage.png?alt=media&#x26;token=cbced8f5-4cf3-446b-b832-c8758f88a316" alt=""><figcaption></figcaption></figure>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://fengmuzi2003.gitbook.io/csapp3e/master.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
