知识屋:更实用的电脑技术知识网站
所在位置:首页 > 文化

《深入理解计算机系统》这本书需要什么水平能看懂?

发表时间:2022-03-26来源:网络

这题我会!我们学校 System Programing 配套教材就是这本书!

而我自己在大二之前就看过了,可以说这本书重点章节我看了两三遍,实验也做了,还算有一点经验。

先说下看这本书之前最好具备哪些基础哈:

较好的 C 语言基础,至少对 指针、内存理解不错学习了解过数的表示、二进制、数字逻辑相关内容有一定的操作系统或者说计算机系统概念,比如内存、磁盘、虚拟内存等

如果你都还不太具备,那么我建议你先把我之前组织的《C语言训练营》里进阶部分内容学习完,再来看,这样效果会更好。


深入理解计算机这本书看了两遍以上,每次看都有新收获,我多次推荐给了小伙伴们,但是很多读者反映看不太懂,今天聊聊该如何阅读这本书吧:

首先是关于这本书

CSAPP是讲什么的?

其实它的简介和第一章《计算机系统漫游》已经写得非常清楚了:

从一个简单的hello world程序在计算机上的执行过程:

预处理->编译->汇编->链接->可执行文件->加载->数据->屏幕输出显示

这本书的开篇也说了:信息 = 位+上下文:

这次我在我的知识星球里也组织了「CSAPP共读」活动,并且给大家分享了以下该如何去看这本书,这里也给各位知乎的小伙伴分享下

大二时,在上一些无聊的课时,我总把这本书带着,每节课可能会翻个几页,那时候看到里面的汇编、内存管理、存储器层次我是真的云里雾里,因为还没学操作系统,C 语言也学得很差。

所以断断续续的看了几章,基本没怎么看懂。

所以这次我要求大家都有一定的基础再来看,否则的话,可能比较难以看懂。

那么大概需要具备哪些基础呢?

较好的 C 语言基础,至少对 指针、内存理解不错学习了解过数的表示、二进制、数字逻辑相关内容有一定的操作系统或者说计算机系统概念,比如内存、磁盘、虚拟内存等

如果你都还不太具备,那么我建议你先把我之前组织的《C语言训练营》里进阶部分内容学习完,再来看,这样效果会更好。

哪些同学最适合现在看这本书?

学了操作系统、计组等课程,这本书能帮你串联起来秋招复习,跳着挑一些章节看,这本书里虚拟内存、存储器层次都很不错大二以上(大一基础好的也可以)

如果你看过以下书籍,那么看 csapp 的难度会低很多(画外音:最好先去看下)

王爽的《汇编语言》《C和指针》《现代操作系统》虚拟内存、进程线程、磁盘等章节

配套资源:

强烈推荐:南京大学袁春风老师的 计算机系统基础课(一、二、三、四),这个是视频课程

链接:

同时也可以去B站搜索 CMU 大学老师讲的,不过似乎是机翻,大家自己去B站搜索即可

南大袁春风老师的课程基本可以看做是以这不本书为蓝本的,强烈推荐大家去看下:

《计算机系统基础(一)程序的表示、转换与链接》

《计算机系统基础(二)程序的执行和存储访问》

《计算机系统基础(三)异常、中断和输入/输出》

看视频和看书一定要结合着来,最近整理了一份「深入理解计算机系统从零进阶」的一整套书籍,这是我看完的,包括csapp、汇编语言、南大计算机基础课件等

对于想深入理解计算机的同学帮助非常大,且十分系统,最难得的是还是全彩和带书签的,真的很棒:

需要的同学可以在这里下载:深入理解计算机系统进阶之路书单(含下载方式)

也推荐大家去做下南大的实验,真的很棒了,和美帝高校接轨:

这门课的labs都可以在这里找到:

网上也有非常多的题解,可以说这几个lab是这本书的精华,如果只看书,大概能学到四成,看书+ 做lab 才可能学到七八成。

所以大家一定要去完成lab,而且这些lab都是非常有趣的,比如拆炸弹、缓冲区溢出攻击、代理服务器等。

第二章是关于二进制的,这部分内容会在数字逻辑这类课里学到,都比较熟悉,但是csapp里确实我见过关于进制讲得最透彻的书,不像其它书都是一句话让你背取反+1。

