缘由
两个月前的一天深夜,熟睡的我被呼啦啦的一声惊醒,正要往床底下钻,透过皎洁月光看见了散落一地的书,原来是书架塌了。 作为只能租住小房间的北漂儿,当初只买了个便宜的塑料书架放书,原本就习惯于等亚马逊活动囤书,再加上单位时不时发放的当当购书卡,每次三本两本的,不知不觉就买书如山倒了。知乎、豆瓣里被人推荐过的、说得上名字的CS经典书籍基本齐全了。 惊魂未定的我看着满地的书,莫名地有些生气,这些书大多要么只是偶尔需要时翻两页,要么就是刚买来兴致勃勃地看了目录和第一章就束之高阁了,其中甚至有几本还没拆塑封。 于是就跟自己打了个赌:认真读完一本大部头。如果失败了就清空书架把书卖掉,从此不买纸质书;如果成功了,就奖励自己一个礼物,同时再接再厉持续阅读。 权衡之下选择这本《深入理解计算机系统》作为目标,一是因为它是CS专业的第一门基础课,有益于后续的知识衔接,比如计算机网络、操作系统等;其二难度不大,不管白天工作累不累,都可以坚持下来每天翻看几页;第三是篇幅较多,一鼓作气完成之后,面对其他的大部头可以”一览众山小“,不会被篇幅吓倒。 计划:每周6天,每晚8点开始,1.5-2小时,大约三到四个月读完。 方法:不拘泥于细节,也不强求完成所有习题,以理解为主地阅读。 实际完成时间:2019/05/08——2019/07/04 笔记记录:不罗列知识点,合上书写出收获和感想即可。梗概
按章节简述一下学习心得,有兴趣读或者正在读本书的可以作为参考,如果近期不打算读CSAPP可以跳过这部分。 本书第1章为全书概览,对计算机系统有个整体性的认知,后面会分章节详细讲解,所以第一章不必太抠细节。其余章节在内容上分为三个部分,分别从硬件层、操作系统和应用程序三个层面来讲述计算机系统。硬件层
第2章讲述的是无符号数、有符号数以及浮点数的表示和运算。无符号数的表示和运算都很符合直观;有符号数(补码)的特殊之处在于其最高位的权值是(-2^(x-1)),各种不符合直观的运算结果和类型转换,根源其实都在于这个权值,抓住这一点基本就可以理解各种看似奇怪的结果了。 第3章讲机器指令,对于一个非CS专业出身、平日只在框架内写业务代码的人来说,之前每次读本书都是被这一章的汇编代码劝退的。但静下心重新看,才发现机器/汇编指令是最简单直观的代码,一个指令就是一个最简单的操作步骤,没有什么抽象和复杂的逻辑,画出流程图,一切都明了。 第4章难度略高,书中分析了处理器的指令集体系结构和基本工作流程,然后自己实现了一个简易版的处理器!本章卡了好些天,读不懂那个简易处理器的实现过程。后来跳着读完本章,先理解了处理器应该是什么样的,再回头来看处理器的设计和实现过程,搞清楚每一步的目标和大致方案,就跨过去了。 第5章在理解了前一章讲述的处理器的工作流程之后,从处理器和编译器层面提出了一些可以提升程序性能的代码编写方法。由于目前我们编写的代码距离底层越来越远,本章讲述的方法并不一定适用,理解即可。第6章介绍存储器层次结构,主要讲了高速缓存的工作原理,以及如何编写高速缓存友好的代码,同第5章一样,可能不适用于一些高级语言,理解为主。