1.2 计算机系统结构的概念
1.2.1 计算机系统的层次结构
现代计算机是由硬件/固件和软件组成的极其复杂的系统。为了有效地描述、分析、设计和使用这些系统,研究者们从多个角度提出了不同的观点和方法来观察计算机。一个广泛使用的方法是通过计算机语言的视角,将计算机系统划分为多个层级的结构,每一层都以一种特定的语言为标志。
层级划分
在这种层次结构中,计算机系统被分为以下六个主要层级:
-
L1: 微程序机器级 - 这是最底层,其机器语言是微指令集,主要由计算机硬件的设计人员使用,他们用微指令编写的微程序直接由固件/硬件来解释和实现。
-
L2: 机器语言(传统机器级) - 位于微程序机器级之上,使用传统的机器指令集。程序员使用这些指令编写的程序由L1级的微程序解释和执行。
-
L3: 操作系统虚拟机 - 这一层由软件实现,模拟一个机器的运行环境,以区别于硬件实现的物理机器。其机器语言包括传统机器级指令和操作系统级指令,后者用于调用操作系统功能,如文件操作等。
-
L4: 汇编语言虚拟机 - 用汇编语言编写的程序首先被翻译成L3级和L2级语言,然后由计算机执行。完成这个翻译的程序称为汇编程序。
-
L5: 高级语言虚拟机 - 支持使用各种高级编程语言,如C/C++、Pascal、FORTRAN等。用这些语言编写的程序一般由编译器转换为L4或L3级的语言执行。
-
L6: 应用语言虚拟机 - 专门为满足特定用途而设计的层级,使用面向具体应用问题的语言。这些程序通常通过应用程序包翻译到L5级上执行。
实现技术
在这六个层次中,通常L1到L3级采用解释方法实现,而L4到L6级则采用翻译方法实现。解释和翻译是实现语言的两种基本技术,它们都旨在通过执行一串低级指令来实现更高级的指令。不同之处在于,翻译是将高级程序完全转换成低级程序后执行,而解释则是在每条高级指令被译码后直接执行相应的低级指令。
通过这种层次结构的设计,程序员可以在不同的层次上工作,而不必关心更低层次的细节。这种抽象化大大简化了程序设计和系统开发的复杂性。每一层都提供了一种“虚拟机器”,程序员可以在这个虚拟机器上编程,就好像它是一个实际的计算机一样。这种方法不仅提高了开发效率,还使得计算机系统的设计和实现更加灵活和可扩展。
1.2.2 计算机系统结构的定义
1964年,Amdahl在介绍IBM 360系统时,提出了计算机系统结构的经典定义:计算机系统结构是程序员所看到的计算机属性,即概念性结构与功能特性。这个定义强调了计算机系统对于程序员来说的可见属性,例如指令集、数据表示、寻址规则等。
系统结构的多级视角
- 传统机器级程序员:关注的是机器指令集的功能特性。
- 高级语言程序员:看到的是计算机支持的高级语言的功能特性,对底层的差异几乎“看不见”。
透明性的概念
透明性是指某些存在的属性或事物,从某个角度看似乎不存在的概念。在计算机系统中,低层的计算机属性对高层的程序员往往是透明的,这意味着高层程序员不需要了解底层的具体实现细节。
系统结构的广义定义
J.L.Hennessy和D.A.Patterson将系统结构定义为包括计算机设计的三个方面:指令集结构、组成和硬件。这可以视为系统结构的广义定义,它涵盖了从软件到硬件的全方位视角。
计算机系统结构的实质
计算机系统结构的核心是确定软件和硬件之间的界面。界面之上是软件实现的功能,而界面之下则是础硬件和固件实现的功能。了解这些界面属性是编写高效、正确程序的基础。
1.2.3 计算机组成和计算机实现
在深入探讨计算机系统时,了解其结构、组成和实现的区别至关重要。这些概念虽紧密相关,但各自关注计算机系统的不同层面。
计算机系统结构
计算机系统结构定义了计算机软件与硬件之间的界面,即机器语言程序员在传统机器级所看到的计算机属性。它关注的是计算机的逻辑功能和概念性结构,而不涉及具体的实现细节。例如,决定一个计算机系统是否支持乘法指令,属于系统结构的范畴。
计算机组成
计算机组成指的是计算机系统结构的逻辑实现,涉及物理机器级的数据流、控制流、各部件的功能及其相互关系。它着眼于如何通过物理设备(如电路、逻辑门等)实现计算机的逻辑结构。计算机组成回答了“计算机如何工作”的问题。继续以乘法指令为例,决定是通过专门的乘法器实现还是通过多步加法操作实现乘法,这是计算机组成的决策。
计算机实现
计算机实现则进一步深入到具体技术层面,涉及构建计算机组成所需的物理结构、器件技术、微组装技术等。它包括处理器、内存等部件的物理结构,以及如何通过电路板、插件等将这些部件组装成一个完整的计算机系统。计算机实现关注的是“如何构建计算机”,包括器件的选择、信号传输、电源和冷却技术等。
例子说明
- 系统结构层面:决定指令集是否包含乘法指令。
- 组成层面:乘法是通过专用乘法器还是加法器多步实现。
- 实现层面:乘法器或加法器的具体电路设计和物理制造过程。
系列机的概念
系列机(family machine)的概念很好地体现了系统结构、组成和实现的分层。这是指同一制造商生产的具有相同系统结构但不同组成和实现的机器系列。这些机器虽然共享相同的指令集和编程模型,但可能因为性能、成本、技术等因素而在组成和实现上有所不同。例如,IBM的IBM 370系列和Intel的x86系列都是具有不同组成和实现的系列机。
通过这种方式,制造商能够提供满足不同市场需求的产品,从入门级到高性能机型,而所有这些机型都能运行相同的软件。这不仅减少了软件开发的复杂性,还为用户提供了广泛的选择,从而根据具体需求和预算选择最合适的计算机。
1.2.4 计算机系统结构的分类
探索计算机系统结构的分类,我们主要关注两种经典的分类法:冯氏分类法和Flynn分类法。这两种方法从不同的角度对计算机系统进行分类,提供了理解计算机结构多样性的框架。
冯氏分类法
1972年,冯泽云先生提出了一种基于计算机系统最大并行度的分类方法。最大并行度是指计算机系统在单位时间内能处理的最大二进制位数。这种分类方法使用平面直角坐标系来表示计算机系统,其中横坐标是字宽(n位),纵坐标是一次能同时处理的字数(m字)。因此,mxn的乘积表示了系统的最大并行度。
Flynn分类法
1966年,M.J.Flynn提出了根据指令流和数据流的多倍性来分类计算机系统的方法。这种分类包括四种基本类型:
- SISD(Single Instruction stream Single Data stream):单指令流单数据流,代表传统的顺序处理计算机。
- SIMD(Single Instruction stream Multiple Data stream):单指令流多数据流,阵列处理机是这一类的典型代表。在SIMD计算机中,多个处理部件在同一控制单元的控制下同时执行同一条指令,但处理不同的数据流。
- MISD(Multiple Instruction stream Single Data stream):多指令流单数据流,这是一种理论上的分类,目前尚无实际存在的计算机系统符合这一分类。
- MIMD(Multiple Instruction stream Multiple Data stream):多指令流多数据流,多处理机通常属于这一类。在MIMD计算机中,多个处理部件可以同时执行不同的指令流,处理不同的数据流。
对流水线处理机的分类
对于流水线处理机的分类存在不同观点。一般认为,将标量流水线处理机划归为SISD类,而将向量流水线处理机划归为SIMD类更为合适。
分类法的意义
- 冯氏分类法:提供了一个通过最大并行度量化计算机性能的方法,有助于比较不同计算机系统的处理能力。
- Flynn分类法:通过区分指令流和数据流的多倍性,Flynn分类法揭示了计算机系统在设计和实现并行处理能力方面的不同方法。这有助于理解各类计算机的工作原理及其适用场景。
这两种分类法各自从不同的角度切入,为理解和比较计算机系统提供了重要的理论基础。通过这些分类,我们可以更好地理解不同计算机架构的设计原则和性能特点。