🚥计算机组成原理 系列文章导航🚥

  1. 计算机组成原理 第一章 计算机系统概述
  2. 计算机组成原理 第二章 数据的表示和运算
  3. 计算机组成原理 第三章 存储系统
  4. 计算机组成原理 第四章 指令系统
  5. 计算机组成原理 第五章 中央处理器
  6. 计算机组成原理 第六章 总线
  7. 计算机组成原理 第七章 输入/输出系统

一、计算机系统的组成

计算机系统由硬件系统软件系统构成。

如果一个功能既可以用硬件实现,又可以用软件实现,则称为软件和硬件在逻辑功能上是等价的。例如对于乘法,我们可以设计电路,让其能够直接计算乘法,也可以设计软件通过多次加法的方式来实现。一般来说, 硬件实现成本较高,效率也高,软件实现则反之。

既然某些功能具有软/硬件逻辑功能的等价性,那么我们在设计一个计算机系统时需要明确哪些功能由硬件实现,哪些功能由软件实现。软件和硬件功能界面的划分是由设计目标、性能性价比、技术水平等综合因素决定的。

指令集体系结构(ISA):规定了软件和硬件之间的界面。设计计算机系统的ISA,就是要定义其可以支持哪些指令,以及每条指令的作用是什么、每条指令的用法是什么。

二、计算机硬件

1.冯 · 诺依曼计算机

冯 · 诺依曼在研究 EDVAC 机时提出了存储程序的概念,其基本思想是:将实现编制好的程序和原始数据送入主存储器后才能执行,一旦程序被启动执行,就无需操作人员的干预,计算机会自动逐条执行指令,直至程序执行结束。

以此为基础的计算机统称冯 · 诺依曼计算器,具有如下特点:

  1. 采用存储程序的工作方式。

  2. 计算机硬件系统由运算器、存储器、控制器、输入设备和输出设备 5 大部件组成。

  3. 指令和数据以同等地位存储在存储器中,形式上没有区别,但计算机应能区分它们。

  4. 指令和数据均用二进制代码表示。

  5. 指令由操作码和地址码组成,操作码指出操作的类型,地址码指出操作数的地址。

  6. 机器以运算器为中心,输入输出设备与存储器间的数据传送通过运算器完成。

49d44fdd-6b3e-4d54-a161-2059ee223da7

上图为冯 · 诺依曼计算机硬件系统的结构,可以看到机器以运算器为中心,数据需要以运算器为中转站传输到存储器和输出设备。这种方式较为低效,因此现代计算机的结构都是以存储器为中心,输入设备可以直接将数据传输到存储器中,具体如下图所示:

2b738fd6-8fff-41dd-ab0d-3c3ecd669743

这种方式更多地解放了运算器的时间,可以进行更多运算。

由于运算器和控制器之间的逻辑关系十分紧密,这两个部件通常被集成在同一个芯片上的,即 CPU(CPU包括运算器和控制器)。CPU和主存储器统称为主机,不包括辅存。辅存一般指固态硬盘等,我们将其归为I/O设备。辅存的信息必须调入主存之后才能为CPU所访问。我们常说的运行内容即为主存,机身内存则为辅存。

b406fd3f-e2f6-4cdd-a016-f08f18df81b2

2.各个硬件的工作原理

(1)主存储器

主存储器的工作方式是按存储单元的地址进行存取,这种存取方式称为按地址存取方式

主存储器由存储体、存储器地址寄存器(MAR)、存储器数据寄存器(MDR)、时序控制逻辑构成。

存储体存放二进制信息;MAR 存放访存地址;MDR 用于暂存要从存储器中读或写的信息;时序控制逻辑用于产生存储器操作所需的各种时序信号。

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

MAR用于寻址,其位数反映了最多可寻址的存储单元的个数。

MDR的位数通常等于存储字长。

注意:MAR 和 MDR 虽然是存储器的一部分,但在现代计算机中却是存在于 CPU 中的;此外,后面将提到的高速缓存(Cache)也是存在于 CPU 中。故 CPU 不只包含运算器和控制器。

