《计算机组成原理》----第1章 计算机系统体系结构 1.1 什么是计算机系统体系结构...

本节书摘来自华章出版社《计算机组成原理》一书中的第1章,第1.1节, 作 者 Computer Organization and Architecture: Themes and Variations[英]艾伦·克莱门茨(Alan Clements) 著,沈 立 王苏峰 肖晓强 译, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

第1章

Computer Organization and Architecture: Themes and Variations

计算机系统体系结构

“弹珠游戏受到物理方面的约束,从根本上说是受到控制小金属球运动的物理规律的约束。视频世界却不知道这样的限制。弹珠在视频世界中飞翔、旋转、加速、改变形状和颜色、消失和再次出现。它们的行为就像计算机程序创造的任何物体的行为一样,仅仅受限于程序员的想象力。视频游戏中对象仅仅是真实对象的一种表现形式。视频游戏中的一个球和真实的球不一样,从不需要遵循重力定律,除非程序员希望它这么做。”

——Sherry Turkle, 1984

“一个程序员正在向五角大楼的高层领导们介绍一台带有人工智能和语音识别功能的超级计算机。这台计算机被用来模拟一场著名的国内战争。在一个关键的时刻,一位将军打断了模拟并问计算机,‘嗯,你准备进攻还是撤退?’计算机回答,‘是’。”
“是什么?”将军喊道。
“先生,是,先生”,计算机回答道。
——佚名
“我认为全世界只需要购买5台计算机。”
——Thomas Watson,1943
“我们在剑桥有一台计算机;曼彻斯特也有一台,在NPL。我想在苏格兰还应该有一台,但这就足够了。”
——Hartree教授,1951
“不是所有人都需要一台电脑。”
——Ken Olson,数字设备公司(DEC)的创始人,1977
“遗忘过去的人,注定要重蹈覆辙。”
——George Santayana,1905
“往事如同异国他乡;他们在那里做着不同的事情。”
——Harold Pinter

计算机是人类发明的最引人瞩目的设备,因为看起来它什么都能做,而且它的性能也在按月不断增长。计算机与心脏起搏器一起工作,能够检测出不规律的心跳,并且使心率恢复正常。在人类飞行员都很难驾驶飞机离开跑道的浓雾中,飞机导航系统中的计算机却能够准确地引导一架Airbus 380那样载客超过800人的飞机安全着陆。在电影工业中,计算机已经能够制作出人群场景中和真人难以区分的临时演员。

本书将解释计算机是如何拥有这些本领的,以及它是如何随着底层技术的进步不断提高并不断承担新任务的。我们将以一个计算机系统(computer system)为例回答上述问题,并解释术语计算机系统体系结构(computer system architecture)的含义。

本章的一个重要目标是解释计算机实际做了什么。绝大多数人仅仅知道计算机能做什么,但很少有人知道它是怎样做到这一切的。我们将展示CPU如何与计算机的其他部件一起,完成现代计算机所做的各种不平常的事情。

本章将简要概述读者在后面章节遇到的一些重要概念(例如数据存储)。我们要特别强调的是,计算机体系结构既从整体上关注计算机系统,也关注作为计算机心脏的微处理器。本书不会从描述一个真实的计算机系统入手,而是通过一个简单的问题引出计算机的概念,然后分析为了解决这个问题需要进行哪些操作。

本章开始构建一个场景,通过分析解决一个简单问题需要哪些资源来解释计算机的行为。学习过入门课程的读者可以跳过这一节。

我们所处的时代

计算机体系结构和组成教材常常使用与计算机有关的图片开场——大型计算机和小型计算机,在科幻电影《2001》中看到的老式计算机,以及新式的计算机。今天,距离计算机的出现已经过了80年,距离个人计算机或普适计算机的出现也已经过了30余年。我不想将其他与计算机有关的图片强加给读者。我们的生活中已经到处都是计算机,而且已经离不开计算机了。汽车中就有大量的计算机,控制着从刹车到引擎点火定时和关闭车窗等各种事情。
计算机革命发展得十分迅猛,以至于仅仅几年前拍摄的科幻电影中有关计算机使用的内容就已经很尴尬地过时了。最近我(再次)观看了一部科幻电影的杰作,由雷德利·斯科特执导,拍摄于1982年的《银翼杀手》(Blade Runner),其中的太空旅行已经是件很普通的事情,而且人们已经可以在大桶中培育更优秀的克隆人。然而,在这部电影里,数据显示终端还是粗大而笨重的CRT设备,显示分辨率低得可怕,而且《银翼杀手》既没有Web风格的通信网络,也没有支持视频的微型手机。这些新功能都不为当时的科幻小说作者所知。我们正处于一个计算机技术的发展速度远远快于作家想象力的时代(《黑客帝国》中那样的虚幻世界当然是个例外)。

