计算机系统:核心概念及软硬件实现pdf下载pdf下载

计算机系统:核心概念及软硬件实现百度网盘pdf下载

作者:
简介:本篇主要提供计算机系统:核心概念及软硬件实现pdf下载
出版社:机械工业出版社自营官方旗舰店
出版时间:2019-01
pdf下载价格:0.00¥

免费下载


书籍下载


内容介绍

编辑推荐

美国三大计算机系统基础教材之一

覆盖CS2013 ICS(系统基础)全部知识点

讲解计算机系统的核心概念及实现方法


本书采用七层结构讲解计算机系统的核心概念及软硬件实现方法,关注基础的计算概念而非追踪新的技术进展,并且特别强调通过实践培养学生解决问题的能力。全书以Pep/9虚拟机模型贯穿各章,清晰呈现了各个抽象层次之间的关系,并配有完整的程序示例和丰富的习题。

重要更新
Pep/9取代了前两版所用的虚拟机Pep/8。除了更新指令集外,Pep/9还采用了内存映射I/O,改进了部分指令的助记符,并扩展了MIPS内容。
高级语言从C++变为C。C作为系统编程语言更为常见,而且也更加适合计算机系统文本,从而能够更加精确地描述内存模型。
新增Intel x86架构的实现示例。作为补充材料,这些示例取代了上一版中的人物传记,以帮助读者理解虚拟机概念与真实实现的对应关系。
大量新主题与扩展主题。如用Java而不是C++语言实现翻译器、使用Pep/9 CPU模拟器新的UnitPre和UnitPost特性等,丰富了全书内容。

内容简介

本书从逻辑门、微编码、指令集体系结构、操作系统、汇编、高阶语言和应用等层级,系统而全面地介绍了计算机系统、C++、信息表示、计算机体系结构、汇编语言、汇编级编译、语言翻译原理、进程管理、存储管理、组合电路、顺序电路、计算机组成。书后配有练习答案。本书全面而系统地介绍了计算机组成、汇编语言和计算机体系结构的核心概念。通过自顶向下的方法,引导读者探索不同规模的计算机系统以及抽象级。通过检查不同的抽象级如何彼此相关,来帮助读者了解计算机系统及其组件。

作者简介

作者简介:
J. 斯坦利;沃法德(J. Stanley Warford) 现为美国佩珀代因大学(Pepperdine University)大学计算机科学系教授。Warford教授在进入学术界前是航空工程师,他任教30余年,曾担任佩珀代因大学计算机科学系主任。他从伦斯勒理工学院获得硕士学位,从加州大学洛杉矶分校获得博士学位。Warford教授获得Luckman杰出教学奖,是Pepperdine大学科学学部的Frank R. Seaver教授。

译者简介:
龚奕利 本科毕业于武汉大学,在中国科学院计算技术研究所获得博士学位,曾在美国印第安纳大学从事博士后工作和美国密歇根大学从事访问学者工作,现为武汉大学计算机学院副教授。主要研究方向为高性能计算和分布式系统,包括云计算和广域文件系统。翻译过《深入理解计算机系统》(、二版)等计算机专业书籍。

目录

