本节书摘来自华章出版社《计算机组成原理》一书中的第1章,第1.2节, 作 者 Computer Organization and Architecture: Themes and Variations[英]艾伦·克莱门茨(Alan Clements) 著,沈 立 王苏峰 肖晓强 译, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
我们已经建立起计算机和系统这两个概念,我们还必须单独定义术语体系结构。计算机体系结构含有结构(structure)的意思,描述了一些与计算机组成方式有关的内容。之所以定义计算机体系结构,是因为不同的用户会从完全不同的角度看待计算机。例如,秘书可能会将计算机视作一个聪明的字处理设备,而物理学家可能会将它看作是晶体中电子的活动。
我们对这两种极端的观点都不感兴趣。计算机体系结构通常被认为是程序员视角中的计算机。程序员所看到的是计算机的抽象视图,对他们来说,计算机的实际硬件和实现都被隐藏起来了。例如,程序员可以在完全不清楚加法操作如何进行的情况下指示计算机将A与B相加。计算机体系结构的这个抽象视图现在通常被称作指令集体系结构(instruction set architecture, ISA)。
在有关计算机的文献中,术语组成(organization)的出现频率与体系结构差不多。尽管这两个词有时会互换使用,但它们却有不同的含义。计算机组成表示其体系结构的具体实现。软件工程师也许会说计算机组成是计算机体系结构的实例化(即它将抽象变为具体)。现在人们通常会使用术语微体系结构(microarchitecture)而不是组成。从一个日常生活的例子中就可以看出体系结构与组成之间的区别。时钟是报时工具,它的体系结构可被定义为在有刻度的表盘上转动指针。而它的组成却可以是机械式的飞轮或钟摆,电子式的石英晶体振荡器,或者由无线电波进行外部控制。
时钟的例子说明一种给定的体系结构可以由不同的组成来实现。例如,在翻新一座塔上的古代时钟时,可以将它的发条更换为电动马达,而游客却根本察觉不到任何变化。
同样,微处理器内的32位寄存器可以按照与16位计算机相同的方式实现,如使用16位数据总线,以16位为单位传输数据,功能单元也是16位的。如果程序员指示计算机将寄存器A中的32位数据复制到寄存器B中,他将要执行一个32位操作,但16位计算机将执行两个16位操作,这对程序员来说是完全不可见的。按照这个例子,我们可以说一台计算机的体系结构是32位的,但它的组成却是16位的。
将体系结构和实现完全分离是错误的,因为二者是相互影响的。一种给定的体系结构可能最适合采用X技术实现,另一种体系结构则可能最适合采用Y技术实现,即使每种体系结构都能采用X技术和Y技术实现。本书不会深入讨论较低层次的组成和实现(即门级和电路级的计算机组成),这是电子工程师关注的事情。但是,我们会讨论负责解释指令的控制单元(control unit),因为它对计算机体系结构的发展影响很大。
当我们说计算机体系结构描述了程序员所看到的计算机时,会引起歧义。哪个层次的程序员?汇编语言程序员看到的计算机与C或Java等高级语言程序员看到的有很大的区别。即使都是高级语言程序员,C程序员所看到的也与Prolog或LISP程序员看到的有很大的不同。
本书将介绍寄存器级的微处理器体系结构(即汇编语言程序员所看到的计算机),既包括一些与处理器实现有关的方面(例如流水线和Cache),也包括一些与高级语言有关的方面(例如栈和数据结构)。本书关注微处理器体系结构而不是大型机体系结构,因为桌面计算机和小型机中都有微处理器,而大型机越来越多地被用于专门的应用领域。现在再谈论大型计算机也许不合适,因为它属于价格便宜、体积小的微机之前的一个时代。我们用术语“超级计算机”(supercomputer)来描述那些用于科学计算和军事应用、性能极其强大的计算机,它们像过去的大型机那样需要自己的机房。
本书用术语“体系结构(architecture)”代表计算机的抽象指令集体系结构(它的指令集),而用术语“组成(organization)”代表计算机的实际硬件实现。然而,“组成”一词也会被用于描述完整的计算机,包括它的CPU、存储器、总线以及输入/输出机制。最后,我们用术语“微体系结构(microarchitecture)”代表CPU的实现。Intel在其Pentium及后续处理器的介绍中使用这个词表示CPU的实现,因此它变得越来越流行。显然,组成和微体系结构的使用越来越重合。
图1-5指出了一些能够影响计算机设计和性能的因素。标有“技术”的方框说明了制造计算机组件的工艺的重要性(例如,芯片制造技术决定了芯片的速度和功耗)。计算机的速度在计算机系统其余部分的设计中成了主角,因为将快速处理器和慢速存储器放在一起使用是毫无意义的。同样,功耗决定了计算机的使用范围(是位置固定的还是可移动的)。
20世纪70年代以来,半导体技术一直按照摩尔定律的预测发展。摩尔定律是一个经验观察结果,它指出,芯片的集成度每18个月翻一番。这个定律使得芯片制造商得以在所需的制造技术还不存在的情况下就开始设计未来的处理器产品。摩尔定律一词被计算机论文广泛引用,即使一些引用已经偏离了它的本意(即芯片的集成度每18个月翻一番)。通常,摩尔定律也意味着处理器的性能每18个月翻一番。
图1-5中标有“应用”的方框表示计算机的最终应用。一些计算机被用于汽车的嵌入式控制系统,一些被用于游戏机,还有一些用于家庭或办公室。如果不同的计算机所做的事情也不相同,那么有理由认为目标应用对计算机体系结构和组成的设计有一定的影响。
图1-5中标有“工具”的方框说明一些计算机之外的因素也会影响计算机设计。计算机已被用于设计计算机。计算机工具中有很多软件产品,从电路级的硬件设计工具,到计算机模拟程序,到被用来比较不同计算机速度的基准程序或测试用例。
最先进的计算机使用了最新的制造技术。图1-6列出了计算机设计者感兴趣的一些技术。设备技术决定了计算机的速度及其存储系统的容量,包括那些用于制造处理器和主存的半导体技术,制造硬盘的磁技术,用于CD-ROM、DVD和蓝光光碟的光技术,以及网络连接技术。
图1-6中还包括计算机总线技术,因为它的结构、组成和控制均对计算机性能有很大影响。图中还列出了外设(如调制解调器、键盘、打印机和显示系统)与应用(如桌上排版、图形和多媒体)等技术,因为它们都会影响计算机系统的设计。
计算机科学专业的一些学生毕业后会在工业界工作,与数据库、网络、Web设计、视频后期制作或安全计算机软件打交道。即使只有少数毕业生会从事计算机系统设计工作,也不能将计算机同计算机科学分开,就像不能将飞行员同空气动力学和喷气式发动机分开一样。尽管飞行员在大多数时候不需要了解空气动力学或发动机原理,但当发生故障或情况明显反常时,他会去寻找最有用的知识。
计算机体系结构课程会概述计算机是如何工作的,计算机能做什么,并告诉学生们一台典型的存储程序计算机是如何运转的。一门好的课程应该突出设计者今天所面临的重要问题,并为学生提供进行研究所需的工具。而且,理解计算机工作原理的学生能够更好地适应各种要求。例如,理解了Cache会使程序员借助优化数据访问方式的技术编写出速度更快的程序。
计算机是计算机科学的心脏——没有计算机,计算机科学只能作为理论数学的一个分支。学生不应仅仅将计算机视作一个被施了魔法的能够执行程序的黑盒子。就像哲学一样,为什么说计算机体系结构仍然与计算机科学专业的所有学生和从业者有关,也是有具体原因的。
理解计算机体系结构对从事计算机领域的工作具有重要帮助。假设一名毕业生进入工业界并被要求为某大型机构选择一台性能价格比最高的计算机。理解计算机的各个组成部分对总体性能的影响就非常重要。例如,花30美元将Cache容量翻倍,或者花60美元将主频提高到200M,哪个对性能的影响大呢?
计算机体系结构不能完全与软件分离。使用处理器最多的并不是PC机或工作站,而是MP3播放器和手机那样的嵌入式应用。多处理器和实时系统的设计者必须理解商用处理器的基本体系结构概念和实现约束。一些开发汽车电子点火系统的人员可能会使用C语言来编程,但他们也许需要使用一个能够显示引擎中发生的事件与机器代码执行之间关系的逻辑分析器。
学习计算机体系结构的另外一个原因在于它支撑了计算机科学课程体系中其他领域的许多重要观点。对计算机体系结构的理解会帮助学生通过一些反复出现的主题理解计算机科学其他领域中的概念。例如,学习计算机为高级语言提供的体系结构支持可以巩固对程序设计语言和编译器等课程的学习。第4章我们将介绍底层体系结构对C等语言的栈帧和参数传递的支持。同样,学习计算机总线设计也会涉及诸如公平vs优先级等重要内容,这些也会出现在操作系统课程中。