计算机组成与体系结构(原书第4版)》

网友投稿 1134 2022-05-29

计算机科学丛书

计算机组成与体系结构

(原书第4版)

The Essentials of Computer Organization and

Architecture,Fourth Edition

[美] 琳达·纳尔(Linda Null)

朱莉娅·洛博(Julia Lobur)宾夕法尼亚州立大学 著

张 钢 魏继增 李雪威天津大学 李春阁 何 颖天津大学仁爱学院 译

出版者的话

The Essentials of Computer Organization and Architecture,Fourth Edition

文艺复兴以来,源远流长的科学精神和逐步形成的学术规范,使西方国家在自然科学的各个领域取得了垄断性的优势;也正是这样的优势,使美国在信息技术发展的六十多年间名家辈出、独领风骚。在商业化的进程中,美国的产业界与教育界越来越紧密地结合,计算机学科中的许多泰山北斗同时身处科研和教学的最前线,由此而产生的经典科学著作,不仅擘划了研究的范畴,还揭示了学术的源变,既遵循学术规范,又自有学者个性,其价值并不会因年月的流逝而减退。

近年,在全球信息化大潮的推动下,我国的计算机产业发展迅猛,对专业人才的需求日益迫切。这对计算机教育界和出版界都既是机遇,也是挑战;而专业教材的建设在教育战略上显得举足轻重。在我国信息技术发展时间较短的现状下,美国等发达国家在其计算机科学发展的几十年间积淀和发展的经典教材仍有许多值得借鉴之处。因此,引进一批国外优秀计算机教材将对我国计算机教育事业的发展起到积极的推动作用,也是与世界接轨、建设真正的世界一流大学的必由之路。

机械工业出版社华章公司较早意识到“出版要为教育服务”。自1998年开始,我们就将工作重点放在了遴选、移译国外优秀教材上。经过多年的不懈努力,我们与Pearson、McGraw- Hill、Elsevier、MIT、John Wiley & Sons、Cengage等世界著名出版公司建立了良好的合作关系,从它们现有的数百种教材中甄选出Andrew S.Tanenbaum、Bjarne Stroustrup、Brian W.Kernighan、Dennis Ritchie、Jim Gray、Afred V.Aho、John E.Hopcroft、Jeffrey D.Ullman、Abraham Silberschatz、William Stallings、Donald E.Knuth、John L.Hennessy、Larry L.Peterson等大师名家的一批经典作品,以“计算机科学丛书”为总称出版,供读者学习、研究及珍藏。大理石纹理的封面,也正体现了这套丛书的品位和格调。

华章网站:www.hzbook.com

电子邮件:hzjsj@hzbook.com

联系电话:(010)88379604

联系地址:北京市西城区百万庄南街1号

邮政编码:100037

译者序

The Essentials of Computer Organization and Architecture,Fourth Edition

本书包括13章和一个附录。第1章是一般性的历史概述。第2章介绍数字和字符信息的表示方法。第3章介绍数字逻辑的经典表示及其与布尔代数的关系。第4章介绍计算机组成和体系结构的基本概念。第5章深入讲解指令集架构。第6章是基本存储器系统的概念。第7章介绍I/O原理、总线和外部存储设备。第8章介绍编译器、程序与体系结构的关系。第9章概述近年来出现的其他体系结构。第10章介绍嵌入式系统。第11章介绍各种性能分析和管理问题。第12章介绍网络的组成和体系结构。第13章介绍I/O架构。附录介绍数据结构的基本概念。

本书第1章、第12章、第13章、前言、附录A、精选习题答案与提示由天津大学计算机科学与技术学院张钢翻译,第2章和第3章由天津大学仁爱学院何颖翻译,第4章和第7章由天津大学仁爱学院李春阁翻译,第5章、第6章和第11章由天津大学计算机科学与技术学院李雪威翻译,第8~10章由天津大学计算机科学与技术学院魏继增翻译。天津大学仁爱学院杨志奇审阅修改了第3章,天津大学计算机科学与技术学院魏继增审阅修改了第2~4章和第7章。天津大学计算机科学与技术学院张钢审阅修改了全书。

尽管我们从事计算机组成原理和计算机体系结构教学和科研工作多年,而且在翻译过程中始终本着认真负责的态度,对一些章节的翻译也颇费心思,在尊重原著的前提下,谨慎修改了原著出现的一些错误,力求翻译准确,但是翻译中的错误之处在所难免,敬请广大读者不吝赐教和批评指正。

译 者

2018年12月

前 言

The Essentials of Computer Organization and Architecture,Fourth Edition

致学生

这是一本关于计算机组成与体系结构的书。它重点研究处理数字信息所需要的各种组件的功能和设计。我们把计算系统分成一系列的层次,从低层的硬件到更高层的软件,包括汇编程序和操作系统。这些层构成了虚拟机的层次结构。关于计算机组成的研究主要集中在这种层次结构上,包括如何划分所涉及的层次和如何实现每个层次。关于计算机体系结构的研究主要集中在硬件和软件之间的接口上,强调系统的结构和行为。本书中包含的主要信息涉及计算机硬件、计算机组成和体系结构以及它们与软件性能的关系。

