首页    新闻    下载    文档    论坛     最新漏洞    黑客教程    数据库    搜索    小榕软件实验室怀旧版    星际争霸WEB版    最新IP准确查询   
名称: 密码:      忘记密码  马上注册




文章


WFDownloads is developed by The SmartFactory (http://www.smartfactory.ca), a division of InBox Solutions (http://www.inboxsolutions.net)

《深入理解计算机系统(修订版)》



描述:

cc《深入理解计算机系统》(ComputercSystems:AcProgrammer'scPerspective,1CS:APP)这本书的主要读者是那些想通过学习计算机系统的内在运作而提高自身技能的程序员.


我们的目的是解释所有计算机系统的本质概念,2并向你展示这些概念是如何实际地影响应用程序的正确性.c性能和实用性的.a与其他主要针对系统构造人员的系统类书籍不同,2这本书是写给程序员的,2是从程序员的角度来描述的.
如果你学习和研究这本书里的概念,3你将步入稀缺的“权威程序员”的行列,3将知道事情是如何运作的,3也知道在出现故障时如何进行修复.a同时,3你也将做好学习其他具体系统主题的准备,3比如编译器.c计算机体系结构.c操作系统.c嵌入式系统和网络互联.
读者所应具备的背景知识
本书中的范例是基于英特尔兼容的处理器(英特尔称之为“IA32”,5即俗称的“x86”).c在Unix或类Unix(比如Linux)操作系统上运行的C语言程序.a(为了简化我们的描述,5我们将用Unix统称Solaris和Linux这样的系统.a)文中包括了大量已在Linux系统上编译和运行过的程序范例.a我们假设你能访问一台这样的机器,5并且能够登录,5然后做一些诸如修改目录之类的简单操作.

如果你的计算机运行的是MicrosoftcWindows系统,6你有两种选择.a第一,6获取一个Linux的拷贝(参见www.5linux.5org或者www.5redhat.5com),6然后以“双重启动”模式安装它,6这样你的机器就能运行任一个操作系统了.a另一种选择就是,6通过安装Cygwin工具(www.5Cygwin.5com),6你就能在Windows下得到一个类似Unix的shell以及一个非常类似于Linux提供的环境.a不过,6Cygwin并不能提供所有的Linux功能.

我们还假设你对C和C++有一定的了解.a如果你以前只有Java经验,7那么这种转换将需要你自己付出更多的努力,7不过我们也将帮助你.aJava和C有相似的语法和控制语句.

但是,8有一些C语言的内容,8特别是指针.c显式的动态存储器分配和格式化I/O,8Java中都是没有的.a所幸的是,8C是一个较小的语言,8并且在BraincKernighan和DenniscRitchie经典的“K&R”文字中得到了清晰优美的描述[40].a无论你的编程背景如何,8K&R都应是你个人图书收藏的一部分.

这本书的前几章揭示了C语言程序和它们相应的机器语言程序之间的交互作用.a机器语言示例都是用运行在IntelcIA32处理器上的GNUGCC编译器生成的,9我们不需要你以前有任何硬件.c机器语言或是汇编语言编程的经验.

怎样阅读此书

从程序员的角度来学习计算机系统如何工作将非常有趣,11主要是因为这个过程可以非常主动.a无论何时你学到一些新的东西,11都可以马上试验并且直接看到运行结果.a事实上,11我们相信学习系统的惟一方法就是做(do)系统,11即在真正的系统上解决具体的问题,11或是编写和运行程序.

这种主题观念贯穿全书.a当引入一个新概念时,12紧随其后的将是一个或多个练习题,12你应该马上做一做来检验你的理解.a练习题的解答在每章的末尾.a当你阅读时,12尝试自己来解答每个问题,12然后再查阅答案,12看看自己是否正确.a每一章后面都有一组不同难度的家庭作业题.a你的指导老师在教师手册中有这些问题的答案.a对每个家庭作业题,12我们标注了我们认为的难度级别:

◆只需要几分钟.a几乎或完全不需要编程.

◆◆可能需要将近20分钟.a通常包括编写和测试一些代码,14许多都取自我们在考试中的题目.

◆◆◆需要很大的努力,15也许是1―2个小时.a一般包括编写和测试大量的代码.

◆◆◆◆一个实验作业,16需要将近10个小时.

文中每段代码示例都是C程序,17经过版本为2.1695.163的GCC编译并在内核版本为2.162.1616的Linux系统上测试后直接生成的,17没有任何人为的改动.a所有源程序代码均可从本书的主页(csapp.16cs.16cmu.16edu)上获取.a在文中,17源程序的文件名列在两条水平线的右边,17水平线之间是格式化代码.a比如,17图P.161中的程序能在code/intro目录下的hello.16c文件中找到.a我们鼓励你,17当遇到这些示例程序时,17在你的系统上试试运行它们.

最后,18有些部分(用“.a”标注的)包含了一些你可能会觉得有趣但可以略过而不影响阅读连贯性的东西.

本书的起源

本书起源于1998年秋季我们在卡内基梅隆(CMU)大学开设的一门编号为15-213的介绍性课程:计算机系统导论(IntroductionctocComputercSystem,20ICS)[7].a从那以后,20每学期都开设了ICS这门课程,20每期有150名左右的学生,20大多数是计算机科学和计算机工程专业二年级的学生.a后来,20这门课程还成为了卡内基梅隆大学计算机科学系以及电子和计算机工程系中大多数高级系统课程的先行必修课.

ICS课程的宗旨是用一种不同的方式向学生介绍计算机.a因为,21我们的学生中几乎没有人有机会构造计算机系统.a另一方面,21大多数学生,21甚至是计算机工程师,21也要求日常能使用计算机和编写计算机程序.a所以我们决定从程序员的角度来讲解系统,21并采用这样的过滤方法:我们只讨论那些影响用户级C程序的性能.c正确性或实用性的主题.

比如,22我们排除了诸如硬件加法器和总线设计这样的主题.a虽然我们谈及了机器语言,22但是不关注如何编写汇编语言,22而是关心C程序是如何被构造的,22例如编译器是如何翻译指针.c循环.c过程调用和返回以及开关(switch)语句的.a更进一步,22我们将更广泛和现实地看待系统,22包括硬件和系统软件,22涵盖了链接.c加载.c进程.c信号.c性能优化.c评估.cI/O以及网络与并发编程.

这种做法使得我们讲授ICS课程的方式对学生来讲既实用.c具体,23还能动手,23同时也非常能调动学生的积极性.a很快地,23我们收到来自学生和教职工非常热烈和积极的反响,23我们意识到卡内基梅隆大学以外的其他人也可以从我们的方法中获益.a因此,23历时两年,23这本书从ICS课程笔记中应运而生了



第1章 计算机系统漫游
1.1 信息就是比特+上下文
1.2 程序被其他程序翻译成不同的格式
1.3 了解编译系统如何工作是大有益处的
1.4 处理器读并解释储存在存储器中的指令
1.4.1 系统的硬件组成
1.4.2 执行hello程序
1.5 高速缓存
1.6 形成层次结构的存储设备
1.7 操作系统管理硬件
1.7.1 进程
1.7.2 线程
1.7.3 虚拟存储器
1.7.4 文件
1.8 利用网络系统和其他系统通信
1.9 下一步
1.10 小结
参考文献说明

第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 271
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 综合:优化合并代码的效果小结
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 小结
参考文献说明
家庭作业
练习题答案

第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 VM作为缓存的工具
10.4 VM作为存储器管理的工具
10.5 VM作为存储器保护的工具
10.6 地址翻译
10.7 案例研究:Pentium/Linux存储器系统
10.8 存储器映射
10.9 动态存储器分配
10.10 垃圾收集
10.11 C程序中常见的与存储器有关的错误
10.12扼要重述一些有关虚拟存储器的关键概念
10.13 小结
第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 综合:TINY Web服务器
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源文件

提交者: gipsky
日期: Sun, 12-Nov-2006

下载: : 2545
文件大小: 0 B

评分:   (0 个评分)

评论:  (0)

镜像网站: 0

下载次数:
N/A
 
价格: 免费的 | 支持平台: None | 授权协议: Apache License (v. 1.1) | 限制: None

安信 会员评论

其他文件: gipsky
All-Seeing Eye (Mon, 20-Aug-2007)
Watcher (Mon, 20-Aug-2007)
GRUB 学习笔记 (Mon, 23-Apr-2007)
网络基础swf演示系列 (Fri, 23-Mar-2007)
多线程SYN攻击工具0.2版 (Thu, 22-Mar-2007)
MS07-004.exe (Tue, 23-Jan-2007)
CCNP-BCMSN 3.0 PPT (Fri, 29-Dec-2006)
CCNP-BSCI 3.0 PPT (Fri, 29-Dec-2006)
CCNP-ISCW 1.0 PPT (Fri, 29-Dec-2006)
CCNP-ONT 1.0 PPT (Fri, 29-Dec-2006)

《深入理解计算机系统(修订版)》 版权所有 2018 http://www.gipsky.org

网友个人意见,不代表本站立场。对于发言内容,由发表者自负责任。

系统导航

 

Copyright © 2001-2010 安信网络. All Rights Reserved
京ICP备05056747号