(2)运算器

运算器用于实现算术运算和逻辑运算。

运算器包括若干通用寄存器,用于暂存操作数和中间结果,如 累加器(ACC)、乘商寄存器(MQ)、操作数寄存器(X)、变址寄存器(IX)、基址寄存器(BR) 等,其中前三种寄存器是必须具备的。

  • ACC:累加器,用于存放操作数,或运算结果。

  • MQ:乘商寄存器,在乘、除运算时,用于存放操作数或运算结果。

  • X:通用的操作数寄存器,用于存放操作数,可能有多个。

  • ALU:算术逻辑单元,通过内部复杂的电路实现算术运算、逻辑运算。

运算器内还有程序状态寄存器(PSW),也称标志寄存器,用于存放ALU运算得到的一些标志信息或处理机的状态信息,如结果是否溢出、有无产生进位或借位、结果是否为负等。

在进行不同的运算时,各存储器担任不同的功能。值得注意的是,进行乘法运算时,无论得到的乘积是否超过单个寄存器的存储上限,都会使用 ACC 来存放高位,MQ 来存放低位,因为结果本身是两倍长度。

ACC 被加数、和 被减数、差 乘积高位 被除数、余数
MQ 乘数、乘积低位
X 加数 减数 被乘数 除数

(3)控制器

控制器由 控制单元(CU)、指令寄存器(IR)、程序计数器(PC) 组成。

  • CU:控制单元,分析指令,给出控制信号。

  • IR:指令寄存器,存放当前执行的指令。

  • PC:程序计数器,存放下一条指令地址,有自动加 1 的功能。

完成一条指令需要经历:取指令、分析指令、执行指令三个阶段(前两阶段也可统称取值)。

(4)工作流程

下面以第一条取数指令为例讲述工作流程:

4b8e9217-1506-4cd1-8bcc-5f01c2a5bd1d

0a368969-356a-4ace-afc2-744a1103f679

  • 初始情况下,(PC)= 0,指向第一条指令的存储地址(括号表示寄存器中存储的内容)

  • #1:(PC)-> MAR,导致(MAR)= 0

  • #2:主存储器根据 MAR 中存储的内容,找到存储体里0号地址所对应的数据

  • #3:M(MAR)-> MDR,导致(MDR)= 000001 0000000101(M指主存储器)

  • #4:(MDR)-> IR,导致(IR)= 000001 0000000101

  • #5:OP(IR)-> CU,指令的操作码送到CU,CU分析后得知是取数指令

  • #6:Ad(IR)-> MAR,指令的地址码送到MAR,导致(MAR)= 5

  • #7:主存储器根据 MAR 中存储的内容,找到存储体里0号地址所对应的数据

  • #8:M(MAR)-> MDR,导致(MDR)= 0000000000000010 = 2

  • #9:(MDR)-> ACC,导致(ACC)= 0000000000000010 = 2

