当前: 首页 - 图书专区 - 计算机系统:核心概念及软硬件实现(原书第4版)
计算机系统:核心概念及软硬件实现(原书第4版)


  在线购买
[美] J. 斯坦利·沃法德(J. Stanley Warford)著
978-7-111-50783-3
79.00
494
2015年07月20日
龚奕利 译
计算机 > 计算机组织与体系结构
Jones and Bartlet Publishers
2021
简体中文
16
Computer Systems,Fourth Edition
教材
计算机科学丛书








本书从逻辑门、微编码、指令集体系结构、操作系统、汇编、高阶语言和应用等层级,系统而全面地介绍了计算机系统、C++、信息表示、计算机体系结构、汇编语言、汇编级编译、语言翻译原理、进程管理、存储管理、组合电路、顺序电路、计算机组成。书后配有练习答案。本书全面而系统地介绍了计算机组成、汇编语言和计算机体系结构的核心概念。通过自顶向下的方法,引导读者探索不同规模的计算机系统以及抽象级。通过检查不同的抽象级如何彼此相关,来帮助读者了解计算机系统及其组件。
本书清晰、详细、一步一步地介绍了计算机组成、汇编语言和计算机体系结构中的核心概念。它带领学生用自上而下的方法探索计算机系统各个抽象层次的方方面面。通过说明不同的抽象层次和其他层次之间的关系,本书帮助学生将计算机系统及其组成部分看作一个统一的概念。
本书基于Pep/8汇编器和模拟器,用来讲授经典冯·诺依曼机器的基本知识。Pep/8现在包括新的符号跟踪特性,能够在学生单步跟踪程序时,实时显示全局变量和运行时栈的情况。
作者Warford教授从教30余年,他贯穿全书强调了掌握基本计算机概念的重要性,是理解当前和未来技术的基础,他还强调了解决问题能力的重要性。本书覆盖了ACM-IEEE计算机科学课程体系指导意见中体系结构和组成原理中所有的核心概念。

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

