概述

冯·诺伊曼架构

原始架构

  • 计算机由运算器、存储器、控制器、输入设备和输出设备五大部件组成。
  • 指令和数据以同等地位存放于存储器内,并可按地址寻访。
  • 指令和数据均用二进制数表示。
  • 指令由操作码和地址码组成,操作码用来表示操作的性质,地址码用来表示操作数在存储器中的位置。
  • 指令在存储器内按顺序存放。通常,指令是顺序执行的,在特定条件下,可根据运算结果或根据设定的条件改变执行顺序。
  • 机器以运算器为中心,输入输出设备与存储器间的数据传送通过运算器完成。

1

各部件的功能:

  • 运算器用来完成算术运算和逻辑运算,并将运算的中间结果暂存在运算器内。
  • 存储器用来存放数据和程序。
  • 控制器用来控制、指挥程序和数据的输入、运行以及处理运算结果。
  • 输入设备用来将人们熟悉的信息形式转换为机器能识别的信息形式,常见的有键盘、鼠标等。
  • 输出设备可将机器运算结果转换为人们熟悉的信息形式,如打印机输出、显示器输出等。

现代架构

以存储器为中心

1

从芯片组成来看,现代计算机可认为由三大部分组成:CPU、I/0设备及主存储器(Main Memory, MM)。CPU与主存储器合起来又可称为主机,I/0 设备又可称为外部设备。

1

组成单元

1

主要参数

  • 机器字长:一般是运算器一次能够处理的位数,等于ACC长度
  • 存储容量:存储器存放数据的总位数,等于存储单元个数*存储字长。
    • 存储字长:存储器进行数据操作的单位的长度,等于MDR长度
    • 存储单元个数等于MAR的最大值
  • 运算速度:
    • 早期:完成一次基本操作所需时间
    • 吉普森法:指令的加权平均时间
    • 现代:单位时间内执行的平均指令(百万)个数MIPS、执行一条指令的时钟周期数CPI、浮点运算次数每秒FLOPS

数据表示

基本说明

通常考虑以科学计数法$a * base^{power}$的形式表示一个数,其中$a$ $base$ $power$分别称为尾数、基数、阶码。这个数的值称为真值。通常power均为2,即2进制数,以$(x)_{2}$书写。因此实际存储的内容就是尾数和阶码的表示。通常尾数和阶码的表示在计算机中称为真值的表示。

以下记n为尾数数值的整数部分最大位数,m为阶码数值的的整数部分最大位数。记$s_{x, i}$为$(x)_{2}$的第i位。

为了区分表示中的尾数和阶码,即如何处理小数点,形成了两种表示:定点表示和浮点表示。

无符号数

不存在阶码,且尾数表示中的每一位都是数值位。数值范围为$[0, 2^n - 1]$

定点表示

即小数固定在某一位置的表示方法。常见的有:

  • 有符号整数:不存在阶码,一般称表示中的最高位为符号位,书写时用,分割表示中的符号位和数值位。
  • (纯)小数:不存在阶码,一般称表示中的最高位为符号位,书写时用.分割表示中的符号位和数值位。

有四种表示方法:原码、补码、反码和移码。

$$ [x]_{原} = \begin{cases} (x)_2 & 2^n \gt x \ge 0 \\ (2^n - x)_2 & 0 \ge x \gt -2^n \\ \end{cases} $$
$$ [x]_{补} = \begin{cases} (x)_2 & 2^n \gt x \ge 0 \\ (2^{n+1} - x)_2 & 0 \gt x \ge -2^n \\ \end{cases} $$

特别的有 $[-x]_{补} = -[x]_{补}$

$$ [x]_{反} = \begin{cases} (x)_2 & 2^n \gt x \ge 0 \\ ((2^{n+1} - 2^{n-k}) - x)_2 & 0 \ge x \gt -2^n,k表示数值的位数 \\ \end{cases} $$

