> For the complete documentation index, see [llms.txt](https://lewiszlw.gitbook.io/notebooks/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://lewiszlw.gitbook.io/notebooks/blogs/history/ji-suan-ji-xi-tong-jie-gou-de-ji-chu-zhi-shi.md).

# 计算机系统结构的基础知识

## 计算机系统结构的基本概念

自第一台通用电子计算机诞生以来的六十多年中，计算机技术一直在以惊人的速度发展，对于许多应用来说，现在的高性能微处理器的性能已经超过了10年前的超级计算机。这种飞速的发展一方面是得益于计算机制造技术的发展，另一方面则是因为计算机系统结构的创新。

但是从2002年以来，计算机性能的年增长率下降到了约20%，其主要原因是：

* 大功耗问题；
* 可以进一步有效开发的指令级并行性已经很少；
* 存储器访问速度的提高缓慢。这使得单个处理机性能的提高受到了严峻的挑战。

于是，Intel于2004年宣布放弃其高性能单处理器项目，转向多核的研究和开发。这是通过在单个芯片上实现多个处理器核来提高性能的。IBM、Sun、AMD等公司也都纷纷朝这个方向转变，这标志着系统结构的一个重大转折：**从单纯依靠指令级并行转向开发线程级并行和数据级并行**。

### 计算机系统的层次结构

从使用语言的角度出发，可把计算机系统按功能依次划分为微程序机器级、传统机器语言机器级、操作系统机器级、汇编语言机器级、高级语言机器级、应用语言机器级（如SQL）等。对于每一层的使用者来说，都可以把该机器级看成一台独立的计算机，可以用其相应的语言进行编程，并在该级上运行所编出的程序。 \*\*第1级是微程序机器级。\*\*这一级的机器语言是微指令系统，其使用者是计算机硬件的设计人员，他们用微指令编写的微程序直接由固件/硬件来解释实现。 **第2级是传统机器语言机器级。这一级的机器语言就是传统的机器指令系统。程序员用该指令系统编写的程序由第1级上的微程序进行解释执行。由微程序解释指令系统又称作仿真**。实际上，在第1级上可以有多个能够在它上面运行的解释程序，每一个解释程序定义了一种指令系统。因此，可以通过仿真在一台计算机上实现多种指令系统。有的计算机中没有采用微程序技术，因此没有微程序机器级。这时，第2级的指令系统是由硬联逻辑直接解释执行。硬联逻辑的优点是速度快。 \*\*第3级是操作系统机器级。\*\*这一级的机器语言由两部分构成，一部分就是传统机器级指令，另一部分是操作系统级指令。后者用于实现对操作系统功能的调用，例如打开/关闭文件、读/写文件等。用这一级语言编写的程序是由第3级和第2级来共同执行的，其中只有操作系统指令是由操作系统进行解释执行的。 \*\*第4级是汇编语言机器级。\*\*这一级的机器语言是汇编语言。用汇编语言编写的程序首先翻译成第3级和第2级语言，然后再由相应的机器执行。完成这个翻译的程序称为汇编程序。 \*\*第5级是高级语言机器级。\*\*这级的机器语言就是各种高级语言（如C、Pascal等）。用高级语言编写的程序一般由编译器翻译到第4级或第3级机器上的语言。个别高级语言也用解释的方法实现，如绝大多数BASIC语言。 \*\*第6级是应用语言机器级。\*\*这一级是为使计算机满足某种用途而专门设计的，因此这一级的语言就是各种面向具体应用问题的应用语言。用应用语言编写的程序一般由应用程序包翻译成第5级机器上的语言。 各机器级的实现主要靠翻译或解释，或两者的结合。**翻译（translation）是先用转换程序把高一级机器上的程序转换为低一级机器上等效的程序，然后再在该低一级机器上运行，实现程序的功能。解释（interpretation）则是对于高一级机器上的程序中的每一条语句或指令，都转去执行低一级机器上的一段等效程序。执行完后，再去高一级机器取下一条语句或指令，再进行解释执行，如此反复，直到解释执行完整个程序。一般来说，解释执行比编译后再执行所花的时间多，但占用的存储空间较少。 在上述6级层次中，下面三级一般是用解释实现的，而上面三级则经常是用翻译的方法实现的。另外，最下面的两级机器是用硬件/固件实现的，称为物理机。上面4层一般是由软件实现的。用软件实现的机器称为虚拟机**。虚拟机不一定完全由软件实现，有些操作可以由硬件或固件实现。**固件**是指具有软件功能的硬件。与硬联逻辑相比，固件的特点是灵活性大，但速度较慢。

### 计算机系统结构的定义

经典定义：**计算机系统结构**是指传统机器程序员所看到的计算机属性，即概念性结构与功能特性。 在计算机技术中，把本来存在的事物或属性，但从某种角度看又好像不存在的概念称为**透明性**。通常，在一个计算机系统中，低层机器的属性对高层机器的程序员来说往往是透明的。 计算机系统结构的实质是确定计算机系统中软硬件的交界面，界面之上是软件实现的功能，界面之下是硬件和固件实现的功能。

### 计算机组成和计算机实现

**计算机组成**指的是计算机系统结构的逻辑实现，包含物理机器级中的数据流和控制流的组成以及逻辑设计等。它着眼于物理机器级内各事件的排序方式与控制方式、各部件的功能以及各部件之间的联系。 **计算机实现**指的是计算机组成的物理实现，包括处理机、主存等部件的物理结构，器件的集成度和速度，模块、插件、底板的划分与连接，信号传输，电源、冷却及整机装配技术等。它着眼于器件技术和微组装技术，其中器件技术在实现技术中起主导作用。 举例： 1.确定指令系统中是否有乘法指令属于计算机系统结构的内容，但乘法指令是用专门的乘法器实现，还是用加法器经多步操作来实现，属于计算机组成。而乘法器、加法器的物理实现，如器件的选定及所用的微组装技术等，属于计算机实现。 2.主存容量与编址方式（按位、按字节或按字访问等）的确定属于计算机系统结构。为了达到给定的性能价格比，主存速度应多块、逻辑结构是否采用多体交叉等属于计算机组成。而主存系统的物理实现，如器件的选定、逻辑电路的设计、微组装技术的使用等均属于计算机实现。

同一种计算机组成可以采用多种不同的计算机实现。系列机的出现充分反映了这一点。**系列机**是指由同一厂家生产的具有相同系统结构，但具有不同组成和实现的一系列不同型号的计算机。

### 计算机系统结构的分类

常见的计算机系统结构分类法有三种：Flynn分类法、冯氏分类法和Handler分类法。

#### Flynn分类法

Flynn分类法是按照指令流和数据流的多倍性进行分类的。Flynn分类法中的定义如下：

* 指令流：计算机执行的指令序列。
* 数据流：由指令流调用的数据序列。
* 多倍性：在系统最受限的部件上，同时处于同一执行阶段的指令或数据的最大数目。

Flynn分类法把计算机系统的结构分为以下4类：

* 单指令流单数据流（SISD）
* 单指令流多数据流（SIMD）
* 多指令流单数据流（MISD）
* 多指令流多数据流（MIMD）

SISD是传统的顺序处理计算机。SIMD以阵列处理机为代表。MISD只是一种人为的划分，目前没有实际的机器。多处理机属于MIMD结构。

#### 冯氏分类法

冯氏分类法是用系统的最大并行度对计算机进行分类的。**最大并行度**Pm定义为：计算机系统在单位时间内能够处理的最大二进制位数。4类不同最大并行度的计算机系统结构：（字宽即一个字中同时处理的二进位的位数，位片宽度即在一个位片中能同时处理的字数。两者乘积表示最大并行度）

* 字串位串：字宽为1，位片宽度为1。这是第一代计算机发展初期的纯串行计算机。
* 字串位并：字宽大于1，位片宽度为1。这是传统的单处理机，同时处理单个字的多个位。
* 字并位串：字宽为1，位片宽度大于1。同时处理多个字的同一位（位片）。
* 字并位并：字宽大于1，位片宽度大于1。同时处理多个字的多个位。

#### Handler分类法

这种分类方法把计算机的硬件结构分成三个层次，并考虑它们的可并行-流水处理程度： 1.程序控制部件（PCU）的个数k； 2.算术逻辑部件（ALU）或处理部件（PE）的个数d； 3.每个算术逻辑部件包含基本逻辑线路（ELC）的套数w。

这样就可以把一个计算机系统的结构用公式表示：t（系统型号）=（k,d,w）

## 计算机系统的设计

### 计算机系统设计的定量原理

4个常用的定量原理

#### 以经常性事件为重点

以经常性事件为重点是计算机设计中最重要、最广泛采用的设计原则。加快经常性事件的处理速度能显著地提高整个计算机系统的性能。

#### Amdahl定律

当对一个系统中的某个部件进行改进后，所能获得的整个系统性能的提高，受限于该部件的执行时间占总执行时间的百分比。 这个加速比的大小与两个因素有关：一个是在改进前的系统中，可改进部分的执行时间在总的执行时间中所占的比例，简称可改进比例；另一个是可改进部件改进后性能提高的倍数，简称部件加速比。

#### CPU性能公式

执行一个程序所需的CPU时间计算：CPU时间=执行程序所需的时钟周期数×时钟周期时间。 引入新的参数CPI，即每条指令的平均时钟周期数：CPI=执行程序所需的时钟周期数/所执行的指令条数。则有以下的CPU性能公式：CPU时间=IC×CPI×时钟周期时间。其中IC为所执行的指令条数。 根据这个公式可知，CPU的性能取决于以下三个参数：

* 时钟周期时间：取决于硬件实现技术和计算机组成。
* CPI：取决于计算机组成和指令系统的结构。
* IC：取决于指令系统的结构和编译技术。

#### 程序的局部性原理

程序的局部性原理是指：程序执行时所访问的存储器地址不是随机分布的，而是相对地簇聚。现在常用的一个经验规则是：程序执行时间的90%都是在执行程序中10%的代码。数据访问也具有局部性，不过其局部性弱于代码访问的局部性。 局部性包括时间局部性和空间局部性。时间局部性是指：程序即将用到的信息很可能就是目前正在使用的信息。空间局部性是指：程序即将用到的信息很可能与目前正在使用的信息在空间上相邻或者临近。 利用程序的局部性原理，可以根据程序最近的访问情况来比较准确地预测将要访问的指令和数据。凡是涉及数据重用的地方都可能会用到它。

### 计算机系统设计者的主要任务

计算机系统设计者的任务包括指令系统的设计、数据表示的设计、功能的组织、逻辑设计以及其物理实现等。设计一个计算机系统大致要完成以下三个方面的工作： 1.确定用户对计算机系统的功能、价格和性能的需求。 2.软硬件功能分配。 3.设计出生命周期长的系统结构。

### 计算机系统设计的主要方法

1.“由上往下”设计：从层次结构的最上面一级开始的，逐层往下设计各层机器。 2.“由下往上”设计：从层次结构的最下面一级开始的，逐层往上设计各层机器。 3.“从中间开始”设计：从中间开始设计。这里的“中间”是指层次结构中软硬件的交界面，目前一般是在传统机器语言机器级与操作系统机器级之间。软件和硬件并行设计可以缩短设计周期，设计过程中可以交流协商，是一种交互式的、很好的设计方法。

## 计算机系统的性能评测

### 执行时间和吞吐率

执行时间：执行单个程序所花的时间。 吞吐率：单位时间里能够完成的任务量。

### 基准测试程序

用于测试和比较性能的基准测试程序的最佳选择是真实的应用程序。

### 性能比较

1.总执行时间。 2.调和平均值法。 3.几何平均值法。

## 计算机系统结构的发展

### 冯·诺依曼结构及其改进

冯·诺依曼结构的主要特点： 1.计算机以运算器为中心。 2.在存储器中，指令和数据同等对待。 3.存储器是按地址访问、按顺序线性编址的一维结构，每个单元的位数是固定的。 4.指令的执行是顺序的，即一般是按照指令在存储器中存放的顺序执行的。 5.指令由操作码和地址码组成。 6.指令和数据均以二进制编码表示，采用二进制运算。

后来的计算机针对冯·诺依曼结构的不足之处进行了不断的改进，在系统结构方面有了很大的进展，主要包括以下几个方面： 1.对输入输出方式的改进：

* 程序控制：程序等待 程序中断；
* 直接存储器访问（DMA）：成组传递 周期挪用；
* I/O处理机：通道 外围处理机。

2.采用并行处理技术。 3.存储器组织结构的发展。 4.指令系统的发展。

### 软件对系统结构的影响

**可移植性**是指一个软件可以不经修改或者只需少量修改就可以由一台计算机移植到另一台计算机上执行，差别只是执行时间不同。在这种情况下，我们称这两台计算机是**软件兼容**的。实现可移植性的常用方法有三种：统一高级语言、采用系列机、模拟和仿真。 **模拟**是指用软件的方法在一台现有的计算机（称为宿主机host）上实现另一台计算机（称为虚拟机）的指令系统。**仿真**是指用一台现有计算机（称为宿主机）上的微程序去解释实现另一台计算机（称为目标机）的指令系统。仿真和模拟的主要区别在于解释执行所用的语言。仿真是用微程序解释执行的，其解释程序存放在控制存储器中；而模拟是用机器语言程序解释执行的（虽然模拟程序可以用高级语言来编写，但最后执行时是机器代码），模拟程序存放在主存中。

### 器件发展对系统结构的影响

### 应用对系统结构的影响

## 计算机系统结构中并行性的发展

### 并行性的概念

**并行性**是指计算机系统在同一时刻或者同一时间间隔内进行多种运算或操作。只要在时间上相互重叠，就存在并行性。它包括同时性与并发性两种含义：

* 同时性：两个或两个以上的事件在同一时刻发生。
* 并发性：两个或两个以上的事件在同一时间间隔内发生。

从处理数据的角度来看，并行性等级从低到高可分为以下几种： 1.字串位串：每次只对一个字的一位进行处理。这是最基本的串行处理方式，不存在并行性。 2.字串位并：同时对一个字的全部位进行处理，不同字之间是串行的。具备初步的并行性。这种并行性也称为位级并行。 3.字并位串：同时对许多字的同一位（称为位片）进行处理。这种方式具有较高的并行性。 4.全并行：同时对许多字的全部位或部分位进行处理。这是最高一级的并行。

从执行程序的角度来看，并行性等级从低到高可分为以下5种： 1.指令内部并行：是指单条指令中各微操作之间的并行。 2.指令级并行：是指并行或并发地执行两条或两条以上的指令。 3.线程级并行：是指并行执行两个或两个以上的线程。 4.任务级或过程级并行：是指并行执行两个或两个以上的过程或任务（程序段），以子程序或进程为调度单元。 5.作业或程序级并行：是指并行执行两个或两个以上的作用或程序。

### 提高并行性的技术途径

1.时间重叠：在并行性概念中引入时间因素，让多个处理过程在时间上相互错开，轮流重叠地使用同一套硬件设备的各个部分，以加快硬件周转而赢得速度。 2.资源重复：在并行性概念中引入空间因素，以数量取胜。通过重复设置硬件资源，大幅度地提高计算机系统的性能。 3.资源共享：这是一种软件方法，它使多个任务按一定的时间顺序轮流使用同一套硬件设备。

> 《计算机系统结构教程（第2版）》张晨曦 王志英 等 著