这章的里有不少关于二进制的技巧,做一遍作业对于二进制的各种操作绝对会比较熟悉,最经典的就是不用临时变量交换两个数。链接这部分内容篇幅不多,原理上讲的很简洁,文件节和符号解析表只是给出了几个图示,并没有过多的关注其实现,链接相关可以看看《程序员自我修养》程序的优化这一块可以看下,但是似乎作用不大 虚拟内存从内存管理和虚拟内存实现上讲的 程序的机器级表示这一章学过王爽《汇编语言》,所以看得还算比较快比较有特色的是讲解了 C 语言中的一些语法,类似 for、switch、函数调用在汇编层是如何做的。 看书容易被劝退的同学可以看下视频:

有B站的up主做了中英字幕:

也有人做了讲解视频:

还有国人做了讲解视频:

其次聊聊自己看这本书的历程

这本书是在大一逛知乎听大佬们说起的,大一暑假有大四学长学姐在学校广场摆摊卖书,我也买了些,其中有一本就是被称为计算机专业神书的 CSAPP。

大二时,在上一些无聊的课时,我总把这本书带着,每节课可能会翻个几页,那时候看到里面的汇编、内存管理、存储器层次我是真的云里雾里,因为还没学操作系统,C 语言也学得很差。

所以断断续续的看了几章,说不上学到了什么,但让我对这种枯燥的基础知识第一次产生了兴趣,有一种想彻底搞懂它们的想法。

后来在知乎大佬的指引下,为了看懂这本书,去看了王爽那本《汇编语言》,在下图。

重学了 C 语言(主要是指针和内存),由于已经学了汇编,指针对我再也不是问题了,同时看完了《C和指针》、《C专家编程》、《C陷阱与缺陷》,对 C 语言使用得也愈加的熟练。

(csapp放在最上面了,不过这些书在我毕业的时候大部分都卖了,不好带走)

同时,在大二、大三上陆续学习了操作系统、计算机组成原理、数字逻辑等,其实熟悉的同学就知道,这已经涵盖了csapp书里的绝大部分内容。

值得一提的是,大三我们学院有门 System Programing 的课,教材就是使用的 CSAPP,因此我之前大二草草看完的书,得以再次翻开,这一次我把附带的是个实验也挨着挨着做了,收获良多,有位运算各种奇技淫巧,有 Bomb lab 刺激的打怪通关、也知道了buffer overflow attack.... 还有实现基本的内存管理等等。

印象最深的便是做 bomb lab,一个个 phase 的通过真的很让人兴奋,我几乎是熬夜连着把这几个 phase 过掉的,当然头发也没少掉。

当时还在简书写了个万字长文记录:


CSAPP--配套实验(Bomblab)记录

其它个人觉得比较有意思的lab有:

Malloc Lab:实现一个类似C语言的malloc函数,主要学习内存管理

Proxy Lab:http server,学习linux下网络编程和多线程编程,锁、条件变量等

Attack Lab:缓存区溢出攻击,主要学习Linux下函数调用过程和堆栈等

最后就是如何去阅读呢?

读一本书,尤其是专业技术类,决定你能否看下去的一个重要因素就是你是否具备前置知识。

总不能高中数学都没学就想去看高数吧。

那这本书的前置知识,我认为你需要具备一些 C 语言知识、以及系统知识,比如 Unix、Linux基本操作,有 C 语言背景最好,如果完全没学过 C 的话,那么前几章看起来会比较吃力。

这本书有我个人认为有两种打开方式:

第一种是学习过操作系统、计算机组成等,所以看起来应该不存在很大的难度,从头到尾一章章啃,看完一章一定要做一些课后的作业和配套的lab,lab可以算这本书的精华之一了。 第二种是按需学习,之前说过,这本书涵盖了计算机学科主要的知识,将整个线串起来了,所以在这里面你能找到链接&加载,也能找到内存管理、还有语言的机器级表示汇编等,所以当你学习内存管理时你就去看看第九章虚拟内纯,学到C&C++编译链接时,可以去看看第七章链接,学习到存储的时候,可以去看看第六章存储器层次结构。 是的,每一章都是比较独立的,因此你完全可以跳着挑自己感兴趣的去学习

希望大家都能去刷下这本书~

大家记得收藏的时候,帮学长@编程指北

点个赞呀!!只收藏不点赞的都是耍流氓,╭(╯^╰)╮

收藏

热门推荐

  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