三者关系:

  • 若 $x \ge 0$,$[x]_{原} = [x]_{补} = [x]_{反}$
  • 若 $x \lt 0$,$[x]_{补} = [x]_{反} + 2^{n-k}$ ,且 $[x]_{反} = \sim [\left| x \right|]_{原}$
$$ [x]\_{移} = (x + 2^n)_2, 2^n\gt x \ge -2^n $$

特别的,在书写时,可以用双符号位表示符号:其中高位为符号位,低位如果与高位不同则表示溢出。

浮点表示

将阶码和尾数分别定点表示然后拼接。书写时用;分割表示中阶码和尾数。

如果发生了阶码的溢出:

  • 上溢:溢出
  • 下溢:真值为0

但特别的,为了考虑特殊值且为了提高浮点表示的数的精度,需要规格化:尾数最高数值位和符号位不同,但$[-2^n]$是规格化数,$[-2^{n-1}]$不是规格化数。

  • 尾数运算时溢出——右规(格化):尾数右移,阶+1;
  • 尾数运算时未溢出——左规(格化):尾数左移,阶-1;

同时需要考虑舍入

  • 0舍1入
  • 末位置1

定点运算

移位运算

  • 逻辑移位:二进制表示每位移动,空位补0。记为<<< >>>
  • 算术移位:记为<< >>
真值 表示法 空位补
正数 原码、补码、反码 0
负数 原码 0
负数 补码 左移补0,右移补1
负数 反码 1

加法、减法

  • 原码加法、减法:同普通加法、减法
  • 补码加(减)法:$[x \pm y]_{补} = [x]_{补} \pm [y]_{补}$

乘法

  • 原码乘法只能处理同为正数的情况:$[x * y]_{原} = [x]_{原} * [y]_{原} = [z_k]_{原}$,其中$[z_i]_{原} = \begin{cases}0 & i = 0 \\ (s_{y,k-i+1} * (x)_2 + [z_{i-1}]_{原}) >>> 1 & otherwise.\end{cases}$。对任意情况,取 $s_{x,0} \oplus s_{y,0}$ 作为结果的符号位。
  • 补码一位乘法:$y > 0$:$[x * y]_{补} = [z_k]_{补}$,其中$[z_i]_{补} = \begin{cases}0 & i = 0 \\ (s_{y,k-i+1} * (x)_2 + [z_{i-1}]_{补}) >> 1 & otherwise.\end{cases}$;$y < 0$:$[x * y]_{补} = [z_k]_{补} - [x]_{补}$
  • 补码Booth算法:$[x * y]_{补} = [z_{k+1}]_{补}$,其中若令$s_{y,k+1} = 0$,$[z_i]_{补} = \begin{cases}0 & i = 0 \\ ((s_{y,k - i + 2} - s_{y,k - i + 1}) * (x)_2 + [z_{i-1}]_{补}) >> 1 & otherwise.\end{cases}$

除法

约定 $\left|y\right| < \left|x\right|$

  • 原码除法只能处理同为正数的情况:取 $s_{x,0} \oplus s_{y,0}$ 作为商符号位,余数符号位为0。
    • 恢复余数法:$x>0,y>0$,$[\frac{x}{y}]_{原} = [z_k]_{补}$,$[x \% y]_{原} = [r_k]_{补} >>> 1$,其中$[r_i]_{补} = \begin{cases} [x]_{补} & i = 0 \\ ([r_{i-1}]_{补}-[y]_{补}) <<< 1 & r_{i-1} \ge y \\ [r_{i-1}]_{补} <<< 1 & r_{i-1} < y\end{cases}$ $s_{z_k, i} = r_i \overset{?}{\ge} y$
    • 不恢复余数法/加减交替法: $x>0,y>0$,$[\frac{x}{y}]_{原} = [z_k]_{补}$,$[x \% y]_{原} = [r_k]_{补} >>> 1$,其中$[r_i]_{补} = \begin{cases} [x]_{补} & i = 0 \\ ([r_{i-1}]_{补}-[y]_{补}) <<< 1 & r_{i-1} \ge 0 \\ ([r_{i-1}]_{补}+[y]_{补}) <<< 1 & r_{i-1} < 0\end{cases}$ $s_{z_k, i} = r_i \overset{?}{\ge} y$
  • 补码除法: $[\frac{x}{y}]_{补} = [z_k]_{补},[x \% y]_{补} = [r_k]_{补} »> 1$,其中$[r_i]_{补} = \begin{cases} [x]_{补} & i = 0 \\ ([r_{i-1}]_{补}-[y]_{补}) <<< 1 & s_{r_{i-1}, 0} \oplus s_{y,0} = 0 \\ ([r_{i-1}]_{补}+[y]_{补}) <<< 1 & s_{r_{i-1}, 0} \oplus s_{y,0} = 1 \end{cases}$ $s_{z_k, i} = s_{r_i, 0} \oplus s_{y,0}$ 特别的,将$[\frac{x}{y}]_{补}$的末位置1。

