编辑点评:讲解计算机系统的核心概念及实现方法
南京大学袁春风教授推荐,美国高校采用七层结构讲解计算机系统的核心概念及软硬件实现方法的教材,美国斯坦利·沃法德(J. Stanley Warford)著,计算机系统:核心概念及软硬件实现(原书第5版)覆盖CS2013 ICS(系统基础)全部知识点,讲解计算机系统的核心概念及实现方法。
计算机系统核心概念及软硬件实现5版图片预览
内容简介
本书以计算机系统的七层结构为主线,涵盖逻辑门、微代码、指令集架构、操作系统、汇编、高级语言和应用,全面介绍计算机组成、汇编语言和计算机体系结构的核心思想及软硬件实现方法。新版采用Pep/9虚拟机,清晰地阐释了经典冯·诺依曼机器的基本概念,同时包含完整的程序示例和丰富的习题,在理论与实践相结合的基础上,注重内容的广度和深度。
本书适合作为高等院校计算机专业的课程教材,也可供相关技术人员阅读参考。
作者介绍
J.斯坦利·沃法德(J.StanleyWarford)现为美国佩珀代因大学计算机科学系教授,曾任计算机科学系主任,由于杰出的教学成果而获得了Luckman奖。他从伦斯勒理工学院获得硕士学位,从加州大学洛杉矶分校获得博士学位。在进入学术界之前,Warford教授曾是一名航空工程师。
目录大全
ComputerSystems,FifthEdition
出版者的话
译者序
前言
第一部分 应用层(第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章 C36
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 IEEE754浮点数标准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 十进制转换为ASCII139
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 常量和.EQUATE176
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 函数调用和参数201
6.3.1 翻译函数调用201
6.3.2 用全局变量翻译传值调用参数204
6.3.3 用局部变量翻译传值调用参数207
6.3.4 翻译非空函数调用209
6.3.5 用全局变量翻译传引用调用参数211
6.3.6 用局部变量翻译传引用调用参数215
6.3.7 翻译布尔类型218
6.4 变址寻址和数组220
6.4.1 翻译全局数组221
6.4.2 翻译局部数组224
6.4.3 翻译作为参数传递的数组226
6.4.4 翻译switch语句230
6.5 动态内存分配235
6.5.1 翻译全局指针235
6.5.2 翻译局部指针240
6.5.3 翻译结构243
6.5.4 翻译链式数据结构246
本章小结250
练习251
编程题251
第7章 语言翻译原理259
7.1 语言、语法和语法分析259
7.1.1 连接260
7.1.2 语言260
7.1.3 语法261
7.1.4 C标识符的语法262
7.1.5 有符号整数的语法263
7.1.6 上下文相关的语法264
7.1.7 语法分析问题264
7.1.8 表达式的语法265
7.1.9 C语法的一部分266
7.1.10 C的上下文相关性269
7.2 有限状态机270
7.2.1 用有限状态机分析标识符270
7.2.2 简化的有限状态机271
7.2.3 非确定性有限状态机271
7.2.4 具有空转换的状态机272
7.2.5 多语言符号识别器274
7.2.6 语法与有限状态机276
7.3 实现有限状态机277
7.3.1 编译过程278
7.3.2 查找表分析器278
7.3.3 直接编码分析器280
7.3.4 输入缓冲区类282
7.3.5 多语言符号分析器283
7.4 代码生成288
7.4.1 语言翻译器288
7.4.2 语法分析器特性302
本章小结303
练习303
编程题306
第五部分 操作系统(第4层)
第8章 进程管理312
8.1 装载器312
8.1.1 Pep/9操作系统312
8.1.2 Pep/9装载器314
8.1.3 程序的终止315
8.2 陷阱315
8.2.1 陷阱机制316
8.2.2 RETTR指令317
8.2.3 陷阱处理程序317
8.2.4 陷阱寻址方式断言319
8.2.5 陷阱操作数地址计算320
8.2.6 空操作陷阱处理程序323
8.2.7 DECI陷阱处理程序324
8.2.8 DECO陷阱处理程序329
8.2.9 HEXO和STRO陷阱处理程序和操作系统向量332
8.3 并发进程334
8.3.1 异步中断334
8.3.2 操作系统中的进程335
8.3.3 多处理336
8.3.4 并发处理程序337
8.3.5 临界区338
8.3.6 第一次尝试实现互斥339
8.3.7 第二次尝试实现互斥339
8.3.8 Peterson互斥算法340
8.3.9 信号量342
8.3.10 带信号量的临界区343
8.4 死锁343
8.4.1 资源分配图344
8.4.2 死锁策略345
本章小结346
练习346
编程题351
第9章 存储管理353
9.1 内存分配353
9.1.1 单道程序设计353
9.1.2 固定分区多道程序设计354
9.1.3 逻辑地址355
9.1.4 可变分区多道程序设计356
9.1.5 分页359
9.2 虚拟内存361
9.2.1 大程序的行为361
9.2.2 虚拟内存361
9.2.3 按需分页362
9.2.4 替换页363
9.2.5 页替换算法363
9.3 文件管理365
9.3.1 磁盘驱动器365
9.3.2 文件抽象366
9.3.3 分配技术367
9.4 错误检测与纠错码369
9.4.1 错误检测码369
9.4.2 编码要求370
9.4.3 纠正一位错误编码372
9.5 RAID存储系统373
9.5.1 RAID0级:无冗余条带化374
9.5.2 RAID1级:镜像374
9.5.3 RAID01和10级:条带化和镜像375
9.5.4 RAID2级:内存风格的ECC376
9.5.5 RAID3级:位交叉奇偶校验377
9.5.6 RAID4级:块交叉奇偶校验377
9.5.7 RAID5级:块交叉分布奇偶校验378
本章小结379
练习379
第六部分 逻辑门(第1层)
第10章 组合电路384
10.1 布尔代数和逻辑门384
10.1.1 组合电路385
10.1.2 真值表385
10.1.3 布尔代数386
10.1.4 布尔代数定理387
10.1.5 互补证明388
10.1.6 逻辑图389
10.1.7 其他表示方式391
10.2 组合分析392
10.2.1 布尔表达式和逻辑图392
10.2.2 真值表和布尔表达式393
10.2.3 两级电路395
10.2.4 无处不在的NAND397
10.3 组合设计398
10.3.1 范式398
10.3.2 三变量卡诺图399
10.3.3 四变量卡诺图403
10.3.4 对偶卡诺图406
10.3.5 无关条件406
10.4 组合设备407
10.4.1 视角407
10.4.2 复用器408
10.4.3 二进制译码器409
10.4.4 多路分配器410
10.4.5 加法器410
10.4.6 加法器/减法器412
10.4.7 算术逻辑单元413
10.4.8 LG1层的抽象419
本章小结420
练习420
第11章 时序电路426
11.1 锁存器与时钟触发器426
11.1.1 SR锁存器426
11.1.2 钟控SR触发器428
11.1.3 主从SR触发器429
11.1.4 基本触发器433
11.1.5 JK触发器434
11.1.6 D触发器435
11.1.7 T触发器436
11.1.8 激励表437
11.2 时序分析与设计437
11.2.1 时序分析问题438
11.2.2 预设置与清除441
11.2.3 时序设计441
11.2.4 一个时序设计问题441
11.3 计算机子系统444
11.3.1 寄存器444
11.3.2 总线445
11.3.3 内存子系统446
11.3.4 地址译码449
11.3.5 双端口寄存器组453
本章小结455
练习455
第七部分 微代码(第2层)
第12章 计算机组成460
12.1 构建一个ISA3层机器460
12.1.1 CPU数据区460
12.1.2 冯·诺依曼周期463
12.1.3 存储字节直接寻址指令467
12.1.4 总线协议468
12.1.5 存储字直接寻址指令468
12.1.6 加法立即数寻址指令469
12.1.7 装入字间接寻址指令470
12.1.8 算术右移指令473
12.1.9 CPU控制区474
12.2 性能476
12.2.1 数据总线宽度和内存对齐476
12.2.2 内存对齐480
12.2.3 n位计算机的定义483
12.2.4 高速缓存484
12.2.5 系统性能公式490
12.2.6 RISC与CISC491
12.3 MIPS机器494
12.3.1 寄存器组494
12.3.2 寻址方式495
12.3.3 指令集498
12.3.4 MIPS的计算机组成501
12.3.5 流水线505
12.4 结论512
12.4.1 模型简化512
12.4.2 全局架构513
本章小结514
练习514
编程题517
附录 Pep/9体系结构519
部分练习参考答案529
索引543
前言阅读
Computer Systems, Fifth Edition
本书清晰详尽、循序渐进地揭示了计算机组成、汇编语言和计算机体系结构的核心思想。本书大部分以虚拟机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)。此外,还通过对高速缓存、流水线、动态分支预测以及超标量机器的描述,介绍了一些性能问题。
下载体验