2·第1章计算机概要与技术 1.1.1计算应用的分类及其特性 计算机的应用领域十分广阔,从智能家电到手机,再到最大型的超级计算机。这些不同的应 用有着不同的设计需求,并以不同的方式通过硬件实现。概括地说,计算机主要包括以下三类 应用: 桌面计算机也许是最为人所知的应用方式,其典型代表为个人计算机,本书的读者几乎都 在大量使用。桌面计算机强调对单用户提供良好的性能,价格低廉,通常运行第三方软件。尽管 此类应用的出现只有短短的30多年,但是已经带来大量新的计算技术革新。 服务器“是过去被称为大型机、小型机或超级计算机的现代形式,通常借助网络访问。服务 器面向大型用户,可以执行单个复杂应用(科学的或工程的),也可以处理大量的简单作业,如 大型Wb服务器。这些应用通常基于其他来源(例如数据库或仿真软件)的软件,并且往往为 了特别的需要而加以修改或定制。服务器的制造技术和桌面计算机差不多,但能够提供更强的 计算或/O能力。服务器的设计通常强调可靠性,因为它的当机开销要比单用户的桌面计算机大 得多。 服务器的功能和价格有很大的伸缩范围。低端服务器可能比桌面计算机稍微贵些,不带显 示器和键盘的大约需要一千美元,一般用于文档存储、小型商务应用或者简单的Wb服务(见 6.l0节)。高端服务器称为超级计算机°,一般由成百上千台处理器组成,内存为terabyte8级, 外存为petabyte⑧级,价格从几百万至几亿美元不等。它们主要用于高端科学和工程计算,如天 气预报、石油勘探和蛋白质结构计算等大规模问题。 诸如eBay和Google等公司所使用的互联网数据中心⑧也包含数以千计的处理器、terabyte级 的内存和petabyte级的外存,尽管它们一般不称为超级计算机。此类数据中心一般由大量计算机 集群(见第7章)构成。 嵌入式计算机是数量最多的一类,应用和性能范围十分广泛。包括在汽车、手机、电视 中的微处理器以及用来控制飞机和货船的处理器网络。嵌入式计算系统的设计目标是运行单 一应用程序或者一组相关的应用程序,并且通常和硬件集成在一起以单一系统的方式一并交 付用户。因此,尽管嵌入式计算机的数量庞大,还是有很多用户从来没有意识到他们正在使 用计算机。 图11显示,最近几年中移动电话对嵌入式计算机的需求增长要比桌面计算机快得多。应该注 意的是,除此之外,嵌人式计算机还大量应用于数字电视、机顶盒、汽车、数码相机、音乐播放 器、视频游戏机等消费品,这些应用更加拉大了嵌入式计算机和桌面计算机之间数量需求的差距。 面向单一应用需求的嵌人式应用通常被严格限制其成本或功耗。以音乐播放器为例,处理 器只需尽量快速地执行有限的功能,除此以外降低成本和功耗是最大的目标。除了低成本的要 求之外,嵌人式计算机对故障非常敏感,因为故障可能会让使用者心烦意乱(例如新电视机无 法正常收看节目),也可能会导致安全事故(例如飞机失事)。在面向消费者的嵌入式应用中, 如数字家电,可靠性是通过设计的简单性获得的一一其重点在于尽可能地保证一项功能的正常 e 桌面计算机(desktop computer):用于个人使用的计算机,通常包含图形显示器、键盘和鼠标等。 服务器(server):用于为多用户运行大型程序的计算机,通常由多个用户并行使用,并且一般通过网络访问。 超级计算机(supercomputer)::具有最高性能和最贵成本的-一类计算机,一般配置为服务器,需要花费数百万美元。 国terabyte(一般简写作TB):原始定义为1099511627776(2o)字节,但有些通信和辅助存储系统将其重新定 PD 义为1000000000000(1012)字节。 国petabyte:1000TB或1024TB,视具体情况而定。 数据中心(datacenter):可满足大量服务器用电、散热和网络需求的房间或建筑物。 ⊕嵌人式计算机(embedded computer):嵌入到其他设备中的计算机,一般运行预定义的一个或者一组应用程序
第1章计算机概要与技术·3 运转。而在大型嵌人式系统中,采用了多种冗余技术(见6.9节)。尽管本书将重点放在通用计 算机上,但是大多数概念可直接或者稍微修改之后用于嵌入式计算机。 口移动电话口PC口电视 1200 图1-11997~2007年之间每年生产的移动 1100 电话、P℃和电视的数量(电视数量 1000 从2004年开始统计) 900 在2006年,交付了超过十亿部新的移动电话。在 800 1997年,移动电话的销量仅为PC机的1.4倍,但是 700 在2007年达到了4.5倍。在2004年,使用中的电视 600 约为20亿台,移动电话约为18亿部,P℃机约为8 500 亿台。而在2004年世界人口约为64亿,相当于每8 400 个人就有1台P℃机、2.2部移动电话和2.5台电视 300 机。在2006年对美国家庭的一项调查中发现,平均 200 每个家庭拥有12台家电,包括3台电视机、2台PC 100 机以及其他电器,如游戏终端、MP3播放器和移动 电话等。 精解:本书中的精解是正文中的一个小节,主要用来对读者可能感兴趣的内容做深人介绍。对此部分 不感兴趣的读者可以直接跳过,因为它并不影响后续内容的学习。 许多嵌入式处理器使用处理器核。处理器核是利用硬件描述语言Verilog或VHDL(见第4章)描述的 处理器版本,它使得设计者能够把其他专用硬件与之集成起来制造在一块芯片上。 1.1.2你能从本书学到什么 成功的程序员总是关心其程序的性能,因为让用户快速得到结果对软件成功与否至关重要。 在20世纪六七十年代,限制计算机性能的主要因素是内存容量。因而那时候程序员的信条是尽 量少占用内存空间,以加速程序的运行速度。近十多年来,计算机和内存的设计技术有了长足进 步。除了嵌人式系统以外,大多数用户对少占内存容量的需求大大减轻了。 现在,关心性能的程序员需要十分明确,20世纪60年代的简单存储模型已经不复存在,现 代计算机的特征是处理器的并行性和内存的层次性。因此,程序员为了创建高性能的编译器、操 作系统、数据库以至应用程序,必须增加对计算机组成的认知。 我们很荣幸有机会为你解释这些知识,阐述机箱覆盖之下的计算机内部软硬件是如何工作 的。当你读完本书之后,我们相信,你将能够理解下面的问题: ·用C或Java等高级语言编写的程序如何翻译成硬件之间的语言?硬件如何执行程序?领 会这些概念是理解软硬件两者如何影响程序性能的基础。 ·什么是软硬件之间的接口,以及软件如何指导硬件完成其功能?这些概念对于许多软件 的编写是十分重要的。 ·哪些因素决定了程序的性能?程序员如何才能改进其程序性能?从本书中我们将知道,程序 性能取决于原始程序、将该程序转换为计算机语言的软件以及执行该程序的硬件的有效性。 ·什么技术可供硬件设计者用于改进性能?本书将介绍现代计算机设计的基本概念。有兴趣的 读者可深入阅读我们的另一本进阶教材《Computer Architecture:A Quantitative Approach》。 ”为什么串行处理近来发展为并行处理?这种发展带来的结果是什么?本书给出了解释,并。 介绍了当今支持并行处理的硬件机制,全面评述了新一代的多核微处理器°(见第7章)。 多核微处理器(multicore microprocessor):在一块集成电路上包含多个处理器(“核”)的微处理器
4·第1章计算机概要与技术 如果无法理解这些问题,那么就无从改进你的程序在现代计算机上的性能,也无法评价各种计 算机在解决特定问题时的优劣。 本书第1章的目的是为其余各章奠定良好的基础。它介绍了各种基本概念和定义,指出如何 正确地剖析软硬件,以及如何评价性能与功耗等。它还介绍了集成电路(为计算机革命提供动 力的技术),并在最后解释了向多核转移的原因。 在本章和后面几章里,读者会看到许多新的术语。但是不用担心,在描述现代计算机时,确 实会有很多专用术语,它们使我们能够精确描述计算机的功能或性能。另外,计算机设计人员 (包括本书作者)喜欢用首字母缩略词°,一旦熟悉了就很容易理解。为了帮助读者理解和记忆 这些专用术语,在术语第一次出现时,我们会在页底给出明确的定义,这样你很快会对这些定义 熟悉起来。 为了加强对软件和硬件对于程序运行性能影响的理解,我们在全书中特别插入了“理解程 序性能”小节,来对程序性能的理解加以概括。下面就是第一个: 理解程序性能 一个程序的性能取决于以下各因素的组合:程序所用算法的有效性,用来建立程序并将其 翻译成机器指令的软件系统,计算机执行机器指令(可能包括/0操作)的有效性。下表总结 了硬件和软件是如何影响性能的。 硬件或软件部件 如何影响性能 何处介绍 算法 决定源代码的行数和执行V0操作的数量 参见其他书 编程语言、编译程序和体系结构 决定每行源代码对应机器指令的数量 第2、3章 处理器和存储器系统 决定指令执行的速度快慢 第4、5、7章 V0系统(硬件和操作系统) 决定V0操作执行的速度快慢 第6章 小测骏 “小测验”的目的是帮助读者评估自己是否掌握了所学的概念。在这些小测验中,有些只有简单的答 案,有些则是为了组内讨论。有些问题的答案可在章尾找到。所有小测验只在节尾出现,如果你确信自己 对该部分内容完全理解,则可以跳过去。 1)1.1节指出,每年嵌入式处理器的售出数量远远超过桌面处理器的数量。根据自己的经验,你是支持还 是反对这种看法?列举你家中使用的嵌入式处理器,它与你家中桌面处理器的数量相比如何? 2)如前所述,软件和硬件都会影响程序的性能。请思考下述的哪个例子属于性能瓶颈。 ·所选算法 ·编程语言或编译程序 ·操作系统 ·处理器 ·V0系统和设备 1.2程序概念入门 在巴黎,我对当地人讲法语,他们只是瞪着我看;我从来没能让这些白痴理解他们自己的 语言。 一马克·吐温,《The Innocents Abroad》)(《异国奇遇》),1869 一个典型的应用程序,如字处理程序或大型数据库,可以由数百万行代码构成,并依靠软件 )首字母缩略词(acronym):由一串单词中每个单词的首字母相连构成的单词
第1章计算机概要与技术·5 库来实现异常复杂的功能。众所周知,计算机中的硬件只能执行极为简单的低级指令。从复杂的 应用程序到简单的指令需要经过几个软件层次,才能将复杂的高层次操作逐步解释或翻译成简 单的计算机指令。 图1-2给出了这些软件的层次结构,外层是应用软件,中心是硬件,系统软件位于两者之 间。系统软件有很多种,其中有两种对于现代计算机系统来说是必需的:操作系统和编译程序。 操作系统是用户程序和硬件之间的接口,为用户提供各种服务和监控功能。操作系统最为重要 的作用是: ·处理基本的输入和输出操作 ·分配外存和内存 ·为多个应用程序提供共享计算机资源的服务 当前我们使用的操作系统主要有Liux、MacOS和Windows等。 应用软件 系统软件 图1-2简化的硬件和软件层次图, 将硬件作为同心圆的中心, 应用程序软件作为最外层 硬件 在复杂的应用中,通常存在多层应用软 件层。例如,一个数据库系统可运行于系 统软件之上,而驻留在该系统软件上的某 应用又反过来运行在该数据库之上。 编译程序e完成另外一项重要功能:把用高级语言(如C、C++、Java或Visual Basic等) 编写的程序翻译成硬件能执行的指令。这个翻译过程是相当复杂的,这里仅作简要介绍,第2章 和附录B将作深入介绍。 从高级语言到硬件语言 谈到电子硬件,首先需要谈到电信号的发送。对于计算机来说,最简单的信号是“通”和 “断”。因此,计算机只用2个字母来表示。正如英语26个字母写多少不受限制一样,计算机的 2个字母写多少也不受限制。代表这些两个字母的符号是0和1,我们通常认为计算机语言就是 二进制数。每个字母就是二进制元数字中的一位®。计算机服从于我们的命令,即计算机术语中 的指令⑤。指令是能被计算机识别并执行的位串,可以被视为数字。例如位串1000110010100000 告诉计算机将2个数相加。第2章将解释为什么数字元既表示指令又表示数据。 第一代程序员是直接使用二进制数与计算机通信的,这是一项非常乏味的工作。所以他们 很快发明了助记符,以符合人类的思维方式。最初助记符是手工翻译成二进制的,其过程显然过 于烦琐。随后设计人员开发了一种称为汇编程序⑧的软件,可以将助记符形式的指令自动翻译成 对应的二进制。例如,程序员写下 add A,B 系统软件(systems software):提供常用服务的软件,包括操作系统、编译程序、加载程序和汇编程序等。 操作系统(operating system):为了使程序更好地在计算机上运行而管理计算机资源的监控程序。 编译程序(compiler):将高级语言翻译为计算机所能识别的机器语言的程序。 PDG @ 位(binary digit或bit):基2数字中的0或l,它是信息的基本组成元素。 国指令(instruction):计算机硬件所能理解并服从的命令。 ®汇编程序(assembler):将指令由助记符形式翻译成二进制形式的程序
6·第1章计算机概要与技术 汇编程序会将该符号翻译成 1000110010100000 该指令告诉计算机将两个数A和B相加。这种符号语言的名称今天还在用,即汇编语言。而机 器可以理解的二进制语言,是机器语言。 虽然这是一个巨大的进步,汇编语言仍然与科学家用来模拟液体流动或会计师用来结算账 目所使用的符号相去甚远。 高级语言程序 swap(int v[],int k) 汇编语言需要程序员写出计算机执行的 (C语言) (int temp; 每条指令,要求程序员像计算机一样思考。 temp v[k]; v[k]=v[k+1]: 认识到程序编程需要更强大的高级语言 v[k+1]temp; 是计算机早期的一个重大突破。高级编程语 言及其编译程序大大地提高了软件的生产 率。图1-3表示了这些程序和编程语言之间 编译程序 的关系。 编译程序使得程序员可以写出高级语言 表达式: 汇编语言程序 swap: (用于MIPS) muli $2, s5,4 A+B add $2,$4,$2 lw $15,0($2) 编译程序将其编译为如下的汇编语言语句: 1w S16, 4(s2) SW $16, 0($2) add A,B Sw $15, 4($2) jr $31 然后,汇编程序将此语句翻译为二进制 元指令,告诉计算机将这2个数A和B相加。 使用高级编程语言有以下几个好处。第 汇编程序 一, 可以使程序员用更自然的语言来思考, 用英文和代数符号来表示,形成的程序看起 来更像文字而不是密码表(见图13)。而 二进制机器 00000000101000010000000000011000 且,它们可按用途进行设计。例如,Fortran 语言程序 0000000000011000000110000010000: (用于MIPS) 10001100011000100000000000000000 是为科学计算设计的,Cobol是为商业数据 1000110011110010000000000000010C 操作设计的,Ls即是为符号操作设计的,等 1010110011110010000000000000000G 10101100011000100000000000000100 等。还有一些特定领域的语言,只为少数专 000000111110000000G0000000001000 业人群设计,如流体仿真的研究人员等。 图1-3C程序编译为汇编程序, 第二,高级语言提高了程序员的生产 再汇编为二进制机器语言 率。编程语言使用较少行数即可表示出设计 尽管将高级语言翻译成二进制的机器语言在上图仅需要两 用意。简明性是高级语言相对汇编语言最为 步,一些编译器将“中间人”欣掉,直接产生二进制的机器 明显的优势。 语言。这些语言和本图中列举的程序将在第2章详细检测。 第三,采用高级语言编写程序提高了程序相对于计算机的独立性,因为编译程序和汇编程 序能够把高级语言程序翻译成任何计算机的二进制元指令。 高级编程语言的这些好处,使其直到今天仍被广泛应用。 汇编语言(assembly language):以助记符形式表示的机器指令。 机器语言((machine language):以二进制元形式表示的机器指令。 高级编程语言(high-level programming language):诸如C、C++、Java、Visual Basic等可移植的语言,由一些单 词和代数符号组成,可以由编译器转换为汇编语言