CSAPP 笔记 (1)

听说想写代码挣钱的话,买书的钱加起来就是第一个月工资。终于没有嫌书贵,下手买了《深入理解计算机系统(第3版)》。为了保证学习效果,我自己在这里开一个小栏目做重点记录和习题解答。我对 C 语言相对熟练,于是决定啃一下这块硬骨头,希望能有毅力一直写下去。

先把 K&R 书中的 hello.c 拿出来作为开篇献祭。

1
2
3
4
5
#include <stdio.h>
int main() {
printf("hello, world\n");
return 0;
}

第1章 计算机系统漫游

本章涉及的知识主要是计算机体系和架构方面的基础介绍。首先抛出的观点是信息就是位+上下文。刚刚那个 hello.c 程序对计算机而言只是一个文本流,其中每个字符都对应了一个整数(ASCII),这些整数又分别对应一个8位二进制表达。于是这些二进制数拼在一起成为了一个由0和1组成的串。这就是。而究竟如何去解释它们,则需要我们去指定。当我们以C语言源代码去解读时,它们就被还原为一个个字符,重新组成上面的代码,此为上下文。随后的一些内容讲述了这段程序在计算机中是如何在硬件和软件中变为可执行程序并被执行的。

Amdahl 定律

这一定律在本书第3版中被提前到这里,我认为这是本章阅读下来相对收获比较大的内容。设一个任务在整个程序中消耗的时间占比为 $\alpha$,而它的速度变成了原来的 $k$ 倍。那么加速比 $S$ 的表达为:
$$
S=\frac{1}{(1-\alpha) + \alpha/k}
$$
若 $k$ 趋向于无穷大,那么整个系统性能的提升将被限制在 $1/(1-\alpha)$ 。这是系统性能提升的极限。这一想法也可以用于 GPA 的核算(例如某个课程分数提高多少,对总体的 GPA 有何影响)。其中心思想是,尽管你可能对程序的一部分做出了重大的改进,但是反映在整个程序上,它的效果可能并没有那么明显。

其他

本书的 主页 上有不少其他的阅读材料,还有一些 lab 可以做练习,相信会对计算机的理解更进一步。

Jeldor wechat
欢迎关注我和天一维护的公众号:两个少年的奇幻漂流!