出版者的话
译者序
前言
第一部分 应用层(第7层)
第1章 计算机系统 2
1.1 抽象层次 2
1.1.1 艺术中的抽象 3
1.1.2 文档中的抽象 4
1.1.3 机构中的抽象 5
1.1.4 机器中的抽象 6
1.1.5 计算机系统中的抽象 6
1.2 硬件 7
1.2.1 中央处理单元 8
1.2.2 主存储器 9
1.2.3 磁盘 10
1.3 软件 11
1.3.1 操作系统 12
1.3.2 软件分析与设计 13
1.4 数字信息 14
1.4.1 空间量化 14
1.4.2 时间量化 16
1.4.3 快速响应码 18
1.4.4 图像 21
1.5 数据库系统 27
1.5.1 关系 27
1.5.2 查询 28
1.5.3 语言结构 30
本章小结 31
练习 32
第二部分 高级语言层(第6层)
第2章 C 36
2.1 变量 36
2.1.1 C编译器 36
2.1.2 机器无关性 37
2.1.3 C的内存模型 37
2.1.4 全局变量和赋值语句 38
2.1.5 局部变量 40
2.2 控制流 42
2.2.1 if/else语句 42
2.2.2 switch语句 43
2.2.3 while循环 44
2.2.4 do循环 44
2.2.5 数组和for循环 45
2.3 函数 46
2.3.1 空函数和传值调用的参数 46
2.3.2 函数的例子 48
2.3.3 传引用调用的参数 48
2.4 递归 51
2.4.1 阶乘函数 52
2.4.2 递归的思考方式 55
2.4.3 递归加法 55
2.4.4 二项式系数函数 57
2.4.5 逆转数组元素顺序 61
2.4.6 汉诺塔 61
2.4.7 相互递归 63
2.4.8 递归的成本 64
2.5 动态内存分配 65
2.5.1 指针 65
2.5.2 结构 67
2.5.3 链式数据结构 68
本章小结 69
练习 70
编程题 71
第三部分 指令集架构层(第3层)
第3章 信息的表示 76
3.1 无符号二进制表示 76
3.1.1 二进制存储 76
3.1.2 整数 77
3.1.3 基数转换 78
3.1.4 无符号整数的范围 80
3.1.5 无符号加法 80
3.1.6 进位位 81
3.2 二进制补码表示 81
3.2.1 补码的表数范围 83
3.2.2 基数转换 84
3.2.3 数轴 85
3.2.4 溢出位 86
3.2.5 负数和零位 87
3.3 二进制运算 88
3.3.1 逻辑运算符 88
3.3.2 寄存器传送语言 89
3.3.3 算术运算符 90
3.3.4 循环移位运算符 91
3.4 十六进制与字符表示 92
3.4.1 十六进制 92
3.4.2 基数转换 92
3.4.3 ASCII字符 94
3.4.4 Unicode字符 97
3.5 浮点数表示 100
3.5.1 二进制小数 100
3.5.2 余码表示 102
3.5.3 隐藏位 103
3.5.4 特殊值 104
3.5.5 IEEE 754浮点数标准 108
3.6 模型 109
本章小结 111
练习 111
编程题 117
第4章 计算机体系结构 120
4.1 硬件 120
4.1.1 中央处理单元 120
4.1.2 主存储器 121
4.1.3 输入/输出设备 122
4.1.4 数据和控制 123
4.1.5 指令格式 123
4.2 直接寻址 126
4.2.1 停止指令 126
4.2.2 字装入指令 126
4.2.3 字存储指令 127
4.2.4 加法指令 128
4.2.5 减法指令 128
4.2.6 与和或指令 129
4.2.7 按位取反和取负指令 130
4.2.8 字节装入和字节存储指令 131
4.2.9 输入和输出设备 132
4.2.10 大端顺序和小端顺序 133
4.3 冯·诺依曼机器 134
4.3.1 冯·诺依曼执行周期 134
4.3.2 一个字符输出程序 135
4.3.3 冯·诺依曼漏洞 138
4.3.4 一个字符输入程序 139
4.3.5 十进制转换为ASCII 139
4.3.6 一个自我修改程序 140
4.4 ISA3层的编程 142
4.4.1 只读存储器 143
4.4.2 Pep/9操作系统 144
4.4.3 使用Pep/9系统 145
本章小结 146
练习 146
编程题 148
第四部分 汇编层(第5层)
第5章 汇编语言 150
5.1 汇编程序 150
5.1.1 指令助记符 150
5.1.2 伪操作 152
5.1.3 .ASCII和.END伪操作 153
5.1.4 汇编器 154
5.1.5 .BLOCK伪操作 155
5.1.6 .WORD和.BYTE伪操作 155
5.1.7 使用Pep/9汇编器 156
5.1.8 交叉汇编器 157
5.2 立即数寻址和陷阱指令 158
5.2.1 立即数寻址 158
5.2.2 DECI、DECO和BR指令 159
5.2.3 STRO指令 161
5.2.4 解释位模式:HEXO指令 162
5.2.5 反汇编器 163
5.3 符号 165
5.3.1 带符号的程序 165
5.3.2 一个冯·诺依曼示例 166
5.4 从HOL6层翻译 168
5.4.1 Printf()函数 169
5.4.2 变量和类型 170
5.4.3 全局变量和赋值语句 171
5.4.4 类型兼容 174
5.4.5 Pep/9符号跟踪器 175
5.4.6 算术移位和循环移位指令 175
5.4.7 常量和.EQUATE 176
5.4.8 指令与数据的放置 178
本章小结 179
练习 180
编程题 182
第6章 编译到汇编层 185
6.1 栈寻址和局部变量 185
6.1.1 栈相对寻址 185
6.1.2 访问运行时栈 186
6.1.3 局部变量 188
6.2 分支指令和控制流 190
6.2.1 翻译if语句 191
6.2.2 优化编译器 192
6.2.3 翻译if/else语句 192
6.2.4 翻译while循环 194
6.2.5 翻译do循环 195
6.2.6 翻译for循环 197
6.2.7 面条代码 198
6.2.8 早期语言的控制流 199
6.2.9 结构化编程定律 200
6.2.10 goto争论 200
6.3 函数

