发表时间: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++编译链接时,可以去看看第七章链接,学习到存储的时候,可以去看看第六章存储器层次结构。 是的,每一章都是比较独立的,因此你完全可以跳着挑自己感兴趣的去学习希望大家都能去刷下这本书~
大家记得收藏的时候,帮学长@编程指北
点个赞呀!!只收藏不点赞的都是耍流氓,╭(╯^╰)╮
兴鼎健康平台下载v3.3.3 安卓官方版
42.12MB |生活服务
快付Pay下载v1.1.31 最新版
20.04MB |商务办公
花月鲜花app下载v2.2.1 安卓官方版
8.63MB |生活服务
一刻talksapp下载v9.5.8 安卓最新版
75.83MB |学习教育
滨海人才网招聘官方版下载v2.1.6 安卓最新版
66.78MB |生活服务
如祺出行企业版app下载v3.6.0 安卓最新版
65.87MB |生活服务
朗拓智慧外勤软件下载v9.4.0 安卓官方版
36.01MB |商务办公
格之格打印app官方正版(G&G Print)下载v1.1.25 安卓版
165.26MB |系统工具
绝望3黑暗地心中文版(hopeless3)下载v1.3.9 安卓汉化版
其它手游绝望3黑暗地球中文版(hopeless3)下载v1.3.9 安卓版
其它手游绳索英雄骷髅王手游下载v1.1.5 安卓版
其它手游战场模拟官方版下载v1.49.3 安卓最新版
其它手游僵尸战争战斗幸存者游戏下载v6.7 安卓版
其它手游糖果工厂宝宝巴士最新版下载v9.99.00.10 安卓版
其它手游糖果工厂游戏免费版下载v9.99.00.10 安卓手机版
其它手游制作谷游戏下载v1.3.15 安卓版
其它手游疯狂大酒店中文版下载v4.17.5.19 安卓最新版
其它手游