原作名: Computer Systems: A Programmer's Perspective
作者: Randal E.Bryant / David O'Hallaron
译者: 龚奕利 / 雷迎春
出版社: 中国电力
出版年: 2004-5-1
页数: 873
定价: 85.00元
装帧: 平装(无盘)
ISBN: 9787508321752
作者: Randal E.Bryant / David O'Hallaron
译者: 龚奕利 / 雷迎春
出版社: 中国电力
出版年: 2004-5-1
页数: 873
定价: 85.00元
装帧: 平装(无盘)
ISBN: 9787508321752
内容简介 · · · · · ·
从程序员的视角,看计算机系统!
本书适用于那些想要写出更快、更可靠程序的程序员。通过掌握程序是如何映射到系统上,以及程序是如何执行的,读者能够更好的理解程序的行为为什么是这样的,以及效率低下是如何造成的。粗略来看,计算机系统包括处理器和存储器硬件、编译器、操作系统和网络互连环境。而通过程序员的视角,读者可以清晰地明白学习计算机系统的内部工作原理会对他们今后作为计算机科学研究者和工程师的工作有进一步的帮助。它还有助于为进一步学习计算机体系结构、操作系统、编译器和网络互连做好准备。
本书的主要论题包括:数据表示、C程序的机器级表示、处理器结构,程序优化、存储器层次结构、链接、异常控制流、虚拟存储器和存储器管理、系统级I/O、网络编程和并发编程。书中所覆盖的内容主要是这些方面是如何影响应用和系统程序员的。例如,在讲述数据表示时,本书说明了用来表示数字的表示... (展开全部) 从程序员的视角,看计算机系统!
本书适用于那些想要写出更快、更可靠程序的程序员。通过掌握程序是如何映射到系统上,以及程序是如何执行的,读者能够更好的理解程序的行为为什么是这样的,以及效率低下是如何造成的。粗略来看,计算机系统包括处理器和存储器硬件、编译器、操作系统和网络互连环境。而通过程序员的视角,读者可以清晰地明白学习计算机系统的内部工作原理会对他们今后作为计算机科学研究者和工程师的工作有进一步的帮助。它还有助于为进一步学习计算机体系结构、操作系统、编译器和网络互连做好准备。
本书的主要论题包括:数据表示、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、网络编程和并发编程等精彩内容。其目的是解释计算机系统的所有本质概念,并向读者展示这些概念是如何实际地影响应用程序的正确性、性能和实用性。与其他主要针对系统构造人员的系统类书籍不同,这本书是写给程序员的,是从程序员的角度来描述的。本书为软件和硬件之间搭起了一个桥梁,它给出了一种帮助读者分别从硬件和软件的角度去理解一个程序及其行为的途径,这也填补了国内计算机系统教学中的一个空白。本书的最大优点是帮助读者理解概念,让读者很清楚地在脑海中构造一个层次型的计算机系统,从最低层数据在内存中的表示(如我们一直陌生的浮点数表示),到流水线指令的构成,到虚拟存储器,到编译系统,到动态加载库,到最后的用户应用。
本书提供了大量的例子和练习及部分答案。尤其值得一提的是,对于每一个基本概念都有相应的笔头或程序试验,加深读者的理解。
本书适用于那些想要写出更快、更可靠程序的程序员。通过掌握程序是如何映射到系统上,以及程序是如何执行的,读者能够更好的理解程序的行为为什么是这样的,以及效率低下是如何造成的。粗略来看,计算机系统包括处理器和存储器硬件、编译器、操作系统和网络互连环境。而通过程序员的视角,读者可以清晰地明白学习计算机系统的内部工作原理会对他们今后作为计算机科学研究者和工程师的工作有进一步的帮助。它还有助于为进一步学习计算机体系结构、操作系统、编译器和网络互连做好准备。
本书的主要论题包括:数据表示、C程序的机器级表示、处理器结构,程序优化、存储器层次结构、链接、异常控制流、虚拟存储器和存储器管理、系统级I/O、网络编程和并发编程。书中所覆盖的内容主要是这些方面是如何影响应用和系统程序员的。例如,在讲述数据表示时,本书说明了用来表示数字的表示... (展开全部) 从程序员的视角,看计算机系统!
本书适用于那些想要写出更快、更可靠程序的程序员。通过掌握程序是如何映射到系统上,以及程序是如何执行的,读者能够更好的理解程序的行为为什么是这样的,以及效率低下是如何造成的。粗略来看,计算机系统包括处理器和存储器硬件、编译器、操作系统和网络互连环境。而通过程序员的视角,读者可以清晰地明白学习计算机系统的内部工作原理会对他们今后作为计算机科学研究者和工程师的工作有进一步的帮助。它还有助于为进一步学习计算机体系结构、操作系统、编译器和网络互连做好准备。
本书的主要论题包括:数据表示、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、网络编程和并发编程等精彩内容。其目的是解释计算机系统的所有本质概念,并向读者展示这些概念是如何实际地影响应用程序的正确性、性能和实用性。与其他主要针对系统构造人员的系统类书籍不同,这本书是写给程序员的,是从程序员的角度来描述的。本书为软件和硬件之间搭起了一个桥梁,它给出了一种帮助读者分别从硬件和软件的角度去理解一个程序及其行为的途径,这也填补了国内计算机系统教学中的一个空白。本书的最大优点是帮助读者理解概念,让读者很清楚地在脑海中构造一个层次型的计算机系统,从最低层数据在内存中的表示(如我们一直陌生的浮点数表示),到流水线指令的构成,到虚拟存储器,到编译系统,到动态加载库,到最后的用户应用。
本书提供了大量的例子和练习及部分答案。尤其值得一提的是,对于每一个基本概念都有相应的笔头或程序试验,加深读者的理解。
作者简介 · · · · · ·
Randal E. Bryant 1973年获得密歇根大学(University of Michigan)学士学位,随即就读麻省理工学院(Massachusetts Institute of Technology)的研究生院,并在1981年获计算机博士学位。他在加州理工学院(California Institute of Technology)做了三年助教,从1984年至今一直是卡内基梅隆大学(Carnegie Mellon)的教师。他现在是计算机科学的主任级教授和计算机科学系的系主任。他同时还受邀于电子和计算机工程系。 他从事本科和研究生计算机系统方面课程的教学超过20年。在讲授计算机体系结构课程多年后,他开始把关注点从如何设计计算机转移到程序员如何在更好地了解系统的情况下编写出更有效和更可靠的程序。他和O’Hallaron教授一起在卡内基梅隆大学... (展开全部)
Randal E. Bryant 1973年获得密歇根大学(University of Michigan)学士学位,随即就读麻省理工学院(Massachusetts Institute of Technology)的研究生院,并在1981年获计算机博士学位。他在加州理工学院(California Institute of Technology)做了三年助教,从1984年至今一直是卡内基梅隆大学(Carnegie Mellon)的教师。他现在是计算机科学的主任级教授和计算机科学系的系主任。他同时还受邀于电子和计算机工程系。 他从事本科和研究生计算机系统方面课程的教学超过20年。在讲授计算机体系结构课程多年后,他开始把关注点从如何设计计算机转移到程序员如何在更好地了解系统的情况下编写出更有效和更可靠的程序。他和O’Hallaron教授一起在卡内基梅隆大学开设了“计算机系统导论”课程,那便是此书的基础。他还教授一些算法和编程方面的课程。 Bryant教授的研究涉及帮助硬件设计者验证其系统正确性的软件工具的设计。其中,包括几种类型的模拟器,以及用数学方法来证明设计正确性的形式化验证工具。他发表了100多篇技术论文。包括Intel、Motorola、IBM和Fujitsu在内的主要计算机制造商都使用他的研究成果。他还因他的研究获得过数项大奖。其中包括Semiconductor Research Corporation颁发的两个发明荣誉奖和一个技术成就奖,美国计算机学会(Association for Computer Machinery,ACM)颁发的Kanellakis理论与实践奖,还有电气和电子工程师协会(Institute of Electrical and Electronics Engineers,IEEE)授予的W. R. G. Baker奖和50年金质奖章(a Golden Jubilee Medal)。他同时是ACM和IEEE的院士。
David R. O’Hallaron 1986年在维吉尼亚大学(University of Virginia)获得计算机科学的博士学位。在通用电气工作一段时间后,于1989年作为系统科学家成为卡内基梅隆大学的教员。他目前是计算机科学系和电子及计算机工程系的副教授。 他教授一些本科生和研究生的计算机系统方面的课程,例如计算机体系结构、计算机系统绪论、并行处理器设计和Internet服务。和Bryant教授一起,他开设了“计算机系统导论”课程,那便是此书的基础。 O’Hallaron教授和他的学生从事计算机系统领域的研究。特别的,他们开发了一些软件系统,帮助科学家和工程师在计算机上模拟自然界。其中最著名的是Quake项目,一群计算机科学家、土木工程师和地震学家致力于在强烈地震中预测大地运动的能力,这些强烈地震包括南加洲、古巴、日本、墨西哥和新西兰的大地震。同Quake项目中其它人员一起,他获得了CMU计算机科学院颁发的Allen Newell优秀研究奖章。他为Quake项目创立的基准程序,183.equake,被SPEC(Standards Performance Evaluation Corporation)选入非常有影响的SPEC CPU和OMP(Open Mp)基准程序包中。
David R. O’Hallaron 1986年在维吉尼亚大学(University of Virginia)获得计算机科学的博士学位。在通用电气工作一段时间后,于1989年作为系统科学家成为卡内基梅隆大学的教员。他目前是计算机科学系和电子及计算机工程系的副教授。 他教授一些本科生和研究生的计算机系统方面的课程,例如计算机体系结构、计算机系统绪论、并行处理器设计和Internet服务。和Bryant教授一起,他开设了“计算机系统导论”课程,那便是此书的基础。 O’Hallaron教授和他的学生从事计算机系统领域的研究。特别的,他们开发了一些软件系统,帮助科学家和工程师在计算机上模拟自然界。其中最著名的是Quake项目,一群计算机科学家、土木工程师和地震学家致力于在强烈地震中预测大地运动的能力,这些强烈地震包括南加洲、古巴、日本、墨西哥和新西兰的大地震。同Quake项目中其它人员一起,他获得了CMU计算机科学院颁发的Allen Newell优秀研究奖章。他为Quake项目创立的基准程序,183.equake,被SPEC(Standards Performance Evaluation Corporation)选入非常有影响的SPEC CPU和OMP(Open Mp)基准程序包中。
目录 · · · · · ·
出版说明
关于第二次印刷的几点说明
译 序
关于术语的翻译
在第二次印刷中一些重要术语的修订
前 言
关于作者
第1章 计算机系统漫游
1.1 信息就是位十上下文
1.2 程序被其他程序翻译成不同的格式
1.3 了解编译系统如何工作是大有益处的
1.4 处理器读并解释储存在存储器中的指令
1.5 高速缓存
1.6 形成层次结构的存储设备
1.7 操作系统管理硬件
1.8 利用网络系统和其他系统通信
1.9 下一步
1.10 小结
第1部分 程序结构和执行
第2章 信息的表示和处理
.2.1 信息存储
2.2 整数表示
2.3 整数运算
2.4 浮点
2.5 小结
第3章 程序的机器级表示
3.1 历史观点
3.2 程序编码
3.3 数据格式
3.4 访问信息
3.5 算术和逻辑操作
3.6 控制
3.7 过程
3.8 数组分配和访问
3.9 异类的数据结构
3.10 对齐(alignment)
3.11 综合:理解指针
3.12 现实生活:使用gdb调试器
3.13 存储器的越界引用和缓冲区溢出
3.14 *浮点代码
3.15 *在c程序中嵌入汇编代码
3.16 小结
第4章 处理器体系结构
4.1 y86指令集体系结构
4.2 逻辑设计和硬件控制语言hcl
4.3 y86的顺序(sequential)实现
4.4 流水线的通用原理
4.5 y86的流水线实现
4.6 小结
第5章 优化程序性能
5.1 优化编译器的能力和局限性
5.2 表示程序性能
5.3 程序示例
5.4 消除循环的低效率
5.5 减少过程调用
5.6 消除不必要的存储器引用
5.7 理解现代处理器
5.8 降低循环开销
5.9 转换到指针代码
5.10 提高并行性
5.11 综合:优化合并(combing)代码的效果小结
5.12 转移预测和预测错误处罚
5.13 解存储器性能
5.14 现实生活:性能提高技术
5.15 确认和消除性能瓶颈
5.16 小结
第6章 存储器层次结构
6.1 存储技术
6.2 局部性
6.3 存储器层次结构
6.4 高速缓存存储器
6.5 编写高速缓存友好的代码
6.6 综合:高速缓存对程序性能的影响
6.7 综合:利用程序中的局部性
6.8 小结
第2部分 在系统上运行程序
第7章 链接
7.1 编译器驱动程序
7.2 静态链接
7.3 标文件
7.4 可重定位目标文件
7.5 符号和符号表
7.6 符号解析
7.7 重定位
7.8 可执行目标文件
7.9 加载可执行目标文件
7.10 动态链接共享库
7.11 从应用程序中加载和链接共享库
7.12 *与位置无关的代码(pic)
7.13 处理目标文件的工具
7.14 小结
第8章 异常控制流
8.1 异常
8.2 进程
8.3 系统调用和错误处理
8.4 进程控制
8.5 信号
8.6 非本地跳转
8.7 操作进程的工具
8.8 小结
第9章 测量程序执行时间
9.1 计算机系统上的时间流
9.2 通过间隔计数(interval counting)来测量时间
9.3 周期计数器
9.4 用周期计数器来测量程序执行时间
9.5 基于gettimeofday函数的测量
9.6 综合:一个实验协议
9.7 展望未来
9.8 现实生活:k次最优测量方法
9.9 得到的经验教训
9.10 小结
第10章 虚拟存储器
10.1 物理和虚拟寻址
10.2 地址空间
10.3 虚拟存储器作为缓存的工具
10.4 虚拟存储器作为存储器管理的工具
10.5 虚拟存储器作为存储器保护的工具
10.6 地址翻译
10.7 案例研究:pentium/linux存储器系统,
10.8 存储器映射
10.9 动态存储器分配
10.10 垃圾收集
10.11 c程序中常见的与存储器有关的错误
10.12 扼要重述一些有关虚拟存储器的关键概念
10.13 小结
第3部分 程序间的交互和通信
第11章 系统级i/o
11.1 unix i/o
11.2 打开和关闭文件
11.3 读和写文件
11.4 用rio包进行健壮地读和写
11.5 读取文件元数据
11.6 共享文件
11.7 i/o重定向
11.8 标准i/o
11.9 综合:我该使用哪些i/o函数?
11.10 小结
第12章 网络编程
12.1 客户端-服务器编程模型
12.2 网络
12.3 全球ip因特网
12.4 套接字接口
12.5 web服务器
12.6 综合:tinyweb服务器
12.7 小结
第13章 并发编程
13.1 基于进程的并发编程
13.2 基于i/o多路复用的并发编程
13.3 基于线程的并发编程
13.4 多线程程序中的共享变量
13.5 用信号量同步线程
13.6 综合:基于预线程化的并发服务器
13.7 其他并发性问题
13.8 小结
附录a 处理器控制逻辑的hcl描述
a.1 hcl参考手册
a.2 seq
a.3 seq+
a.4 pipe
附录b 错误处理
b.1 unix系统中的错误处理
b.2 错误处理封装函数
b.3 csapp.h头文件
b.4 csapp.c源文件
参考文献
索 引
· · · · · · (收起)
关于第二次印刷的几点说明
译 序
关于术语的翻译
在第二次印刷中一些重要术语的修订
前 言
关于作者
第1章 计算机系统漫游
1.1 信息就是位十上下文
1.2 程序被其他程序翻译成不同的格式
1.3 了解编译系统如何工作是大有益处的
1.4 处理器读并解释储存在存储器中的指令
1.5 高速缓存
1.6 形成层次结构的存储设备
1.7 操作系统管理硬件
1.8 利用网络系统和其他系统通信
1.9 下一步
1.10 小结
第1部分 程序结构和执行
第2章 信息的表示和处理
.2.1 信息存储
2.2 整数表示
2.3 整数运算
2.4 浮点
2.5 小结
第3章 程序的机器级表示
3.1 历史观点
3.2 程序编码
3.3 数据格式
3.4 访问信息
3.5 算术和逻辑操作
3.6 控制
3.7 过程
3.8 数组分配和访问
3.9 异类的数据结构
3.10 对齐(alignment)
3.11 综合:理解指针
3.12 现实生活:使用gdb调试器
3.13 存储器的越界引用和缓冲区溢出
3.14 *浮点代码
3.15 *在c程序中嵌入汇编代码
3.16 小结
第4章 处理器体系结构
4.1 y86指令集体系结构
4.2 逻辑设计和硬件控制语言hcl
4.3 y86的顺序(sequential)实现
4.4 流水线的通用原理
4.5 y86的流水线实现
4.6 小结
第5章 优化程序性能
5.1 优化编译器的能力和局限性
5.2 表示程序性能
5.3 程序示例
5.4 消除循环的低效率
5.5 减少过程调用
5.6 消除不必要的存储器引用
5.7 理解现代处理器
5.8 降低循环开销
5.9 转换到指针代码
5.10 提高并行性
5.11 综合:优化合并(combing)代码的效果小结
5.12 转移预测和预测错误处罚
5.13 解存储器性能
5.14 现实生活:性能提高技术
5.15 确认和消除性能瓶颈
5.16 小结
第6章 存储器层次结构
6.1 存储技术
6.2 局部性
6.3 存储器层次结构
6.4 高速缓存存储器
6.5 编写高速缓存友好的代码
6.6 综合:高速缓存对程序性能的影响
6.7 综合:利用程序中的局部性
6.8 小结
第2部分 在系统上运行程序
第7章 链接
7.1 编译器驱动程序
7.2 静态链接
7.3 标文件
7.4 可重定位目标文件
7.5 符号和符号表
7.6 符号解析
7.7 重定位
7.8 可执行目标文件
7.9 加载可执行目标文件
7.10 动态链接共享库
7.11 从应用程序中加载和链接共享库
7.12 *与位置无关的代码(pic)
7.13 处理目标文件的工具
7.14 小结
第8章 异常控制流
8.1 异常
8.2 进程
8.3 系统调用和错误处理
8.4 进程控制
8.5 信号
8.6 非本地跳转
8.7 操作进程的工具
8.8 小结
第9章 测量程序执行时间
9.1 计算机系统上的时间流
9.2 通过间隔计数(interval counting)来测量时间
9.3 周期计数器
9.4 用周期计数器来测量程序执行时间
9.5 基于gettimeofday函数的测量
9.6 综合:一个实验协议
9.7 展望未来
9.8 现实生活:k次最优测量方法
9.9 得到的经验教训
9.10 小结
第10章 虚拟存储器
10.1 物理和虚拟寻址
10.2 地址空间
10.3 虚拟存储器作为缓存的工具
10.4 虚拟存储器作为存储器管理的工具
10.5 虚拟存储器作为存储器保护的工具
10.6 地址翻译
10.7 案例研究:pentium/linux存储器系统,
10.8 存储器映射
10.9 动态存储器分配
10.10 垃圾收集
10.11 c程序中常见的与存储器有关的错误
10.12 扼要重述一些有关虚拟存储器的关键概念
10.13 小结
第3部分 程序间的交互和通信
第11章 系统级i/o
11.1 unix i/o
11.2 打开和关闭文件
11.3 读和写文件
11.4 用rio包进行健壮地读和写
11.5 读取文件元数据
11.6 共享文件
11.7 i/o重定向
11.8 标准i/o
11.9 综合:我该使用哪些i/o函数?
11.10 小结
第12章 网络编程
12.1 客户端-服务器编程模型
12.2 网络
12.3 全球ip因特网
12.4 套接字接口
12.5 web服务器
12.6 综合:tinyweb服务器
12.7 小结
第13章 并发编程
13.1 基于进程的并发编程
13.2 基于i/o多路复用的并发编程
13.3 基于线程的并发编程
13.4 多线程程序中的共享变量
13.5 用信号量同步线程
13.6 综合:基于预线程化的并发服务器
13.7 其他并发性问题
13.8 小结
附录a 处理器控制逻辑的hcl描述
a.1 hcl参考手册
a.2 seq
a.3 seq+
a.4 pipe
附录b 错误处理
b.1 unix系统中的错误处理
b.2 错误处理封装函数
b.3 csapp.h头文件
b.4 csapp.c源文件
参考文献
索 引
· · · · · · (收起)
豆瓣成员常用的标签(共324个) · · · · · ·
喜欢读"深入理解计算机系统(修订版)"的人也喜欢 · · · · · ·
按有用程度 按页码先后 最新笔记
-
第335页
看了“消除不必要的存储器引用”这个优化,发现之前自己写代码时一直遵守的原则“如果一个局部变量只需使用一次的话,会放弃使用局部变量来保存结果,直接把计算语句放到使用位置,这样就省了一次声明。”,在C语言这样的抽象层次中有导致性能下降的可能性,本意是避免在栈上多分配一个临时变量来保存计算结果,没有料到这样的结果如果是整数的话其实可以很好的利用寄存器来保存计算结果,不会对栈进行操作。 这个优化原则实际.. (更多)看了“消除不必要的存储器引用”这个优化,发现之前自己写代码时一直遵守的原则“如果一个局部变量只需使用一次的话,会放弃使用局部变量来保存结果,直接把计算语句放到使用位置,这样就省了一次声明。”,在C语言这样的抽象层次中有导致性能下降的可能性,本意是避免在栈上多分配一个临时变量来保存计算结果,没有料到这样的结果如果是整数的话其实可以很好的利用寄存器来保存计算结果,不会对栈进行操作。这个优化原则实际操作起来需要的知识比较多,要熟悉常用的虚拟机环境的局部变量保存机制,要注意程序的可维护性(有些时候局部变量的使用是为了引入一个符号,做到只要改动计算过程,使用计算结果的地方无需改动),要在心里模拟虚拟机对寄存器和堆栈的操作。真挺麻烦,一不小心就会弄巧成拙。还是记住“尽量少访问低层次的存储设备”这个基本原则好了。 (收起)2011-05-27 17:06:23 1人收藏 2回应
-
第252页
指令组织原则: 处理器从来都不需要为了完成一条指令而去读由该指令更新的状态。 在译码阶段,valA、valB是由srcA、srcB决定的。 疑问: 寄存器的输出值只在时钟上升沿时才改变,那是否说明译码在一个周期的上升沿内完成的:因为只有这样才能保证valA、valB的值是正确的。 另外,译码读的是自身更新的状态,这样岂不是违反了指令组织原则? (更多)指令组织原则:
在译码阶段,valA、valB是由srcA、srcB决定的。疑问:寄存器的输出值只在时钟上升沿时才改变,那是否说明译码在一个周期的上升沿内完成的:因为只有这样才能保证valA、valB的值是正确的。另外,译码读的是自身更新的状态,这样岂不是违反了指令组织原则? (收起)处理器从来都不需要为了完成一条指令而去读由该指令更新的状态。
2011-05-19 16:40:37 回应
-
第43页
Tim (坚持·奋斗)
信息存储: 大多数计算机使用字节来作为最小的可寻址的存储器单位,存储器的每个字节都由唯一的数字来标识,称为地址。 C中的指针也是一个变量,它的值是地址,它的类型是它所指向的类型。由于指针的值是地址,所以指针的大小为字长。 C中的char表示单独的一个字节,short int表示为两个字节,int为4个字节,long int的大小为机器的字长。float使用4个字节,double使用8个字节。 寻址和字节顺序: 在几乎所有机器上,多字节... (更多)信息存储:大多数计算机使用字节来作为最小的可寻址的存储器单位,存储器的每个字节都由唯一的数字来标识,称为地址。C中的指针也是一个变量,它的值是地址,它的类型是它所指向的类型。由于指针的值是地址,所以指针的大小为字长。C中的char表示单独的一个字节,short int表示为两个字节,int为4个字节,long int的大小为机器的字长。float使用4个字节,double使用8个字节。寻址和字节顺序:在几乎所有机器上,多字节对象被存储为连续的字节序列,对象的地址为所使用的字节序列的最小地址。对一个对象的字节排序有两种规则:小端法(little endian):最低有效位在前大端法(big endian):最高有效位在前字符 --编码--> 数字--二进制和存储规则-->存储器的位布尔代数:有趣特性:a | ~a = 1a & ~a = 0a ^ a = 0a ^ ~a = 1a ^ 0 = aa^1 = ~aDeMorgan's law: ~(a&b) = ~a | ~b~(a|b) = ~a & ~b位向量的应用:1.有限集合,若位为1,则表示集合中包含了该位下标的值的数字;若位为0,则相反。例如一个位向量为a=[01101001]表示集合A={0,3,5,6};位向量b=[01010101]表示集合B={0,2,4,6}。则 a|b = A并B ; a&b = A交B,而~a = A的补集。2.掩码(masking)运算:掩码0xFF = 000...00011111111 则x&0xFF = 由x最低有效字节组成的值,其他字节都被置为0。~0将生成一个全1的掩码,不管机器的字长是多少,具有很强的移植性。C中逻辑运算和位运算是完全不同的。而且逻辑运算具有短路的特性:若对第一个参数求值能确定表达式的值,那么逻辑运算符将不会对第二个参数进行求值。移位运算:左移:丢弃k个最高位,最低位补k个0 <<逻辑右移:丢弃k个最低位,最高位补k个0 >> 算术右移:丢弃k个最低位,最高位补k个最高位的拷贝 >>无符号数(unsigned)的右移必须是逻辑右移,补0有符号数的右移大多数使用算术右移,补最高位的拷贝 (收起)2012-02-05 16:52:22 回应
-
第一章
Tim (坚持·奋斗)
1.信息就是位+上下文 8位=1字节 AcsII将字符用7位来编码 字符对应的编码格式不同,字符展现的效果也不同,这就是出现乱码的原因 Unicode 是一个字符集 UTF-8是一种针对unicode字符集的编码方法跟ASCII是等同的概念 文本文件:纯字符文件 二进制文件:非文本文件 关于编码格式的详文: http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html http://www.joelonsoftware.com/articles/Unicode.html 2.C程.. (更多)1.信息就是位+上下文8位=1字节 AcsII将字符用7位来编码字符对应的编码格式不同,字符展现的效果也不同,这就是出现乱码的原因Unicode 是一个字符集 UTF-8是一种针对unicode字符集的编码方法跟ASCII是等同的概念文本文件:纯字符文件 二进制文件:非文本文件关于编码格式的详文: http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html http://www.joelonsoftware.com/articles/Unicode.html2.C程序的生命周期预处理:预处理器(cpp)根据#开头的命令,修改原始的C程序,得到后缀为.i的C程序文件。编译:编译器(ccl)将C语言翻译成汇编语言,得到汇编程序文件汇编:汇编器(as)将汇编语言翻译成机器指令,然后将机器指令打包成一种可重定位的(relocatable)目标程序的格式,保存在后缀为.o的目标文件中。目标文件的字节编码不是字符,是机器语言指令。链接:将库文件以某种方式并入目标文件,得到可执行文件。3.系统硬件组成总线的定长传输的单位为字,字包含字节的个数为字长。缓存:SRAM(静态随机访问存储器)静态随机存取存储器(Static Random Access Memory, SRAM)是随机存取存储器的一种。所谓的“静态”,是指这种存储器只要保持通电,里面储存的数据就可以恒常保持。相对之下,动态随机存取内存(DRAM)里面所储存的数据就需要周期性地更新。然而,当电力供应停止时,其内储存的数据还是会消失,这与在断电后还能储存资料的ROM或快闪存储器仍然是不同的。主存:DRAM(动态随机访问存储器)与SRAM相比,DRAM的优势在于结构简单——每一个比特的数据都只需一个电容跟一个晶体管来处理,相比之下在SRAM上一个比特通常需要六个晶体管。正因这缘故,DRAM拥有非常高的密度,单位体积的容量较高因此成本较低。但相反的,DRAM也有访问速度较慢,耗电量较大的缺点。CPU:重复执行相同的基本任务:从PC(程序计数器)指向的存储器读取指令,解释指令的位,执行指令的简单操作,更新PC指向下一条指令。DMA技术:直接内存存取(Direct Memory Access,DMA)是计算机科学中的一种内存访问技术。它允许某些电脑内部的硬件子系统(电脑外设),可以独立地直接读写系统内存,而不需绕道中央处理器(CPU)。操作系统(OS):所有的应用程序对硬件的操作尝试都需要经过操作系统。操作系统的两个主要用途:合理分配应用程序的硬件资源;为应用程序操作硬件提供一致的接口4.进程,线程,虚存,文件进程:OS对运行程序的抽象,一个OS可以运行多个进程,但每个进程看起来像独占的使用硬件实际上,进程是交错执行的,OS实现这种交错执行的机制是上下文切换(context switching)。任何时刻,系统都只有一个进程正在运行。线程:进程的执行单元,每个线程都共享进程的代码和全局数据。虚存:为进程提供了一个每个进程都在独占使用主存的假象。虚拟地址空间的区:程序代码和数据区,堆(malloc,free 可动态扩展收缩),共享库(标准库,数学库的代码和数据),栈(实现函数调用,递归),内核虚拟储存器(OS驻留的区域,不允许应用程序读写)文件:字节序列,可以将I/O设备,网络看成一个文件。简言之:文件是对I/O设备的抽象,虚存是对磁盘和主存的抽象,进程是对磁盘,主存和I/O设备的抽象。 (收起)2012-02-04 14:47:15 回应
-
第31页
/代码内容已省略/ show_float展示了如何利用show_bytes来输出类型为float的C程序对象的字节表示。show_float仅仅向show_bytes传递一个指向参数x的指针:&x ,且该指针被强制类型转换为"unsigned char*"。这将告诉编译器,程序应把这个指针看成指向一个字节序列,而不是指向一个原始数据类型float的对象。然后,这个指针将会指向对象使用的最低字节地址。 一般来说,表达... (更多)typedef unsigned char *byte_pointer; void show_bytes(byte_pointer start,int len){ for(i=0;i<len;i++){ printf("%.2x",start[i]); printf("\n"); } } void show_float(float x){ show_bytes((byte_pointer) &x,sizeof(float)); }show_float展示了如何利用show_bytes来输出类型为float的C程序对象的字节表示。show_float仅仅向show_bytes传递一个指向参数x的指针:&x ,且该指针被强制类型转换为"unsigned char*"。这将告诉编译器,程序应把这个指针看成指向一个字节序列,而不是指向一个原始数据类型float的对象。然后,这个指针将会指向对象使用的最低字节地址。
(收起)一般来说,表达式sizeof(T)返回存储一个类型为T的对象所需要的字节数。
2012-01-10 17:09:23 回应
书评 · · · · · · (共62条) 我来评论这本书
热门评论 最新评论
NB学校的NB课程的NB教材——CSAPP
-
- figure9 CMU是全美以至全球公认的CS最猛的大学之一,没办法,作为CS的发源地,再加上三位神一样的人先后在此任教:Alan Perlis(CS它祖宗+第一届Turing奖获得者)、Allen Newell(AI缔造者+Turing奖获得者)和Herbert Simon(AI缔造者+Turing奖获得者+Nobel经济学奖获...... (17回应)2010-04-09 124/127有用
目前这就是计算机系统结构类最优秀的导论型作品
-
- yasker 上个星期终于把csapp看完了。 我买的是中文版的,因为除了貌似评价不错以外,由于涉及到些自己不了解的底层东西,怕是看英文会云里雾里。现在看来,大概不能算是个优点,但是的确能够加快我的看书速度,否则一星期还真不大可能把这书搞定。 对csapp慕名已久,主要在于据说这本书尽量的做到相对实用,不去讲那些和实际编程没...... (55回应)2006-12-25 99/100有用
CSAPP:Bomblab —— 原来习题还可以这么做
-
- DragonLancer(I, Magus) 第一次在豆瓣上发东西,呵呵~ 本学期选了汇编程序设计,实际上就是用这本CSAPP当教材了。作者是CMU计算机系主任,该门课的经典地位应该和MIT的SICP差不多吧(也在这学期选了~)。 最初只是想混学分,结果上了之后才发觉这门课是如此强大。我们老师也将CMU原配的几个Lab作业给移植 了过来,目前已经完成了...... (25回应)2009-11-06 29/29有用
看好书贵在持之以恒
-
- animeng 记得刚工作那段时间,我一个同事,整天抱着这本书看,还推荐我也看。说这本书相当不错,经过他这么一诱惑,我还真开始看了,不过我向来对这种理论层次很深,但是基本没有实践的书籍,抱有很深的怀疑态度的。因为只有理论没有实践,就算你理解了理论,也好比中间隔了一层玻璃,看得着,摸不到的感觉。不过这本书我看了3章发现,这里讲的理论......2011-12-14 3/3有用来自 机械工业出版社2010版
计算机专业学生的入门书籍
-
- 窜诺 适合计算机专业的本科生入门,以及希望了解计算机的人士阅读。全书大只讲解了关于编程的基础知识,设计体系结构,操作系统。虽然从题目的意思来说,本意是通过本书让程序员编出性能良好的程序。但实际上正如前面提到的,讲了很多计算机专业的入门知识。让人对计算机软硬件各个方面有了大体了解。很不幸,我到大三才读了这本书。......2012-01-30 来自 机械工业出版社2010版
很好的一本书
-
- 王子 对于想修炼计算机内功的程序员来说是一个很好的选择,我觉得计算机程序员先读读这样的书再去学习那些语言之类的,语言只是外功,内功不行外功练得再多也无法融汇贯通,虽然我只读了一部分,但是我已经深深喜欢上这本书了,有些习题也不是很明白,有希望一起交流学习的欢迎加入群:177094968......2011-09-27 来自 机械工业出版社2010版
系统不仅仅只是硬件。系统是互相交织的硬件和系统软...
-
- 伊卡洛斯(上敬下圆,笃行后生,事通人和) 英文名:Computer Systems : A Programmer's Perspective 作者:【美】Randal E.Bryant、David O'Hallaron 序言 第1章 计算机系统漫游 计算机系统是由硬件和系统软件组成的,它们共同协作以运行应用程序。计算机内部的信息被表示为一组...... (3回应)2011-08-01 1/2有用
第二版的2.79太bt了,搞了半个小时,还是一个很ugly...
-
- darrenhp 1. Write code for a function mul5div8 that, for integer argument x, computes 5*x/8, but following the bit-level integer coding rules (page 154). Your...... (2回应)2011-07-11
"深入理解计算机系统(修订版)"的论坛 · · · · · ·
| 现在这本书当当网有货 | 来自卡博维 | 7 回应 | 2009-03-16 |
| 卖疯了卖疯了,卓越卖到6折51块,赶紧去买吧 | 来自[已注销] | 7 回应 | 2010-01-14 |
| 看这本传说的csapp,需要什么样的基础? | 来自[已注销] | 3 回应 | 2009-10-25 |
| 买了我就后悔了 | 来自Red☂Fox | 3 回应 | 2011-07-23 |
| 深入理解计算机系统(修订版) 样张试读 | 来自china-pub | 2 回应 | 2010-08-30 |
> 浏览更多话题
这本书的其他版本 · · · · · · ( 全部7 )
- Prentice Hall版 2002-8-23 / 111人读过
- 机械工业出版社版 2010年 / 168人读过 / 有售
- 电子工业出版社版 2006年07月 / 157人读过 / 有售
- 机械工业出版社版 2011-1 / 26人读过 / 有售
以下豆列推荐 · · · · · · (全部)
- 豆瓣评分>9的书(100人以上) (阿獠)
- 给坏孩子看的计算机技术书 (baozii)
- 我的编程之路 (风中纸页)
- 个人阅读-计算机类好书 (郭大路-Roy)
- 止读经典(计算机科学) (pattern)
谁读这本书?
喜欢这本书的人常去的小组 · · · · · ·

- Vim (6202)

- Python编程 (19016)

- Linux (6608)

- LISP (2013)

- 分享计算机书籍 (5293)

- 程序员(不看公告发豆油的... (4662)

- 图灵之友 (1195)

- 程序员书屋 (6501)
喜欢这本书的人关注的活动 · · · · · ·
订阅关于深入理解计算机系统(修订版)的评论:
feed: rss 2.0