前言/序言

本书清晰详尽、循序渐进地揭示了计算机组成、汇编语言和计算机体系结构的核心思想。本书大部分以虚拟机Pep/9为基础,该虚拟机用于讲解经典冯·诺依曼机器的基本概念。这种方式的优点是,既教授了计算机科学的核心概念,又不会与相关课程的许多无关细节纠缠不清。该方式还为学生奠定了基础,鼓励他们思考计算机科学的基本主题。本书的范围也比较广泛,重点强调了与硬件及其相关软件的处理有关但却少有提及的计算机科学主题。
内容一览
计算机运行于多个抽象层,高抽象层上的编程只是其中的一部分。本书以图P-1所示的分层结构为基础,提出了计算机系统的统一概念。
按照图P-1的层次结构,本书分为七个部分:
App7层 应用
HOL6层 高级语言
ISA3层 指令集架构
Asmb5层 汇编
OS4层 操作系统
LG1层 逻辑门
Mc2层 微代码
用文字描述时通常是按照从上到下的顺序,从最高层到最低层。把ISA3层放在Asmb5层之前,以及把LG1层放在Mc2层之前讨论是为了教学目的。对这两个特例来说,暂时将顺序变为从下往上会更加自然一些,因为这样一来在构建高层时可以使用低层模块。
App7层。App7层是关于应用程序的独立一章,叙述了抽象层次的思想与二进制信息,并为本书其他章节搭建了框架。这一章还以典型计算机应用程序示例的方式描述了一些关系数据库的概念。
HOL6层。HOL6层也是一章,回顾了C编程语言。这一章假设学生已经学习过一些命令式语言,比如Java或Python,不一定是C。如果必要的话,指导老师可以轻易地把C语言示例翻译为其他常见的HOL6层语言。
这一章的重点在于C内存模型,包括全局和局部变量、带参数的函数,以及动态分配的变量。此外,还讲解了递归,因为它要依赖运行时堆栈的内存分配机制。函数调用中的内存分配过程阐释得相当详细,而且后续章节还会在较低抽象层上回顾这个机制。
ISA3层。ISA3是指令集架构层。这一层用两章来描述Pep/9——一种用于说明计算机概念的虚拟机。Pep/9是一个小型的复杂指令集计算机(CISC),也是冯·诺依曼计算机。它的中央处理器(CPU)包含一个加法器、一个变址寄存器、一个程序计数器、一个栈指针寄存器和一个指令寄存器。它有八种寻址方式:立即数寻址、直接寻址、间接寻址、栈相对寻址、栈相对间接寻址、变址寻址、栈变址寻址和栈间接变址寻址。在模拟只读存储器(ROM)中,Pep/9的操作系统可以从学生的文本文件中加载并执行十六进制格式的程序。学生可以在Pep/9模拟器上运行小程序,学习执行不会改变内存值的ROM存储指令。
学生将学习信息表示和位级计算机组成的基本原理。由于本书的中心主题是计算机各层间的相互关系,因此,Pep/9相关章节展示了ASCII表示(ISA3层)和C的char类型变量(HOL6层)之间的关系。此外,这些章节还展示了补码表示(ISA3层)和C的int类型变量(HOL6层)之间的关系。
Asmb5层。Asmb5是汇编层,它把汇编器的概念表示为两个层次——汇编层和机器层——之间的翻译器。它引入了Asmb5符号和符号表。
这里是统一方法派上用场的地方。第5章和第6章将编译器表示为从高级语言到汇编语言的翻译器。前面学生已经学习了一种特定的HOL6层语言C和一种特定的冯·诺依曼型机器Pep/9。这两章通过展示层次之间的对应关系来继续揭示它们之间的关系,其中包括:HOL6层的赋值语句与Asmb5层的装入/存储指令;HOL6层的循环和if语句与Asmb5层的分支指令;HOL6层的数组与Asmb5层的变址寻址;HOL6层的过程调用与Asmb5层的运行时栈;HOL6层的函数和过程参数与Asmb5层的栈相对寻址;HOL6层的switch语句与Asmb5层的跳转表;HOL6层的指针与Asmb5层的地址。
统一方法之美就在于可以在较低层次上实现C章节中的例子。比如,第2章递归示例说明的运行时栈就直接对应于Pep/9主存的硬件栈。学生可以通过两个层次之间的手动翻译来理解编译过程。
这种方法为讨论计算机科学中的核心问题提供了一种很自然的环境。例如,本书介绍了HOL6层的结构化编程,可以和Asmb5层的非结构化编程的可能性进行对比。书中讨论了goto争议、结构化编程/效率之间的折中,给出了两个层次上语言的实际例子。
第7章向学生介绍了计算机科学理论。现在学生已经对如何将高级语言翻译为汇编语言有了直观的了解,那么,我们就要提出所有计算中最基本的问题:什么可以被自动化?理论在这里自然又合适,因为学生现在已经知道了什么是编译器(自动化翻译器)必须做的。他们通过识别C和Pep/9汇编语言的语言符号来学习语法分析和有限状态机——确定性的和非确定性的。这一章包含了两种小语言之间的自动翻译器,说明了词法分析、语法分析和代码生成。词法分析器是有限状态机的实现。还有比这更自然的介绍理论的方法吗?
OS4层。OS4层用两章来讲述操作系统。第8章是关于进程管理的,其中有两节讲解了Pep/9操作系统的概念,一节是装载器,另一节是陷阱处理程序。七条指令具有产生软件陷阱的未实现的操作码。操作系统将用户正在运行进程的进程控制块保存到系统栈,中断服务例程解释该指令。通过具体实现一个挂起进程来强化操作系统中运行和等待进程的经典状态转换图。第8章还描述了并发进程和死锁。第9章阐述了关于主存和磁盘存储器的存储管理。
LG1层。LG1层用两章来讲述组合电路与时序电路。从布尔代数的定理开始,第10章强调了计算机科学的数学基础的重要性。它展示了布尔代数和逻辑门之间的关系,然后描述了一些常用的逻辑设备,包括一个完整的Pep/9算术逻辑单元(ALU)的逻辑设计。第11章用时序电路的状态转换图讲解了有限状态机的基本概念,还描述了常见的计算机子系统,包括双向总线、内存芯片以及双端口存储器组。
Mc2层。第12章描述了Pep/9 CPU的微程序设计控制部分,给出了一些示例指令和寻址方式的控制序列,还提供了有关其他指令和寻址方式的大量练习。这一章还介绍了装入/存储架构的概念,对比了MIPS精简指令集计算机(RISC)和Pep/9复杂指令集计算机(CISC)。此外,还通过对高速缓存、流水线、动态分支预测以及超标量机器的描述,介绍了一些性能问题。
教学建议
本书涵盖内容相当广泛,教师在设计课程时可以省略一些内容。我把第1~7章用于计算机系统课程,第10~12章用于计算机组成课程。
本书中,第1~5章必须顺序讲解,第6章和第7章可以按任意顺序讲授。我通常会省略第6章而直接讲第7章,开始一个大型软件项目——为Pep/9汇编语言的子集写汇编器,这样学生在一学期中有足够的时间完成它。第11章明显依赖于第10章,但这两章都与第9章无关,因此,第9章可以省略。图P-2是章节关系依赖示意图,总结了可以省略哪些章节。