计算机的各个组成部分(如数据处理、数据存储、数据传输、软件、功耗,等等)的技术发展是不均衡的,这是本书的一个基本主题。实际上,计算机各组成部分间的性能差异非常大。例如,1985年微处理器的主频大约为10MHz,存储器访问时间约为500ns(5个时钟周期)。而现在处理器的主频已经达到3GHz,存储器的访问时间还停留在50ns(150个时钟周期)左右。正如我们将要看到的那样,处理器和存储器之间不断增大的性能差距迫使设计者不断寻找缓解存储器平均访问时间问题的方法,比如多级Cache(《计算机存储与外设》第1章)和超线程。


《计算机组成原理》----第1章 计算机系统体系结构 1.1 什么是计算机系统体系结构...


《计算机组成原理》----第1章 计算机系统体系结构 1.1 什么是计算机系统体系结构...

第一代和第二代计算机体系结构教材中几乎没有提及功耗。1980年,用户只要给计算机接上电源就够了,除非他正好是为数不多的几个给人造卫星设计电子设备的人之一。那时的计算机庞大而笨重,几乎没人会想到便携式计算机,处理器也没有那些高得离谱的功耗需求。而今天的世界已发生了巨大的变化。小型化技术使人们可以制造出非常复杂的,运行速度和存储能力均比过去提高了很多个量级的、带有高分辨的率显示器、能够放在口袋或公文包中的便携式计算机。这意味着功耗已经成为现在的头等(first class)设计指标,它也是便携式系统设计的限制因素之一。长的工作时间成为可便携性设计追求的新目标。便携式计算机应该可以使用一整天而不需要充电——最新的笔记本电脑和平板电脑(比如iPad)都已经可以做到这一点。

即使计算机已经接通了外部电源,功耗问题也依然存在。一个在单个硅片内集成了超过10亿晶体管,在4GHz主频下工作的处理器,会在一个狭小的空间内产生大量的热量,人们不得不关心怎样才能将这些热量散到系统之外。实际上,多核处理器的出现和发展在很大程度上是因为若不解决功耗问题,处理器的工作主频很难超过4GHz。

Intel的高级院士Pawlowski举了一个很好的例子来说明计算机的发展方向。他在2007年发表的一篇关于医疗领域高性能计算的文章中指出,2004年的医学影像处理需要大约1GFlops(每秒109次浮点操作)的计算能力。而到了2010年,所需的计算能力预计将达到1TFlops,6年间增加了1000倍。这种计算能力需求的增长是因为现在的医学影像处理使用分辨率更高的图像,更好的信号处理算法,以及为了支持旋转(改变视角)而使用数量更多的图像。

运动图像的存储、处理和显示是最常见的计算机应用之一。不久以前,计算机还只能进行简单而有限的图像处理。而现在,即使是最一般的计算机也能完成高清晰度(高分辨率)运动图像的常规存储和处理。要做到这一点,需要在处理器体系结构和组成、存储系统、数据传输总线、面向图像数据类型的处理(以及图像压缩算法)而定制的专用指令集、存储器件(如Flash存储器)以及硬盘和发布系统(如蓝光光盘)等方面取得重大进步。所有这些都正好属于现代计算机体系结构课程的教学内容。

1.1 什么是计算机系统体系结构

本章的第一个概念是计算机系统(computer system)。媒体一直以来将一个微处理器(microprocessor)或者甚至是一块芯片(chip)称作计算机系统。实际上,计算机系统包括读取并执行程序的*处理单元(central processing unit, CPU),保存程序和数据的存储器,以及将芯片转换为实用系统的其他子系统。这些子系统会使CPU与显示器、打印机、Internet等外部设备之间的通信变得更加容易。