浮点运算

  • 对阶处理:加减法对阶(保留大阶)
  • 尾数、阶数运算。
  • 规格化。
  • 舍入,为提高精度,要考虑尾数右移时丢失的数值位。
  • 溢出判断,即判断结果是否溢出。

校验

校验理论

编码的检测能力和纠错能力与编码的最小距离,即在一种编码系统中,任意两组合法代码之间的最少二进制位数的差异。

编码最小距离L、检测错误的位数D、纠正错误的位数C满足:$L-l=D+C,D\ge C$

奇偶校验

添加一位检测位。考虑所有位为1的个数c:

  • 如果为配偶原则,c应为偶数,检测位值为$c \% 2$
  • 如果为配偶原则,c应为偶数,检测位值为$(c \% 2) \oplus 2$

再次计算c判断是否错误。

汉明校验

设欲检测的二进制代码为n位,为使其具有1位纠错能力,需增添k位检测位,组成n+k位的代码。则满足$2^k\ge n+k+l$

记欲检测的二进制代码从1开始编号,这k位检测位放在$2^i$上。

考虑二进制表示下的编号第i位为1的所有位为1的个数c。

  • 如果为配偶原则,c应为偶数,第i检测位值为$c \% 2$
  • 如果为配奇原则,c应为偶数,第i检测位值为$(c \% 2) \oplus 2$

再次计算c则可得到错误的位的编号。若为0则为无错误。

循环冗余校验

在模二域下,对代码左移然后对给定的生成多项式代码取余得到校验码,拼接得到。

指令

说明

指令就是对一些数据(操作数)进行操作的指令。

指令由操作码与地址码拼接而成。

操作码

用来指明该指令所要完成的操作,反映了机器的操作种类。常见的有:

  • 数据传送
  • 运算
  • 转移
    • 无条件转移
    • 条件转移
    • 调用与返回
    • 陷阱
  • 输入与输出

地址码

该指令的源操作数的地址、结果的地址以及下一条指令的地址。

寻址方式

  • 指令寻址:确定下一条指令的地址
    • 顺序寻址:PC+1
    • 跳跃寻址:PC+偏移量
  • 数据寻址:确定地址码/形式地址相应的操作数(的地址)
    • 立即(数)寻址:形式地址就是操作数
    • 直接寻址:形式地址就是操作数的地址
    • 间接寻址:形式地址处存放的是另一个形式地址或实际操作数的地址,需要多次访问才能得到。
    • 寄存器寻址:形式地址就是寄存器的编号
    • 寄存器间接寻址 = 间接寻址+寄存器寻址
    • 基址寻址:基址寄存器BR的值+形式地址(偏移量)就是操作数的地址。用来扩大寻址范围、解决程序浮动。
    • 变址寻址:变址寄存器IX的值+形式地址(偏移量)就是操作数的地址。用来加快程序的局部访问。
    • 相对寻址:PC的值+形式地址(偏移量)就是操作数的地址。用来解决程序跳转。
    • 隐含寻址;没有形式地址,操作数(的地址)被包含在操作码中。
    • 堆栈寻址。操纵堆栈。

