为什么我们写这本书在本书的三个版本中,我们的目标一直是描述揭示未来科技发展方向的基本原理。我们关于计算机系统结构的热情没有消退,正如同我们从第一版开始就不断重复的那样:“这绝不是无聊的纸上谈兵式的计算机科学:这个学科闪耀着夺目的智慧火花,还需要平衡市场购买力和性能价格比,它可能导致巨大的失败,也可能带来伟大的成功。”在写第一版时,我们的主要目标是改变人们学习和认识计算机系统结构的方法。我们感到这个目标依然重要。这是一个日新月异的领域,我们必须研究实际的例子,评估实际的机器,而不是仅仅给出一堆毫无必要的定义和设计。我们在此热烈地欢迎那些从一开始就和我们在一起的人们,同时也热烈欢迎现在加入到我们中间的人们。自始至终我们都将用定量的方法对真实的机器进行分析。和前几个版本一样,我们努力编写这个新版本,使其既适用于专业的工程师和设计者,也适用于学习高等计算机系统结构和设计课程的人士。同样,这一版将致力于通过强调价格和性能的综合考虑以及良好的工程设计,来阐明计算机系统结构。我们相信这个领域在不断地成熟,正在成为精确量化长期建立的科学和工程理论的基础。在我们199年的第一版和1996年的第二版中描述的理论能够成功地应用于揭示现今计算机技术领域的状况,这使我们得到了莫大的满足。我们期望在未来的几十年中,读者能够应用这本书中的基本理论得到同样满意的结果。关于第三版本书的第三版本来应该是很容易写的:和前两个版本相同,我们的量化研究方法没有改变,我们的着眼点还是计算机设计中的基本原理。和第二版一样,书中的例子已经进行了更新。但这个领域中日新月异的进展和新出现的市场,以及和这些市场相关的方法,使得我们几乎重写了整本书。在第二版发行后的六年里,计算机系统结构的发展一直没有减缓过。当编写第二版的时候,我们就发现有许多的新概念需要介绍,还有一些材料应该有更基本的定位。我们的系列丛书从本书的第一版开始,接着是“ComputerOrganizationandDesign:TheHardware/SoftwareInterface”(《计算机组织与设计:硬件/软件接口》),然后是本书和“ComputerOrganizationandDesign:TheHardware/SoftwareInterface”的第二版,现在出的本书第三版,已经是我们系列丛书中的第五本了。一些过时的概念被移到了“ComputerOrganizationandDesign:TheHardware/SoftwareInterface”这本书或者本书的附录中。这和我们的目标是一致的,即在最新的计算机技术环境中介绍概念。所以,本书第二版中只有少量有意义的部分被保留,而第一版中几乎所有内容都已经被替换了。可能最让我们吃惊的是,现在计算机系统结构领域已经被分成了彼此相关但又有不同的三个市场部分,每一部分都有自己独特的需求。在本书的第一版和第二版中介绍的性能价格比主题内容仍然能够很好地说明台式计算机部分。另外两个新的部分是嵌入式计算机和服务器,为了反映这些变化,这一版做了两点比较大的改动:第一点,我们拓展了标准化的成功这一方面的内容;第二点,我们加入了一个称为“其他视角:……”的新部分,用视频游戏、数码相机和可视电话等材料补充了各章的“综合:……”主题中的传统例子。和台式机相比,嵌入式计算机更加关注低能耗。通常情况下,它们只用来运行单个程序,采用电池供电,没有主动制冷机制,对能量的利用率要求非常严格。为了阐述嵌入式处理器方面的内容,我们增加了一些内容,例如采用EEMBC标准来评测系统的性能,还有多媒体处理器和DSP指令集的一些设计准则。附录中包含了关于最流行的嵌入式指令集结构的材料,本书中还包括了平衡性能和能耗的一些方法,介绍了两个强调低能耗的例子:Transmeta和低能耗MIPS处理器,还提到了嵌入式系统的一些例子,包括PlayStation-2视频游戏机、Sanyo数码相机以及Nokia移动电话。台式机强调性能,服务器则不同,它更强调系统的可靠性、可扩展性和吞吐量。通常情况下,这种系统包含多个处理器和多块磁盘。本书解释了可靠性的概念,给出了很难得的组件故障率的统计数据。除了评测处理器性能的SPEC2基准测试,我们还介绍了文件服务器的TPC数据库基准测试以及SPEC基准测试。本书中介绍的服务器处理器的例子包括Intel的IA-64处理器和Sun的UltraSPARCIII处理器,服务器系统的例子包括SunFire68,SunWildfire,EMCSymmetrix,EMCCelerra,Google集群计算机和IBM事务处理集群计算机。在第三版中,我们继续采用真实世界的例子来说明我们的思想。另外,“综合:……”部分的例子是1%新增的。这部分包括MIPS64指令集结构,IntelPentiumIII和Pentium4的流水线组织,IntelIA-64结构和微结构(microarchitecture),Alpha21264存储器层次结构,SunWildfire多处理器,EMCSymmetrix存储阵列,EMECelerra文件服务器和Google搜索引擎。“其他视角:……”部分介绍了真实世界中的嵌入式处理器和服务器,包括TrimediaTMS多媒体处理器,PowerPC多线程处理器,SonyPlaystation-2上动画引擎的存储器层次结构,SunFire68/UltraSPARCIII存储器层次结构,EmpowerTelMXP嵌入式多处理器,Sanyo数码相机和Nokia移动电话。根据读者的建议,我们改进了练习部分。所有的练习都经过了复查,减少了不明确的地方,去掉了不合适的题目,同时我们还加入了许多新的习题。应许多读者的要求,我们在附录B中给出了部分习题的答案。为了方便读者的阅读,我们加入了一些比较新的特性。例如,我们用流行的64位MIPS系统结构代替了假想的32位DLX系统结构,因为使用现有的软件显然比我们另外开发并维护自己的编译器更有意义。在附录中我们包含了数十种指令集结构的描述,还包括了它们的基本教程、流水线的简单介绍以及向量处理器和浮点运算算法。论题的选择和组织就如同从前一样,我们采用保守的方法进行论题的选择,由于在这个领域中有太多有意义的想法,超过了基本理论所能够覆盖的范围。我们没有去全面综述每种结构,而是把我们的论述集中在任何新机器中都可能涉及到的核心概念。关键标准是选择那些已经成功地经受了考验并得到了充分的应用,同时能够使用定量的术语进行讨论的观点。我们确定是否选择一个新论题时,所遇到的第一个困难就是由于某些论题已经发展得更为重要,原来只需要几页篇幅的描述,而现在几页根本不能说明问题。第二个困难是某些以前我们没有包括进来的论题已经成长为需要基于我们的定量标准和它们成功的市场表现进行讨论的主题了。为了讨论这些新的材料,我们减少了介绍性知识所占的比例,并且假定读者了解“ComputerOrganizationandDesign:TheHardware/SoftwareInterface”这本书中的介绍性概念。考虑到对流水线不熟悉的读者,我们在附录A中包括了对流水线的基本介绍(如果读者想要更深入地了解流水线的基本知识,请参阅“ComputerOrganizationandDesign:TheHardware/SoftwareInterface”一书)。我们的目的一直都是尽力提供从其他类似来源不能获得的材料,所以我们在可能的时候就会重点介绍一些高级内容。实际上有几个本书中全面介绍的系统,其他文献中是找不到相关描述的。内容概述第1章主要讲计算机设计的基本量化原理和性能的评测方法。这一章指出了技术的作用和影响计算机系统价格的因素。本章总结了台式机、服务器和嵌入式计算机市场中的性能评测和性价比评测,同时考虑了嵌入式处理器的能量利用率。第2章包括了指令集设计的基本原理和示例。本章除了给出基于SPEC2基准测试的指令集使用量化数据,还介绍了贯穿全书的MIPS64系统结构。这个版本中新加入了数字信号处理器的原理,包括其基本功能和评测方法。这一章还介绍了现代编译器的结构,讲述了它们如何影响传统计算机,DSP和多媒体扩展指令集的功能。同时给出了一个和多媒体处理器对照的例子:TrimediaTM52,这个处理器的指令集混合了多媒体指令和MIPS指令。附录C到G扩展了这一章的内容,加入了十几种流行的指令集。第3章和第4章主要介绍高性能处理器中的指令级并行技术,包括超标量技术、分支预测、猜测执行、动态调度以及相关的编译器技术。这些技术发展非常迅速,尽管我们用了57页的附录(附录A,以第二版第3章为基础),我们仍然需要用两章的篇幅来介绍一些相对高级的内容。这一版的第3章主要描述基于硬件的指令级并行技术,而第4章把重点放在了与之相关的编译技术上。第3章用IntelPentium系列处理器作为主要示例,而第4章的示例采用IntelIA-64架构的第一个实现版本:Itanium。第5章首先介绍了cache的基本原理,然后讨论了现在比较有挑战性的问题:存储器层次结构优化设计。除了传统的例子,例如Alpha21264,AMDAthlon,IntelPentiumIII和Pentium4以外,这一章还介绍了SonyPlaystation-2视频游戏机上的动画引擎和使用UltraSPARCIII处理器的SunFire68服务器的存储器层次结构。书中描述了应用带宽优化技术的DRAM芯片,例如RAMBUS,并分析了它们的性价比。另外,这一章还包括了台式机cache的SPEC2基准测试性能数据,以及cache在多媒体和服务器应用程序中的性能。第6章讨论了多处理器系统,重点放在共享内存的系统结构上。这一章开头讨论了在线程级并行层次上不同应用领域的特性,然后讨论了对称和分布式内存结构的基本组织原理和性能。这一章的基本论题是同步、内存一致性模型和多线程(包括并发多线程)。另外,本章还讨论并分析了采用分布式内存结构扩展对称式结构的SunWildfire设计。第7章讲述存储系统,本章进行了极为可观的修订,增加了可靠性和实用性方面的内容、RAID的基本介绍、可用性基准测试和难得的实际系统故障统计数据。这一章提供了队列理论的介绍和I/O性能的基准测试数据。除了对传统总线的介绍外,还介绍了嵌入式总线和服务器总线。这一章后面部分描述的5个设计实例,通过越来越实际的性能要求对一个I/O系统不断进行改进,同时进行了平均故障时间的评估。EMC提供了把这些都综合在一起的实例,这是这些系统相关文档的首次公布。本章对数码相机的剖析使得读者能够从嵌入式的视角对存储系统进行理解和研究,同时从历史的角度给出了最真切的RAID系统发展和普及的历程。第8章的目标是从计算机系统结构的角度介绍网络。由于该领域发展十分迅速,因此重点介绍概念和基本原理。本章开头提供了一个通用的框架,给出了在各种情况下网络设计的基本思想,包括局域网、存储区域网络和广域网,并对因特网技术进行了总结。本章的后半部分深入探讨了集群技术及其在科学计算和数据库程序方面的应用,还详细讨论了集群系统的性价比,包括了机房和网络带宽的价格。最后通过对Google搜索引擎使用的集群系统的讨论,总结了这一章的内容。本书的附录编号从A到I。附录A是流水线基本概念的指南,对流水线不熟悉的读者应该在读第3章、第4章之前先阅读附录A,了解一下流水线的基本知识。附录B是部分练习题的解答。附录C更新了第二版中RISC附录的内容,加入了64位Alpha,MIPS,PowerPC和SPARC及其多媒体扩展指令的描述,同时该附录中还包括了流行的嵌入式指令集,例如ARM,Thumb,SuperH,MIPS16和MitsubishiM32R。附录D介绍了8x86系统结构。附录E和附录F分别对应两种在系统结构发展历史上有一定意义的结构,它们是VAX(附录E)和IBM36/37(附录F)。附录G包含了更新过的一些向量处理器的知识。附录H描述计算机算法,附录I则介绍了一致性协议的实现。限于篇幅,本书纸介版本附录C到I只给出其标题,具体内容请到www.mkp.com/CA3浏览或下载。总体上说,这个版本有7%的内容是新的。如果不包含联机的附录,那么第三版比第一版长1%,如果包含网上的在线附录,那么第三版比第一版长3%。内容导读对于本书其实并没有一个最好的阅读顺序。我们编写这本书的时候,就已经考虑到要保证读者能够按照多种顺序来阅读这本书。本书中有一些章节需要按照一定先后顺序阅读::第2章、第3章、第4章和第7章、第8章这几章。读者应该从第1章开始阅读,在阅读第6章之前先阅读第5章。如果需要了解附录C、附录D、附录E、附录F和附录H的内容,应该在第2章之前阅读。如果读者准备阅读附录A,那么应该在第3章、第4章之前进行。附录G的内容和第3章、第4章的内容形成了很有趣的对照:建议穿插阅读。虽然有很多阅读的方法,但我们还是建议读者采用如下两种主要的阅读方法:1.由内到外(Insideout)。这种方法的指导思想是:处理器设计是计算机系统结构的基础,与处理器无关的章节只有在时间充足的情况下才去阅读。先从第1章开始,然后是处理器的内部结构(第2章、第3章和第4章)、存储器层次结构(第5章),接着是多处理器(第6章)和存储系统(第7章),最后是网络和集群(第8章)。2.由外到内(Outsidein)。这种方法的指导思想是:当今计算机系统结构中有挑战性的问题都在处理器之外,处理器内部的知识只有在时间充足的情况下才去阅读。先从第1章开始,然后是存储器层次结构(第5章)、多处理器(第6章)、存储系统(第7章)、网络和集群系统(第8章),最后用指令集和流水线来进行总结(第2章、第3章和第4章)。章节结构和习题每个章节中,所有的内容都按照相同的模式组织。在每一章的开始我们引入该章的主要论题。然后是相关问题部分,主要讲述这章中所涉及的思想是如何和其他章节中的思想相互影响相互作用的。接着是“综合:……”部分,描述了如何将这些思想应用于实际的机器,并且由此来组织这些思想。接下来是“其他视角:……”部分,这是第三版的新特性,通过实际的嵌入式或者服务器系统的例子使读者对本章的内容有新的认识。下一个部分是谬误和易犯的错误部分,主要目的是使读者能够从其他人的错误中得到教训。我们指出了通常存在的误解和非常难以避免的结构上的陷阱,力图使读者对这些拦路虎保持警惕。每一章的最后是结论、历史回顾和参考文献几部分,对这些章节中所提到的思想给出评价并对这些发明创造的历史背景进行介绍。我觉得这就像是一部计算机设计的戏剧一样。参考文献是为了方便学习系统结构的学生进行查找。如果读者有时间,我们推荐阅读一些本书提到的领域中的经典论文。从原创作者那里直接体验这些思想是非常有乐趣和教育意义的。谬误和易犯的错误以及历史回顾是前两个版本中最受欢迎的部分。本书每章后面都有习题,总共有超过2道习题。每个习题号后面的括号中都会指出回答该问题所需要阅读的主要相关章节。我们希望这能够帮助读者避免做那些还没有阅读相应章节的练习,同时这也提供了评判结果合理与否的参考内容。注意对于标有量号(★)的题目,我们在附录B中给出了解答。我们还将习题分类,估计了各个问题可能需要花费的时间:[1]5分钟以内(阅读和理解)[2]15到2分钟内写出完整解答[25]1个小时内写出完整解答[3]短程序设计:少于一整天的编程[4]大程序设计:2周的时间[5]学期设计(一个小团队2到4周的时间)[讨论]和其他对计算机系统结构感兴趣的人进行讨论的题目补充MorganKaufmann出版社还可以向使用该书的正式教员提供一本教师手册(“Instructor誷Manual”),该手册给出了本书所有练习题的全面解答。众多的附录材料可以从MorganKaufmann的主页上得到(www.mkp.com)。由于我们使用的是标准的指令集,所以我们已经不需要提供专用的软件。主页中包含了MIPS结构的相关内容,例如模拟器、编译器和汇编器等。这个主页还包括了勘误表、书中插图的eps版本,以及读者可能感兴趣的相关材料的链接。为了感谢读者的一贯支持,出版社将经常性地加入新的内容,并且补充到相关站点的链接中。帮助改进这本书阅读这本书还有可能挣钱。谈谈性能价格比吧!如果你读了后面的致谢,你就会看到在修正错误上,我们有很长的路要走。因为一本书会多次印刷,我们有机会进行更多的校订。如果你发现了任何错误①,请通过电子邮件(ca3bugs@mkp.com)和出版社联系。第一位报告某个错误,并且该错误被我们在下一次印刷中纠正的读者将获得1美元的奖金。请查阅http://www.mkp.com主页的勘误表,看看所发现的错误是否已经有人报告了。我们将处理错误报告,并在一年左右发送核实结果,请耐心等待。我们也非常欢迎对于本书内容的建议,希望读者能把宝贵的建议发送到另一个电子邮件地址ca3comments@mkp.com②。结束语本书又是一次真正合作的结晶,我们每人写了一半的章节和一半的附录。我们无法想像,如果没有另外一个人的工作,我们需要多长的时间才能完成这本书。我们在看上去没有希望的时候相互鼓励,共同深入地说明比较困难的概念,在周末时为长达1页的书稿进行检查,以及在沉重的责任和压力使得我们难以拿起笔的时候互相宽慰。因此,我们将再次共同承担读者在阅读后的各种批评。美国斯坦福大学计算机系Hennessy教授和加州大学伯克利分校计算机系Patterson教授是现今计算机设计领域非常受人尊敬的学者和开拓者。JohnHennessy精通软硬件两个方面,是具有传奇色彩的MIPS编译器和几代MIPS硬件产品技术上的领导者。DavidPatterson是RISC的最初提倡者之一。他首创了RISC一词,定义了RISC的含义,是Sun公司SPARC处理器的主要顾问。他提出了RAID(独立/廉价磁盘冗余阵列)的概念,推动了为海量数据服务器提供磁盘存储解决方案的工业革命,并且还提出了NOW(工作站网络)的概念。该书是他们对计算机组织、系统结构研究和实践的全面而系统的总结。目前,世界上很多大学的计算机系统结构课程采用这本教材。国内也有大学采用这本教材的英文版。与同类著作相比,这本书具有结构清晰完整、系统性强、内容新颖、行文深入浅出和可读性强的特点。特别值得强调的是,这本书讲授计算机组织和系统结构的量化研究方法能够使读者深入、扎实地掌握基本概念和理论,同时培养一种科学、规范而且有效的学习和科研方法乃至思想。这也是本书能在世界范围内备受推崇以及我们把它翻译成中文并极力在国内推广的主要原因。这是一本能使读者在较短时间内全面了解、熟悉和掌握当代计算机系统结构发展主流技术和最新成就的优秀教材和专业参考书。其中译本的问世必将为我国计算机科学技术教育和研究工作带来新的思路和灵感。感谢电子工业出版社对出版中译本(第三版)的支持,感谢清华大学计算机系许多同学在翻译和校对过程中所付出的辛勤努力。由于时间仓促、译者水平有限,文中定有不当或欠妥之处,还望读者批评指正。本书系统而全面地介绍了计算机系统的设计基础、指令集系统结构、流水线和指令级并行技术、层次化存储系统与存储设备、互连网络以及多处理器系统等重要内容。对计算机系统结构的论述主要以较流行的64位MIPS结构为基础,通过量化分析的方法进行。本书内容丰富全面,既介绍了当今计算机系统结构的最新研究成果,也引述了大量有影响的计算机系统设计开发方面的实践经验。全书编排层次合理,叙述由浅入深。各章结尾还附有大量的习题和参考文献。本书既可以作为高等院校计算机专业高年级学生和研究生学习“计算机系统结构”、“计算机原理”等课程的教科书或参考书,也可供与计算机相关的专业人士学习参考。BillJoy,Sun微系统公司的首席科学家兼首席执行官。非常幸运,二十多年前我能在加州大学伯克利分校的DavidPatterson教授指导下学习计算机系统结构。我非常欣赏他的课程,那时正是RISC架构发展的初期。在离开伯克利后帮助创建Sun微系统公司的过程中,我有很多想法来自于他的课程教学,以及这本非常重要的书。今天,一个好消息是,这本书的内容覆盖了许多当代非常重要的知识。未来的好消息是,仍然有无数激动人心的、富有挑战性的工作等着我们去完成。而本书无疑是一个很好的开始。我参加过的最成功的项目都是由简单的想法开始,并采用从经验中总结来的简单数学模型来完成的。计算机技术正在迅速地发展,各种新的应用不断出现,这促使我们需要新的简单模型来理解未来可能出现的新事物,理解新的应用如何在各种不同的方面影响我们的系统。第1章介绍的定量方法是理解这些问题的重要工具。我们尤其希望在不远的将来,各种或大或小的系统都会更加强调用最小的能耗达到应用的要求。这方面还有许多工作需要去做。在我的职业生涯中,我接触过许多不同的指令集。我开始编程的时候用的是PDP-8计算机,它的指令集非常简单,我的一个朋友甚至通过打孔纸带的数据就能理解程序。我用PDP-11的汇编器写了许多程序,包括一个VAX上的Pascal语言解释程序(本书第一版中的一个例子)。VAX的成功使得UNIX系统在早期的互联网中得到了广泛的传播。PDP-11和VAX是非常传统的复杂指令集(CISC)结构,其相对简洁的指令集使得它几乎无法使用流水线。在多年的公开访谈中,我都把VAX11/78的性能作为基准,它的速度广为人知,因为在很长一段时间内,该系统结构的快速实现一直没有出现。微处理器的x86以及68x等复杂指令集出现后,VAX的性能就显得很落伍了。微处理器的价格优势使得它们渐渐取得了统治地位。这个时候,精简指令集系统结构(RISC)出现了。这种结构最早由IBM的JohnCocke提出,Patterson和Hennessy为它正式命名并大力提倡,并由POWERPC,MIPS和SPARC等微处理器实现。这些实现证明采用简单的寄存器指令集能够获得高性能的流水线。一般来说,采用RISC的程序代码比较长,由此需要更高的取指令(fetch)带宽,第1章中的技术和CarverMead的经典论断所揭示的未来CMOS技术的发展趋势告诉我们,这点代价是值得的。对当前所存在问题的思考和对未来计算的展望,使得我们更倾向于RISC系统结构,这将成为本书关注的中心。第2章(以及相关的附录)介绍了当代以及历史上有影响的指令集结构。虽然经历了近二十年的努力,RISC结构还远不能成为系统结构的终结者。前后有十几年的时间里我参与了SPARC结构的设计及其几个版本的实现,现在我正在参与另外两种不同结构处理器的设计,它们是:picoJava,它实现了大部分的JAVA虚拟机指令,这是一种简洁的字节码高级指令;MAJC,一种简单的多线程超长指令字(VLIW,Verylonginstructionword)处理器,主要用于Java程序和多媒体应用。这两种结构针对不同的新市场应用,即低能耗的嵌入式设备领域和能够在一定的能耗和成本下采用并行计算获得高性能的领域。这两者现在都还没有取得广泛的商业成功。但我认为未来会有许多不同的工业标准结构(ISA)受到青睐。对历史的深入了解可以让我们深受启发,通过对过去成功设计的研究,可以发现它们是如何在几个关键因素,例如程序大小、执行速度和能耗等方面取得平衡的。这些经验将为我们今天的设计提供帮助。第3章和第4章讲述了指令级并行(ILP),这种能力可以使计算机在同一时刻执行多条指令。在过去的二十几年中,RISC技术和超长指令字技术大大促进了这一领域的发展。但是,在IntelItanium的结构设计中,RISC技术,特别是VLIW技术需要很高的能耗。当我们试图获得更高的指令级并行度的时候,我们遇到了设计中的难题:如果需要同时执行N条语句,那么晶体管数量和能耗的需求将以N2的态势迅速增长。另一种方法是采用简单的流水线,比较现实的指令级并行度,并混合使用其他的并行方法,例如每处理器多线程和每芯片多处理器技术。对于未来的高性能系统设计,最大的挑战就是要明白并行执行是完全可能的,但在实际中融合其他并行度低但是能耗也低也更简单的技术才是明智的做法。在研究所的时候,我经常开玩笑地说高速缓存是计算机科学中惟一重要的思想。事实上,高速缓存技术确实极大地影响了计算机系统的设计。第5章介绍了经典的高速缓存设计和主存储器层次结构以及虚拟内存技术。现在,类似于Java的高级编程语言开始采用垃圾回收和内存越界检查技术来支持更可靠的软件设计,这样可以避免内存共享错误和缓冲区溢出等大程序中常见的错误。只有类似于Java的高级语言才支持自动存储管理,只有这样才能实现真正的软件组件。但是在现在的存储器层次结构上,要实现垃圾回收功能是非常困难的。设计这样的系统或者设计这样的语言是研究的热点,虽然我们取得了很大成功,但仍然有很长的路要走。Java语言能够很好地支持线程级并行。这是实现简单、高效的高性能系统的关键,这种方法避免了前面所说的N2问题,但也带来了新的挑战。第6章将对这一领域进行基本的介绍。传统的做法是每一个处理器放在一块单独的芯片上,由于存储器层次结构的问题以及同步操作本身的高昂代价,在不同处理器之间保持同步非常困难。Java语言试图解决这个问题。我们的尝试是在Java语言规范(我是作者之一)中给出用Java实现内存模型的一个描述。我们清醒地看到,这个描述存在技术上的问题(可修正),我们需要对存储器层次结构进行仔细思考,以便使我们设计的语言能够更好地运行在新的系统平台上。我们把Java规范看做是未来将要完成的许多工作的第一步。和第7章描述的一样,存储系统由原来连接在单个计算机的一个组成部分,变成了一种独立的网络资源。这让人想起了计算机图形技术的发展史,随着图形处理重要性的增加,原来由主机处理的功能被单独分割出来,成为了独立的图形处理芯片。在接下来的几年中,一切将会发生巨大的改变,大量的并行主处理器将拥有比主板之外的图形处理单元更好的性能。与此类似,存储技术将会有突破性的进展,例如分子电子学和纳米技术将会大大降低存储设备的价格并缩短访问时间。这将鼓励人们把数据备份在不同的计算节点上,而不是通过网络共享。存储技术将发生和图形技术类似的变化。同样,存储系统也将会有非常严格的健壮性要求,不仅仅是针对硬件错误,还要考虑软件错误以及人为操作失误。这将是近几年一个非常有挑战性的课题。第8章提供了计算机互连和网络的一个基本介绍。这方面我的模型来自于Sun公司另外一位创始人AndyBechtolsheim,他经常说:“以太网不败!”。更为合适的表述是:给出网络互连的要求,不管以太网有什么缺点,总会有一款经过某些修改的以太网协议版本在市场上获得胜利。原因何在?很明显,以太网协议具有简单和使用广泛的特点,然而更加有说服力的原因是,采用以太网协议我们能够立即开始工作,而不需要争论对最终结果无关紧要的细节。这个经验能够适用于本书中有关计算机系统结构的一切领域。多年以前,DavePatterson曾经说过,对于一个新的项目,你只能获得有限的“亮点”(clevernessbeans)。即你只能在设计中有限的几个方面采用很“聪明”的做法,如果想在方方面面都采用“聪明”的做法,那么你的设计很可能达不到最终的目标,甚至无法工作或者无法完成。在二十多年的设计中我学到的一个教训就是:在设计的过程中,你必须要选择最重要的部分并且将重点放在那里。真正的智慧是知道应该放弃什么,知道什么是无法企及的是具有这种能力的关键。同样,你必须要仔细选择你的猜想。很多年以前我参加了在夏威夷举行的一个会议,在会上,富有传奇色彩的计算机设计师MauriceWilkes为我们做了一次演讲。他说,在他的记忆中,好的研究总是包含一些猜想,这些猜想也许在当时看来是不切实际的,但是在未来有可能实现。如果这些猜想实现了,那么你将发现你做了非常伟大的研究。例如,XeroxPARC的研究小组给出了一个猜想:人人都使用带有图形界面的个人电脑,通过互连网络连接其他人的机器,并采用便宜的Xerography技术进行打印。现在看来,他们的预言是多么的准确,他们的工作是多么的重要啊!在我们的时代,在计算机系统结构领域中,我想将会有许多猜想变为现实。有一些甚至不会有争议,例如摩尔定律将在近十年内继续有效,也许十年之后大规模芯片设计的复杂程度将会达到它的物理极限。更毋庸置疑的是,分子技术有可能极大地降低存储和逻辑元件的价格,光学互连技术将极大地增加网络的带宽并减少传输的错误率,软件仍然会因为编写困难而不可靠,安全问题将继续成为人们关心的重点。本书详细介绍了计算机系统结构发展的趋势。下一代的计算机设计者能够利用本书中的知识精华甄别优劣,减少缺陷,从而设计出各种样式和大小的系统。计算机系统结构设计正变得越来越多样化,也越来越有趣。让我们立即启程探索,或者再次征服这个领域吧,而本书将是最好的起点。芯片中见!