新書推薦:
《
失衡与重塑——百年变局下的中国与世界经济
》
售價:NT$
602.0
《
不被定义的年龄:积极年龄观让我们更快乐、健康、长寿
》
售價:NT$
352.0
《
南方谈话:邓小平在1992
》
售價:NT$
367.0
《
纷纭万端 : 近代中国的思想与社会
》
售價:NT$
500.0
《
中国古代文体形态研究(第四版)(中华当代学术著作辑要)
》
售價:NT$
765.0
《
朋党之争与北宋政治·大学问
》
售價:NT$
454.0
《
甲骨文丛书·波斯的中古时代(1040-1797年)
》
售價:NT$
403.0
《
以爱为名的支配
》
售價:NT$
286.0
內容簡介:
《深入理解计算机系统(原书第3版)》
和第2版相比,本版内容上最大的变化是,从以IA32和x86-64为基础转变为完全以x86-64为基础。主要更新如下:
基于x86-64,大量地重写代码,首次介绍对处理浮点数据的程序的机器级支持。
处理器体系结构修改为支持64位字和操作的设计。
引入更多的功能单元和更复杂的控制逻辑,使基于程序数据流表示的程序性能模型预测更加可靠。
扩充关于用GOT和PLT创建与位置无关代码的讨论,描述了更加强大的链接技术(比如库打桩)。
增加了对信号处理程序更细致的描述,包括异步信号安全的函数等。
采用新函数,更新了与协议无关和线程安全的网络编程。
《C程序设计语言》:
是由C语言的设计者BrianW.Kernighan和DennisM.Ritchie编写的一部介绍标准C语言及其程序设计方法的性经典著作。书中全面、系统地讲述了C语言的各个特性及程序设计的基本方法,包括基本概念、类型和表达式、控制流、函数与程序结构、指针与数组、结构、输入与输出、UNIX系统接口、标准库等内容。
该书的讲述深人浅出,配合典型例证,通俗易懂,实用性强,适合作为大专院校计算机专业或非计算机专业的C语言教材,也可以作为从事计算机相关软硬件开发的技术人员的参考书。
《C程序设计语言习题解答》:
该书是对Brian W.Kerfligtlan和Derlnis M.Ritchie所著的《C程序设计语言(第2版·新版)》所有练习题的解答,是编程实战辅导书。K&R的著作是C语言方面的经典教材,而这本与之配套的习题解答将帮助读者更加深入地理解C语言并掌握良好的C语言编程技能。
单凭阅读和学习语法结构并不能真正掌握一门程序设计语言,必须进行编程实践——亲自编写一些程序并研究别人写的程序。读者可以通过K&R教材学习C语言,独立地解答书中的练习题,再钻研该书给出的习题解答。
關於作者:
Randal E. Bryant,1981年于麻省理工学院获得计算机博士学位,1984年至今一直任教于卡内基-梅隆大学。现任卡内基-梅隆大学计算机科学学院院长、教授,同时还受邀任教于电子和计算机工程系。他从事本科生和研究生计算机系统方面课程的教学近40年。他和O’Hallaron教授一起在卡内基梅隆大学开设了15-213课程“计算机系统导论”,那便是本书的基础。他还是ACM院士、IEEE院士、美国国家工程院院士和美国人文与科学研究院院士。其研究成果被Intel、IBM、Fujitsu和Microsoft等主要计算机制造商使用,他还因研究获得过Semiconductor Research Corporation、ACM、IEEE颁发的多项大奖。
David R. O’Hallaron,卡内基梅隆大学电子和计算机工程系教授。在弗吉尼亚大学(University of Virginia)获得计算机科学的博士学位,2007年-2010年为Intel匹兹堡实验室主任。他教授本科生和研究生的计算机系统方面的课程已有20余年,并和Bryant教授一起开设了“计算机系统导论”课程。曾获得CMU计算机学院颁发的Herbert Simon杰出教学奖。他主要从事计算机系统领域的研究,与Quake项目成员一起获得过高性能计算领域中的*高国际奖项——Gordon Bell奖。他目前的工作重点是研究自动分级(autograding)概念,即评价其他程序质量的程序。
布莱恩·W.克尼汉(Brian W.Kernighan)贝尔实验室计算科学研究中心高级研究人员,著名的计算机科学家。他参加了UNIX系统、C语言、AWK语言和许多其他系统的开发,同时出版了许多在计算机领域具有影响的著作。
丹尼斯·M.里奇(Dennis M.Ritchie)1967年加入贝尔实验室,曾任该实验室计算科学研究中心系统软件研究部主任。他和Ken L.Thompson共同设计并实现的C语言改变了程序设计语言发展的轨迹,是程序设计语言发展过程中的一个重要里程碑。与此同时,他们两人还设计并实现了UNIX操作系统。正是由于这两项巨大贡献,Dennis M.Ritchie于1983年获得了计算机界的奖——图灵奖。此外,他还获得了ACM、IEEE、贝尔实验室等授予的多种奖项。
目錄 :
《深入理解计算机系统(原书第3版)》
前言
关于作者
第1章 计算机系统漫游1
1.1 信息就是位 上下文1
1.2 程序被其他程序翻译成不同的格式3
1.3 了解编译系统如何工作是大有益处的4
1.4 处理器读并解释储存在内存中的指令5
1.5 高速缓存至关重要9
1.6 存储设备形成层次结构9
1.7 操作系统管理硬件10
1.8 系统之间利用网络通信14
1.9 重要主题16
1.10 小结20
参考文献说明20
练习题答案20
部分
程序结构和执行
第2章 信息的表示和处理22
2.1 信息存储24
2.2 整数表示41
2.3 整数运算60
2.4 浮点数75
2.5 小结87
参考文献说明88
家庭作业88
练习题答案97
第3章 程序的机器级表示109
3.1 历史观点110
3.2 程序编码113
3.3 数据格式119
3.4 访问信息119
3.5 算术和逻辑操作128
3.6 控制135
3.7 过程164
3.8 数组分配和访问176
3.9 异质的数据结构183
3.10 在机器级程序中将控制与数据结合起来192
3.11 浮点代码204
3.12 小结216
参考文献说明216
家庭作业216
练习题答案226
第4章 处理器体系结构243
4.1 Y86-64指令集体系结构245
4.2 逻辑设计和硬件控制语言HCL256
4.3 Y86-64的顺序实现264
4.4 流水线的通用原理282
4.5 Y86-64的流水线实现288
4.6 小结325
参考文献说明326
家庭作业327
练习题答案331
第5章 优化程序性能341
5.1 优化编译器的能力和局限性342
5.2 表示程序性能345
5.3 程序示例347
5.4 消除循环的低效率350
5.5 减少过程调用353
5.6 消除不必要的内存引用354
5.7 理解现代处理器357
5.8 循环展开366
5.9 提高并行性369
5.10 优化合并代码的结果小结377
5.11 一些限制因素378
5.12 理解内存性能382
5.13 应用:性能提高技术387
5.14 确认和消除性能瓶颈388
5.15 小结392
参考文献说明393
家庭作业393
练习题答案395
第6章 存储器层次结构399
6.1 存储技术399
6.2 局部性418
6.3 存储器层次结构421
6.4 高速缓存存储器425
6.5 编写高速缓存友好的代码440
6.6 综合:高速缓存对程序性能的影响444
6.7 小结450
参考文献说明451
家庭作业451
练习题答案459
第二部分
在系统上运行程序
第7章 链接464
7.1 编译器驱动程序465
7.2 静态链接466
7.3 目标文件466
7.4 可重定位目标文件467
7.5 符号和符号表468
7.6 符号解析470
7.7 重定位478
7.8 可执行目标文件483
7.9 加载可执行目标文件484
7.10 动态链接共享库485
7.11 从应用程序中加载和链接共享库487
7.12 位置无关代码489
7.13 库打桩机制492
7.14 处理目标文件的工具496
7.15 小结496
参考文献说明497
家庭作业497
练习题答案499
第8章 异常控制流501
8.1 异常502
8.2 进程508
8.3 系统调用错误处理512
8.4 进程控制513
8.5 信号526
8.6 非本地跳转546
8.7 操作进程的工具550
8.8 小结550
参考文献说明550
家庭作业550
练习题答案556
第9章 虚拟内存559
9.1 物理和虚拟寻址560
9.2 地址空间560
9.3 虚拟内存作为缓存的工具561
9.4 虚拟内存作为内存管理的工具565
9.5 虚拟内存作为内存保护的工具567
9.6 地址翻译567
9.7 案例研究:Intel Core i7/Linux内存系统576
9.8 内存映射582
9.9 动态内存分配587
9.10 垃圾收集605
9.11 C程序中常见的与内存有关的错误609
9.12 小结613
参考文献说明613
家庭作业614
练习题答案617
第三部分
程序间的交互和通信
第10章 系统级I/O622 10.1 Unix I/O622
10.2 文件623
10.3 打开和关闭文件624
10.4 读和写文件625
10.5 用RIO包健壮地读写626
10.6 读取文件元数据632
10.7 读取目录内容633
10.8 共享文件634
10.9 I/O重定向637
10.10 标准I/O638
10.11 综合:我该使用哪些I/O函数?638
10.12 小结640
参考文献说明640
家庭作业640
练习题答案641
第11章 网络编程642
11.1 客户端服务器编程模型642
11.2 网络643
11.3 全球IP因特网646
11.4 套接字接口652
11.5 Web服务器665
11.6 综合:TINY Web服务器671
11.7 小结678
参考文献说明678
家庭作业678
练习题答案679
第12章 并发编程681
12.1 基于进程的并发编程682
12.2 基于I/O多路复用的并发编程684
12.3 基于线程的并发编程691
12.4 多线程程序中的共享变量696
12.5 用信号量同步线程698
12.6 使用线程提高并行性710
12.7 其他并发问题716
12.8 小结722
参考文献说明723
家庭作业723
练习题答案726
附录A 错误处理729
参考文献733
《C程序设计语言》
出版者的话
中文版序
译者序
校译者简介
第2版前言
第1版前言
引言
第1章 导言
1.1 入门
1.2 变量与算术表达式
1.3 for语句
1.4 符号常量
1.5 字符输入/输出
1.5.1 文件复制
1.5.2 字符计数
1.5.3 行计数
1.5.4 单词计数
1.6 数组
1.7 函数
1.8 参数-传值调用
1.9 字符数组
1.10 外部变量与作用域
第2章 类型、运算符与表达式
2.1 变量名
2.2 数据类型及长度
2.3 常量
2.4 声明
2.5 算术运算符
2.6 关系运算符与逻辑运算符
2.7 类型转换
2.8 自增运算符与自减运算符
2.9 位运算符
2.10 赋值运算符与表达式
2.11 条件表达式
2.12 运算符优先级与求值次序
第3章 控制流
3.1 语句与程序块
3.2 if-else语句
3.3 else-if语句
3.4 switch语句
3.5 while循环与for循环
3.6 do-while循环
3.7 break语句与continue语句
3.8 goto语句与标号
第4章 函数与程序结构
4.1 函数的基本知识
4.2 返回非整型值的函数
4.3 外部变量
4.4 作用域规则
4.5 头文件
4.6 静态变量
4.7 寄存器变量
4.8 程序块结构
4.9 初始化
4.10 递归
4.11 C预处理器
4.11.1 文件包含
4.11.2 宏替换
4.11.3 条件包含
第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 复杂声明
第6章 结构
6.1 结构的基本知识
6.2 结构与函数
6.3 结构数组
6.4 指向结构的指针
6.5 自引用结构
6.6 表查找
6.7 类型定义(typedef)
6.8 联合
6.9 位字段
第7章 输入与输出
7.1 标准输入/输出
7.2 格式化输出-printf函数
7.3 变长参数表
7.4 格式化输入-scanf函数
7.5 文件访问
7.6 错误处理-stderr和exit
7.7 行输入和行输出
7.8 其他函数
7.8.1 字符串操作函数
7.8.2 字符类别测试和转换函数
7.8.3 ungetc函数
7.8.4 命令执行函数
7.8.5 存储管理函数
7.8.6 数学函数
7.8.7 随机数发生器函数
第8章 UNIX系统接口
8.1 文件描述符
8.2 低级I/O-read和write
8.3 open、creat、close和unlink
8.4 随机访问-lseek
8.5 实例-fopen和getc函数的实现
8.6 实例-目录列表
8.7 实例-存储分配程序
……
附录A 参考手册
附录B 标准库
附录C 变更小结
索引
《C程序设计语言习题解答》
出版者的话
前言
第1章 导言
第2章 类型、运算符与表达式
第3章 控制流
第4章 函数与程序结构
第5章 指针与数组
第6章 结构
第7章 输入与输出
第8章 UNIX系统接口
內容試閱 :
《深入理解计算机系统》前言
本书(简称CS:APP)的主要读者是计算机科学家、计算机工程师,以及那些想通过学习计算机系统的内在运作而能够写出更好程序的人。
我们的目的是解释所有计算机系统的本质概念,并向你展示这些概念是如何实实在在地影响应用程序的正确性、性能和实用性的。其他的系统类书籍都是从构建者的角度来写的,讲述如何实现硬件或系统软件,包括操作系统、编译器和网络接口。而本书是从程序员的角度来写的,讲述应用程序员如何能够利用系统知识来编写出更好的程序。当然,学习一个计算机系统应该做些什么,是学习如何构建一个计算机系统的很好的出发点,所以,对于希望继续学习系统软硬件实现的人来说,本书也是一本很有价值的介绍性读物。大多数系统书籍还倾向于重点关注系统的某一个方面,比如:硬件架构、操作系统、编译器或者网络。本书则以程序员的视角统一覆盖了上述所有方面的内容。
如果你研究和领会了这本书里的概念,你将开始成为极少数的“牛人”,这些“牛人”知道事情是如何运作的,也知道当事情出现故障时如何修复。你写的程序将能够更好地利用操作系统和系统软件提供的功能,对各种操作条件和运行时参数都能正确操作,运行起来更快,并能避免出现使程序容易受到网络攻击的缺陷。同时,你也要做好更深入探究的准备,研究像编译器、计算机体系结构、操作系统、嵌入式系统、网络互联和网络安全这样的高级题目。
读者应具备的背景知识
本书的重点是执行x86-64机器代码的系统。对英特尔及其竞争对手而言,x86-64是他们自1978年起,以8086微处理器为代表,不断进化的成果。按照英特尔微处理器产品线的命名规则,这类微处理器俗称为“x86”。随着半导体技术的演进,单芯片上集成了更多的晶体管,这些处理器的计算能力和内存容量有了很大的增长。在这个过程中,它们从处理16位字,发展到引入IA32处理器处理32位字,再到近的x86-64处理64位字。
我们考虑的是这些机器如何在Linux操作系统上运行C语言程序。Linux是众多继承自初由贝尔实验室开发的Unix的操作系统中的一种。这类操作系统的其他成员包括Solaris、FreeBSD和MacOS X。近年来,由于Posix和标准Unix规范的标准化努力,这些操作系统保持了高度兼容性。因此,本书内容几乎直接适用于这些“类Unix”操作系统。
文中包含大量已在Linux系统上编译和运行过的程序示例。我们假设你能访问一台这样的机器,并且能够登录,做一些诸如切换目录之类的简单操作。如果你的计算机运行的是Microsoft Windows系统,我们建议你选择安装一个虚拟机环境(例如VirtualBox或者VMWare),以便为一种操作系统(客户OS)编写的程序能在另一种系统(宿主OS)上运行。
我们还假设你对C和C 有一定的了解。如果你以前只有Java经验,那么你需要付出更多的努力来完成这种转换,不过我们也会帮助你。Java和C有相似的语法和控制语句。不过,有一些C语言的特性(特别是指针、显式的动态内存分配和格式化I/O)在Java中都是没有的。所幸的是,C是一个较小的语言,在Brian Kernighan和Dennis Ritchie经典的“K&R”文献中得到了清晰优美的描述\\[61\\]。无论你的编程背景如何,都应该考虑将K&R作为个人系统藏书的一部分。如果你只有使用解释性语言的经验,如Python、Ruby或Perl,那么在使用本书之前,需要花费一些时间来学习C。
本书的前几章揭示了C语言程序和它们相对应的机器语言程序之间的交互作用。机器语言示例都是用运行在x86-64处理器上的GNU GCC编译器生成的。我们不需要你以前有任何硬件、机器语言或是汇编语言编程的经验。
给C语言初学者 关于C编程语言的建议
为了帮助C语言编程背景薄弱(或全无背景)的读者,我们在书中加入了这样一些专门的注释来突出C中一些特别重要的特性。我们假设你熟悉C 或Java。
《C程序设计语言(典藏版)》
《The C Programming Language》不仅在C与C 语言界,而且在整个程序设计语言教学与研究界都是耳熟能详的经典著作。主要的两点原因是:
其一,这部著作自第1版问世后就一直深受广大读者欢迎,畅销不衰,是计算机学术界与教育界著书立说的重要参考文献。可以说,几乎所有的程序设计语言著作以及C与C 著作的作者都把这部著作作为参考文献。早在30多年前我国就翻译出版过这部著作的第1版。
其二,这部著作的原作者之一Dennis M.Ritchie是C语言的设计者,这样就保证了在著作中能完整、准确地体现与描述C语言的设计思想。本书讲述的程序设计方法以及各种语言成分的细节与用法具有权威性,这有利于读者把握C语言的精髓。
《The C Programming Language》的第1版问世于1978年,第2版自1988年面世后一直被广泛使用,至今仍未有新的版本出版,由此可见该著作内容的稳定性。
本书英文原著叙述深入浅出、条理清楚,加之辅以丰富的例证,非常通俗易懂。无论对于计算机专业人员还是非计算机专业人员,也无论用于C语言教学还是用作参考书,它都是当之无愧的正确选择。这也许就是这部著作自第1版问世以来长期畅销不衰的原因之一。
机械工业出版社曾经于2000年出版过中文版。众多高校师生在使用过程中提出了大量的宝贵意见,出版社和我们悉心听取并总结了这些意见,更加深入地领会了原书的要旨,重新认真精读了原书中的每句话,在此基础上,我们推出了新版中文版。此新版中文版在语言、术语标准化、技术细节等方面都对原中文版本进行了更进一步的雕琢。希望本书能够更好地帮助您学习C语言!
本书由东南大学计算机系徐宝文教授和上海交通大学计算机系李志博士翻译,上海交通大学计算机系的尤晋元教授审校了全书内容。在本书出版之际,我们感谢所有曾经给予我们帮助的人们!
本书的原著是经典的C语言教材,我们在翻译本书的过程中,无时无刻不感觉如履薄冰,唯恐因为才疏学浅,无法正确再现原著的风范,因此,我们一直在努力做好每件事情。但是,无论如何尽力,错误和疏漏在所难免,敬请广大读者批评指正。
《C程序设计语言习题解答( 典藏版)》
这本习题解答对Brian W. Kernighan和Dennis M. Ritchie所著的《The C Programming Language》(第2版,Prentice Hall, 1988)(以下简称为“K&R原著”)中所有的练习题都进行了解答。
在美国国家标准协会(American National Standards Institute,ANSI)推出C语言的ANSI标准之后,Kernighan和Ritchie两位作者对《The C Programming Language》的第1版进行了修订,所以我们也根据ANSI标准和K&R的《The C Programming Language》(第2版)对有关习题解答进行了修订。
K&R所著的《The C Programming Language》(第2版)是C语言方面的经典教材,而这本与之配套的习题解答将帮助读者更加深入地理解C语言并掌握良好的C语言编程技巧。读者可以通过K&R原著学习C语言,独立地解答书中的练习题,再钻研本书给出的习题答案。有关习题都是用K&R原著中当时已经介绍过的语言结构来解答的,这样做的目的是使这本习题解答能够与K&R原著中的教学内容保持同步。在学习了更多的C语言知识之后,相信大家能够给出更好的解决方案。