RISC精简指令集

  • 长度固定;
  • 选取常用指令,指令格式种类少、寻址方式少;
  • 只通过存数、取数访问存储器;
  • 通用寄存器多;
  • 采用流水线技术;
  • 控制器采用组合逻辑技术设计。
  • 采用优化的编译程序。

运算器

核心是算术逻辑单元(ALU),负责执行实际运算。

存放内容 加/减法 乘法 除法
ACC 被加数、和 乘积高位 被除数、余数
MQ - 乘数、乘积低位
X 加数 被乘数 除数

总线

功能

计算机系统的五大部件之间的互连方式有两种:

  • 分散连接:计算机系统的各个部件之间互相独立连接。
  • 总线连接:计算机系统的各个部件之间连到一组公共信息传输线(总线)上。

分类

  • 片内总线:芯片内部的总线。
  • 系统总线。根据传输信息的不同分为:数据总线、地址总线、控制总线;
  • 通信总线:计算机之间的总线。

指标

  • 总线宽度:组成总线的单个位的传输线的个数。
  • 总线带宽:单位时间内总线上传输数据的位数。
  • 时钟同步/异步:总线上的数据与时钟同步工作的总线称为同步总线,与时钟不同步工作的总线称为异步总线。
  • 总线复用:一条信号线上分时传送两种信号。
  • 信号线数:地址总线、数据总线和控制总线三种总线数的总和。
  • 总线控制方式:包括突发工作、自动配置、仲裁方式、逻辑方式、计数方式等。
  • 其他

结构

单总线结构

1

双总线结构

将速度较低的I/0设备从单总线上分离出来,形成主存总线与I/0总线分开的结构。 1

多总线结构

将速率不同的I/0设备进行分类,然后将它们连接在不同的通道上。以下是两种

1

1

控制

判优控制

即对各设备信息传送的优先级控制。

  • 主设备对总线有控制权,从设备只能响应从主设备发来的总线命令,对总线没有控制权。
  • 总线上信息的传送是由主设备启动的。

判优控制分为:

  • 集中式:控制逻辑集中在一处,有:
    • 链式查询:总线同意信号BG依次向下传递,直到有总线请求的设备。
    • 计数器定时查询:通过计数器的值与某个请求占用总线的设备地址一致控制。
    • 独立请求方式:通过排队电路确定。
  • 分布式

通信控制

完成一次总线操作的时间称为总线周期,分为:

  • 申请分配阶段
  • 寻址阶段
  • 传数阶段
  • 结束阶段

通信控制主要处理通信双方如何获知传输开始和传输结束,以及通信双方如何协调如何配合。有四种方式处理:

  • 同步通信:通信双方由统一时标控制数据传送。
  • 异步通信:允许各模块速度的不一致性,采用应答方式
    • 不互锁方式:主模块请求后等待一段时间即认为被接受。
    • 半互锁方式:主模块等待从模块的应答,从模块不等待。
    • 全互锁方式:主模块等待从模块的应答,从模块等待主模块的应答。
  • 半同步通信:两者之间,增设了等待相应信号线,采用插入时钟(等待)周期的措施来协调通信双方的配合问题。
  • 分离式通信:分解传输过程。

存储器

概述

分类

1

使用

1

从左到右,价格越低、速度越低、容量越大。

主存储器

概述

1

读写流程:

  • 接受读写信号
  • MAR接受地址
  • 读数则从存储体读出至MDR,写数则从MDR写入至存储体

主存中存储单元地址的分配有大端序、小端序。

技术指标有:

  • 存储容量
  • 存储速度
  • 存储器带宽

半导体存储芯片

芯片集成成具有记忆功能的存储矩阵、译码驱动电路和读/写电路等。

译码驱动方式有两种:

  • 线选法:用一根字选择线,直接选中一个存储单元的各位。
  • 重合法:用多根字选择线,组合起来,选中一个存储单元的各位。

RAM

ROM

存储器与CPU连接

  • 合理选择存储芯片,存储容量不足需扩展:
    • 位扩展:指增加存储字长,优先进行
    • 字扩展:增加存储器字的数量
  • 分配CPU地址线
  • 形成片选信号
  • 连线

