深入理解计算机系统 读后感

作者&投稿:宦枫 (若有异议请与网页底部的电邮联系)
《深入理解计算机系统》-读后感~

[《深入理解计算机系统》-读后感]
介绍:本书从程序员的视角详细阐述计算机系统的本质概念,并展示这些概念如何实实在在地影响应用程序的正确性、性能和实用性,《深入理解计算机系统》-读后感。全书共12章,主要内容包括信息的表示和处理、程序的机器级表示、处理器体系结构、优化程序性能、存储器层次结构、链接、异常控制流、虚拟存储器、系统级I/O、网络编程、并发编程等。书中提供大量的例子和练习,并给出部分答案,有助于读者加深对正文所述概念和知识的理解。


本书的最大优点是为程序员描述计算机系统的实现细节,帮助其在大脑中构造一个层次型的计算机系统,从最底层的数据在内存中的表示到流水线指令的构成,到虚拟存储器,到编译系统,到动态加载库,到最后的用户态应用。通过掌握程序是如何映射到系统上,以及程序是如何执行的,读者能够更好地理解程序的行为为什么是这样的,以及效率低下是如何造成的。



全书将软硬件串在一起帮助我们描述了程序是怎么在系统中工作的,书中的链接加载程序布局等我在《程序员的自我修养》中读到过,其余很多知识和计算机原理、操作系统、系统编程也有很多重叠,总体说来内容并不是很陌生,但仍然有不少收获。第三部分io网络并发三章尚未阅读
写下之下的这些文字是为了帮助自己更好的复习全书的内容,尤其是自己以前掌握不深刻的部分

书的第一部分是全书的精华,主要讲程序与硬件,第四章除外,我没有看
第二章,重点是数的表示方法

移位运算  算术右移和逻辑右移的区别
字节顺序  大端和小端
数的格式转换  先改变大小,再改变有无符号,无符号有符号隐式转换带来的灾难
整数的运算  主要是各种溢出问题

浮点数  乘法不具备可结合性,转换为整数时可溢出

第三章,重点是汇编程序,个人认为收获最大的一章

各种指令,mov,leal,移位,运算,控制,条件传送指令*,
各种逆向工程,结合习题很有意思
函数调用时帧栈结构
联合、结构数据分布和对齐的问题
内存越界和缓冲区溢出
64位(没有太仔细看,寄存器多了大了,函数调用有很多不同,很多函数不需要栈帧,参数通过寄存器传送)

第五章,程序优化,全章由一个例子贯穿始末,量化了不同方法带来的性能改进


编译器优化的局限性,限制这种能力的原因有:存储器别名的情况,函数调用(静态变量,可重入)
循环优化,不变的变量只算一次
减少函数调用(性能和可读性的折衷)
不必要的内存引用(尽量用临时变量在寄存器中,避免不必要的内存读写)
从处理器的角度考虑(流水、预测分支、关键路径),循环展开,考虑流水(充分利用处理器的多个加法器等,超标量)
程序剖析的工具 gprof

第六章,存储器层次结构

各种存储技术,寄存器,SRAM(高速缓存),DRAM(内存),硬盘(传统硬盘、固态硬盘),网络

各种缓存,高速缓存L1L2是内存的缓存,内存是硬盘的缓存,各种缓存的管理机制(这里只讲了高速缓存的,后面会将内存管理)
程序的局部性,时间和空间的


第二部分,主要将程序在系统的中的运行,这一部分和前一部分差距较大,原因是这一部分我比较熟?
第七章,链接

可以参见《程序员的自我修养》这本书,主要是目标文件格式阿,符号解析阿,重定位阿的,内容比较简略
静态库的链接顺序,经常会出错的一个问题
一些工具的使用,readelf,objdump,ldd
感觉从这一章开始,翻译就很不给力了


第八章,名字很奇特,叫异常控制流,讲了各个层面的异常,其实我觉得这一章还不如叫进程

四类异常:中断(IO设备),陷阱(trap,咋这么翻译呢,系统陷入多好听,主要是系统调用),故障(缺页),终止
进程相关,fork,execve,wait,waitpid
信号,读后感《《深入理解计算机系统》-读后感》。signal
非本地跳转,软异常?setjmp,longjmp,据说是try\\catch实现的基础
一些工具(pmap,strace,ps,top)


第九章,虚拟存储器,重点应该是内存管理,地址翻译的机制,我讨厌有些地方该叫内存却叫做存储器

内存管理,主要做了两件事,从虚拟地址到物理地址的翻译,提供了内存读写的保护(只读的内存不能写,只读写的不能运行)
动态内存的分配,给出了几种分配器的数据结构,这一部分没有仔细看
垃圾回收
各种内存的错误,总结的很好,基本我都犯过


回头再看第一章,人家总结的真好,整个一个计算机系统就是一个大抽象,把各种硬件系统抽象为一些简单的概念,这些概念让我们这些程序员能够轻松的处理程序而不用再管硬件了,伟大啊

三个基本抽象:

文件--负责抽象IO设备
虚拟存储器--负责抽象IO设备、内存
进程--负责抽象IO设备、内存、处理器

