深入理解计算机系统(修订版)
【原书名】 Computer Systems A Programmer's Perspective
【原出版社】 Pearson
【作者】 (美)Randal E.Bryant; David O'Hallaron
【译者】 龚奕利 雷迎春
【丛书名】 国外经典计算机科学教材系列
【出版社】 中国电力出版社
http://www.china-pub.com/computers/common/info.asp?id=18133
http://www.china-pub.com/computers/common/info.asp?id=18384 [英文版]
【参考资料】
Web网站:实验和作业,授课笔记和代码示例
csapp.cs.cmu.edu
Manuscript
http://csapp.cs.cmu.edu/public/manuscript.html
本书2003年版的勘误
http://csapp.cs.cmu.edu/public/errata.html
中文版勘误:
http://vega.ict.ac.cn/personal/lyc/CSAPP_errata.htm
leiyc@ict.ac.cn
本书相关资料
http://csapp.cs.cmu.edu/
有一些内容需要是经过认证的教师才可以
http://csapp.cs.cmu.edu/public/loginrequest.html
http://mprc.pku.edu.cn/~quning/ComputerSystems.pdf
第4章的SEQ,SEQ+,PIPE模拟器下载
在学生站点:http://csapp.cs.cmu.edu/public/students.html
具体的压缩包的链接为:
源代码:http://csapp.cs.cmu.edu/public/sim.tar
二进制文件:http://csapp.cs.cmu.edu/public/y86binaries/y86-linux.tar
使用说明:http://csapp.cs.cmu.edu/public/simguide.pdf
本书10个实验的资料和源代码下载(2003年后课程不提供实验源代码下载了)
15-213: Introduction to Computer Systems
http://www-2.cs.cmu.edu/afs/cs.cmu.edu/academic/class/15213-f02/
15-349: Introduction to Processor Design
http://www-2.cs.cmu.edu/afs/cs.cmu.edu/academic/class/15349-s02/
【评论】
“我坚信从程序员的角度来看计算机系统对教会学生们计算机的内部结构非常有帮助。” ——Kostas Daniilidis,宾夕法尼亚大学
“这本书讲述事物的方法与众不同,但是和我想要的课程进行方式类似。” ——John Greiner,Rice大学
“这是一项出色的工作,是这一领域教学方法的一次革命。” ——Michael Scott,罗切斯特大学
程序员的视角
本书适合那些想要写出更快、更可靠程序的程序员阅读。通过掌握程序是如何映射到系统上,以及程序是如何执行的,读者能够更好地理解程序的行为为什么是这
样的,以及效率低下是如何造成的。粗略来看,计算机系统包括处理器和存储器硬件、编译器、操作系统及网络互联环境。而通过程序员的视角,读者可以深深地
体会到学习计算机系统的内部工作原理会对他们今后作为计算机科学研究者和工程师的工作有进一步的帮助。它还有助于为进一步学习计算机体系结构、操作系统
、编译器和网络互联打下基础。
本书的主要论题包括:数据表示、C程序的机器级表示、处理器结构、程序优化、存储器层次结构、链接、异常控制流、虚拟存储器和存储器管理、系统级I/O、
网络编程和并发编程。书中所覆盖的内容主要讲述这些方面是如何影响应用和系统程序员的。例如,在讲述数据表示时,本书提出了用来表示数字的表示方法是有
限的,它能够近似地表示整数和实数,但是这种表示方法是有限制的,程序员必须了解。在讲述高速缓存时,本书讨论了矩阵代码中的循环变量的顺序是如何影响
程序的性能的。在讨论网络互联时,本书描述了并发服务器如何有效地处理来自多个客户端的请求。
?本书被赞誉为价值超过等重量共金的无价资源宝库
?第一本将软件和硬件理论结合讲述的教程
?覆盖计算机导论、体系结构和处理器设计等多门课程
这本书的最大的特色在于它将体系结构,编译,OS结合起来讲,使人产生对系统的俯瞰的感觉,对于那些想深入理解计算机内部工作机理的人,这几乎是最佳的一
本书。
深入理解计算机》是一个桥梁,它帮我们找到一种途径使上层应用和底层的硬件实现保持一种联系。当你真的很理解《深入理解计算机系统》中的内容的时候,自
然也就想看更深的内容(也就是说,你该买pattern的书了)。
Randal E. Bryant,是计算机届的一位老前辈,他主写的《深入理解计算机系统》是他深厚的计算机技术沉淀后的精华,概念浅显易懂。希望在40岁以前还能碰
到这样一本能让我心动的书。呵呵,40岁以后,自己就要开始学习沉淀了。我个人觉得,书的作用可以帮你迅速熟悉一个领域,帮你去了解这个领域的概念。如果
你能通过一本书,去区分混淆的概念,就非常好。要想深入下去,Paper和Maillist是必不可少的。我是很喜欢读Maillist,那些作者都是一线工作的战士,他
们讨论的问题是书和Paper上没有涉及到的,有时候是会颠覆我们的固有看法。98年、99年和00年,我就是通过读maillist熟悉Linux kernel的。呵呵,现在
市面上有大量的关于Linux kernel的书,但书上大都告诉你的是“它就是这样设计的”,而不会去讨论“它为什么这样设计”。你发现这个现象了吗?所以,即使我
们看完一本Linux Kernel的书,也只是知道一些东西,而很少获得它存在的理由,和别的一些实现选择。
我想说的是在mailinglist中可以找到许多书本中没有的threads,这些threads可能不是很严谨,但确实能告诉我们他们为什么这样设计,他们做了那些考虑,
我觉得这很重要。
尤其是第4章和5章的知识,不可能让初学者弄懂 这本书难度系数很高,并不是向书上说的只要会点C就可以了的
”深入理解“ 应该还是恰如其分的。 比如 降到程序链接那块, 很多书里面都讲的不深或干脆不讲。 强烈推荐。
------------------------
(个人观点,仅供参考)
一、总体:
1.1 本书特色在于很多内容从硬件角度说明,但不适合初学者;
1.2 硬件方面的内容并不详细,最好结合微机原理一起理解;
1.3 偏软的内容深度显然不足,抄的内容更多,如第3章、第8章、第11-13章,可能这方面比较固定,作者心得也不多,有用内容很少,建议不用看,非看的话
就去看专门介绍的书;
1.4 整书想把硬件原理、编译原理、操作系统、流行软件编程都揉到一起,大而不太精,而且基础性章节讲得不清,如第3章的Linux汇编语言和第7章的链接;
1.5 感觉受益的章节,第5章 优化程序性能、第6章 存储器层次结构、第9章 测量程序执行时间;
二、分章
第3章 程序的机器级表示
基础章节,讲Linux的汇编语言,讲得不清楚,不如看专门的介绍书籍;
第4章 处理器体系结构
(没看)
第5章 优化程序性能
从硬件角度上阐述优化的原理,有例子,很不错,建议细看;
第6章 存储器层次结构
存储原理和利用其特性的优化方法, 优化方法说到底就是局部性问题,用了不少内容简述,建议看;
第7章 链接
当然没有编译原理书介绍得清楚,不如结合起来看;
第8章 异常控制流
介绍UNIX的异常机制,全软,算是转述的内容,也即抄的内容;
第9章 测量程序执行时间
介绍本书推荐的方法,基于得到的测量数据进行的k次统计拟合得到的时间测量方程式,最后找到稳定的方程式参数值,然后再使用这些值来测量执行时间(个
人的总结和理解)
第10章 虚拟存储器
操作系统原理,不如看Windows操作系统原理的书,算是搬过来的内容;
第11~~13章 系统级I/O,网络编程,并发编程
纯软件的内容,建议不用看,基本全抄,要看去看专门的书。
文章出处:http://www.diybl.com/course/6_system/linux/Linuxjs/2007930/75490.html