图P-2 章节关系依赖图
第5版的变化
第5版中的每一章都有改进,主要集中在两个方面:一个是虚拟机从Pep/8变为Pep/9;另一个是内容上的变化。第二点涉及面太大,无法一一列出,这里只给出其中的主要变化。
HOL6语言——第5版中的HOL6语言从C++变为C。C作为系统编程语言更为常见,而且也更加适合计算机系统文本。上一版指出C++的内存模型包括在内存固定位置分配的全局变量、在运行时栈上分配的局部变量与参数以及从堆分配的动态变量。但C++是一种面向对象(OO)的语言,它的内存模型要复杂得多。相比C++,上述模型用C语言表述要更加精确一些。变化体现在三个地方:示例程序的输入/输出(I/O)用scanf()和printf()替代了cin和cout;在C的传递引用机制里,实际参数显式地使用地址运算符&,形式参数则使用对应的指针类型;堆的内存分配用malloc替代了new。
补充示例——第5版把之前每一章的简要人物传记改为不同的补充示例,放在特殊格式的文本框中。每一个补充示例都是该章所描述概念的真实示例。大多数章节都是描述Pep/9虚拟机的,这些章节的补充示例给出了Intel x86架构中相应部分的实现。新补充示例提供了与该架构一致的运行实例,学生能更好地理解虚拟机概念与真实实现之间是如何对应的。
新主题与扩展主题——第1章现在强调的是如何利用性能公式和带宽概念在空间和时间上量化二进制信息。QR代码和颜色显示是这些概念的详细示例。第3章描述了Unicode、UTF-32和UTF-8编码。第4章讨论了大端顺序和小端顺序。第7章用Java而不是C++语言实现示例翻译器。第12章的微代码示例使用了Pep/9 CPU模拟器新的UnitPre和UnitPost特性。双字节数据总线现在得到了模拟器的支持,这使得讨论主题可以扩展到内存对齐问题和新的.ALIGN伪指令。
Pep/9取代了前两版所用的虚拟机Pep/8。由于这两种机器指令集的不同,Pep/8的源程序和目标程序不能与Pep/9的兼容。不过只有几条指令会受到影响,多数还是和原来一样,包括八种寻址方式。Pep/9有下述变化:
RET代替了RETn——Pep/8有八种返回语句,分别为RET0,RET1,…,RET7。RETn从运行时栈释放n个字节,然后执行从函数调用的返回。这样做的理由是,返回之前总要释放局部变量,所以,如果汇编语言程序员不需要在返回前用ADDSP指令显式释放局部变量的话,程序就会更短一些。
虽然这种ISA设计在体系结构原理上可能是合理的,但在教学上却存在缺陷。问题是学生必须学习两种不同的概念:数据的释放机制和控制流的返回机制。将这两种不同的概念组合在一条语句中,在学习时可能会造成混淆。现在,Pep/9要求学生用ADDSP语句显式地释放局部变量。另一个格式上的优势是,函数结束时显式使用ADDSP释放局部变量直接与函数开始时用SUBSP分配局部变量相对应。
内存映射I/O——对Pep/8指令集中的所有指令来说,最不切实际的就是用于字符输入/输出的CHARI和CHARO。大多数真实计算机系统都把输入/输出映射到内存,Pep/9现在就是这样设计的。在新指令集中没有原生的输入/输出指令。相反,Pep/8的指令

被如下Pep/9指令所替代,其中的charIn是输入设备。

而Pep/8指令

也被如下Pep/9指令所替代,其中的charOut是输出设备。

在上述指令中,ad表示该指令的任意一种合法的寻址方式。符号charIn和charOut在Pep/9操作系统中定义,并作为机器向量保存在内存底部。它们的值会自动包含进汇编器的符号表中。
内存映射I/O的一个缺点是,Pep/8程序中的每一个CHARI和CHARO语句现在都需要编写为两条语句,这使得程序变长。不过,陷阱指令DECI、DECO、STRO与原来一样,这使得问题得以控制,因为原生I/O指令隐藏在它们的陷阱例程中。
学生通过从输入设