常用译码器:74138译码器 1

提高访存速度

  • 单体多字:一次存取多个字
  • 并行多体:多模块组成的存储器。交叉编号
  • 提高存储体性能

高速缓冲存储器

概述

将存储器中的部分数据放到更快的存储器中。

命中:访问的数据在缓存中,不需要从存储器中读取。

  • 命中率 = 命中次数/总访问次数
  • 平均访问时间 = 访存时间加权平均
  • 访问效率 = 平均访问时间/主存访问时间

结构

1

读写

1

地址映射变换

将主存地址尝试转换为Cache地址,成功则命中,访存Cache

具体方法有:

名称 直接映射 全相联映射 组相连映射
主存结构 组1-m块1-n字 块1-n字 组1-m块1-n字
Cache结构 m块1-n字 若干块1-n字 m组1-若干块1-n字
地址格式 组号-块号-块内地址 块号-块内地址 组号-块号-块内地址

替换策略

  • FIFO
  • LRU
  • 随机

辅助存储器

磁表面存储器

不同形状(如盘状、带状等)的载体上涂有磁性材料层,工作时,靠载磁体高速运动,由磁头在磁层上进行读/写操作,信息被记录在磁层上。

信息的记录层级为:辅存-盘面/盘片-磁道-具体数据。

主要指标:

  • 记录密度:单位长度内所存储的二进制信息量。
  • 存储容量
  • 平均寻址时间:平均找道时间+平均等待时间(可认为是磁头移动半圈的时间)。
  • 数据传输率:单位时间内磁表面存储器向主机传送数据的位数或字节数

结构略

光盘

输入输出系统

控制器

概述

为每一条指令确定并执行相应的微操作,有四大类(微指令):

  • 取指:
  • 间址:
  • 执行:
  • 中断:

外特性:

  • 输入信号:时钟、指令、标志、控制信号
  • 输出信号

时序系统

周期:执行所需的时间段。以周期来划分时间:

  • 时钟周期:时钟信号调控的微指令执行时间。
  • 指令周期:整条指令的执行时间。
  • 机器周期:所有的微指令的执行时间的最大时间。在存储字长等于指令字长时,可以认为与取指周期相同。

基于三种周期构成了多级时序系统

设计

总体方法

  1. 安排节拍:在机器周期内为每个微指令安排一个时钟节拍。
    • 要求:保持先后次序;可并行执行则并行、短的微指令在一个节拍内完成
  2. 采取相应设计方法

组合逻辑设计

  1. 列出微操作的操作时间表
  2. 写出逻辑表达式
  3. 画出逻辑图

微程序设计

  1. 确定微指令格式
  2. 编写微指令码点

CPU

结构

  • ALU
  • 控制器
  • 寄存器:用户可见寄存器(通用寄存器、数据寄存器、地址寄存器、条件码寄存器等)、控制和状态寄存器(MAR、MDR、PC、IR等)
  • 中断系统:用于处理中断:
    • 中断请求逻辑:中断请求标记寄存器
    • 中断判优逻辑:确定中断优先级:
      • 硬件排队
      • 软件排队
    • 查找中断服务入口程序地址
      • 硬件向量法:中断向量表
      • 软件查询法
    • 中断处理逻辑:
      • 允许中断触发器EINT
      • 保护程序断点、寻找中断服务程序的入口地址、关中断EINT=0
      • 考虑多重中断
        • 中断优先级、屏蔽字
      • 执行中断服务程序
      • 保护现场和恢复现场,开中断EINT=1

指令的执行

将指令周期按微指令分为:取指周期、间址周期、执行周期、中断周期

指令流水:将微指令并行化

  • 矛盾:结构相关、数据相关、控制相关
  • 加速

流水线指标:

  • 吞吐率 = 指令数/时间,趋近于执行速度
  • 加速比 = 串行执行时间/流水执行时间,趋近于流水线段/设备数
  • 效率 = 设备实际工作时间/各设备总时间