今天跟大家聊聊《深入理解计算系统》,这本书的英文全称叫:ComputerSystem:A programer perspective英文名翻译过来是「程序员视角下的计算机系统」,也被简称为 CSAPP。
可能大家以为这本书是讲操作系统的,我最开始也以为是这样。后面当我开始啃这本书的时候,发现我大错特错,它远不止我想的那样。这本书是从程序员的角度学习计算机系统是如何工作的,通过描述程序是如何映射到计算机系统上,程序是如何执行的,以及程序效率低下的原因,这样的方式可以让大家能更好的知道「程序与计算机系统」的关系。CSAPP 涵盖的内容非常多,有计算机组成 + 操作系统 + 汇编 + C语言 + Linux系统编程,涉猎的领域比较多,是一本综合性的书,更是一本程序员修炼内功的指引书。第一章「计算机系统漫游」内容,就很好的把程序与计算机系统有哪些关系都阐述清楚了,一下就知道了计算机系统的整个脉络,把一些零散的知识点都串了起来。在国内已经有很多高校开始采用这本书作为大一或大二的教材了,采用用这本书作为教材的学校,真心给你们点个赞。因为这本书其实可以给计算机专业的同学指明了一个很好的计算机基础学习方向,这样后续在单独学计算机组成、操作系统等这些独立的科学的时候,会更清楚知道它们在计算机里处在的位置和作用。信息表示(如何使用二进制表示整型、浮点数等);
C 和汇编语言的学习(通过汇编语言更深入地理解C语言是什么);
计算机体系结构(存储层次结构、局部性原理、处理器体系结构);
编译链接(C语言如何从文本变成可执行文件、静态链接、动态链接);
操作系统的使用(异常控制流、虚拟内存、多个系统调用介绍);
网络及并发编程(并发的基本概念、网络相关的系统调用的介绍)。
这本书的作者已经在开头跟大家说清楚了,只需要有 C 语言基础,即使你没学过汇编、计算机组成、操作系统也是可以的。前面我也提到 CSAPP 是一本程序员修炼内功的指引书,为什么说是指引书呢?CSAPP 是计算机原理 + 操作系统 + Linux 系统 + 汇编的一个大杂烩,它不是深入理解汇编、深入理解操作系统、深入理解计算机原理,所以它不会在某个知识点给你涉及很深,比如:虽然讲了虚拟内存,但是并没有说各种页面置换算法,这部分内容得我们去看操作系统相关的书;
虽然讲了 Cache,但是并没有说缓存一致性协议,这部分内容得我们去看计算机组成相关的书;
虽然说了链接,但是讲的内容比较表面,要想深入这块内容还是得看看《程序员的自我修养》这本书;
虽然说了 Linux 系统的 I/0 和网络编程,但是只是说了几个简单案例,要想深入理解这些内容还得看《APUE》和《UNP》这两本;
没有提及操作系统中的文件系统、调度算法等。
但是 CSAPP 会给我们建立一个计算机系统的体系,好让我们在后面对体系里的每一个支点往下深入。读了这本书,你后面在写代码的时候,会有不一样的视角,你会开始思考代码的底层原理,而不是把计算机系统当作一个黑盒子,跑完代码就完事的那种想法。当然,单纯看书会很乏味,我们可以结合视频一起学。这本书的视频课程是国外老师录制的,但是在 b 站已经有好人帮我们做了中文字幕,看了这视频,相当于在国外上了一门计算机课的感觉。B 站地址:https://www.bilibili.com/video/BV1iW411d7hd如果你是在校生,有了一定 C 语言基础后,非常建议你就开始看这本书,有精力也可以做做 CSAPP 的 lab。越早开始看,你的收益就越大,因为当计算机体系搭建起来后,你后面再深入每一个课程的时候,你会发现学起来会比较轻松些。对于已经工作了,但是计算机系统没有一个清晰认识的读者,也可以从这本书开始一点一点学起来,这本书是很厚,但是并不一定要把书完完看完,每个章节的知识点还是比较独立的,有关硬件的章节我们可以选择跳过。我这里挂个购买链接,对这本书有兴趣的同学,可以直接购买:最后,我也准备了 5 本 CSAP 送给评论区点赞前五位的读者。
想要赞高的小技巧,就是把评论的字数写多一点,后面进来的读者看到,肯定会自觉给你点赞的。来吧,大家来留言吧