读者会在本书和其他教材中遇到计算机、CPU、处理器、微处理器和微机等名词。计算机中实际执行程序的部分叫作CPU,或者更简单地被称作处理器。微处理器则是在单个硅片上实现的CPU。围绕着微处理器构建的计算机被称作微机。这些术语经常被互换使用,而且微机一词的使用频率在不断降低,因为已经没有必要再区分哪些计算机拥有多个独立的集成电路,哪些计算机只有微处理器(就像Intel Core i7那样)。

尽管CPU是计算机的核心,计算机的性能既取决于CPU,也取决于其他子系统的性能。如果不能高效地进行数据传输,仅仅提高CPU的性能是毫无意义的。计算机科学家曾开玩笑说,提高微处理器的性能只不过是让CPU更早地开始等待来自存储器或磁盘驱动器的数据。在本书后面的部分,读者将会发现,计算机不同组成部分的性能提升速度是当前计算机系统设计者面临的主要问题,因为各个部分的性能提升速度并不一致。例如,过去几十年中,处理器的性能持续高速增长,而硬盘的性能(访问时间)在过去30年内几乎保持不变。不过随着固态盘(solid state disk, SSD)等半导体硬盘开始取代机械硬盘,这种窘境有可能结束。


《计算机组成原理》----第1章 计算机系统体系结构 1.1 什么是计算机系统体系结构...

图1-1描述了一个简单的通用计算机(如个人计算机或工作站)结构。除了CPU外,图中还有一些几乎所有计算机中都有的部件。信息(即程序和数据)保存在存储器中。为了实现不同的目标,真实的计算机会使用不同类型的存储器。图1-1中就有Cache、主存、辅存等多个存储层次。尽管图1-1中的Cache位于CPU外,目前绝大多数处理器都在CPU内集成了片上Cache。
尽管每个存储层次都可以用来保存信息,但它们的工作方式各不相同。一些层次访问速度快但价格昂贵,另一些速度慢但却便宜得多。我们将在后面的章节中介绍各种存储系统,因为它们对计算机系统的整体性能而言都非常重要。如果不能将程序存储在合适的存储器内,CPU速度再快也毫无用处;实际上,正是价格便宜的Flash存储器的出现,才使MP3播放器、数码相机、电子书和iPad等数码产品获得了巨大的成功。

可以这样说,与计算机的其他组成部分(包括外部设备)相比,存储系统的特点更加多样,构成也更加广泛。Cache是存放常用数据的高速、专用存储器。主存中存放了大量的工作数据。辅存是指磁盘和CD-ROM,能够存放海量数据,价格却比前两种便宜得多。当然,这里所说的数据实际上包括了程序和数据。本书很大一部分篇幅都用来讨论存储系统和令人赞叹的相关技术。


《计算机组成原理》----第1章 计算机系统体系结构 1.1 什么是计算机系统体系结构...

图1-1中组成计算机的各个子系统通过总线连接在一起,数据通过总线从计算机中的一个位置传递到另外一个位置。现有的一些总线,比如PCIe,本身就是一个复杂子系统。《计算机存储与外设》第4章将介绍能够确保数据流通过总线传输而不与其他数据流冲突的机制或总线协议。

图1-1画出了几种不同的总线。例如,磁盘驱动器与主机之间的总线和CPU与主存间的总线就不相同。一些计算机系统使用总线扩展接口或桥接技术,以便能够在不同类型的总线间交换数据。

本书的副标题特别适用于总线。例如PC机主板上的PCIe总线用来将高速外设接入计算机,而通过USB和FireWire总线则可以将从鼠标到数码摄像机等各种各样的慢速外设与计算机连接在一起。

什么是计算机
定义术语“计算机”时必须指明计算机的类型。数学家约翰·冯·诺依曼是最早界定计算机结构的人之一,为了纪念他而命名的冯·诺依曼存储程序数字计算机是从个人计算机到手机等多种系统的核心。其他类型的计算机还有模拟计算机、神经计算机、量子计算机以及生化计算机。它们处理信息的方式与存储程序计算机完全不同,这超出了本书的范围。


《计算机组成原理》----第1章 计算机系统体系结构 1.1 什么是计算机系统体系结构...

图1-2描述了一台接收并处理输入信息、产生输出结果的可编程数字计算机。在计算机术语里,输入(input)指用户交给计算机的信息,输出(output)指计算机返回给用户的信息。例如,飞行模拟器的输入就是操纵杆的移动,输出是飞行员所看到的世界的视频显示。


