陆陆续续花了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. idea编辑器的使用

    编辑器下载和安装就不说了,网上每次版本都更换得好快 ,发新版的人很多idea2019:https://pan.baidu.com/s/1zc1wkQLLVxbXSjy4ISN4aQ 提取码:cgah, ...

  2. 【一起学源码-微服务】Ribbon 源码一:Ribbon概念理解及Demo调试

    前言 前情回顾 前面文章已经梳理清楚了Eureka相关的概念及源码,接下来开始研究下Ribbon的实现原理. 我们都知道Ribbon在spring cloud中担当负载均衡的角色, 当两个Eureka ...

  3. HR系列GPS北斗时间同步服务器在电力系统典型应用

    HR系列GPS北斗时间同步服务器在电力系统典型应用 时间同步系统主要由主时钟.若干从时钟.时间信号传输介质组成.根据时间同步现场的不同要求,时间同步系统的结构配置有多种形式,主要分为三种:基本式.主从 ...

  4. MongoDB 上手开发实践(入门上手开发这一篇就够了)

    前言 MongoDB是一个介于 关系数据库 和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的.它支持的数据结构非常松散,是类似 json 的 bson 格式,因此可以存储比较复 ...

  5. java8中的stream流遍历

    比较for循环.迭代器.java8Stream流遍历的不同 package cnom.test.testUtils; import java.io.Serializable; import java. ...

  6. .gitignore 文件配置

    git 使用过程中,有许多文件或者文件夹是不希望更新到远程仓库了,因为他们比较占地方,这个时候我们可以利用 .gitignore 文件忽略文件. 按项目进行忽略 .gitignore 文件用于忽略文件 ...

  7. 密码 | 对称加密 - AES

    一.AES 算法简介 高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准,用来替换 ...

  8. dubbo配置文件解读(1)

    详细的Dubbo配置也可以参考:https://blog.csdn.net/abcde474524573/article/details/53026110 (1)<dubbo:service/& ...

  9. 《Java核心技术》 JVM指令集

    https://www.jianshu.com/p/bc91c6b46d7b

  10. idea 忽略不需要提交的文件

    1.打开git bash界面,进入到某个项目的根目录,执行下面命令 touch .gitignore 此时,再该项目的根目录里,会创建.gitignore文本,打开该文本,编辑需要忽略的文件(编辑规则 ...