译者简介
龚奕利 本科毕业于武汉大学,在中国科学院计算技术研究所获得博士学位,曾在美国印第安纳大学从事博士后工作和美国密歇根大学从事访问学者工作,现为武汉大学计算机学院副教授。主要研究方向为高性能计算和分布式系统,包括云计算和广域文件系统。翻译过《深入理解计算机系统》(第一、二版)等计算机专业书籍。
本书清晰、详细、循序渐进地展示了计算机组成、汇编语言和计算机体系结构中的核心思想。本书的很大一部分是建立在一个虚构的计算机Pep/8基础上的,用它来讲解经典的冯·诺依曼机器的基本概念。这种方法的好处是能够讲解计算机科学的核心概念,而又不必拘泥于此类课程中常见的许多不相关的细节。这种方法还能鼓励学生思考计算机科学底层的原理。本书的范围也比较广泛,重点强调了与硬件及其相关软件的处理有关而少有提及的计算机科学主题。
内容摘要
计算机运行在一些抽象层上,在高级抽象层上编程只是一部分。基于图1的层次结构,本书展示了计算机系统的一个统一的概念。
对应于图1的7层,本书也分为7个部分:
App7层 应用层
HOL6层 高级语言层
ISA3层 指令集架构层
Asmb5层 汇编层
OS4层 操作系统层
LG1层 逻辑门层
Mc2层 微代码层
本书主要是按照从上到下、从最高层到最低层的顺序来书写。ISA3层在Asmb5层之前以及LG1层在Mc2层之前讲解是出于教学的目的。在这两种情况下,暂时用相反的从下至上的方法来讲解更自然,有了低层的构造模块就很容易完成上层的构建。
App7层 App7层是单独一章,介绍了应用程序。本章展示了抽象层次的概念,建立本书剩下部分的框架。还介绍了一些关系数据库的概念,作为典型计算机应用的例子。同时,还假设学生对文字编辑器或文字处理器有一定的经验。
HOL6层 HOL6层也是一章,复习了C++编程语言。本章假设学生具有某种命令语言的经验,不一定是C++,可以是Java或C。书中避免了C++的高级特性,包括面向对象的概念。如果有必要,教师可以把C++例子翻译成其他HOL6层的语言。
本章着重介绍了C++内存模型,包括全局变量和局部变量、函数参数以及动态分配的变量。也介绍了递归的问题,因为它依赖于运行时栈上的内存分配机制。还相当详细地解释了函数调用的内存分配过程,因为本书后面还会在较低抽象层次上分析这个机制。
ISA3层 ISA3层是指令集架构层,包括两章,描述了一个用于说明计算机概念的虚构的Pep/8计算机。Pep/8是经典的冯·诺依曼机器。CPU包含一个累加器、一个变址寄存器、一个程序计数器、一个栈指针和一个指令寄存器。有8种寻址方式:立即数、直接、间接、栈相对、栈相对间接、变址、栈变址和栈变址间接。在模拟的只读存储器(ROM)中,Pep/8操作系统能从学生的文本文件中装入和执行十六进制格式的程序。学生可以在Pep/8模拟器上运行小程序,学习不会改变内存值的ROM存储指令。
学生能学习到位层的信息表示和计算机组成的知识。因为本书的中心主题是层次之间的关系,所以有关Pep/8的章节展示了ASCII表示(ISA3层)和类型为char的C++变量(HOL6层)之间的关系。还展示了补码表示(ISA3层)和类型为int的C++变量(HOL6)之间的关系。
Asmb5层 Asmb5层是汇编层,书中介绍了汇编器的概念(汇编器是汇编层和机器层之间的翻译器),还介绍了Asmb5层的符号和符号表。
这里是统一的方法派上用场的地方。第5章和第6章中的编译器是高级语言到汇编语言的翻译器。前面,学生学习了一种具体的HOL6层语言C++和一种具体的冯·诺依曼机器Pep/8。接下来的章节将继续介绍层次之间的关系,讲述下面这样一些对应关系:(a)HOL6层的赋值语句和Asmb5层的装入/存储指令;(b)HOL6层的循环和if语句与Asmb5层的分支指令;(c)HOL6层的数组和Asmb5层的变址寻址;(d)HOL6层的过程调用和Asmb5层的运行时栈;(e)HOL6层的函数和过程参数与Asmb5层的栈相对寻址;(f)HOL6层的switch语句和Asmb5层的转移表;(g)HOL6层的指针和Asmb5层的地址。
统一方法之美就在于可以在较低层次上实现C++章节中的例子。例如,第2章的递归例子中描述的运行时栈直接对应于Pep/8主存中的硬件栈。学生可以用手动方式直接在两层之间翻译,以便更好地理解编译的过程。
这种方法为讨论计算机科学中的核心问题提供了一种很自然的环境。例如,本书介绍了HOL6层的结构化编程,可以和Asmb5层的非结构化编程的可能性进行对比。书中讨论了goto争议、结构化编程/效率之间的折中,给出了两个层次上语言的实际例子。
第7章向学生介绍了计算机科学理论。既然学生对如何把高级语言翻译成汇编语言已经有了感性的认识,那么我们就提出所有计算中最基本的问题:什么是能够被自动化的?这里介绍理论是很自然的,因为学生现在知道了编译器(自动化翻译器)必须做什么。他们通过识别C++和Pep/8汇编语言的语言符号来学习语法分析和有限状态机—确定性的和非确定性的。本章包括两种小语言之间的自动翻译器,说明了词法分析、语法分析和代码生成。词法分析器是有限状态机的实现。还有什么比这样更自然的介绍理论的方法呢?
OS4层 OS4层讲述操作系统,分为两章。第8章讲述进程管理,包括两节,一节讲装载器,一节讲陷阱处理程序,说明了Pep/8操作系统的概念。有5条指令具有产生软件陷阱的未实现操作码。操作系统把用户正在运行的进程的进程控制块存储在系统栈上,中断服务例程解释该指令。通过具体实现一个挂起进程来强化操作系统中运行和等待进程的经典状态转移图。本章结尾描述了并发进程和死锁。第9章描述存储管理,包括主存和磁盘存储器。
LG1层 LG1层用两章来介绍组合电路和时序电路。从布尔代数的定理开始,第10章重点介绍计算机科学的数学基础的重要性,展示布尔代数和逻辑门之间的关系,然后介绍一些常见的SSI和MSI逻辑设备,包括Pep/8 ALU的完整的逻辑设计。第11章通过介绍时序电路的状态转移图,描述有限状态机的基本概念。最后描述常见的计算机子系统,比如双向总线、内存芯片和双端口存储器体。
Mc2层 第12章描述Pep/8 CPU的微程序设计控制区,给出了一些示例指令和寻址方式的控制序列,还提供了有关其他指令和寻址方式的大量练习。本章还介绍了装入/存储体系结构的概念,对比了MIPS的RISC机器和Pep/8 CISC机器。最后描述了高速缓存、流水线、动态分支预测和超标量机器,介绍了一些性能问题。
在课程中的使用
本书覆盖的内容广泛,教师在设计课程时可以省略一些内容。第1~5章可以看作核心,第6~12章可以有所取舍。
本书第1~5章必须顺序讲授,第6章和第7章可以按任意顺序讲授。我通常会省略第6章而直接讲第7章,开始一个大的软件项目—为Pep/8汇编语言的一个子集写一个汇编器,这样学生在一学期中有足够的时间完成它。第11章显然依赖于第10章,但是它们都不依赖于第9章,所以第9章可以省略。图2是一个章节依赖图,图中总结了可以省略哪些章节。
辅助资料
下面列出的辅助资料可以从出版社网站获得:
http://www.jbpub.com/catalog/9780763771447/
Pep/8汇编器和模拟器 Pep/8机器在MS Windows、Mac OS X和UNIX/Linux系统上都有。汇编器的特性包括:
集成的文字编辑器;
在源代码中发现错误的地方插入红色字体的错误消息;
对学生友好的、十六进制格式的机器语言目标代码;
能够直接以机器语言编写代码,跳过汇编器;
能够重定义触发同步陷阱的未实现操作码的助记符。
模拟器的特性包括:
模拟的ROM,装入指令不能修改;
在模拟的ROM中烧入了一个小的操作系统,包括一个装载器和一个陷阱处理程序;
一个集成的调试器,允许设置断点、单步执行、CPU跟踪和内存跟踪;
用户定义的、从无限循环恢复的语句执行计数的上限;
能够通过为未实现操作码设计新的陷阱处理程序来修改操作系统。
Pep/8 CPU模拟器 CPU模拟器,有MS Windows、Mac OS X和UNIX/Linux系统版本,可以用在计算机组成课程中。CPU模拟器的特性包括:
颜色编码的展示通路,根据控制信号跟踪复用器的数据流;
操作的单周期模式,用GUI输入每个控制信号,立即展示信号的效果;
操作的多周期模式,学生可以在集成的文字编辑器中编写Mc2微代码序列并执行它们以便实现ISA3指令。
课程课件 每章有50~125页的课程幻灯片,有Keynote和PDF格式。幻灯片包括课本中所有的图和总结信息,通常以标号的形式给出。不过其中没有太多的例子,给教师展示示例和教师指导讨论留出了空间。
考试题目 提供有一组考试题目,包括参考信息,例如ASCII表、指令集表等,供考试和自学之用。这些对用本书作为教材的教师开放。
数字电路实验 有一组6个数字电路实验,能够让学生在物理实验电路板上亲身体验。这些实验说明了第10章和第11章的组合和时序设备,使用许多本书中没讲到的电路。学生可以自学实际的电子设计和实现概念,这些超出了本书的讲述范围,它们可以按照书中讨论的主题顺序,从组合电路开始,然后是时序电路和ALU。
答案手册 附录中有部分练习的答案。剩下练习的答案对用本书作为教材的教师开放。出于安全原因,答案直接从出版社获取。相关信息请联系Jones和Bartlett Publishers Representative,电话1-800-832-0034。
第4版所做的修改
第4版对第3版做了大量修改,包括使用了Pep/8,它是对Pep/7架构的彻底重新设计。前几版的用户已经接受了Pep/8的教学特性,第4版中还是保留了Pep/8架构。本版的每一章都有改进,下面只列出了其中一些主要的:
改进了C++回顾—扩展了第3版中引入的C++内存模型,更系统地从头开始描述。内存分配图更现实,与主函数一致,显示了对主函数返回地址和返回值的分配。重命名了所有以前命名为i的变量。当程序翻译成Pep/8汇编语言后容易有误会,Pep/8汇编语言用字母i表示立即数寻址。
改进了字符编码的内容—讲述了Unicode字符集,代替了EBCDIC。
跟踪标签—Pep/8汇编器和模拟器包括一个新的符号跟踪特性,当用户单步跟踪程序时,能够实时显示全局变量和运行时栈。使用这个新特性要求程序员在某些汇编语言语句的注释字段放置跟踪标签,翻译器将忽略这些标签,但是调试器将使用它们。跟踪标签的一个巨大好处是迫使程序员做好文件说明。要使用调试器,学生必须在注释字段精确说明哪些变量要在运行时栈上分配以及分配的顺序。汇编器验证分配的字节数是否与变量列表要求的字节数匹配。跟踪标签的文件说明优点很大,现在这个版本中描述了跟踪标签语法,书中和答案手册中的每个汇编语言程序中都包括了跟踪标签。
改进了语言翻译的内容—前面版本中,第7章讲述的语言翻译原理假设学生没有面向对象知识。本版假设学生已经学习过基本的面向对象设计原理,展示的语法分析程序使用了对象组合、继承和多态调度以及UML图。
新的项目问题—这一版本有两个项目问题,一个是新的,在第6章中,要求写一个Pep/8机器模拟器;另一个是改进的,在第7章中,要求写一个Pep/8汇编器。这两个项目要求开发上千行代码的程序,它们都有多个部分,每一个都往应用程序中增加了更多的功能。项目的目的有两个:1)让学生获得编写较复杂程序的经验;2)增强对这门课程问题域中计算机系统概念的理解。
改进了RAID的内容—这个版本介绍了更广泛的RAID磁盘系统内容,扩展了RAID等级01和10的区别,增加了新的图和新的量化分析习题。
改进了MIPS的内容—扩展了MIPS的内容,更系统地比较了CISC架构的Pep/8和RISC架构的MIPS。新的MIPS章节用新的指令集表描述了5种寻址方式。MIPS机器的数据区的图包括了伪直接寻址方式所要求的数据通路和复用器。明确命名的控制信号使用与Pep/8控制信号相同的语法,提供了MIPS指令实现更简洁而详细的描述。
独特的特性
本书有几个独特的特性,使之有别于其他计算机系统、汇编语言和计算机组成的书。
概念的方法—许多教科书试图跟上领域的变化,包括最新的技术发展。例如,最新外围设备的通信协议规范。这类书通常通篇是“设备如何工作”的描述性解释。本书避开了这类资料,而只选择基础的计算概念,掌握了这些就有了理解当前和未来技术的基础。例如,以数字电路设计问题来说,让学生掌握空间/时间折中的概念比简单地阅读通用描述更重要。再举一个例子,通过学习如何在ISA指令的微代码实现中合并周期来掌握硬件并行的概念,这样才是最好的。
强调问题解决—如果只听说或者读到某个主题,学生能记住的很少;但当他们体验到时,才会记住很多。本书强调问题解决,每章后面有近400道练习,其中很多有多个部分。这些练习不会让学生重复课本中的原话,而是要求量化地解答、分析或者设计系统某个抽象层次上的一个程序或电子电路。
一致的机器模型—Pep/8机器是一个小型的CISC计算机,是描述系统所有层次的载体。学生可以清晰地看到抽象层次之间的关系,因为他们要在所有的层次上为这个机器编程或者设计电子电路。例如,当在LG1层设计ALU组件时,他们知道ALU在ISA3层的实现中应该在哪个位置。通过像编译器那样把C++程序翻译成汇编语言,他们学到优化编译器和非优化编译器之间的差别。在不同层次上都使用同样的机器模型做工作在效率上有很大的优势,因为模型从上至下都是一致的。不过本书也讲述了MIPS机器,对比了RISC设计原理和微程序设计的CISC设计。
完整的程序示例—许多计算机组成和汇编语言的书会受到代码片段综合征的影响。Pep/8的内存模型、寻址方式和输入/输出特性使得学生能写出完整的程序,容易执行和测试,而不只是代码片段。真实的机器,特别是RISC机器,有复杂的函数调用协议,涉及寄存器分配、寄存器溢出和内存对齐限制之类的问题。Pep/8是少数几种教学机之一(有可能是唯一一个),允许学生书写具有输入/输出的完整程序,可以使用全局变量和局部变量、全局数组和局部数组、传值调用和传引用调用、数组参数、使用转移表的开关语句、递归、使用指针的链式结构和堆。写完整程序的作业进一步实现了通过动手来学习的目标,而不是通过读代码片段来学习。
理论和实践的结合—有些读者注意到了,讲述语言翻译原理的第7章在计算机系统书中不常见。这种现象可悲地说明了计算机科学课程体系甚至计算机科学领域中理论和实践之间的鸿沟。因为本书讲述了HOL6层的C++语言、Asmb5层的汇编语言和ISA3层的机器语言,而且都有一个目标,即理解层次之间的关系,一个更好的问题是:“为什么不能包括讲述语言翻译原理的一章呢?”本书尽可能地加入理论以支持实践。例如,介绍布尔代数作为一个公理系统,配合练习来证明定理。
宽度和深度—第1~6章中的内容对计算机系统或汇编语言编程的书来说是很典型的,第8~12章对计算机组成的书来说是很典型的。在一本书中包括这么广泛的内容是很独特的,而且它还在一个完整机器的各个抽象层次上使用一个一致的机器模型。数字电路LG1层内容的深度也是很特别的,它使得CPU的组成部分不再神秘。例如,本书描述了Pep/8 CPU的复用器、加法器、ALU、寄存器、内存子系统和双向总线的实现。学生学习逻辑门层的实现,没有概念上的空洞,而如果只是泛泛地描述,就只能选择相信而不能完全理解。
本书回答了这个问题:“汇编语言编程和计算机组成在计算机科学课程体系中的位置是什么?”它提供了对无处不在的冯·诺依曼机器架构的深入理解。本书的目标是提供本领域内所有主要知识域的综合概述,包括软件和硬件的结合,理论和实践的结合。
计算机课程体系2001
ACM和IEEE计算机学会建立了计算机科学的“课程体系2001”指导原则。该指导原则给出了知识体的分类和具体核心。本书适用于体系结构和组成(Architecture and Organization,AR)类别,几乎包含AR知识体中所有的核心主题。初期报告中的AR核心域以及本书中覆盖这些域的章节如下所示:
AR1. 数字逻辑和电子系统,第10、11、12章。
AR2. 数据的机器级表示,第3章。
AR3. 汇编层机器组成,第4、5、6章。
AR4. 内存系统组成和体系结构,第9、11章。
AR5. 接口与通信,第8、9章。
AR6. 功能组成,第11、12章。
AR7. 多处理和其他体系结构,第8章。
致谢
Pep/1有16条指令、一个累加器和一种寻址方式。Pep/2增加了变址寻址。John Vannoy用ALGOL W语言写了2个模拟器。Pep/3有32条指令,用Pascal语言编写,是学生软件项目,由Steve Dimse、Russ Hughes、Kazuo Ishikawa、Nancy Brunet和Yvonne Smith完成。Harold Stone在早期审阅中提出许多对Pep/3架构的改进意见,后来被加到Pep/4中,并延续到后续的机器中。Pep/4有特殊的栈指令,模拟ROM和软件陷阱。Pep/5有更正交的设计,允许任何指令使用任何寻址方式。John Rooker写了Pep/4系统和早期的Pep/5版本。Gerry St. Romain实现了一个MacOS版本和一个MS-DOS版本。Pep/6简化了变址寻址方式,也包括了一组完整的条件分支指令。John Webb用BlackBox开发系统编写了跟踪功能。Pep/7把安装的内存从4 MB增加到了32 MB。Pep/8把寻址方式的数量从4增加到8,安装的内存增加到64MB。Pep/8汇编器和模拟器的GUI版本由一组学生用Qt开发系统和C++实现和维护,小组成员包括Deacon Bradley、Jeff Cook、Nathan Counts、Stuartt Fox、Dave Grue、Justin Haight、Paul Harvey、Hermi Heimgartner、Matt Highfield、Trent Kyono、Malcolm Lipscomb、Brady Lockhart、Adrian Lomas、Ryan Okelberry、Thomas Rampelberg、Mike Spandrio、Jack Thomason、Daniel Walton、Di Wang、Peter Warford和Matt Wells。Ryan Okelberry也参与编写了Pep/8 CPU模拟器。Luciano d扞lori编写了汇编器的命令行版本。
Tanenbaum的《Structured Computer Organization》比其他任何一本书都更大地影响了本书的编写。本书扩展了Tanenbaum书的层次结构,在上面增加了高级语言层和应用层。
下面这些书稿审阅者和前一版本的用户极大地影响了本版本的终稿,他们是:Wayne P. Bailey、Jim Bilitski、Fadi Deek、William Decker、Peter Drexel、Gerald S. Eisman、Victoria Evans、David Garnick、Ephraim P. Glinert、Dave Hanscom、Michael Hennessy、Michael Johnson、Andrew Malton、Robert Martin、Richard H. Mercer、Randy Molmen、John Motil、Peter Ng、Bernard Nudel、Carolyn Oberlink、Wolfgang Pelz、James F. Peters III、James C. Pleasant、Eleanor Quinlan、Glenn A. Richard、David Rosser、Gerry St. Romain、Harold S. Stone、J. Peter Weston和Norman E. Wright。Joe Piasentin提供了艺术咨询。有两个人极大地影响了Pep/8的设计,一位是Myers Foreman,有关指令集的很多想法都来自于他;另一位是Douglas Harms,他提出很多改进意见,其中之一是MOVSPA指令,使得可以用传引用方式传递局部变量。
Jones and Bartlett Publishers的责任编辑Tim Anderson、产品主管Amy Rose和编辑助理Melissa Potter提供了宝贵的支持,很高兴与他们一起工作。Kristin Parker设计的吸引人的封面正符合本书的风格。
我很幸运在一所致力于在本科教学中追求卓越的学校。佩珀代因(Pepperdine)大学的Ken Perrin,提供了富有创造性的环境和专业的支持,正是在这种环境中,本书得到孕育。我的妻子Ann给予我无尽的支持,我要为本书占用的时间向她道歉,并送上我由衷的感谢。

