第一章 计算机体系结构导论
计算机体系结构是机器语言程序员看到的计算机属性,这些属性是计算机设计的基础。本章介绍计算机体系结构的基本概念、主要特性及冯?诺依曼型计算机体系结构的改进与发展,讨论影响计算机体系结构发展的主要因素、计算机体系结构并行性发展的技术途径和实现并行处理的历程,阐述计算机体系结构、多机系统和多处理机系统的分类,分析计算机系统结构设计和量化分析的基本方法。
1.1 计算机体系结构的基本概念
【问题小贴士】①对于一台汽车,任何使用者所看到的其功能及功能实现操作都是一样的;对于一台计算机(系统),不同使用者所看到的其功能及功能实现操作是一样吗?以应用软件的开发者与使用者为例进行比较,对此应该引入哪些概念去理解呢?②建筑物设计可分为规划设计、土建设计和施工设计等三个层次,计算机(硬件)设计分为哪些层次呢?每个层次需要赋予哪些属性或完成哪些工作呢?③应用PC机开发的软件可以在ARM机上运行吗?如果不可以,怎样去实现呢?对此对计算机软硬有什么要求呢?
1.1.1 影响计算机(硬件)性能提高的根本因素
计算机在七十多年的发展历程中,可分为两个发展时期。前三十多年为器件更新换代期,以逻辑器件设计为主体,通过器件个体性能的提高来提高计算机整体性能。后三十多年为器件组织改进期,以逻辑器件组织为主体,通过器件组合性能的提高来提高计算机整体性能。当然,器件更新一定促进器件组织的改进;器件组织一定程度上依赖于器件更新。所以,影响计算机(硬件)性能提高的根本因素为器件更新与器件组织。
1. 器件更新是计算机(硬件)换代的基本标志
自1946年第一台电子计算机问世以来,以器件更新为标志,计算机经历了电子管、晶体管、中小规模集成电路和大规模超大规模集成电路等四代演变过程。由于器件的发展及其性能提高,使得计算机在体积、重量、速度、可靠性、稳定性等方面得到极大改善,价格也不断降低。器件是推动计算机发展的物质基础,器件设计制造的发展,为计算机发展提供必不可少的技术保障。
2. 器件组织是现代计算机(硬件)分类的基本依据
计算机的分类方法很多,但普遍认可的是1989年由美国电气与电子工程协会(IEEE)提出的按性能与价格划分,由此把计算机分为巨型机、大型机、中型机、小型机和微型机五种,但该分类方法已不能正确地反映当前计算机的性能与应用的
发展。究其原因主要有:一是类型之间的界限越来越模糊,例如在巨型机与大型机之间出现了小巨型机、在小型机与微型机之间出现了工作站等;二是类型归属是动态变化的,10年前归属于巨型机的,10年后则归属于小型机了;三是现代计算机的处理核心基本相同,无论是高性能的超级计算机还是低端的微型计算机,处理核心均是微处理器;四是没有真正体现计算机的本质特征,例如现在计算机均面向网络,但又看不出它们有什么区别。由此,便可以根据器件组织的复杂程度来对现代计算机(硬件)进行分类,且一般分为嵌入式计算机、桌面计算机、服务器和超级计算机等四种,四种现代计算机的主要特征比较如表1-1所示。从表1-1可以看出,该分类不仅能够体现计算机性能、价格与应用的区别,还使类型之间的界限清晰、归属稳定。
表1-1 四种现代计算机的主要特征
主要特征 应用范围 对应关系 微处理器数目 整机价格 微处理器价格 设计关键 嵌入式计算机 桌面计算机 服务器 大规模信息处理 大型机、中型机 几个~几十个 超级计算机 科学计算 巨型机 几十个以上 智能仪器、测控装置 面向个人 微型机应用微型化 1~2个 差异很大 0.01~100美元 性能专用、价格、实时性、可靠性 小型机、微型机 1~4个 500~5000美元 50~500美元 5000~500万美元 1千万~1亿美元 200~10000美元 200~10000美元 性能专用、吞吐量、浮点计算 性能通用、性价吞吐量、可靠性、比、图形等多媒体 可扩性、可测性 实质上,如何有效地组织器件来最大限度发挥器件功效,如何开展计算及其执
行方式来为有效组织器件提供理论基础,是提高计算机性能的重要途径。恩斯洛(P.H.Enslow)曾经对1965年至1975年进行比较,器件更新使器件延迟时间降低至原来的十分之一,但计算机执行指令的时间却降低至原来的百分之一。可见,在这10年中,计算机性能提高的幅度比器件性能提高的幅度大得多,显然是有效组织器件的贡献。
1.1.2 广义计算机语言与虚拟计算机
1. 计算机语言的广义性
计算机(硬件)的功能是信息处理,信息处理的粒度有粗细之分。一段程序或一个批命令文件为粗粒度的信息处理,一段程序是机器指令序列,它可以采用控制流程来表示。一条指令则是细粒度的信息处理,一条指令是微指令序列,它也可以采用控制流程来表示。而控制流程的描述方式有图形的和字符的,所谓计算机语言是指用于描述控制流程的、有一定规则的字符集合。
任何一个信息处理均实现了一项逻辑功能,而任何一项逻辑功能既可以由软件(即程序)实现,也可以由硬件(即逻辑电路)实现,还可以由软硬件共同实现。也就是说,由计算机语言描述的控制流程所包含的系列任务,可以有软件、硬件、软硬件结合等三条途径来执行。另外,任何一个信息处理均是面向某一层级的,且通常粗粒度的信息处理面向软件层,细粒度的信息处理面向硬件层,如一段程序的信息
处理面向软件开发,一条指令的信息处理面向硬件设计。可见,不同层级有不同的计算机语言,并不专属于软件,如高级程序设计语言专属于软件,微程序设计语言则专属于硬件,而汇编程序设计语言属于软硬件,这就是计算机语言的广义性。
2. 物理计算机与虚拟计算机
一台完整的计算机(系统)是由硬件(机器)和软件(程序)两部分组成的,只有硬件和软件融于一体,计算机(硬件)才能高效率工作,但硬件机器也可以脱离程序软件独立运行工作,仅在于效率极低。所以,通常把纯硬件机器的计算机称为物理计算机,把硬件机器与程序软件融于一体的、由软件扩展硬件功能的计算机称为虚拟计算机。特别地,虚拟计算机并不一定包含软件,某些层级的虚拟计算机可以由固件实现,但固件具有软件的功能特性;同样,物理计算机也不一定仅具有硬件,也可由固件来扩展硬件功能,但固件具有硬件的形态。
软件程序是利用程序设计语言描述的,必须编译或解释成计算机硬件能直接识别二进制代码,所以编译或解释软件是虚拟计算机不可缺少的部分。从计算机语言的广义性来看,虚拟计算机是指仅对某一层级的计算机用户存在,由对应的广义计算机语言体现其功能,并为广义计算机语言提供翻译的计算机。
3. 计算机系统的层次性
依据虚拟计算机的概念,不同层级用户看到的计算机系统,在功能、结构等外特性均不同,即计算机系统具有层次性,如图1-1所示。从图1-1中可以看出,计算机系统一般包含M0~M7八个层级,且低二级M0、M1为物理机,高六级M3~M7为虚拟机。
操作命令 M6应用程序级 应用软件 应用程序 信息处理 应用软件操作员
高级语言 M5高级语言级
编译解释 运行程序 高级语言程序员
汇编语言 M4汇编语言级 系统软件 汇编翻译 运行程序 汇编语言程序员
键盘命令 M3操作系统级
操作系统 运行程序 系统软件操作员 虚拟机 指令序列 M2机器语言级
机器语言程序员 CPU 机器指令 数据通路 M1微指令级 硬件电路
物理机 微程序控制器 微指令 结构逻辑设计员
微操作时序 M0微操作级 硬件内核 微命令 逻辑电路设计员 图1-1 计算机系统的层次性。
微操作级M0用于实现微命令功能的硬件内核,解释微指令生成微操作控制时序,一般仅需很少的逻辑电路。微指令级M1用于实现微指令功能的微程序控制器,解释机器指令生成微指令序列。M0和M1组合在一起实现中央处理机功能。
机器语言级M2是面向机器指令程序员,用于执行指令序列的虚拟计算机,并逐条解释机器指令,实现指令序列所指示的功能。操作系统级M3是面向系统软件操作员,用于执行键盘命令及其批处理的虚拟计算机,通过运行程序,实现键盘命令及其批处理所指示的功能。汇编语言级M4是面向汇编语言程序员,通过汇编软件将汇编程序翻译成M2级的指令序列的虚拟计算机,通过运行程序,实现汇编程序所指示的功能。高级语言级M4是面向高级语言程序员,通过编译软件将语言程序翻译成M2级的指令序列的虚拟计算机,通过运行程序,实现语言程序所指示的功能。应用程序级M6是面向应用软件操作员,用于执行操作命令的虚拟计算机,通过信息处理,实现人们所期望的功能。
另外,从技术范围来看,M0~M2级为硬件电路范围,M3~M5级是系统软件范围,M6应用软件范围。特别地,层级之间存在交叉,如M2级涉及汇编语言程序设计,M3级处于硬件向软件过渡;还有在特殊计算机系统中,有些层级可能不存在。
4. 透明性(Transparency)
由于计算机系统的层级很多,层级之间的功能与结构差异较大,技术范围也不同。因此,对于任一计算机用户来说,由于精力有限,不可能掌握计算机系统每个层级的实现技术与原理和应用操作方法,仅需要通过某层级的广义计算机语言来掌握对应物理或虚拟计算机的功能结构,而不必关注低层是如何工作及功能如何实现的,这就是透明性概念。所谓透明性是指在计算机技术中,一种本来存在的功能结构及其实现与应用方法,但从某种层级看似乎不存在。
1.1.3 计算机体系结构及其范畴
1. 什么是计算机体系结构
“计算机体系结构”来源于英文Computer architecture,也可翻译为“计算机系统结构”。Architecture这个词原来用于建筑领域,本义为“建筑学”、“建筑物的设计或式样”,意指一个系统的外貌。“计算机体系结构”一词于20世纪60年代被引入计算机领域,70年代开始广泛采用,并已成为一门学科名称。但是,由于计算机软硬件界面在动态地变化,至今有各种各样的理解。
“计算机体系结构”是由G.M.Amdahl等人于1964年提出的,当时意指程序员看到的计算机属性,即程序员为编写出可以在计算机上正确运行的程序所必须掌握的计算机功能特性与概念结构。但从计算机系统的层次性来看,不同层级计算机的程序员所看到的计算机属性显然不同,即各层级的计算机均存在对应的体系结构,而且低层级的计算机属性对高层级程序员是透明的。例如高级语言程序员所看到的计算机属性是编译软件、操作系统、数据库管理系统和网络软件等,汇编语言程序员所看到的计算机属性是通用寄存器、中断机构等,且汇编语言程序员所看到的计
算机属性对于高级语言程序员来说是透明的。实际上,Amdahl等人提出的程序员是指机器语言程序员和编译软件设计者,计算机属性是硬件电路的功能特性与概念结构,是计算机的外特性。因此,计算机体系结构的定义为:机器语言程序员所必须掌握的计算机的功能特性与概念结构。
2. 计算机体系结构的范畴
由于软件与硬件在逻辑功能实现上是等效的,软件可以对硬件功能进行扩充与完善。所以,由计算机系统的功能目标不可能直接确定计算机(硬件)属性,而必须在确定软件与硬件的功能界面或对软件与硬件的功能进行分配的基础上,明确哪些功能目标由软件实现,哪些功能目标由硬件实现,由此才能确定计算机属性(计算机体系结构)。对于机器语言程序员,必须掌握的计算机(硬件)属性(功能特性与概念结构)包含如下9项(即计算机体系结构的范畴)。
(1)数据表示,包括数据类型及其编码方法与表示格式等。
(2)指令系统,包括机器指令集,各指令实现的功能操作、编码方法与表示格式等,指令格式优化设计、指令之间的排序方式与控制执行机构。
(3)寻址方式,包括各种存储部件的寻址方式,它们的表示与变换方法、有效地址长度等。
(4)寄存器组织,包括寄存器类型如操作数寄存器、变址寄存器、控制寄存器及专用寄存器等,各种寄存器的定义、数量、长度与使用约定等。
(5)主存储器组织,包括编址单位、编址方式、存储容量、可编址空间、程序装入定位和存储层次等。
(6)中断机构,包括中断类型、中断分级、中断请求、中断响应、中断源识别、中断处理等。
(7)机器状态,包括状态类型如管态、目态等,状态定义及其相互间的切换。 (8)输入输出组织,包括响应定时方式、数据传送方式与格式、操作控制方式、一次性传送数据量、传送结束与出错标志等。
(9)信息保护,包括信息保护方式和硬件对信息保护的支持等。
但“计算机体系结构”作为一门学科,不可能仅研究“软硬件功能分配”这么一个狭小问题。Amdahl等人对计算机系体结构定义的核心是指令系统及执行模型,可见计算机属性的实现方法才是计算机系体结构研究的主要问题。所以,计算机体系结构研究任务为:软硬件功能分配和硬件功能实现的最佳方法途径。可见,计算机体系结构是软件与硬件的界面。对于设计好的一种体系结构,硬件设计者根据速度、性能与价格,采用相应的组成逻辑与物理实现,建立对应的物理计算机;软件设计者则脱离相应的物理计算机,编制系统软件,建立对应的虚拟计算机。
按计算机系体结构定义,指令系统兼容就可以保证程序正确运行。但由于程序执行依赖于程序库、操作系统、输入输出端口等体系结构定义没有涉及的因素;另外系列机改进,如24位地址的IBM360改进为为31位地址的370xA等,使得指令系统兼容但程序无法正确运行。因此,计算机体系结构定义的属性不是固定不变的,随着新器件的出现,计算机体系结构将发生巨大变化,其定义将更加宽泛。