写在最前
本系列内容参考的是清华大学 张晨曦老师的《计算机系统结构教程》(第二版)
第一章 计算机系统结构的基础知识
1.1 计算机系统结构的基本概念
1.1.1 计算机系统的层次结构
总共7个层次
0-2级称为虚拟机, 3-6级称为虚拟机
各个机器级的实现主要依靠翻译或解释
实现 | 定义 |
---|---|
翻译 | 先用转换程序(编译器)把高一级机器上的程序转为低一级机器上等效的程序,然后在低级机器上运行,实现程序的功能。 |
解释 | 对于高一级机器上的程序中的每一条语句或指令,都是转去执行低一级机器上的一段等效程序。执行完后,再去高一级机器取下条语句或指令,再进行解释执行,如此反复,直到解释执行完整个程序。 |
1.1.2 计算机系统结构定义
-
(主要)程序设计者所看到的一个计算机系统的属性, 即概念性结构和功能特性。
其中功能特性有:
- 数据表示:硬件能够直接认别和处理的数据类型;
- 寻址技术:编址方式、寻址方式和定位方式等;
- 寄存器组织:操作数寄存器、变址寄存器、控制寄存器及专用寄存器的定义、数量和使用规则等;
- 指令系统:操作类型、格式,指令间的排序控制等;
- 中断系统:中断类型、中断级别和中断响应方式等;
- 存储系统:寻址空间、虚拟存储器、Cache存储器等;
- 处理机工作状态:定义和切换方式,如管态和目态等;
- 输入输出系统:数据交换方式、交换过程的控制等;
- 信息保护:信息保护方式和硬件对信息保护的支持等。
-
计算机系统由软件、固件和硬件组成,它们在功能上是同等的,同一种功能可以用硬件实现,也可以用软件或固件实现。
-
计算机系统结构定义(J.L.Hennessy和D.A.Patterson):指令系统,组成,硬件。
1.1.3计算机组成与计算机实现
计算机组成是指计算机系统结构的逻辑实现。
计算机实现是指计算机组成的物理实现。
1.1.3.1⚠️系统结构、组成和实现三者的关系
- 计算机组成是计算机系统结构的逻辑实现,计算机实现是计算机组成的物理实现,三者各自包含不同的内容,但又有着紧密的联系。
- 一种系统结构可以有多种组成,同样,一种组成可以有多种物理实现。
关系举例:
-
确定指令系统中是否有乘法指令属于计算机系统结构的内容,但乘法指令是用专门的乘法器实现,还是用加法器经多步操作来实现,属于计算机组成。而乘法器、加法器的物理实现,如器件的选定及所用的微组装技术等,属于计算机实现。
-
如在设计主存系统时,确定主存容量、编址方式、寻址范围等属于计算机系统结构。确定主存周期、逻辑上是否采用并行主存、逻辑设计等属于计算机组成。选择存储芯片类型微组装技术、线路设计等属于计算机实现。
1.1.4⚠️计算机系统结构的分类——弗林(Flynn)分类法
弗林(Flynn)分类法
弗林(Flynn)分类法按照指令流(Instruction stream,IS) 和数据流(Data stream,DS)的多倍性进行分类。
指令流:计算机执行的指令序列。
数据流:由指令流调用的数据系列。
多倍性:在系统最受限的部件上,同时处于同一执行阶段的指令或数据的最大数目。
计算机系统结构分为以下四类:
- 单指令流单数据流SISD(Single IS Single DS)
- 单指令流多数据流SIMD(Single IS Multiple DS)
- 多指令流单数据流MISD(Multiple IS Single DS)
- 多指令流多数据流MIMD(Multiple IS Multiple DS)
SIMD的特点:在统一的时钟周期的调度下进行工作
1.2 计算机系统设计技术
1.2.1 计算机系统设计的定量原理
1.2.1.1 加快经常性事件的速度
加快经常性事件的速度是计算机设计中最重要也最广泛采用的设计准则。
使经常性事件的处理速度加快能明显提高整个系统的性能。
对经常发生的情况采用优化方法的原则进行选择(分配更多的资源、达到更高的性能)
1.2.1.2 阿姆达尔(Amdahl)定律
定义:系统中改进某一部件对整个系统性能的提高与这种部件的使用频率或占总执行时间的比例有关。
相关公式如下
F
e
=
可改进部分占用的时间
改进前整个任务的执行时间
F_{e} = \frac{\text{可改进部分占用的时间}}{\text{改进前整个任务的执行时间}}
Fe=改进前整个任务的执行时间可改进部分占用的时间
S
e
=
改进前改进部分的执行时间
改进后改进部分的执行时间
S_{e} = \frac{\text{改进前改进部分的执行时间}}{\text{改进后改进部分的执行时间}} \\
Se=改进后改进部分的执行时间改进前改进部分的执行时间
T
n
=
T
0
∗
(
1
−
F
e
+
F
e
S
e
)
S
n
=
T
0
T
n
=
1
(
1
−
F
e
+
F
e
S
e
)
T_{n} = T_{0} * (1 - F_{e} + \frac{F_{e}}{S_{e}}) \\ S_{n} = \frac{T_{0}}{T_{n}} = \frac{1}{(1- F_{e} + \frac{F_{e}}{S_{e}})}
Tn=T0∗(1−Fe+SeFe)Sn=TnT0=(1−Fe+SeFe)1
其中:
F e F_{e} Fe 表示可改进部分的执行时间在总执行时间的比例
S e S_{e} Se 表示可改进部件改进后性能提高的倍数
T n T_{n} Tn 表示改进后系统执行的总时间
S n S_{n} Sn 表示改进后的计算机比改进前快了多少倍(加速比)
1 − F e 1-F_{e} 1−Fe 表示不可改进比例
F e S e \frac{F_{e}}{S_{e}} SeFe 表示可改进部分改进后占整个程序执行时间的比例
⚠️推论:
- 当 S e → ∞ S_{e} \rightarrow \infty Se→∞ 时, S n = 1 1 − F e S_{n} = \frac{1}{1- F_{e}} Sn=1−Fe1 ,说明如果仅对计算任务中的一部分做性能改进,则改进的越多,得到的总体性能的提升越有限
缺陷:
- 使用Amdahl定律需要知道可改进比例是多少,而通常很难获得该比例,因此需要其他方法衡量和比较计算机系统性能
1.2.1.3 CPU性能公式
CPU的执行时间取决于三个要素:
-
指令条数IC;
-
每条指令所花的时钟周期数CPI (Cycle Per Instruction);
-
时钟频率f(或时钟周期T)。
相关公式如下:
- 每条指令的平均时钟周期数:
C P I = 执行程序所需的时钟周期数 I C C P I = ∑ i = 1 n ( C P I i × I C i I C ) \begin{aligned} CPI &= \frac{\text{执行程序所需的时钟周期数}}{IC} \\ CPI& = \sum_{i=1}^{n}(CPI_{i} \times \frac{IC_{i}}{IC}) \end{aligned} CPICPI=IC执行程序所需的时钟周期数=i=1∑n(CPIi×ICICi)
-
一个程序所花的CPU时间(T)
- CPU时间(T) = 执行程序所需的时钟周期数 × 时钟周期时间(t)
- CPU执行时间 = CPI × IC × 时钟周期时间
其中:
- 时钟周期时间:器件工艺有关;
- CPI:取决计算机组成和指令系统结构;
- IC:取决于指令系统的结构和编译技术。
1.2.1.4 访问的局部性原理
访问的局部性原理 | 定义 |
---|---|
时间上的局部性 | 指最近访问过的代码也可能是不久将被访问的代码 |
空间上的局部性 | 指那些地址上相邻近的代码可能会被一起访问 |
- 存储系统的构成就是以访问的局部性原理为基础的。
1.2.1.5 采用并行性
- 采用并行性是改善计算机性能的重要方法。
- 主要分为以下三个层面:
- 系统级并行,例如多处理器和多磁盘技术,可以实现更大的吞吐量,而处理器和磁盘都可增加数目,对服务器来说具有重要价值。
- 单一处理器层面,一般采用指令级并行来提高性能,指令级并行的代表技术是流水线。
- 在数字电路设计层面,可以发掘并行性,比如,组相联的Cache可以同时使用多个存储块,先行进位链能够加速求和的过程。
1.2.2 计算机系统设计者的主要任务
计算机系统设计者的任务包括:指令系统的设计、数据表示的设计、功能的组织、逻辑设计以及物理实现
1.2.2.1 根据用户要求进行需求分析
体系结构的设计者要设计满足价格、供电、性能和可用性指标的计算机,首先要确定需求:
- 应用领域: 是专用还是通用?是面向科学计算还是面向商用处理?是桌面计算机,还是服务器或嵌入式计算机?
- 软件兼容层次:如要求在程序设计语言层兼容,或者要求在目标代码层兼容等。
- 操作系统需求: 如地址空间大小、存储管理、保护等。
- 标准: 如浮点数标准、I/O总线标准、网络标准、操作系统类型、程序设计语言标准等。
1.2.2.2 进行软硬件平衡
软硬件实现在功能上是等效的。但软件与硬件实现的特点不同:
-
硬件实现:速度快、成本高;灵活性差、占用内存少
-
软件实现:速度低、复制费用低;灵活性好、占用内存多
1.2.2.3 设计出符合今后发展方向的系统结构
系统结构的设计者还应关注实现技术和计算机应用方面的重要发展趋势。这些发展趋势不仅影响机器未来的成本,也影响到所设计的系统结构的发展周期。这些发展趋势主要包括:
- 实现技术的发展趋势
- 集成电路功耗的发展趋势
- 成本的发展趋势
1.2.3 计算机系统设计的主要方法
1.2.3.1 由上往下设计 TOP-DOWN
-
设计过程如下:
- 面向应用的数学模型
- 面向应用的高级语言
- 面向这种应用的操作系统
- 面向操作系统和高级语言的机器语言
- 面向机器语言的微指令系统和硬件实现
-
应用场合:专用计算机的设计(早期计算机的设计)
-
特点:适用于所面向的应用领域,随着通用计算机价格降低,目前已经很少采用
1.2.3.2 由下往上设计 BOTTOM-UP
- 设计过程如下:
- 根据当时的器件水平,设计微程序机器级和传统机器级。
- 根据不同的应用领域设计操作系统、汇编语言、高级语言编译器等。
- 最后设计面向应用的虚拟机器级。
- 应用场合:在计算机早期设计中(60~70年代)广为采用
- 特点:容易使软件和硬件脱节,整个计算机系统的效率降低
1.2.3.3 ⚠️从中间开始设计 MIDDLE-OUT
- 设计过程如下:
- 首先定义软硬件的分界面,包括指令系统、存储系统、输入输出系统、中断系统、硬件对操作系统和编译系统的支持等
- 然后各个层次分别进行设计:软件设计人员设计操作系统、高级语言、汇编语言、应用程序等;硬件设计人员设计传统机器、微程序、硬联逻辑等
- 应用场合:用于系列机的设计
- 特点:软硬件的分界面在上升;硬件价格下降,软件价格上升;软硬件人员结合共同设计
- 由中间层开始设计其实就是由体系结构开始设计,是目前计算机的主要设计方法
优点是:
- 缩短设计周期
- 设计过程中可以交流协调,是一种交互式的,很好的设计方法