Stan Warford
Malibu,California
出版者的话
中文版序
译者序
前言
第一部分应用层(第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 硬件8
1.2.1输入设备9
1.2.2输出设备11
1.2.3主存储器12
1.2.4中央处理单元13
1.3软件13
1.3.1操作系统14
1.3.2软件分析和设计15
1.4数据库系统16
1.4.1关系17
1.4.2查询18
1.4.3语言结构19
总结20
练习21
第二部分高级语言层(第6层)
第2章C++24
2.1 变量24
2.1.1C++编译器24
2.1.2 机器无关性24
2.1.3C++的内存模型25
2.1.4全局变量和赋值语句26
2.1.5局部变量28
2.2控制流29
2.2.1if/else语句29
2.2.2switch语句30
2.2.3while循环30
2.2.4do循环31
2.2.5数组和for循环31
2.3函数32
2.3.1空函数和传值调用的参数32
2.3.2函数的例子33
2.3.3传引用调用的参数34
2.4递归36
2.4.1阶乘函数37
2.4.2递归的思考方式39
2.4.3递归加法40
2.4.4二项式系数函数41
2.4.5逆转数组元素顺序45
2.4.6汉诺塔45
2.4.7 相互递归48
2.4.8递归的成本48
2.5动态内存分配49
2.5.1指针49
2.5.2结构50
2.5.3链式数据结构51
总结52
练习53
问题54
第三部分指令集架构层(第3层)
第3章信息的表示58
3.1 无符号二进制表示58
3.1.1二进制存储器58
3.1.2整数59
3.1.3基本转换60
3.1.4无符号整数的范围61
3.1.5无符号加法62
3.1.6 进位位62
3.2补码二进制表示63
3.2.1补码的表数范围65
3.2.2基数转换66
3.2.3 数轴66
3.2.4溢出位68
3.2.5负数和零位69
3.3 二进制运算69
3.3.1逻辑运算符69
3.3.2寄存器传送语言70
3.3.3算术运算符70
3.3.4循环移位运算符72
3.4十六进制和符号表示72
3.4.1十六进制72
3.4.2基数转换73
3.4.3字符75
3.5浮点数表示77
3.5.1二进制小数77
3.5.2余码表示78
3.5.3隐藏位79
3.5.4特殊值80
3.5.5IEEE 754浮点数标准83
3.6跨层的表示方法85
3.6.1另一种表示87
3.6.2模型88
总结90
练习90
问题95
第4章计算机体系结构97
4.1硬件97
4.1.1中央处理单元98
4.1.2主存储器98
4.1.3 输入设备99
4.1.4 输出设备99
4.1.5 数据和控制100
4.1.6 指令格式100
4.2直接寻址102
4.2.1 停止指令102
4.2.2装入指令103
4.2.3存储指令103
4.2.4加法指令104
4.2.5减法指令105
4.2.6与和或指令105
4.2.7按位取反和取负指令106
4.2.8装入字节和存储字节指令107
4.2.9字符输入和输出指令108
4.3冯·诺依曼机器109
4.3.1 冯·诺依曼执行周期109
4.3.2一个字符输出程序110
4.3.3冯·诺依曼漏洞113
4.3.4一个字符输入程序113
4.3.5十进制转换为ASCII113
4.3.6一个修改自身的程序114
4.4ISA3层编程115
4.4.1只读内存117
4.4.2Pep/8操作系统117
4.4.3使用Pep/8系统119
总结119
练习120
问题121
第四部分汇编层(第5层)
第5章汇编语言124
5.1汇编程序124
5.1.1指令助记符124
5.1.2伪操作126
5.1.3.ASCII和.END伪操作126
5.1.4汇编器127
5.1.5.BLOCK伪操作128
5.1.6.WORD和.BYTE伪操作129
5.1.7使用Pep/8汇编器129
5.1.8交叉汇编器130
5.2立即数寻址和陷阱指令131
5.2.1立即数寻址131
5.2.2DECI、DECO和BR指令131
5.2.3STRO指令133
5.2.4解释位模式134
5.2.5反汇编器135
5.3符号137
5.3.1带符号的程序137
5.3.2一个冯·诺依曼示例138
5.4从HOL6层翻译139
5.4.1cout语句139
5.4.2变量和类型140
5.4.3全局变量和赋值语句141
5.4.4类型兼容143
5.4.5Pep/8符号跟踪器144
5.4.6 算术移位和循环移位指令145
5.4.7常量和.EQUATE147
5.4.8指令和数据的放置149
总结149
练习150
问题152
第6章编译到汇编层155
6.1 栈寻址和局部变量155
6.1.1栈相对寻址155
6.1.2访问运行时栈156
6.1.3局部变量158
6.2转移指令和控制流159
6.2.1 翻译if语句160
6.2.2 优化编译器161
6.2.3翻译if/else语句162
6.2.4翻译while循环163
6.2.5翻译do循环164
6.2.6 翻译for循环165
6.2.7 面条代码166
6.2.8早期语言中的控制流168
6.2.9结构化编程定律169
6.2.10goto争论169
6.3 函数调用和参数171
6.3.1翻译函数调用171
6.3.2用全局变量翻译传值调用参数173
6.3.3 用局部变量翻译传值调用参数176
6.3.4翻译非空函数调用178
6.3.5 用全局变量翻译传引用调用参数180
6.3.6用局部变量翻译传引用调用参数183
6.3.7翻译布尔类型186
6.4 变址寻址和数组188
6.4.1 翻译全局数组189
6.4.2翻译局部数组191
6.4.3翻译作为参数传递的数组193
6.4.4翻译switch语句198
6.5 动态内存分配200
6.5.1翻译全局指针200
6.5.2翻译局部指针204
6.5.3翻译结构207
6.5.4翻译链式数据结构210
总结214
练习214
问题215
第7章语言翻译原理222
7.1语言、语法和语法分析222
7.1.1连接223
7.1.2 语言223
7.1.3 语法224
7.1.4 C++标识符的语法225
7.1.5有符号整数的语法226
7.1.6上下文相关的语法227
7.1.7语法分析问题227
7.1.8表达式的语法228
7.1.9C++语法的一部分229
7.1.10 C++的上下文相关性232
7.2 有限状态机233
7.2.1用FSM来分析标识符233
7.2.2 简化的有限状态机234
7.2.3非确定性有限状态机234
7.2.4 具有空转移的状态机235
7.2.5语言符号识别器237
7.3实现有限状态机239
7.3.1查找表分析器240
7.3.2直接编码分析器241
7.3.3输入缓冲区类244
7.3.4多token分析器244
7.4 代码生成249
7.4.1语言翻译器249
7.4.2 语法分析器特性259
总结260
练习260
问题262
第五部分 操作系统层(第4层)
第8章 进程管理266
8.1 装载器266
8.1.1 Pep/8操作系统266
8.1.2 Pep/8装载器267
8.1.3 程序的终止269
8.2 陷阱269
8.2.1 陷阱机制269
8.2.2 RETTR指令270
8.2.3 陷阱处理程序271
8.2.4 陷阱寻址方式断言273
8.2.5 陷阱操作数地址计算274
8.2.6 空操作陷阱处理程序277
8.2.7 DECI陷阱处理程序277
8.2.8 DECO陷阱处理程序282
8.2.9 STRO陷阱处理程序和OS向量284
8.3 并发进程286
8.3.1 异步中断286
8.3.2 操作系统中的进程287
8.3.3 多处理288
8.3.4 并发处理程序289
8.3.5 临界区290
8.3.6 第一次尝试实现互斥291
8.3.7 第二次尝试实现互斥291
8.3.8 Peterson互斥算法292
8.3.9 信号量293
8.3.10 带信号量的临界区295
8.4 死锁296
8.4.1 资源分配图296
8.4.2 死锁策略298
总结298
练习299
问题302
第9章 存储管理305
9.1 内存分配305
9.1.1 单道程序设计305
9.1.2 固定分区多道程序设计306
9.1.3 逻辑地址306
9.1.4 可变分区多道程序设计308
9.1.5 分页310
9.2 虚拟内存312
9.2.1 大程序的行为312
9.2.2 虚拟内存313
9.2.3 按需取页315
9.2.4 替换页315
9.2.5 页替换算法316
9.3 文件管理318
9.3.1 磁盘驱动器318
9.3.2 文件抽象319
9.3.3 分配技术319
9.4 错误检测和纠错码321
9.4.1 错误检测码321
9.4.2 编码要求322
9.4.3 纠正一位错编码324
9.5 RAID存储系统325
9.5.1 RAID 0级:非冗余条带化326
9.5.2 RAID 1级:镜像326
9.5.3 RAID 01级和10级:条带化和镜像327
9.5.4 RAID 2级:内存风格的ECC328
9.5.5 RAID 3级:位交叉奇偶校验329
9.5.6 RAID 4级:块交叉奇偶校验329
9.5.7 RAID 5级:块交叉分布奇偶校验330
总结331
练习331
第六部分 逻辑门层(第1层)
第10章 组合电路334
10.1 布尔代数和逻辑门334
10.1.1 组合电路335
10.1.2 真值表335
10.1.3 布尔代数336
10.1.4 布尔代数定理337
10.1.5 互补证明338
10.1.6 逻辑图339
10.1.7 其他表达方式341
10.2 组合分析341
10.2.1 布尔表达式和逻辑图342
10.2.2 真值表和布尔表达式343
10.2.3 两级电路345
10.2.4 无所不在的NAND346
10.3 组合设计347
10.3.1 范式348
10.3.2 三变量卡诺图349
10.3.3 四变量卡诺图353
10.3.4 对偶卡诺图355
10.3.5 无关条件356
10.4 组合设备356
10.4.1 视角356
10.4.2 复用器358
10.4.3 二进制译码器358
10.4.4 多路分配器359
10.4.5 加法器359
10.4.6 加法器/减法器361
10.4.7 算术逻辑单元362
10.4.8 LG1层的抽象367
总结368
练习368
第11章 时序电路374
11.1 锁存器和时钟触发器374
11.1.1 SR锁存器374
11.1.2 钟控SR触发器376
11.1.3 主-从SR触发器377
11.1.4 基本触发器380
11.1.5 JK触发器381
11.1.6 D触发器382
11.1.7 T触发器383
11.1.8 激励表384
11.2 时序分析和设计384
11.2.1 时序分析问题385
11.2.2 预设置和清除387
11.2.3 时序设计387
11.2.4 一个时序设计问题388
11.3 计算机子系统390
11.3.1 寄存器390
11.3.2 总线391
11.3.3 内存子系统392
11.3.4 地址译码396
11.3.5 双端口寄存器体400
总结401
练习402
第七部分 微代码层(第2层)
第12章 计算机组成406
12.1 构造ISA3层机器406
12.1.1 中央处理单元406
12.1.2 冯·诺依曼周期408
12.1.3 实现存储字节指令412
12.1.4 实现加法指令412
12.1.5 实现装入指令413
12.1.6 实现算术右移指令415
12.2 性能问题416
12.2.1 总线宽度417
12.2.2 特殊的硬件单元419
12.2.3 3个优化领域421
12.2.4 微代码423
12.3 MIPS机器425
12.3.1 装入/存储体系结构425
12.3.2 指令集427
12.3.3 高速缓存431
12.3.4 MIPS的计算机组成437
12.3.5 流水线439
12.4 结论445
12.4.1 模型简化446
12.4.2 更大的景象446
总结447
练习448
附录Pep/8体系结构451
部分练习参考答案457
索引468
本书第1版出版于2010年。在不断感叹计算机技术发展太快的时候,2010年的内容会不会太“老”太“旧”了呢?答案显然是否定的,尤其在读完了整本书之后。本书展示了计算机系统的7个抽象层次:应用层、高级语言层、汇编层、操作系统层、指令集架构层、微代码层和逻辑门层。本书的特色之一就是着眼于计算机软件和硬件系统背后的设计原理,而这些原理数年来都未曾改变过。而且,去除那些眼花缭乱的新技术的表象,能够更好地看清和理解系统的本质。
本书的另一个特色是建立了一个虚构的计算机系统Pep/8,借助于这个示例系统,能够让读者/学生更具体地了解计算机系统中的各个组成部分,进而了解核心概念,而不是通过抽象的描述学习抽象的概念;同时又不必拘泥于现实系统的实现细节。本书覆盖广泛,但又重点突出,强调了硬件及其相关软件的实现。本书文字简洁明了,是非常合适的计算机系统入门教材。
与所有计算机书籍的翻译一样,翻译过程中充满了艰难的术语选择,因为我们越来越习惯于在日常技术工作中使用英文术语,有时候使用它的中文翻译反而显得有些陌生和别扭。比如token,中文一般译作“语言符号”,但是实际上它有终结符字符串的含义,如果翻译成中文,很容易失去这些意义。所以我选择保留英文术语,相信不会影响读者阅读或增加阅读难度。
在此感谢王文杰帮助我一起讨论翻译中遇到的问题,还要感谢机械工业出版社华章公司的编辑们给了我很多理解和支持,使得本书得以完成。
在翻译过程中,我尽量做到认真仔细,但还是难以避免出现错误和不尽如人意的地方。在此欢迎广大读者批评指正,我也会把勘误表及时在网上更新,便于大家阅读。

龚奕利
2015年5月于安娜堡
计算机\计算机组成
读者书评
发表评论



高级搜索
并行计算机组成与设计
计算机系统基础习题解答与教学指导
计算机存储与外设


版权所有© 2017  北京华章图文信息有限公司 京ICP备08102525号 京公网安备110102004606号
通信地址:北京市百万庄南街1号 邮编:100037
电话:(010)68318309, 88378998 传真:(010)68311602, 68995260
高校教师服务
华章教育微信
诚聘英才
诚聘英才