学生总是问,“如果我是一名计算机科学专业的学生,我必须学习计算机硬件吗?那不是计算机工程师要学的吗?为什么我要关心计算机内部是什么样子呢?”作为计算机的使用者,我们可能不必关心计算机内部是什么样子的,就像开车时我们不需要知道汽车发动机下面是什么样子一样。在不理解高级语言程序如何执行的情况下,我们当然能写高级语言程序;在不理解各种应用程序包实际如何工作的情况下,我们也可以使用各种应用程序包。但是,当需要使写出来的程序变得更快和更有效,或者正在使用的应用程序没有达到要求时,我们该怎么办?作为计算机科学家,为了解决这些问题我们需要对计算机系统本身有基本的理解。

在计算机系统中,计算机硬件与程序和软件组件的许多方面之间有一种基本的关系。为了写出好软件,理解整个计算机系统是非常重要的。理解硬件能够帮助你解释有时潜入程序中的神秘错误,如分段错误和总线错误。高级程序员必须具备的计算机组成和计算机体系结构的知识水平,取决于所要完成的任务。

例如,在写编译器程序时,你必须理解运行所编译的程序的特定硬件。一些在硬件中使用的思想(如流水线)可能适合于编译技术,从而使编译器更快和更高效。对大型复杂的实时系统建模时,你必须理解浮点运算是如何实现和如何工作的(它们不一定是同一回事)。在为视频设备、磁盘或其他I/O设备写驱动程序时,一般来说,你需要很好地理解I/O接口和计算机体系结构。如果你想做嵌入式系统方面的工作,由于嵌入式系统通常是非常受资源约束的,你必须理解所有的时间、空间和价格的权衡。在进行硬件、网络或特殊算法方面的研究和提出硬件、网络或特殊算法方面的建议时,你必须理解基准测试并且学习如何表示性能结果。在买硬件之前,你需要理解基准测试和其他可以巧妙处理性能结果以“证明”一个系统比另一个系统更好的所有方法。不管我们擅长的专业领域是什么,作为计算机科学家,理解硬件如何与软件交互是非常重要的。

你可能会奇怪,为什么英文书名中写着essentials的书会这么厚。原因有两个方面。首先,计算机组成的主题是宽泛和日益发展的。其次,在这个迅速发展的信息海洋中哪些主题是真正的基础,哪些主题只是有助于了解这个领域,几乎没有共识。这本书的一个目的是符合由ACM和IEEE联合发布的关于计算机体系结构课程指南的要求。这个指南包含了专家认可的关于计算机组成和体系结构主题的基础核心知识。

我们已经扩大了ACM/IEEE建议的主题,增加了我们认为对继续研究计算机科学和提高专业水平有用的(未必是基础的)主题。我们认为这些主题将有助于你继续在操作系统、编译程序、数据库管理和数据通信等计算机科学领域的学习。本书中包含的其他主题将有助于理解实际系统在现实生活中是如何工作的。

我们希望你阅读本书是一次愉快的经历,并且花时间深入钻研我们提供的一些材料。我们的目的是在你正式完成课程后,这本书仍将是有用的参考书。虽然我们给了你大量的信息,但这仅是你学习和职业生涯的基础。成功的计算机专业人员会不断深入了解计算机工作原理。

致教师

本书是在宾夕法尼亚州立大学哈里斯堡校区教两个班的计算机组成和体系结构课程的基础上形成的。随着计算机科学课程的发展,我们发现不仅需要修改课程中所教的材料,而且需要把课程从连续开设两个学期压缩为一个学期(三学分)。许多其他学校也已经认识到需要压缩教材,以便为新出现的主题腾出空间。这门新课程以及这本教材主要是针对计算机科学专业的,旨在讨论计算机科学专业学生必须熟悉的计算机组成和体系结构中的主题。本书整合了这些领域的基本原理,为计算机科学专业的学生提供了必要的广度,同时为在计算机科学领域继续学习的学生提供了必要的深度。

在写本书时,我们的主要目标是改变讲授计算机组成和体系结构课程的典型方式。计算机科学专业的学生在学完计算机组成和体系结构课程之后,不仅要了解构建数字计算机的重要基本概念,而且还要理解这些概念如何应用于现实世界。这些概念应该超越特定厂家的术语和设计。事实上,学生应该能够理解给定的特定概念并且能将其翻译成一般概念,反之亦然。此外,学生必须为进一步的专业学习打下坚实的基础。

本书介绍的主题是每个计算机科学专业的学生都应该接触、熟悉或精通的。我们并没有期望学生能完全掌握所有主题。然而,我们坚信有些主题必须要掌握,有些主题必须有一定程度的了解,有些主题接触一下就足够了。

我们不认为孤立地研究一般性的原理就可以把这些主题学到足够深入。因此,我们提出的主题是一套完整的解决方案,而不是一个个信息的简单集合。我们认为书中的解释、例子、练习、教程和仿真器全部结合起来,为学生提供了整体的学习体验,这种学习体验在一定程度上揭示了现代数字计算机的内部工作方式。

我们以一种非正式的风格写了这本书,省略了不必要的术语,语言简洁,并且避免了不必要的抽象,希望能提高学生的学习热情。我们也扩大了在主流体系结构书中能够找到的经典主题的范围,包括系统软件、操作系统的简要介绍、性能问题、其他体系结构和对网络的简明介绍,因为这些主题与计算机硬件密切相关。像大多数书一样,我们选择了一种体系结构模型,但它是一个我们在头脑中简单设计的模型。

与CS2013的关系

