陆陆续续花了2个月的时间终于把这个久负盛名的CSAPP看完了,不愧为一本名副其实的经典书籍。有种相见恨晚的感觉,以至于从不会写书评的我也情不自禁的想说点什么。 

   这本书的书名叫”Computer Systems: A Programmer's Perspective",从程序员的角度去理解计算机系统,也暗示了书中讲的任何内容都会和程序员所做的事情联系起来。就这点看来,书的中文名取的不好。 

   第一章是引子,通过任何编程书里都作为第一个程序的”hello world“来分析了整个软件硬件系统。不错,本书要讲的都在第一章里涵盖了。高级语言通过编译链接后在计算机系统里是如何表示和执行的?这是个引子,同时也是summary。看完这章马上提起了我的兴趣,以前学过的课程和看过的书,要么是从讲某一种高级语言,要么是完全不涉及软件的计算机组成原理。至于怎么将两者联系起来,恐怕大部分程序员都没有这样的概念。 

   第二章回顾了整数浮点数的二进制表示,以前学过,但是恐怕很多也忘得差不多了。这章感觉最深的是无符号和有符号数,在代码中尤其要注意两种数据计算时上溢下溢的问题。 

   第三章主要是讲汇编语言,以前也学过这个课程,记得当年的老师是某某博士,十句话中至少有九句”那么也就是说“,以至于大家都不听课,唉,这样的老师真是误人子弟啊!但是当今大学里这样的只会搞科研而不会教书的老师太多了。这章的独特之处是把高级语言写的程序和对应的汇编代码联系起来了,对照着理解,方明白机器是如何实现语言级别的设计。 

   第四章属于体系结构的知识,讲了CPU的指令集,流水线等等。甚至还重点描述了HCL做硬件设计,算是很深入的一个主题了。 

   第五章的名字特别吸引人---“优化程序性能”,在程序员的日常开发中,设计和优化部分可能占的比例最大。一个模块一旦设计好了之后,写代码是很快的。功能实现之后恐怕就一头栽进了性能优化方面的工作了。这章针对一个简单例子竟然从五六个方面进行了优化,尤其这里把指令流水线也考虑进去了。恐怕对我等普通程序员来说也是从来没有想到过的。 

   第六章讲存储器的层次结构,这部分是程序员直接能感受到的。整天沉溺于分配内存释放内存之中的我们了解最多的是内存和硬盘,而这章中着重讲的是两级高速缓存的原理以及告诉缓存级别的代码优化。如果配以valgrind的machgrind来分析程序的话能加深对这部分的理解。 

   第七章讲链接,这个主题也是编程类书籍少有涉及的,如果内容再多点就好了。《Linkers and Loaders》和《程序员的自我修养》这两本书应该很值得参考。 

   接下来第八章讲异常控制流,不过这里的控制流不仅仅是程序中的exception。从底层硬件到高层语言,每一级别都有异常,如何处理这些异常,也是程序员需要时时注意的问题。 

   第九章分析了测量程序执行时间,这个分析程序瓶颈时经常需要做的事情。不过这章更深层的分析了如何能够得到准确的执行时间,尽管操作系统提供了获取时间的借口,但是我们并没有考虑过其准确度和精确度。 

   第十章恐怕是喜欢的人最多,虚拟存储器,与程序运行直接相关的一个概念。这部分的学习对于每个程序员来说是必须的,否则的话总会迷茫于sizeof数组如何得到数组长度的疑问中。 

   后面三章讲了系统级I/O,网络编程和并发编程。这部分的内容与硬件关系少一些了,主要是进程和线程级的。内容不多,但是每一部分都值得深入学习。 

   本书的一个目的是要把阅读者带入权威程序员行列,巧合的是我也是在阅读这本书期间升职到senior(看来真是要感谢作者)。当然和权威还差的远,但是看完这本书能让你理解整个计算机系统。以后的编程中你的思路更广,考虑的问题也会更全面。 

   除了书中介绍的这些内容,我想还能将计算机系统中的一些设计思想放到面向对象的设计思想中。像存储器的层次结构和虚存何尝不代表了封装的思想呢?是啊,面向对象的思想本身就是无处不在的。 

   中文版翻译的整体还行吧,但是还是少不了很多僵硬的英语化的句子。另外,发现了19个不知是印刷错误还是翻译错误,却不知道如何向译者反应。

