基本信息

编辑推荐
传统的计算机课程体系人为地割裂了解决问题时所需技能的综合性。例如汇编语言、计算机原理、计算机系统结构、操作系统和编译原理分别从不同角度介绍了计算机的硬件和软件系统,但是随着多核系统日渐成为主流,这种软硬件分离的教学方法变得不切实际。国内外大学都在这方面展开了探索,即如何用一种综合的方法来介绍计算机系统的相关内容。卡内基·梅隆大学 的《深入理解计算机系统》是目前比较成功的探索,它主要从程序员视角来讲解计算机系统,内容偏向系统软件(特别是操作系统),国内外很多大学已采用该教材作为课程的基础。而佐治亚理工学院的这本教材则是另一个有益的尝试,书中计算机系统结构和操作系统的内容基本平衡,旨在让学生了解计算机体系结构和系统软件之间的关系,为进一步深入学习计算机体系结构、操作系统和网络的高级课程或研究生课程,在这些领域进一步深造奠定良好的基础。
内容简介
作译者
陈文光, 清华大学计算机系教授。现为ACM中国理事会副主席;中国计算机学会杰出会员和杰出讲者,副秘书长。主要研究领域为操作系统、编译器与并行计算。讲授《计算机原理与系统结构》《计算机系统性能分析》等本科生、研究生课程。获国家科技进步二等奖一次,部级科技一等奖两次,部级科技进步二等奖两次。在计算机系统结构、程序设计语言与编译器、并行计算和软件的国际一流会议(如PLDI、PPoPP、PACT、ICSE、OOPSLA、Supercomputing CGO等)上连续发表多篇论文。PLDI 2012、PPoPP 2013、2014和CGO 2014程序委员会委员。任《Communication of ACM China Edition》主编,《Journal of Computer Science and Technology》《软件学报》等学术期刊编委。
目录
译者序
前言
第1章 概述 1
1.1 盒子里有什么 1
1.2 计算机系统中的抽象层次 1
1.3 操作系统的作用 3
1.4 盒子里正在发生什么事 5
1.4.1 在计算机上启动应用程序 7
1.5 计算机硬件的演化 7
1.6 操作系统的演化 9
1.7 本书导读 9
练习题 10
参考文献注释和扩展阅读 10
第2章 处理器体系结构 12
2.1 处理器设计涉及什么 12
2.2 如何设计指令集 13
2.3 常见的高级语言功能集 13
2.4 表达式和赋值语句 14
2.4.1 操作数放在哪里 14
译者序
计算机是信息化的核心,随着信息化与社会生活的深度融合,人们对计算机专业毕业生的要求也越来越高。他们不仅需要掌握计算机本身的知识,还需要了解相关行业的知识。这就给计算机专业教学带来了很大的挑战,如何在有限的课时里面,能够覆盖计算机专业的核心内容,提供给学生足够的基础使其能够在所选的方向上继续深造呢?
传统的计算机课程体系有一个重要问题,就是课程人为地割裂了解决问题时所需技能的综合性。例如汇编语言、计算机原理、计算机系统结构、操作系统和编译原理分别从不同角度介绍了计算机的硬件和软件系统,但人们在面临一个具体问题的时候,比如优化一个数据分析程序时需要的技能是综合性的,需要知道高级语言程序变成了什么样的汇编语言,这些汇编语言在操作系统的调度下如何加载和运行,运行时的指令如何在处理器的流水线里乱序执行,其访存是缓存命中还是缓存缺失,并发访问是如何相互隔离的,等等。
因此,国内外大学都在这方面展开了探索,即如何用一种综合的方法来介绍计算机系统的相关内容,这样不但可以减少课时,也能让相关知识的衔接更加平滑,整体的知识体系更加系统化。CMU的《深入理解计算机系统》是目前比较成功的探索,国内外很多大学都已采用该教材作为课程的基础。我们翻译的这本书则是另一个有益的尝试。本书中计算机系统结构和操作系统的内容基本平衡,而《深入理解计算机系统》则明显偏向操作系统,对计算机系统结构的相关内容介绍相对较少。例如,本书对I/O中断处理专门安排了硬件实验,要求学生用硬件设计语言设计CPU并支持中断处理,这类实验对学生理解整个计算机系统是如何运作的非常重要,但在《深入理解计算机系统》中没有这部分内容。
我们希望本书的翻译出版,能够为国内的计算机系统教育提供一种新的选择。对希望未来研究、设计新型计算机系统的学生来说,本书提供了更加完整的基础。
本书的翻译是由我和我的学生完成的,我本人翻译了前言和第1章,汤雄超翻译了第2~4章,杨弋翻译了第5~7章,张峰翻译了第8~10章,朱晓伟翻译了第11~12章,陈力维翻译了第13章和附录。本人对全书进行了审校,因此书中的错误都应该由本人负责。
感谢机械工业出版社华章公司将这本书引入国内,感谢温莉芳副总经理、朱劼编辑和关敏编辑在本书翻译过程中给予我们的极大耐心。
陈文光
2015年6月
前言
和高中生谈论计算机会让人感到兴奋。人们对“盒子(计算机机箱)里”有什么东西有一种神秘感,正是那个盒子里的东西使计算机能够完成诸如让用户玩有很棒图形的视频游戏、播放音乐(不管是RAP还是交响乐)、发送即时消息给用户的朋友等功能。本书的目的就是与读者一起开展一段揭示盒子里有什么秘密的旅程。作为即将开展的旅程的一瞥,让我们在一开始就表明,让这个盒子变得有趣的并不仅仅是硬件,还包括软件和硬件是如何结合起来完成各种功能的。因此,本书所采用的途径是把软件和硬件放在一起观察,看它们是如何相互帮助以及如何协同起来让计算机变得有趣而且有用的。我们把这个过程称作“打开盒子”—即揭开盒子里有什么这个秘密:我们查看盒子内部并理解如何设计关键的硬件单元(处理器、内存以及外设控制器),理解要管理计算机中的所有硬件资源,包括处理器、内存、I/O和硬盘、多处理器以及网络所需的操作系统抽象。因此,这是一本计算机系统教学的入门课程教材,采用了一种新颖的集成教学法来介绍相关内容。
本书的目标是让学生在本科生涯(计算机科学或计算机工程专业)的早期就在相关主题方面接触足够宽泛的知识。本书的内容是为用软硬件集成的方式进行课程教学而写的,这种方式使得学生可以了解计算机体系结构和系统软件之间的关系。书中的材料可以作为4学分的半年学期课程教材,或者作为5学分的季度课程教材,或是作为每季度3学分的两季度的课程系列的教材。基于本书的课程可以为学生打下很好的基础,以进一步深入学习计算机体系结构、操作系统和网络的高级课程或研究生课程,在这些领域进一步深造。此外,这类课程可以尽早激发学生对计算机系统的兴趣,对学生在本科期间参加研究工作也有帮助。
本书的主要特点(除了处理器和内存系统之外)如下:
1)详细介绍了存储系统;
2)专门用一章介绍了网络问题;
3)专门用一章介绍了多线程和多进程编程。
教学风格
本书采用的教学风格是“发现”而非“教导”或“灌输”。此外,内容是以“自顶向下”的方式展现的,读者首先看到我们要解决的问题,然后看到解决方案。以内存管理部分(第8章)为例。我们首先提出问题“什么是内存管理”,一旦理解了内存管理的需求,我们再开始探讨内存管理所需的软件技术和相应的硬件支持。因此,本书是以一种讲故事的方式来进行概念展现,学生们看起来很喜欢这种方式。在适当的地方,我们在不同章节用一些例题来阐明观点。
我们在撰写本书的时候始终以学生为中心。书中包含大量例题,可以帮助学生固化刚刚讨论过的概念。从我们作为教师的经验来看,学生确实喜欢了解历史背景(那些对计算的演化起到重要影响的著名的计算机科学家和机构)和现状,以及我们是怎么一步一步发展过来的。这些历史片段遍布在全书中。除此之外,在必要的时候,在若干章我们都包括了一节从历史角度进行的回顾。我们从学生那里学到并采用的另一个措施是在文中直接给出参考文献,而不是在文末才给出。读者可以看到贯穿本书的大量脚注。此外,我们在每章末尾专门有一节给出外部链接(教材和开创性的著作),包括参考文献和扩展阅读的建议,这些内容在正文中不一定都被引用了,但是有助于增强学生的知识基础。今天,随着因特网上的信息日益丰富,为附加的信息提供URL链接是一件很有诱惑力的事情。但是,我们拒绝了这一诱惑(除了那些权威信息源的可靠链接)。尽管如此,我们知道现在学生在去图书馆之前会先搜索因特网,当然他们也应该这么做。在这种情况下,我们给学生一个提示:在利用因特网作为信息源的时候要慎重。通常,使用Google搜索是获取某种信息的最快方法。但是,必须对这些信息进行筛选以保证其准确性。作为经验法则,使用因特网上的信息来满足好奇心或是回答与流言有关的问题。(DEC是如何衰落的?为什么Linux成功了而Unix BSD却没有?Burroughs公司的历史是什么?计算机系统的真正先驱是哪些人?)对于技术问题(Pentium 4处理器的流水线结构是什么?VAX 11/780的指令集体系结构是什么?)则要从已出版的书籍、相关会议和期刊论文(当然它们中的大多数也可以在线获取)中寻求答案。
佐治亚理工学院计算机学院从1999年秋季学期开始,每学期都开设这门软硬件集成的课程,本教材就是这门课程的副产品。在一开始,本书作者为课程开发了完整的讲义和幻灯片,并使用两本标准的教材(一本体系结构教材和一本操作系统教材)作为课程的背景参考资料来补充课程的材料。从2005年春季开始,我们将课件转换成了本教材的手稿,因为学生一直想要一本与课程内容和风格匹配的教材。本教材的在线版本从2005年春季开始在佐治亚理工学院用于本课程,使用集成的方法介绍计算机系统。本课程每年开设3次(包括夏季学期),每学期有80多名学生选课。因此,书稿在付印之前经过了连续15个学期的教学,从选修本课的学生那里接受了持续不断的反馈与改进意见。
在设计产生本书的课程时,以及在撰写本书的时候,我们从其他机构开设的系统入门课程以及一些优秀教材中学到了很多东西。例如,MIT的计算机系统入门课程拥有很长的历史和传统,而且是真正独一无二的。从这门课程中总结的教材[Saltzer,2009]对激发学生深入学习计算机系统来说是极好的资源。在撰写本书的时候,我们坦承受到了[Ward,1989]和[Kurose,2006]的教学法的启发。
本书的结构和可能的阅读路径
本书的知识内容可以分为5个模块。下面的路线图建议了一些可能的阅读路径。这些路径假设关于体系结构和操作系统的内容一样多。
1)处理器本书的第一个模块是关于处理器以及与处理器相关的软件问题的。我们从探索如何设计盒子中的大脑(处理器)开始。有哪些软件问题?既然计算机的大部分部件主要是使用高级语言编程的,我们考虑了高级语言结构是如何影响处理器的指令集的(第2章)。一旦理解了指令集的设计,我们就开始关注实现处理的硬件技术。我们从实现一个简单的处理器开始(第3章),然后考虑实现一个使用流水线技术的性能优化的处理器(第5章)。处理器是计算机系统中的宝贵资源,因此必须在多个相互竞争的程序间复用,正如第1章中视频游戏的例子所揭示的一样(见1.3节)。操作系统的职责就是保证资源的有效使用。本模块以用于处理器调度的操作系统算法结束(第6章)。
我们预计第2、3、5和6章每章需要3小时的课堂讲授时间和1小时的练习题时间。
2)内存系统第二个模块介绍了内存系统和内存层次。计算机程序包括代码和数据,并且都需要存放的空间。计算机的内存系统可能是决定性能最为关键的因素。如果内存系统不能以匹配处理器速度的方式提供执行程序所需的代码和数据,处理器速度(现在以Ghz为量度)就毫无意义。由于技术的进步,内存系统的大小一直在跨越式发展,但应用程序使用内存的胃口也在以同样的速度增长着,如果不是增长得更快的话。因此,内存也是宝贵资源,操作系统的作用就是保证用好资源。本模块的第一部分是关于有效管理内存的操作系统算法以及相应的体系结构支持的(第7章和第8章);第二部分则介绍内存层次,可以帮助降低处理器在访问代码和数据时的延迟(第9章)。
我们预计第7、8和9章每章需要3小时的课堂讲授时间和1小时的练习题时间。
3)存储系统第三个模块是关于I/O(特别是稳定存储)和文件系统的。只有与计算机进行交互才能让计算机有用且有趣。首先,我们讨论能够把处理器的注意力从当前执行的程序中脱离出来的硬件机制(第4章)。这些机制既包括外部事件也包括处理器执行程序时遇到的内部异常。与硬件机制相关的软件问题是解决正常程序执行的“不连续”性,包括记录原有程序的执行位置以及程序的当前执行状态。然后,我们介绍处理器与I/O设备的接口机制以及相应的底层软件技术(第10章),并特别强调了磁盘子系统。随后,我们完整地介绍了在稳定的存储设备(如磁盘)上如何构建文件系统(第11章)。
我们预计第4章和第10章每章需要3小时的课堂讲授时间和1小时的练习题时间,第11章需要6小时的课堂讲授时间和2小时的练习题时间。
媒体评论
国内外大学都在这方面展开了探索,即如何用一种综合的方法来介绍计算机系统的相关内容。卡内基-梅隆大学 的《深入理解计算机系统》是目前比较成功的探索,它主要从程序员视角来讲解计算机系统,内容偏向系统软件(特别是操作系统),国内外很多大学已采用该教材作为课程的基础。而佐治亚理工学院的这本教材则是另一个有益的尝试,书中计算机系统结构和操作系统的内容基本平衡,旨在让学生了解计算机体系结构和系统软件之间的关系,为进一步深入学习计算机体系结构、操作系统和网络的高级课程或研究生课程,在这些领域进一步深造奠定良好的基础。
本书采用软硬件集成的方法,系统地讲解了计算机系统的软件和硬件知识及其相互关系。全书分为5 个模块:处理器、内存系统、存储系统、并行系统和网络,分别讨论了处理器及其相关的软件问题、内存系统和分级存储体系、I/O 和文件系统、操作系统问题及支持并行编程的多处理器中相应体系结构特点、网络硬件的发展和处理各种网络行为的网络协议栈的特点等。