整本书就是负责介绍怎么抽象的
  〔《深入理解计算机系统》-读后感〕随文赠言:【这世上的一切都借希望而完成,农夫不会剥下一粒玉米,如果他不曾希望它长成种粒;单身汉不会娶妻,如果他不曾希望有孩子;商人也不会去工作,如果他不曾希望因此而有收益。】

[《深入理解计算机系统》读后感]这是一本多么伟大的书籍!我希望我曾去过卡耐基梅隆大学并参加这门课程,《深入理解计算机系统》读后感。这本书是卡耐基梅隆大学的教授在讲授计算机系统课程后的几年时间里写的。从程序员的观点看(作为标题来说更为恰当),这本书涵盖了广泛的主题范围,包括操作系统,编译器,计算机系统结构,集级编程,内核的内部,连接器等。我正在寻找字眼来形容这本书的用途,读后感《《深入理解计算机系统》读后感》。在我的经历中,我几乎没有时间去学习一些操作系统,处理器和编译器的尖端科技。例如,连接器和装载机,卸载程序使用的内核逆向工程,还有虚拟内存等等。在所有的努力过后,我找到了这本合适的书,书中将不同领域的所有著名书籍加以研究,最后给出了真正程序员所需要的东西去咀嚼和消化。MSN()  〔《深入理解计算机系统》读后感〕随文赠言:【这世上的一切都借希望而完成,农夫不会剥下一粒玉米,如果他不曾希望它长成种粒;单身汉不会娶妻,如果他不曾希望有孩子;商人也不会去工作,如果他不曾希望因此而有收益。】

[深入理解计算机系统 读后感]
从程序员的视角,看计算机系统!
本书适用于那些想要写出更快、更可靠程序的程序员,深入理解计算机系统 读后感。通过掌握程序是如何映射到系统上,以及程序是如何执行的,读者能够更好的理解程序的行为为什么是这样的,以及效率低下是如何造成的。粗略来看,计算机系统包括处理器和存储器硬件、编译器、操作系统和网络互连环境。而通过程序员的视角,读者可以清晰地明白学习计算机系统的内部工作原理会对他们今后作为计算机科学研究者和工程师的工作有进一步的帮助。它还有助于为进一步学习计算机体系结构、操作系统、编译器和网络互连做好准备。

本书的主要论题包括:数据表示、C程序的机器级表示、处理器结构,程序优化、存储器层次结构、链接、异常控制流、虚拟存储器和存储器管理、系统级I/O、网络编程和并发编程。书中所覆盖的内容主要是这些方面是如何影响应用和系统程序员的。例如,在讲述数据表示时,本书说明了用来表示数字的表示方法是有限的,它能够近似地表示整数和实数,但是这种表示方法是有限制的,程序员必须了解。在讲述高速缓存时,本书讨论了矩阵代码中的循环变量的顺序是如何影响程序的性能的。在讨论网络互连时,本书描述了并发服务器如何能有效地处理来自多个客户端的请求。

本书基于Intel兼容(IA32)机器,在Unix或者相关的操作系统(例如,Linux)上执行C程序。虽然书中包括了一些帮助读者将Java转化成C的提示,但是还是要求读者对C或者C++有一定的了解。

您可以通过本书的Web网站www.csapp.cs.cmu.edu获得完整的资料,包括实验和作业,授课笔记和代码示例,读后感《深入理解计算机系统 读后感》。
本书英文版久负盛名,被众多专业人士称为“最伟大的计算机教材”之一,著名的美国卡内基梅隆大学计算机科学系一直将本书作为教材使用,程序员眼中的透彻讲述计算机系统的扛鼎之作。作者Randal
E.
Bryant是卡耐基梅隆大学的计算机科学系主任,ACM和IEEE双院士(Fellow),其研究成果多次获得ACM和IEEE颁发的大奖。

  本书共分十三章,分别介绍了信息的表示和处理、程序的机器级表示、处理器体系结构、存储器层次结构、静态和动态链接、虚拟存储器、系统级I/O、网络编程和并发编程等精彩内容。其目的是解释计算机系统的所有本质概念,并向读者展示这些概念是如何实际地影响应用程序的正确性、性能和实用性。与其他主要针对系统构造人员的系统类书籍不同,这本书是写给程序员的,是从程序员的角度来描述的。本书为软件和硬件之间搭起了一个桥梁,它给出了一种帮助读者分别从硬件和软件的角度去理解一个程序及其行为的途径,这也填补了国内计算机系统教学中的一个空白。本书的最大优点是帮助读者理解概念,让读者很清楚地在脑海中构造一个层次型的计算机系统,从最低层数据在内存中的表示(如我们一直陌生的浮点数表示),到流水线指令的构成,到虚拟存储器,到编译系统,到动态加载库,到最后的用户应用。

  本书提供了大量的例子和练习及部分答案。尤其值得一提的是,对于每一个基本概念都有相应的笔头或程序试验,加深读者的理解。
  〔深入理解计算机系统 读后感〕随文赠言:【这世上的一切都借希望而完成,农夫不会剥下一粒玉米,如果他不曾希望它长成种粒;单身汉不会娶妻,如果他不曾希望有孩子;商人也不会去工作,如果他不曾希望因此而有收益。】