第一章 概述

一、基本结构

1

如上图所示,存储体存放二进制信息,地址寄存器(MAR)存放访存地址,经过地址译码后找到所选的存储单元。数据寄存器(MDR)用于暂存要从存储器中读或写的信息,时序控制逻辑用于产生存储器操作所需的各种时序信号。

存储体由许多存储单元组成,每个存储单元包含若干存储元件,每个存储元件存储一位二进制代码“0”或“1”。因此存储单元可存储一串二进制代码,称这串代码为存储字,称这串代码的位数为存储字长,存储字长可以是1B(8bit)或是字节的偶数倍。

MAR 用于寻址,其位数对应着存储单元的个数,如MAR为 10 位,则有 210 = 1024 个存储单元,记为 1K。MAR 的长度与 PC 的长度相等。

MDR 的位数和存储字长相等,一般为字节的 2 次幂的整数倍。

注意:MAR与MDR虽然是存储器的一部分,但在现代计算机中却是存在于CPU中的;此外,Cache 也存在于 CPU 中。

二、计算机的性能指标

0x00 计算机的主要性能指标

1. 字长

字长是指计算机进行一次整数运算(即定点整数运算)所能处理的二进制数据的位数,通常与 CPU 的寄存器位数、加法器有关。 因此,字长一般等于内部寄存器的大小,字长越长,数的表示范围越大,计算精度越高。计算机字长通常选定为字节(8位)的整数倍。

字、字长、机器字长、指令字长、存储字长的区别和联系是什么?

在通常所说的“某16位或32位机器”中,16、32 指的是字长,也称机器字长。所谓字长,通常是指 CPU 内部用于整数运算的数据通路的宽度,因此字长等于CPU 内部用于整数运算的运算器位数和通用寄存器宽度,它反映了计算机处理信息的能力。字和字长的概念不同。字用来表示被处理信息的单位,用来度量数据类型的宽度,如 x86 机器中将一个字定义为 16 位。

指令字长:一个指令字中包含的二进制代码的位数。 存储字长:一个存储单元存储的二进制代码的长度。

它们都必须是字节的整数倍。 指令字长一般取存储字长的整数倍,若指令字长等于存储字长的2倍,则需要2个访存周期来取出一条指令;若指令字长等于存储字长,则取指周期等于机器周期。

早期的存储字长一般与指令字长、字长相等,因此访问一次主存便可取出一条指令或一个数据。随着计算机的发展,指令字长、字长都可变,但必须都是字节的整数倍。

2. 数据通路带宽

数据通路带宽是指数据总线一次所能并行传送信息的位数。这里所说的数据通路宽度是指外部数据总线的宽度,它与CPU内部的数据总线宽度(内部寄存器的大小)有可能不同。

注意:各个子系统通过数据总线连接形成的数据传送路径称为数据通路。

3. 主存容量

主存容量是指主存储器所能存储信息的最大容量,通常以字节来衡量,也可用 [字数×字长](如512K×16位)来表示存储容量。 其中,MAR的位数反映了存储单元的个数, MDR 的位数反映了存储单元的字长。 例如,MAR为 16 位,表示 216=65536,即此存储体内有65536个存储单元(可称为64K内存,1K=1024),若MDR为32位,表示存储容量为 64K×32 位。

4. 运算速度

(1) 吞吐量和响应时间
(2) 主频和CPU时钟周期

注意:CPU时钟周期=1/主频,主频通常以 Hz(赫兹)为单位,1Hz 表示每秒1次。

(3) CPI(Cycle Per Instruction)

即执行一条指令所需的时钟周期数。不同指令的时钟周期数可能不同,因此对于一个程序或一台机器来说,其 CPI 指该程序或该机器指令集中的所有指令执行所需的平均时钟周期数,此时 CPI 是一个平均值。

(4) CPU执行时间

指运行一个程序所花费的时间。

CPU=CPU/=(×CPI)/

上式表明,CPU的性能(CPU执行时间)取决于三个要素:

  1. 主频(时钟频率)
  2. 每条指令执行所用的时钟周期数(CPI)
  3. 指令条数。

主频、CPI和指令条数是相互制约的。例如,更改指令集可以减少程序所含指令的条数,但同时可能引起CPU结构的调整,从而可能会增加时钟周期的宽度(降低主频)。

(5) MIPS(Million Instructions Per Second)

即每秒执行多少百万条指令。

MIPS=/(×106)=/(CPI×106)

MIPS 对不同机器进行性能比较是有缺陷的,因为不同机器的指令集不同,指令的功能也就不同,比如在机器 M1上某条指令的功能也许在机器M2上要用多条指令来完成;不同机器的 CPI 和时钟周期也不同,因而同一条指令在不同机器上所用的时间也不同。

(6) MFLOPS、GFLOPS、TFLOPS、PFLOPS、EFLOPS 和 ZFLOPS.

注意:在描述存储容量、文件大小等时,K、M、G、T 通常用 2 的幂次表示,如 1Kb=210b; 在描述速率、频率等时,k、M、G、T通常用 10 的幂次表示,如 1kb/s=103b/s。 通常前者用大写的K,后者用小写的k,但其他前缀均为大写,表示的含义取决于所用的场景。

5. 基准程序

基准程序(Benchmarks)是专门用来进行性能评价的一组程序,能够很好地反映机器在运行实际负载时的性能,可以通过在不同机器上运行相同的基准程序来比较在不同机器上的运行时间,从而评测其性能。对于不同的应用场合,应该选择不同的基准程序。

使用基准程序进行计算机性能评测也存在一些缺陷,因为基准程序的性能可能与某一小段的短代码密切相关,而硬件系统设计人员或编译器开发者可能会针对这些代码片段进行特殊的优化,使得执行这段代码的速度非常快,以至于得不到准确的性能评测结果。

0x01 几个专业术语

  1. 系列机。具有基本相同的体系结构,使用相同基本指令系统的多个不同型号的计算机组成的一个产品系列。
  2. 兼容。指软件或硬件的通用性,即运行在某个型号的计算机系统中的硬件/软件也能应用于另一个型号的计算机系统时,称这两台计算机在硬件或软件上存在兼容性。
  3. 软件可移植性。指把使用在某个系列计算机中的软件直接或进行很少的修改就能运行在另一个系列计算机中的可能性。
  4. 固件。将程序固化在ROM中组成的部件称为固件。固件是一种具有软件特性的硬件,吸收了软/硬件各自的优点,其执行速度快于软件,灵活性优于硬件,是软/硬件结合的产物。例如,目前操作系统已实现了部分固化(把软件永恒地存储于 ROM 中)。