2013年10月,ACM/IEEE联合工作组公布了计算机科学课程计划2013(CS2013)。虽然我们主要关注计算机体系结构知识域,但是新指南建议通过这门课程整合核心知识。因此,我们也要关注本书所讲的体系结构之外的更多知识域。

CS2013是对CS2008的全面修订,主要聚焦于计算机科学课程计划中的基础概念,同时为了满足个别机构的需求而仍然保留了足够的灵活性。指南中采用了核心一级和核心二级主题的概念,并加入了选修主题。核心一级主题是每个计算机科学课程计划中都应该包含的主题。核心二级主题是计算机科学课程计划中应该包含90%~100%的主题。选修主题是课程计划向广度和深度扩展的主题。指南中以课时方式列出了对每个主题建议的范围。

从CS2008到CS2013,在体系结构和组成(AR)知识域方面的主要变化是课时数从36降到16,然而引入了一个新的系统基础(SF)知识域,它包括以前在AR模块中给出的一些概念(包括硬件组成和体系结构)。若想了解每个知识域所包括内容的更多信息,读者可以参考CS2013指南(http://www.acm.org/education/curricula- recommendations)。

本书(原书第4版)除了整合来自其他知识单元的材料外,与ACM/IEEE CS2013指南中关于计算机组成和体系结构的部分是直接相关的。表P- 1列出了本教材与AR知识域中的8个主题的对应关系。对于其他知识域,仅列出本教材所覆盖的主题。

表P-1 本书覆盖的ACM/IEEE CS2013主题

编写本书的目的

市场上已经有很多关于计算机组成和体系结构方面的教材。在讲授这门课程超过35年的时间里,我们已经使用过许多非常好的教材。然而,在每次讲授这门课程时,内容都变化了,最终我们发现要写大量的课程讲义来补充课堂上必须讲授的素材。课程素材正在从用计算机工程方法讨论组成和体系结构,变成用计算机科学方法对这些主题进行讨论。当决定把计算机组成课程和计算机体系结构课程合并为一门课程时,我们根本找不到覆盖专业所必需的、从计算机科学角度编写的、不使用特定机器术语的并且在讲授这些主题之前可以激发学生积极性的教材。

在本教材中,我们希望传达现代计算系统开发中使用的设计思想,以及这种设计思想对计算机科学专业学生的影响。然而,学生在理解和领会有关设计的方方面面之前,必须掌握基本概念。大多数计算机组成和体系结构的教材都有相似的技术信息。然而,我们对这些信息的覆盖水平以及与计算机科学专业学生相关的背景给予了特别的关注。例如,在本书中,当介绍具体例子时,我们会给出与个人计算机、企业系统和大型机相关的例子,因为这些系统类型都是最有可能遇到的。我们避免类似的书中存在的“个人计算机偏见”,希望学生理解各种平台在当今的自动化基础设施中的不同之处、相似之处和所发挥的作用。很多时候,教材忘记了动机也许是学习中一个最重要的因素。为此,我们包括了许多实际的例子,同时试图保持理论与应用之间的平衡。

本书特色

本书的很多特色都是为了强调计算机组成和体系结构中的各种概念,并使学生更容易理解相关材料。这些特色包括:

补充材料。穿插在正文中的补充材料包括有趣的信息,这些信息超出了相应章的重点内容,方便读者进一步探究这些材料。

实际的例子。教材中整合了来自现实生活的例子,使学生更好地理解技术是如何与实际问题相结合的。

小结。这个部分对每章的要点进行了简明扼要的总结。

扩展阅读。这个部分为希望更详细研究相关主题的读者列出了额外的资源,并且包含了与该章主题相关的权威论文和书籍的引用。

复习题。每章都包含一套复习题,方便读者巩固所学的知识。

习题。每章都有可供选择的练习,以强化所介绍的概念。

精选习题答案与提示。习题中用菱形标示的问题都有答案。

特别关注。这个部分为教师提供了额外的信息,例如卡诺图和数据压缩等。

附录。附录提供了数据结构的简要介绍,包括堆栈、链表和树等主题。

这本教材不仅融合了我们超过35年的教学经验,而且还有30多年的行业经验。因此,我们不仅强调计算机组成和体系结构的基本原理,而且把这些主题与实践相结合。我们使用了现实生活中的例子,用于帮助学生理解这些基本概念如何应用于计算领域。

Linda Null从艾奥瓦州立大学获得了计算机科学硕士和博士学位,从西北密苏里州立大学获得了计算机科学教育硕士学位、数学教育硕士学位、数学和英语学士学位。她已经从事数学和计算机科学教学工作超过了35年,目前是宾夕法尼亚州立大学哈里斯堡校区计算机科学研究生课程协调员和课程副主席,从1995年开始她一直是那里的教师。她已经获得了很多教学奖,包括宾夕法尼亚州立大学杰出教师奖和优秀教学奖。她感兴趣的领域包括计算机组成和体系结构、操作系统、计算机科学教育和计算机安全。

Julia Lobur是一名在计算机行业工作超过30年的从业者。她除了兼职教学工作外,还担任过系统顾问、高级程序员/分析师、系统和网络设计师、软件开发经理和项目经理等职位。Julia获得了计算机科学硕士学位,并且是一名IEEE认证的软件开发专业人员。

预备知识

学生使用本教材前需要具有一年使用高级过程语言编写程序的经验,也应该学过一年的大学数学(微积分或离散数学)。本教材假定之前学生不了解计算机硬件。

计算机组成和体系结构课程通常是本科生学习操作系统(学生必须知道存储器层次结构、并发、异常和中断)、编译器(学生必须知道指令集、存储器地址和链接)、网络(学生必须理解系统的硬件,然后才能理解将这些部件连接在一起的网络)以及任何高级计算机体系结构课程之前的选修课。

本书的组织结构

在本教材中对概念的介绍方式是一次尝试,即简明而全面地覆盖我们认为对于计算机科学专业学生必要的主题。我们不认为最好的方式是“划分”各种主题,因此,我们选择了一种结构化的整合方式,使每个主题都包含在整个计算机系统的背景中。

与许多流行的教材一样,我们采用了自底向上的方法,即从数字逻辑层开始构建到应用层,应用层是学生在开始学习这门课程之前就应该熟悉的。当读者到达应用层时,计算机组成和体系结构中必要的概念都已经呈现了。我们的目标是让学生把本书中涵盖的硬件知识与在程序设计导论课程中学到的概念联系到一起,形成一个完整而全面的硬件和软件如何组织在一起的画面。最终,硬件理解程度对软件设计和性能有重大的影响。如果学生能够掌握硬件基本知识,将有助于成为更好的计算机科学家。

计算机组成和体系结构中的概念对于计算机专业人员的许多日常工作是必需的。为了处理计算机专业人员应该了解的许多领域内的问题,我们采用从更高层次看计算机体系结构的方法,仅当理解一个特定概念需要低层信息时才给出这些信息。例如,当讨论ISA时,在不同的案例研究背景中引入了许多与硬件相关的问题,这不仅区分而且也加强了与ISA设计相关的问题。

本书包括13章和1个附录,列举如下:

第1章对计算提供了一般性的历史概述,指出了计算系统开发中的许多里程碑,让读者了解我们是如何达到当前的计算状态的。本章介绍了必要的术语、计算机系统中的基本部件、计算机系统的各种逻辑层和冯·诺依曼计算机模型,提供了计算机系统的高层视图,以及进一步研究的动机和必要的概念。

第2章对计算机使用的表示数字和字符信息的各种方法提供了全面讨论。一旦读者接触到进制和典型的数字表示技术(包括1的补码、2的补码和BCD码等),就可以学习加、减、乘和除运算了。此外,也介绍了EBCDIC、ASCII和Unicode字符表示法,以及定点和浮点表示法。对于错误检测与纠错进行了简要介绍。在“特别关注”中描述了数据记录和传输的编码。

第3章是数字逻辑的经典表示及其与布尔代数的关系。本章详细介绍了组合逻辑和时序逻辑,以使读者能够理解更复杂的MSI(中等规模集成)电路(如译码器)的逻辑组成。更复杂的电路(如总线和存储器)也包括在内。优化和卡诺图包含在“特别关注”中。

第4章解释了基本的计算机组成并且介绍了许多基本概念,包括取指-译码-执行周期、数据通路、时钟和总线、寄存器传输表示和CPU。介绍了一种非常简单的MARIE体系结构及其ISA,使读者对基本体系结构(包括程序执行)有了全面理解。MARIE展示了经典的冯·诺依曼设计,包括一个程序计数器、一个累加器、一个指令寄存器、4096字节的存储器和两种寻址方式。为了强化早些时候提出的指令格式、指令模式、数据格式和控制等概念,还介绍了汇编语言程序设计。本书不是一本汇编语言教材,也不是为汇编语言程序设计而设计的实践课程。介绍汇编的主要目的是进一步从总体上理解计算机体系结构。我们为MARIE提供了一个仿真器,这样就可以在MARIE体系结构上编写、编译和运行汇编语言程序了。本章介绍和比较了控制的两种方法:硬连线和微程序。最后,比较了Intel和MIPS体系结构,以强化本章介绍的概念。

第5章对指令集架构进行了更深入的考察,包括指令格式、指令类型和寻址方式,还介绍了指令级流水线。给出了实际的ISA(包括Intel和MIPS技术、ARM、Java),以强化本章中的概念。

第6章讨论了存储器的基本概念,如RAM和各种存储设备,也讨论了更高级的存储器层次结构的概念,包括高速缓存和虚拟存储器。本章对高速缓存的直接映射、全相联映射和组相联映射技术进行了全面介绍,还详细介绍了分页和分段、TLB以及与每种技术相关的各种算法和设备。

第7章介绍了I/O原理、总线通信协议、典型的外部存储设备(如磁盘和光盘),以及每种设备可用的各种格式,也涉及DMA、编程控制I/O和中断。另外介绍了在设备之间交换信息的各种技术,详细介绍了RAID体系结构。在“特别关注”中介绍了各种数据压缩格式。

第8章讨论了各种可用的编程工具(如编译器和汇编程序)以及它们与程序所运行的机器体系结构之间的关系。本章的目标是把计算机系统程序员的观点与底层机器的实际硬件和体系结构联系在一起。另外,介绍了操作系统,但是仅涵盖应用到一个系统中的体系结构和组成方面的更多细节(如资源使用和保护、陷阱和中断以及各种其他服务)。

第9章对近年来出现的其他体系结构进行了概述,涵盖RISC、Flynn分类法、并行处理器、指令级并行、多处理器、互连网络、共享存储系统、高速缓存一致性、存储模型、超标量机、神经网络、数据流计算机、量子计算和分布式体系结构。本章的主要目的是帮助读者认识到我们不局限于冯·诺依曼体系结构,并引导读者考虑性能问题,为下一章做好准备。

第10章讨论了前面章节中没有涵盖的嵌入式系统中的概念和主题。具体来说,本章关注嵌入式硬件和组件、嵌入式系统设计主题、嵌入式软件构建基础和嵌入式操作系统特征。

第11章涉及各种性能分析和管理问题,介绍了必要的数学知识,随后讨论了MIPS、FLOPS、基准测试和各种优化问题。计算机科学家应该熟悉这些优化问题,包括分支预测、推测执行和循环优化。

第12章关注网络的组成和体系结构,包括网络组件和协议,在因特网背景中介绍了OSI模型和TCP/IP。本章的目的绝不是全面介绍网络,而是将计算机体系结构置于相对于网络体系结构的正确环境中。

第13章介绍了一些流行的适合于大型和小型系统的I/O架构,包括SCSI、ATA、IDE、SATA、PCI、USB和IEEE 1394。本章也概述了存储区域网络和云计算。

附录A是关于数据结构的简短介绍,因为在一些情况下学生可能需要复习堆栈、队列和链表等主题。

教学时可以按照书中的先后顺序进行。然而,如果有需要,教师可以修改这个顺序以便更好地适合于给定的课程。图P- 1给出了各章节之间的关系。

第4版中的新内容

自本书第3版出版以来,计算机体系结构领域在不断发展。在第4版中,除了前面三版中已经介绍的主题外,我们纳入了许多新变化。在第4版中,我们的目标是更新内容和参考文献、增加新的材料、基于读者的评论扩展当前的讨论并且增加核心章节中练习的数量。虽然不能列出这一版中所有的变化,但是下面的列表突出了读者可能感兴趣的主要变化。

图P-1 各章之间的关系

第1章已经更新,包括新的例子和解释、平板电脑、计算即服务(云计算)和认知计算。硬件概述已经扩展和更新(值得注意的是,删除了对CRT的讨论,增加了对图形卡的讨论)并且增加了补充材料。更新了非冯·诺依曼模型,并且新增了并行性部分。章后练习的数量增加了26%。

第2章包含移码表示法。之前的简单模型已经修改为使用标准格式,并且增加了更多的例子。本章练习的数量增加了44%。

第3章已经改用“′”号代替上划线(_

)表示非运算符。添加了时序图,以帮助解释时序电路的操作。扩展了FSM部分的内容,包括附加练习。

第4章扩展了存储器组织(包括存储器交叉存取)内容,包括附加的例子和练习。我们现在使用“0x”符号表示十六进制。在硬连线和微程序控制方面增加了更多细节的讨论,并更新了MARIE硬连线控制单元的逻辑图和MARIE微程序时序图。

第5章除了新的ARM处理器部分外,还扩展了大端和小端内容,包括附加例子和练习。

第6章更新了图,扩展了全相联存储器的讨论,包括附加的例子,更明确讨论了高速缓存。所有例子都更新了,用十六进制地址取代了十进制地址。本章现在包含的例子比第3版多20%。

第7章扩展了固态硬盘和新兴的数据存储设备(如碳纳米管和忆阻器)的讨论,还增加了RAID的内容。除了章后练习数量增加20%外,还增加了MP3压缩方面的内容。

第8章已经更新,以反映系统软件领域的发展。

第9章扩展讨论了RISC与CISC(把两者的比较融入了移动领域),还讨论了量子计算(包括技术奇点的讨论)。

第10章包含对嵌入式操作系统的更新材料。

第12章已经更新,删除了过时的材料,整合了新材料。

第13章扩展和更新了USB的内容,扩展了云存储的内容,删除了过时的材料。

读者对象

本书最初是为计算机科学专业本科生的计算机组成与体系结构课程编写的。虽然本书面向计算机科学专业,但是也适用于IS和IT专业的学生。

本书包含的材料对于典型的一学期课程绰绰有余。但是,一般学生无法在一学期课程中掌握本书的所有材料。如果教师计划覆盖所有主题,那么最理想的是连续两个学期的课程。这种组织方式使教师可以根据学生的经验和需求,以不同深度覆盖重要的主题。教师覆盖这些主题所需时间的建议如表P- 2所示,其中还列出了完成每一章的相应期望程度。XII我们希望本书在正式课程学完后的很长一段时间里都会成为有用的参考书。

表P- 2 建议学时

教学模型:MARIE

在关于计算机组成与体系结构的书中,体系结构模型的选择既会影响教师,也会影响学生。如果模型太复杂,那么教师和学生都会陷入与课堂所讲概念无关的细节中。虽然真实的体系结构令人感兴趣,但是把这些体系结构用于入门课程中往往会有太多的独特之处。真实的体系结构每天都在变,这使得事情变得更加复杂。另外,很难找到一本书,其所包含的模型与某个学院中的本地计算平台相匹配,值得注意的是,这个平台也可能每年都会变化。

为了缓解这些问题,我们设计了专门用于教学的简单体系结构MARIE。利用MARIE,学生学习计算机组成与体系结构的基本概念(包括汇编语言)时,不会陷入存在于真实体系结构中的不必要和混乱的细节中。尽管MARIE很简单,但是它却仿真了一个功能系统。MarieSim是MARIE机的仿真器,具有用户友好的图形用户界面,利用它,学生可以创建和编辑源代码,将源代码转换为机器码,运行机器码,调试程序。

具体而言,MarieSim具有以下特点:

对第4章中引入的MARIE汇编语言的支持

用于程序创建和修改的集成文本编辑器

十六进制机器语言目标代码

带有单步模式、断点、暂停、恢复以及寄存器与存储器跟踪的集成调试器

显示MARIE存储器中4096个地址的图形存储器监控器

MARIE寄存器的图形显示

在程序执行期间加亮指令

用户控制的执行速度

状态消息

用户可见的符号表

让用户改正任何错误和自动重新汇编而不改变环境的交互式汇编器

在线帮助

可选的内核转储,用户可以指定存储器范围

用户可以修改的帧大小

平缓的学习曲线,学生可以快速学会使用这个系统

由于MarieSim是使用Java语言编写的,所以这个系统可以移植到任何使用Java虚拟机(JVM)的平台上。学过Java的学生可以查看这个仿真器的源代码,甚至可以对仿真器的简单功能进行改进和强化。

图P-2是MarieSim的图形化环境,图中展示了MARIE机仿真器的图形化环境。该截图包含4个部分:菜单栏、中央监控区、存储器监控器和消息区。

图P-2 MarieSim的图形化环境

菜单选项允许用户控制MARIE仿真器系统的活动和行为。这些选项包括加载、启动、停止、设置断点和暂停已经用MARIE汇编语言编写好的程序。

MARIE仿真器在一个简单环境中展示了汇编过程、加载和执行。用户能够直接看到程序的汇编语言状态,以及相应的机器码(十六进制)。这些指令的地址也可显示出来,用户能够在任何时间看到存储器的任何部分。加亮用于指示程序的初始加载地址,以及当程序运行时所执行的当前指令。寄存器和存储器的图形显示使学生可以看到指令是如何引起寄存器和存储器的值变化的。

如果发现了错误

我们试图使本书准确,但是即使已经进行了多次检查,也还是会有错误。我们非常感谢发现任何错误的读者,意见和建议请发送电子邮件到ECOA@jblearning.com。

致谢

一本书的完成不可能是一两个人努力的结果,本书也不例外。我们意识到编写一本教材是一项艰巨的任务,只有共同努力才可能完成,而且我们发现逐一感谢帮助本书的每个人是不可能的。在下面的感谢中,如果无意中遗漏了任何人,那么我们非常抱歉。

很多人对本书做出了贡献。我们首先感谢所有审校者对以前版本仔细的评价和深思熟虑的书面评论。另外,我们对许多通过电子邮件发送有用想法和建议的读者表示感谢。虽然在这里我们不可能提到所有人,但是我们特别感谢John MacCormick(Dickinson学院)和Jacqueline Jones(Brooklyn学院)细致入微的审阅和大量的建议。我们特别感谢Karishma Rao和Sean Willeford在制作高质量存储器软件模块中投入的时间和精力。

我们也要感谢Jones & Bartlett Learning,与他们的密切合作使得本书得以出版。我们非常感谢Tiffany Silter、Laura Pagluica和Amy Rose的敬业精神、奉献和努力工作。

XIV我(Linda Null)非常感谢丈夫Tim Wahls,他对于我第四次写书而不能料理家务继续保持耐心,对本书的内容坦率地提出了修改意见。他承担了所有做饭的工作,忍受了由于我写本书所做的妥协,包括错过了每年的飞钓假期,以及使我们的马长期处于无人喂养的状态。我觉得嫁给这么好的男人真是太幸运了。我衷心感谢我的恩师Merry McDonald,他教会了我学习和教学的价值和快乐,以及诚实正直地做事。最后,我要向Julia Lobur表达我最深切的感谢,因为没有她,这本书及其附带的软件就不可能成为现实。和她一起工作既愉快又荣幸。

我(Julia Lobur)非常感谢我的爱人Marla Cattermole。Marla Cattermole通过宽容和尽责使这项工作成为可能,用烹饪给我生活上的支持,用智慧给我精神上的支持,并在自己的事业上努力工作,在许多方面弥补了我的不足。我也想对Linda Null表达我深深的感激:首先是对她在计算机科学教育领域非常卓越的贡献和对学生的奉献,其次是对她给了我与她共同编写教材的机会。

目 录

The Essentials of Computer Organization and Architecture,Fourth Edition

出版者的话

译者序

前言

第1章 绪论1

1.1 引言1

1.2 计算机的主要部件2

1.3 一个实例系统:吃力地读专业词汇3

1.4 标准组织12

1.5 发展历史13

1.5.1 第零代:机械计算机(1642~1945年)13

1.5.2 第一代:电子管计算机(1945~1953年)15

1.5.3 第二代:晶体管计算机(1954~1965年)18

1.5.4 第三代:集成电路计算机(1965~1980年)20

1.5.5 第四代:超大规模集成电路计算机(1980~)20

1.5.6 摩尔定律22

1.6 计算机层次结构23

1.7 云计算:计算即服务24

1.8 冯·诺依曼模型26

1.9 非冯·诺依曼模型28

1.10 并行处理器和并行计算29

1.11 并行性:机器智能的

推动者——深蓝和沃森30

本章小结32

扩展阅读32

参考文献33

复习题34

习题35

第2章 计算机系统中的数据表示37

2.1 引言37

2.2 按位计数系统37

《计算机组成与体系结构(原书第4版)》

2.3 不同进制之间的转换38

2.3.1 无符号整数的转换38

2.3.2 小数的转换40

2.3.3 2的幂次作为基数的计数系统之间的转换41

2.4 有符号整数表示42

2.4.1 原码42

2.4.2 补码系统45

2.4.3 有符号数的移码表示49

2.4.4 无符号数与有符号数50

2.4.5 计算机、算术和布斯算法50

2.4.6 进位和溢出53

2.4.7 使用移位进行二进制乘法和除法54

2.5 浮点数表示55

2.5.1 一个简单的模型55

2.5.2 浮点运算57

2.5.3 浮点误差58

2.5.4 IEEE- 754浮点标准59

2.5.5 表数范围、精度和准确度60

2.5.6 有关浮点数的其他问题61

2.6 字符编码62

2.6.1 二进制编码的十进制63

2.6.2 EBCDIC64

2.6.3 ASCII64

2.6.4 Unicode65

2.7 错误检测与纠错67

2.7.1 循环冗余校验67

2.7.2 汉明码69

2.7.3 里德-所罗门纠错码74

本章小结74

扩展阅读75

参考文献75

复习题76

习题76

特别关注:数据记录和传输的编码82

第3章 布尔代数与数字逻辑88

3.1 引言88

3.2 布尔代数89

3.2.1 布尔表达式89

3.2.2 布尔代数的基本定律90

3.2.3 化简布尔表达式91

3.2.4 求反92

3.2.5 表示布尔函数93

3.3 逻辑门94

3.3.1 逻辑门符号94

3.3.2 通用逻辑门95

3.3.3 多输入逻辑门96

3.4 数字组件96

3.4.1 数字电路及其与布尔代数的关系96

3.4.2 集成电路97

3.4.3 汇总:从问题描述到电路99

3.5 组合逻辑电路100

3.5.1 基本概念100

3.5.2 典型的组合逻辑电路示例100

3.6 时序电路105

3.6.1 基本概念105

3.6.2 时钟105

3.6.3 触发器105

3.6.4 有限状态机108

3.6.5 时序电路示例112

3.6.6 时序逻辑的应用:卷积编码和维特比检测115

3.7 电路设计119

本章小结119

扩展阅读120

参考文献120

复习题121

习题122

特别关注:卡诺图128

第4章 一个简单的计算机模型MARIE139

4.1 引言139

4.2 CPU基本知识和组织结构139

4.2.1 寄存器139

4.2.2 ALU140

4.2.3 控制单元140

4.3 总线140

4.4 时钟143

4.5 输入/输出子系统144

4.6 存储器的组成和寻址方式145

4.7 中断148

4.8 MARIE149

4.8.1 组织结构149

4.8.2 寄存器和总线150

4.8.3 指令集架构151

4.8.4 寄存器传输表示153

4.9 指令的执行过程155

4.9.1 取指-译码-执行周期155

4.9.2 中断和指令周期155

4.9.3 MARIE的I/O157

4.10 一个简单的程序157

4.11 关于编译程序的讨论159

4.11.1 编译程序的作用159

4.11.2 使用汇编语言的原因160

4.12 指令集的扩展161

4.13 关于译码的讨论:硬连线和微程序控制166

4.13.1 机器控制166

4.13.2 硬连线控制169

4.13.3 微程序控制171

4.14 实际的计算机体系结构174

4.14.1 Intel体系结构175

4.14.2 MIPS体系结构179

本章小结181

扩展阅读182

参考文献183

复习题184

习题185

第5章 仔细审视指令集架构192

5.1 引言192

5.2 指令格式192

5.2.1 指令集设计决策192

5.2.2 小端和大端方式193

5.2.3 CPU内部的存储:堆栈和寄存器195

5.2.4 操作数个数和指令长度196

5.2.5 扩展操作码199

5.3 指令类型202

5.3.1 数据传送202

5.3.2 算术运算202

5.3.3 布尔逻辑运算指令203

5.3.4 位操作指令203

5.3.5 输入/输出指令203

5.3.6 传送控制指令204

5.3.7 专用指令204

5.3.8 正交指令集204

5.4 寻址204

5.4.1 数据类型204

5.4.2 寻址方式205

5.5 指令流水线207

5.6 指令集架构实例210

5.6.1 Intel211

5.6.2 MIPS211

5.6.3 Java虚拟机212

5.6.4 ARM215

本章小结216

扩展阅读217

参考文献218

复习题218

习题219

第6章 存储器224

6.1 引言224

6.2 存储器类型224

6.3 存储器的层次结构225

6.4 高速缓存227

6.4.1 缓存映射策略229

6.4.2 替换策略240

6.4.3 有效访问时间和命中率240

6.4.4 发生缓存失效的时间241

6.4.5 缓存写策略241

6.4.6 指令和数据缓存243

6.4.7 缓存的级别244

6.5 虚拟存储器244

6.5.1 分页245

6.5.2 使用分页管理的有效访问时间250

6.5.3 汇总:使用缓存、TLB和分页技术252

6.5.4 分页和虚拟存储器的优缺点253

6.5.5 分段253

6.5.6 分段和分页的组合254

6.6 存储器管理实例254

本章小结255

扩展阅读255

参考文献256

复习题256

习题257

第7章 输入/输出和存储系统263

7.1 引言263

7.2 I/O及其性能263

7.3 阿姆达尔定律263

7.4 I/O体系结构266

7.4.1 I/O控制方法267

7.4.2 字符I/O与块I/O271

7.4.3 I/O总线操作272

7.5 数据传输模式274

7.5.1 并行数据传输275

7.5.2 串行数据传输276

7.6 磁盘技术277

7.6.1 硬盘驱动器278

7.6.2 固态硬盘280

7.7 光盘282

7.7.1 CD- ROM282

7.7.2 DVD285

7.7.3 蓝光光盘286

7.7.4 光盘记录方式286

7.8 磁带287

7.9 RAID290

7.9.1 RAID- 0290

7.9.2 RAID- 1291

7.9.3 RAID- 2291

7.9.4 RAID- 3292

7.9.5 RAID- 4293

7.9.6 RAID- 5293

7.9.7 RAID- 6294

7.9.8 RAID DP295

7.9.9 混合RAID系统297

7.10 数据存储的未来298

本章小结300

扩展阅读300

参考文献301

复习题302

习题303

特别关注:数据压缩308

第8章 系统软件327 8.1

引言327

8.2 操作系统327

8.2.1 操作系统的历史328

8.2.2 操作系统的设计332

8.2.3 操作系统的服务332

8.3 保护环境335

8.3.1 虚拟机336

8.3.2 子系统和分区337

8.3.3 保护环境和系统结构的演变339

8.4 编程工具340

8.4.1 汇编程序和汇编340

8.4.2 链接器342

8.4.3 动态链接库342

8.4.4 编译器344

8.4.5 解释器346

8.5 Java:以上全部346

8.6 数据库软件351

8.7 事务管理器354

本章小结356

扩展阅读356

参考文献357

复习题357

习题358

第9章 可供选择的体系结构360

9.1 引言360

9.2 RISC设备361

9.3 Flynn分类法365

9.4 并行和多处理器体系结构367

9.4.1 超标量和超长指令字368

9.4.2 向量处理器369

9.4.3 互连网络370

9.4.4 共享存储器的多处理器373

9.4.5 分布式计算375

9.5 其他的并行处理方法377

9.5.1 数据流计算377

9.5.2 神经网络379

9.5.3 脉动阵列381

9.6 量子计算382

本章小结384

扩展阅读385

参考文献385

复习题387

习题388

第10章 嵌入式系统专题390

10.1 引言390

10.2 嵌入式硬件概述391

10.2.1 标准的嵌入式系统硬件391

10.2.2 可重构硬件394

10.2.3 定制设计的嵌入式硬件398

10.3 嵌入式软件概述403

10.3.1 嵌入式系统的存储器组织403

10.3.2 嵌入式操作系统404

10.3.3 嵌入式系统的软件开发406

本章小结407

扩展阅读408

参考文献409

复习题410

习题410

第11章 性能测量和分析412

11.1 引言412

11.2 计算机性能公式412

11.3 数学准备工作413

11.3.1 均值的含义413

11.3.2 统计学和语义417

11.4 基准测试418

11.4.1 时钟频率、MIPS和FLOPS419

11.4.2 综合测试基准:Whetstone、Linpack和Dhrystone420

11.4.3 SPEC基准421

11.4.4 事务处理性能委员会基准424

11.4.5 系统仿真428

11.5 CPU性能优化428

11.5.1 分支优化429

11.5.2 使用好的算法和简单代码431

11.6 磁盘性能433

11.6.1 理解问题433

11.6.2 物理因素434

11.6.3 逻辑因素434

本章小结438

扩展阅读438

参考文献439

复习题440

习题440

第12章 网络的组成和体系结构444

12.1 引言444

12.2 早期的商用计算机网络444

12.3 早期的学术和科研网络:因特网的根源和体系结构444

12.4 网络协议I:ISO/OSI统一协议447

12.4.1 一个小故事447

12.4.2 OSI参考模型448

12.5 网络协议II:TCP/IP网络体系结构451

12.5.1 IPv4452

12.5.2 IPv4的麻烦453

12.5.3 传输控制协议456

12.5.4 TCP的工作过程457

12.5.5 IPv6460

12.6 网络组成464

12.6.1 物理传输介质465

12.6.2 接口卡469

12.6.3 中继器469

12.6.4 集线器469

12.6.5 交换机470

12.6.6 网桥和网关470

12.6.7 路由器和路由471

12.7 因特网的脆弱性478

本章小结479

扩展阅读479

参考文献480

复习题480

习题481

第13章 选择存储系统和接口483

13.1 引言483

13.2 SCSI架构483

13.2.1 “经典”并行SCSI484

13.2.2 SCSI架构模型3486

13.3 因特网SCSI492

13.4 存储区域网络494

13.5 其他I/O连接494

13.5.1 并行总线:XT到ATA495

13.5.2 串行ATA和串行连接的SCSI496

13.5.3 外围设备互连496

13.5.4 串行接口USB496

13.6 云存储497

本章小结498

扩展阅读499

参考文献500

复习题500

习题500

附录A 数据结构和计算机502

精选习题答案与提示516

5G教育 机器翻译

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Linux驱动具体是指什么?
下一篇:敏捷,DevOps,傻傻不分清楚
相关文章