《计算机组成原理》----第1章 计算机系统体系结构 1.1 什么是计算机系统体系结构...


《计算机组成原理》----第1章 计算机系统体系结构 1.1 什么是计算机系统体系结构...

图1-3中的可编程计算机接收两种类型的输入:它将要处理的数据,以及准确描述要如何处理输入数据的程序。程序不过是计算机所执行的完成给定任务的操作序列。

图1-2中的计算机叫作通用计算机,因为硬件(即实际的数字电路)是按照程序的指示完成范围相当广泛的工作。在介绍计算机历史的时候,我们会发现第一台数字计算机并不是通用计算机,而是通过硬连线(hardwired)完成特定任务的。硬连线是指计算机的功能(程序)只能通过重新布线来改变。

图1-3更加详细地描述了数字计算机的结构,它可被分为两部分:*处理单元和存储器系统。CPU读程序并完成程序指定的操作。存储器系统保存两类信息:程序,程序处理或产生的数据。程序和数据并不是非要保存在相同的存储器中。然而,大多数计算机系统都将程序和数据保存在相同的存储器系统内。正如前面所讲,这样的计算机被称作存储程序计算机。

计算机是个黑盒子,它将信息从一个位置移到另一个位置,并在移动过程中处理这些信息。信息这个词表示计算机中的指令和数据。图1-3中有两条连接CPU和存储器的信息传输通路。下面一条路径用从存储器到CPU的单箭头表示,说明计算机的程序通过这条路径传送。CPU使用这些总线从存储器中一条一条读出程序中的指令。必须强调的是,以上只是简单的概念性描述,因为为了提高性能,现代高性能计算机可以一次从存储器中读出若干条指令。

图1-3中上面那条用双箭头表示的信息通路是在程序的控制下,在CPU和存储器之间传送数据。这条通路上的信息流是双向的。在写周期内,程序产生的数据从CPU写回存储器,它将保存在存储器中以便后面使用。在读周期内,CPU请求的数据从存储器送往CPU。


《计算机组成原理》----第1章 计算机系统体系结构 1.1 什么是计算机系统体系结构...

图1-4描述了程序的执行过程,这个过程要比它看起来简单。图1-4的目的是展示如何从存储器中读出一条形如Z=X+Y的指令,将其发送给解释单元,解释单元产生控制信号,驱动这条指令的执行。在第6章,我们将讨论如何将指令转换为解释执行这条指令所需的动作序列。

假定这个程序的功能是从存储器中读出两个数(X和Y),将它们相加,然后将和写回存储器。要执行这个程序,CPU必须首先从存储器中取出(fetch)一条指令。在CPU分析或解码这条指令之后,它会从存储器中读出这条指令所需的所有数据。在这个例子中,第一条指令,LOAD X,从存储器中读出变量X的值,并将它暂存在寄存器中。第二条指令从存储器中读出变量Y的值并保存在另一个寄存器内。然后在CPU读出第三条指令时,它会将这两个寄存器的内容相加,并将结果保存在第三个寄存器中。第四条指令会将加法的结果写回存储单元Z。


《计算机组成原理》----第1章 计算机系统体系结构 1.1 什么是计算机系统体系结构...

要说一台计算机所做的就是从存储器中读数据,对数据进行计算(加、乘等),然后将计算结果写回存储器,也有一定的道理。计算机能做的另外一件事情是测试数据(即判断一个数是否为0,它的符号是正还是负),然后根据测试结果从两个候选的指令流中选出一个来执行。

本书的一个重要主题是介绍现代计算机是如何加快图1-4中几类操作的执行速度的。在第6章,我们还会介绍真正的计算机如何在完成一条指令之前就开始执行一条新的指令。AMD Phenom II、Intel Xeon或Core i7这样的处理器都可以同时执行好几条指令。

很少有计算机会像图1-3那样在CPU和存储器之间设置两条独立的信息通路。大多数计算机在CPU和存储器系统之间仅有一条信息通路,数据和指令要轮流使用这条通路。之所以在图1-3中画出两条通路,是为了强调存储器中既保存了组成程序的指令,也保存了程序所用的数据。有的计算机会将数据和指令放在不同的存储器中(或者使用不同的总线传输数据和指令),这种结构叫作哈佛体系结构(Harvard architecture)。


《计算机组成原理》----第1章 计算机系统体系结构 1.1 什么是计算机系统体系结构...