CSAPP的更多相关文章

  1. 在Ubuntu下使用 csapp.h 和 csapp.c

    它山之石可以攻玉. 对于<深入理解计算机系统>这本神人写就的神书, 我等凡人就不评论什么啦. 这本书的 第二,三 部分, 真的真的对我理解操作系统有很大的帮助. (当然, 如果你不看第一部 ...

  2. CSAPP读书随笔之一:为什么汇编器会将call指令中的引用的初始值设置为-4

    CSAPP,即<深入理解计算机系统:程序员视角>第三版,是一本好书,但读起来确需要具备相当的基本功.而且,有的表述(中译文)还不太直白. 比如,第463页提到,(对于32位系统)为什么汇编 ...

  3. 深入理解计算机中的 csapp.h和csapp.c

    csapp.h其实就是一堆头文件的打包,在http://csapp.cs.cmu.edu/public/code.html 这里可以下载.这是<深入理解计算机系统>配套网站. 在头文件的# ...

  4. CSAPP(前言)

    很久之前就听过有过CSAPP这本书的传闻了,今天终于决定上手这本神作:既然是神作,就要仔细拜读一下,今天看了一下前言部分还真的令人耳目一新,单单是前言部分就让我学习到几个新的知识点: 1.c和Java ...

  5. CSAPP缓冲区溢出攻击实验(上)

    CSAPP缓冲区溢出攻击实验(上) 下载实验工具.最新的讲义在这. 网上能找到的实验材料有些旧了,有的地方跟最新的handout对不上.只是没有关系,大体上仅仅是程序名(sendstring)或者參数 ...

  6. 读完了csapp(中文名:深入理解计算机系统)

    上个星期最终把csapp看完了. 我买的是中文版的,由于除了貌似评价不错以外,由于涉及到些自己不了解的底层东西,怕是看英文会云里雾里.如今看来,大概不能算是个长处,可是的确可以加快我的看书速度,否则一 ...

  7. CSAPP Lab2: Binary Bomb

    著名的CSAPP实验:二进制炸弹 就是通过gdb和反汇编猜测程序意图,共有6关和一个隐藏关卡 只有输入正确的字符串才能过关,否则会程序会bomb终止运行 隐藏关卡需要输入特定字符串方会开启 实验材料下 ...

  8. CSAPP LAB: Buffer Overflow

    这是CSAPP官网上的著名实验,通过注入汇编代码实现堆栈溢出攻击.实验材料可到我的github仓库 https://github.com/Cheukyin/CSAPP-LAB/ 选择buffer-ov ...

  9. 链接器(linker)的作用——CSAPP第7章读书笔记

    首先说说我为什么要去读这一章.这个学期开OS的课,在Morden Operating System上读到和Process有关的内容时看到这样一句话:“Process is fundamentally ...

  10. CSAPP:cachelab(1)

    本项目大体上就是要求用C\C++来模拟cpu对cache的访问,然后统计hits.misses和eviction的次数.其实并没有想象中的那么难,感觉完全可以当成一道acm里面的大模拟题..下面就对这 ...

随机推荐

  1. 手摸手。完成一个H5 抽奖功能

    要完成一个这样的抽奖功能 构思 奖励物品是通过接口获取的(img) 奖励结果是通过接口获取的(id) 抽奖的动画需要由慢到快再到慢 抽奖转动时间不能太短 抽奖结束需要回调 业务代码和功能代码要分离 先 ...

  2. win7技巧

    win7技巧 快捷键 一.Windows键 + 空格键“Space” [作用]:透明化所有窗口,快速查看桌面(并不切换) [快捷键]:win+空格 [小结]:当你打开了很多程序窗口的时候,这招非常有用 ...

  3. Spring Security 实战干货: 简单的认识 OAuth2.0 协议

    1.前言 欢迎阅读 Spring Security 实战干货 系列文章 .OAuth2.0 是近几年比较流行的授权机制,对于普通用户来说可能每天你都在用它,我们经常使用的第三方登录大都基于 OAuth ...

  4. JavaScript中函数式编程中文翻译

    JavaScript 中的函数式编程 原著由 Dan Mantyla 编写 近几年来,随着 Haskell.Scala.Clojure 等学院派原生支持函数式编程的偏门语言越来越受到关注,同时主流的 ...

  5. less实现if else

    less没有我们平常使用的if,else条件判断,而是用when来实现这种用法 1.比如我们要设置宽度 宽度可以百分比,也可以是像素,当是百分比时做对应处理,当是px时做另一种处理,这时候就需要用wh ...

  6. 关于ESP8266 NodeCMU固件无法刷入新代码的解决方法

    在玩ESP8266时,有时候会无意中写了导致死循环的代码,或都某些函数传递了不合适的参数导致系统崩溃,这可能会导致ES8266不停地重启,这时我们发现无法刷入新的代码,也无法删除8266中的原代码.我 ...

  7. 倍增笔记ST表

    https://noip-1253948194.cos.ap-beijing.myqcloud.com/%E5%80%8D%E5%A2%9E-ST%E7%AE%97%E6%B3%95.mp4 1123 ...

  8. django count(*) 慢查询优化

    分页显示是web开发常见需求,随着表数据增加,200万以上时,翻页越到后面越慢,这个时候慢查询成为一个痛点,关于count(*)慢的原因,简单说会进行全表扫描,再排序,导致查询变慢.这里介绍postg ...

  9. HTTP图解笔记(六)—— 第6章 HTTP首部

    前言 为啥第一章直接跳到第六章呢,因为...博主当初看书的时候挑着看..只看了第一章和第六章┗( ▔, ▔ )┛ HTTP图解对于不熟悉HTTP的小伙伴来说是很好的书籍,建议入手! 一. HTTP报文 ...

  10. Webpack实战(六):如何优雅地运用样式CSS预处理

    上一篇文章中,我主要分享了<Webpack如何分离样式文件>CSS 预处理器是一个能让你通过预处理器自己独有的语法来生成CSS的程序,css预处理指的是在开发中我们经常会使用一些样式预编译 ...