重点内容

冯诺依曼计算机 & 存储程序思想(概念题 / 背景题

性能指标:MIPS / CPI / 安姆达定律

程序 → 指令的编译过程

*1.1 计算机发展历程

硬软件的发展

第一台电子数字计算机:1946 ENIAC

电子管 →晶体管 → 中小规模集成电路 → 超大规模集成电路

CPU 发展(摩尔定律)、半导体存储器、微处理器

1.2 计算机系统层次结构

组成、硬件软件、层次结构、系统工作原理

硬件

$$\bigstar \mathbf{IMPORTANT}\bigstar$$ 冯诺依曼“存储程序”思想:将编制好的程序和数据送入主存后,就能无需干预地逐条执行指令直至执行结束。

冯诺依曼机特点

  • 采用存储程序的工作方式
  • 计算机硬件由五大部件组成:运算器、存储器、控制器、输入设备、输出设备
  • 指令和数据同等形式地存储在存储器中,但是计算机能区别
  • 指令和数据都用二进制表示

存储器分为主存储器(内存)+辅助存储器(外存)

CPU能直接访问主存,辅存要调入主存。

主存包括:

  • 存储体:由存储单元组成,每个存储单元包含若干存储元件(0/1),存储单元的位数为 (存储)字长(8 的整数倍,或者说字节的整数倍)
  • 地址寄存器(MAR):存放访存地址,$存储单元数 = 2^{MAR 位数}$,$MAR位数 = PC长度$
  • 数据存储器(MDR)存放读写的数据,一般情况下 $MDR 位数 = 字长$
  • 必要的时序控制逻辑。

运算器:核心是算术逻辑单元(ALU),包含若干通用寄存器

  • 累加器ACC:保存运算的主要操作数和结果
  • 乘商寄存器MQ:为乘法(低位结果)、除法(商)提供存储空间
  • 操作数寄存器X:暂存从内存取来的第二个操作数
  • 变址寄存器IX:支持数组/循环等的地址计算
  • 基址寄存器BR:存放基准地址
  • 浮点寄存器FPR:存放浮点数(服务于浮点运算单元 FPU)

控制器

  • 程序计数器 PC:自动加一获得下一条指令,连向 MAR
  • 指令寄存器 IR:存储当前指令,来自MDR,连向CU
  • 控制单元 CU:分析指令并发出各种微操作指令

CPU:控制器和运算器。也包含 PC、IR、MAR, MDR, Cache,和通用寄存器组 GRPs,虽然它们是存储器一部分。

  • CPU中 IR、MAR、MDR 对于各类程序员都是透明的。
  • 通用寄存器组(GRPs):存放中间结果、内存地址、参数、指针
  • 一个寄存器由若干个触发器组成,数量等于寄存器存储的字长。

CPU 和主存通过一组总线相连,总线中有三条线:

  • 地址线:MAR的地址信息送到地址线,指向主存存储单元
  • 控制线:有读写信号线,表示是写入主存还是写到MDR
  • 数据线:负责MDR和主存之间的数据传送。

外部设备:能被 CPU 直接访问并参与指令执行的设备。如运算器、控制器、寄存器、Cache、主存。

内部设备:不能被 CPU直接访问,要通过 IO 接口或控制器。如外存、输入输出设备。

软件

两种软件

  • 系统软件:基础软件(操作系统 OS、数据库管理系统 DBMS、语言处理程序等等)
  • 应用软件:为解决某个问题而编制的程序(科学计算、工程设计、数据统计与处理等等)

三种语言

  • 机器语言:二进制代码语言,是计算机唯一可以直接识别和执行的语言
  • 汇编语言:用英文单词或缩写表示的指令代码,要经过 汇编程序 翻译为机器语言
  • 高级语言:如 C/C++/Java 等,需要经过 编译程序 编译成汇编程序。

三种编译程序:汇编器、解释器、编译器

若一个功能(如算术、逻辑运算)既可以由硬件实现又可以由软件实现,则硬件实现的性能要优于软件实现的性能。

指令执行过程

$$\bigstar \mathbf{IMPORTANT}\bigstar$$

对于取数指令,信息流程:

  • 取指:PC → MAR → M → MDR → IR,然后 (PC) + 1 → PC
  • 分析指令:OP(IR) → CU,其中 OP(IR) 指 IR 中指令的操作码
  • 执行指令:Ad(IR) → MAR → M → MDR → ACC,其中 OP(IR) 指 IR 中指令的地址码

1.3 计算机的性能指标

性能指标、相关专业术语

(机器)字长

  • 一次定点整数运算能处理的二进制数据位数,CPU内部用于整数运算的数据通路的宽度。
  • 机器字长等于通用寄存器(GPR)的位数,ALU一次能计算的位数,CPU内部数据通路的宽度。
  • 字长越长,表示范围越大计算精度越高
  • 字长一般为字节(8位)的整数倍

指令字长:一个指令中包含的二进制位数。

存储字长:一个存储单元中的二进制位数。

取一条指令的访存周期数等于 $\displaystyle \frac{指令字长}{存储字长}$。

数据通路带宽

  • 外部数据总线一次能并行传送信息的位数
  • 一般情况下,外部数据通路带宽等于 数据字长
  • 各个系统通过数据总线连接形成的数据传送路径称为数据通路。

主存容量

  • 主存的最大容量,常用字数×字长=字节数来衡量
  • MAR的位数反映存储单元数,反映可寻址范围的最大值。
  • MDR的位数反映存储字长

运算速度

  • 吞吐量:系统在单位时间内处理请求的数量,主要取决于主存的存取周期
  • 响应时间:用户向计算机发出请求到系统响应所需的等待时间,包括CPU时间和等待时间。
  • CPU 时钟周期:CPU最小的时间单位。执行指令的每个动作至少需要1个时钟周期。
  • 主频/CPU时钟频率:机器内部时钟的频率。同一类型的计算机,主频越高,执行步骤时间越短。常见主频:$1.8GHz,\ 2.4GHz,\ 2.8GHz$.
  • $$CPU时钟周期 (s) = \frac{1}{主频 (Hz)}$$

$$\bigstar \mathbf{IMPORTANT}\bigstar$$ #重点

  • CPI (Clock cycle per Instruction),执行一条指令所需的 平均 时钟周期数。 CPI 和时钟频率无关,和指令集、系统机构、计算机组织等实现方式有关。 如果两台计算机的 “体系结构” 完全相同,那么它们的 CPI 相等。
  • $$CPU执行时间 = \frac{CPU时钟周期数}{主频} = \frac{指令条数 \times CPI}{主频} = 指令条数 \times CPI \times 时钟周期$$
  • MIPS (Million Instructions Per Second):每秒执行多少百万条指令。如果指令集系统改变,那么同一程序所需的指令数会发生变化,并不能真正反映真实性能。 $$MIPS = \frac{指令条数}{执行时间 \times 10^6} = \frac{主频}{CPI \times 10^6}$$
  • MFLOPS 、 GFLOPS 、 TFLOPS 、 PFLOPS 、 EFLOPS 和 ZFLOPS 。 每秒执行多少次浮点运算,前缀是量级的缩写。 $$FLOPS = \frac{浮点操作次数}{执行时间}$$ 影响因素
  • 算法不同:相同任务的指令数不同
  • 编程语言不同:编译器生成的指令模式不同,影响 CPI
  • 编程程序:优化好的话,总指令数就少;生成的指令类型不同,会影响平均 CPI
  • 指令集体系结构 (ISA):决定任务要用多少指令,还会影响 CPI,还影响电路实现
  • 计算机组成:流水线等 → 降低 CPI。数据通路设计、并行度、寄存器数目 → 决定能否提高主频(缩短时钟周期时间)。
  • 实现技术:半导体工艺能让晶体管更快,缩短时钟周期

阿姆达尔(Amdahl)定律:并行计算的加速比受限于程序中的串行部分。假设有 $P$ 部分可加速 $N$ 倍,那么加速比 $$S = \frac{T_{old}}{T_{new}} = \dfrac{1}{(1 - P) + \dfrac{P}{N}}$$

  • 即使可加速部分被优化到极致,加速比最多也只有 $\displaystyle \lim_{N \to \infty} S = \frac{1}{1-P}​$.

基准程序:用于性能评价的程序,反映机器的实际负载的性能。