取指令(#1 - 4)、分析指令(#5)、执行取数指令(#6 - 9)

一般来说,不同指令的取指令和分析指令的过程都是相同的,执行阶段才会出现区别。

三、计算机软件

1.系统软件和应用软件

软件按其功能分类,可分为系统软件应用软件

系统软件是一组保证计算机系统高效、正确运行的基础软件,通常作为系统资源提供给用户使用。系统软件包括:操作系统(OS)、数据库管理系统(DBMS)、语言处理程序、分布式软件系统、网络软件系统、标准库程序、服务性程序等。

应用软件指用户为解决某个应用领域中的各类问题而编制的程序,例如我们平时常用的各种 APP 等。

2.三个级别的语言

三种机器语言的特点:

  • 机器语言:也称二进制代码语言。机器语言是计算机唯一可以识别和执行的语言。

  • 汇编语言:汇编语言使用英文单词或其缩写代替二进制的指令代码。

  • 高级语言:如C、C++、Python等。

各种翻译器的概念:

  • 汇编程序(汇编器):将汇编语言程序翻译成机器语言程序。

  • 解释程序(解释器):将源程序中的语句按执行顺序逐条翻译成机器指令并立即执行。

  • 编译程序(编译器):将高级语言程序翻译成汇编语言或机器语言程序

注意:编译程序和解释程序都能够将高级语言翻译成机器语言,前者是将源程序一次全部翻译成机器语言程序,而后再执行机器语言程序(只需翻译一次),会生成目标代码文件;后者则是对每一个语句进行翻译并立即执行,即每次执行都要进行翻译,并且不会生成目标代码文件。因此解释型的语言要比编译型的语言效率更低。JavaScript、Python、Shell等都是解释型语言。

四、计算机系统的层次结构

1.层次结构

16bf2db9-0d03-43e1-b874-59d68ac6444b

从下到上分别为微程序机器层 -> 传统机器语言层 -> 操作系统层 -> 汇编语言层 -> 高级语言层

没有配备软件的纯硬件系统称裸机;第 3 到 5 层称为虚拟机器,即软件实现的机器。

层次之间关系紧密,下层是上层的基础,上层是下层的扩展。下面两层属于硬件部分,上面三层属于软件部分,软件与硬件之间的界面就是指令集体系结构(ISA)。本课程所探讨的主要内容就是传统机器 M1 和微程序机器 M0。

2.从源程序到可执行文件

文件的翻译需要经过预处理阶段、编译阶段、汇编阶段、链接阶段这四个阶段。

960caba0-408f-45ba-87b8-a62b6fff9278

五、计算机的性能指标

1.机器字长

我们通常说的“某 16 位或 32 位机器”,其中的 16、32 指的就是机器字长,简称字长。字长是指计算机进行一次整数运算(定点整数运算)所能处理的二进制数据的位数,通常与 CPU 的寄存器位数、ALU 有关。

机器字长、指令字长和存储字长的关系

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

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

2.存储器的容量

主存容量是指主存储器所能存储信息的最大容量,通常以字节(B)来衡量,也可用字数×字长(如 512K×16 位)来表示存储容量。MAR 位数反映存储单元个数,MDR 位数反映存储单元的字长。

3.CPU的性能指标

CPU时钟周期:单位:微秒(us),纳秒(ns)

CPU主频(时钟频率):等于1/CPU时钟周期

CPI(Clock cycle Per Instruction):执行一条指令所需的时钟周期数

注:1:不同指令的 CPI 可能不同,因此一般 CPI 指某程序中所有指令执行所需的平均时钟周期数,即平均 CPI。相同指令的 CPI 也有可能不同,例如对于一个取数指令,其CPI还和主存、内存当前的状态有关。

注意2:时钟频率并不会影响 CPI,但可加快指令的执行速度。例如,执行一条指令需要 10 个时钟周期,则一台主频为 1GHz 的 CPU,执行这条指令要比一台主频为 100MHz 的 CPU 快。

IPS(Instructions Per Second):每秒执行多少条指令,等于主频/平均 CPI

MIPS:每秒执行多少百万条指令

FLOPS(Floating-point Operations Per Second):每秒执行多少次浮点运算

MFLOPS、GFLOPS、TFLOPS、PFLOPS、EFLOPS、ZFLOPS:每秒执行多少百万、十亿、万亿、千万亿、百京、十万京次浮点运算

4.系统整体的性能指标

数据通路带宽:外部数据总线一次所能并行传送信息的位数(各硬件部件通过数据总线传输数据),它与 CPU 内部的数据总线宽度(内部寄存器的大小)有可能不同。

吞吐量:指系统在单位时间内处理请求的数量

响应时间:指从用户向计算机发送一个请求,到系统对该请求做出响应并获得他所需要的结果的等待时间。

基准程序(Benchmarks):专门用来进行性能评价的一组程序,能够很好的反应机器在运行实际负载时的性能。但并不是绝对准确的。