计算机组成原理

一. 计算机组成原理
二. 计算机的发展和应用
三. 系统总线
四. 存储器
五. 输入输出系统
六. 计算机的运算方式
七. 指令系统
八. CPU结构及功能
九. 控制单元的功能

1.计算机组成原理

1.1 计算机系统简介

  • 计算机软硬件

    计算机软件通常可以分为系统软件和应用软件

  • 计算机系统的层次结构

    两级层次结构:汇编语言虚拟机器,机器语言实际机器
    三级层次结构:高级语言虚拟机器,汇编语言虚拟机器,机器语言实际机器
    机器语言可向下扩展微程序机器,向上扩展操作系统机器

1.2 计算机的基本组成

  • 冯·诺伊曼计算机的特点

    1. 计算机由运算器,存储器,控制器和输入输出设备组成
    2. 指令和数据以同等地位存放于存储器中,并可按地址寻访
    3. 指令和地址均以二进制表示
    4. 指令由操作码和地址码组成,操作码用来表示操作的性质,地址码用来表示操作数所在存储器中的位置
    5. 指令在存储器中按序存放,通常是顺序执行的
    6. 机器以运算器为中心,输入输出设备与存储器的数据传送通过运算器

    典型的冯·诺伊曼计算机是以运算器为中心的,现代的计算机已转化为以存储器位中心

1.3 计算机硬件技术指标

  1. 机器字长

    机器字长是指CPU一次能处理的数据的位数
    字长越长, 数的表示范围越大, 精度也越高, 运算速度更快

  1. 存储容量:存储容量 = 存储单元个数*存储字长

    一般情况下, 存储字长和机器字长相等

  2. 运算速度:吉普森法

    $$T_M = \sum_1^n f_tt_i$$
    现代机器的运算速度普遍采用单位时间内执指令的平均条数来衡量, 即MIPS

2. 计算机的发展和应用

2.1 计算机发展史

  1. 第一代电子管计算机
  2. 第二代晶体管计算机
  3. 第三代集成电路计算机
  4. 微型计算机的出现

2.2 计算机的应用

  1. 科学计算和数据处理
  2. 工业控制和实时控制

3. 系统总线

3.1 总线的定义

两种设备连接方式: 分散连接, 总线连接

总线是连接多个部件的信息传输线, 是各部件共享的传输介质
在同一时刻, 只允许有一个部件向总线发送信号, 而多个部件可以从总线上接受相同的信息
总线结构采用并行传输, 分为双总线结构和单总线结构

3.2 总线的分类

  • 片内总线

    CPU内部, 寄存器和寄存器之间, 寄存器和算术逻辑单元之间

  • 系统总线

    1. 数据总线

      传输各功能之间的数据信息, 双向传输总线, 位数和机器字长和存储字长有关

    2. 地址总线

      主要用来指出数据总线上的源数据或目的数据在主存单元的地址, 单向传输, 位数和存储单元的个数有关

    3. 控制总线

      用来发出各种控制信号, 决定各部件在不同时刻占用的总线使用权, 单线传输

  • 通信总线

    用于计算机系统之间或者计算机系统与其它系统之间的通信, 串行或并行

3.3 总线的特性以及指标

  • 总线特性: 机械特性, 电气特性, 功能特性, 时间特性
  • 总线性能: 总线宽度, 标准传输率(MB/s), 时钟同步/异步, 总线复用, 信号线数, 总线控制方式

总线标准: ISA, EISA, VL-BUS, PCI

3.4 总线结构

  1. 单总线结构

  2. 多总线结构:将速度较低的I/O设备从单总线中分离出来,形成主存总线和I/O总线分开的结构

    将速率不同的I/O设备进行分类, 可以提高计算机系统的利用率

3.5 总线控制

总线上的设备按其对总线有无控制功能可以分为主设备和从设备两种.
若多个主设备同时想要使用总线, 就由总线控制器判优, 仲裁逻辑按一定的优先等级排序

  • 总线判优控制
  1. 链式查询

    如果BG(总线同意)到达的设备有总线请求, BG信号就不再往下传, 并建立总线忙(BS)信号, 易扩充设备但是对电路故障敏感

  2. 计时器定时查询

    当接到请求时, 由计数器开始计数, 向各设备发出一组地址信号, 当请求设备地址和计数值一致时, 获得总线控制权

  3. 独立请求方式

  • 总线通信控制

    总线完成一次传输周期时, 分为四个阶段: 申请分配阶段, 寻址阶段, 传数阶段, 结束阶段

    1. 同步通信

    2. 异步通信:分为不互锁,半互锁和全互锁三种

    3. 半同步通信

    4. 分离式通信

4. 存储器

4.1 存储器分类

按照存储介质: 半导体存储器, 磁表面存储器, 磁芯存储器, 光盘存储器
按照存储方式: 随机存储器RAM, 只读存储器ROM, 串行访问存储器
按在计算机中的作用分类: 主存储器, 辅助存储器, 缓冲存储器

  • 存储器的层析结构

    一般来说, 存储器速度越快, 价位就越高, 容量越大, 价位就越低, 容量越大, 速度越低; 存储器的层次结构主要可以体现在缓存-主存和主存-辅存这两个存储层次上

4.2 主存储器

![主存和cpu的关系](2020-07-04-16-50-48.png %}

MAR存储读写信息的地址, MDR存储读出或写入的数据, MAR和MDR在CPU芯片之内, 寻址方式有按字寻址和按字节寻址

  • 主存的指数指标(存储容量和存储速度)

    $$存储容量 = 存储单元数 * 存储字长$$
    存储容量的单位常用字节表示
    存储速度由存取时间和存取周期来表示, 存储时间表示启动一次存储器操作到完成该操作需要的全部时间; 存储周期是指存储器进行两次独立的存储器操作所需的最小时间间隔

4.3 随机存取寄存器读写(RAM)

  1. 静态RAM

    静态RAM由触发器存储信息,信息读出后仍保持原样,不需要再生
    地址输入端,数据输入/输出短,片选信号CS,写允许信号WE
    读周期时序:

    写周期时序:

  2. 动态RAM

    动态RAM使用电容存储电荷来存储信息,因此必须定期对所有存储单元恢复一次原状态,即刷新. 行列地址分两次传送, RAS, CAS
    动态RAM写周期时序:

    动态RAM读周期时序:

  • 动态RAM的刷新

    1. 集中刷新:在规定的一个刷新周期内,对所有存储单元集中一段时间逐一进行刷新,此刻必须停止读写操作,逐行进行刷新,每次刷新消耗时间为一个读写周期,可能出现”死区”
    2. 分散刷新:对每行存储单元的刷新分散到每个读/写周期内完成,将存取周期分成两部分,前半段用来读写或者维持,后半段用来刷新,克服死区,但使整机工作效率下降

    采用集中和分散相结合, 减少死区时间

  • 动态RAM和静态RAM的比较

    动态RAM集成度远高于静态RAM, 动态RAM功耗较少
    动态RAM价格较低, 速度更高, 广泛应用于计算机主存

4.4 只读存储器(ROM)

  1. 掩膜ROM

  2. PROM

    可以实现一次性编程的只读存储器, 只能实现一次编程, 不得再修改

  3. EPROM

    可擦洗可编程的只读存储器

4.5 存储器和CPU的连接

  1. 存储容量的扩展

    • 位扩展(增加存储字长)
    • 字扩展(增加存储器字的数量, 使用片选译码)
    • 字, 位扩展(既增加字的数量, 又增加存储字长)
  2. 存储器和CPU相连接

    • 地址线的连接

      通常将cpu的低位地址线和存储器想连,高位地址线一般用于芯片扩展

    • 数据线的连接

  • 读写命令线的连接

  • 片选线的连接

    片选信号和CPU的方寸控制信号MREQ(低电平有效)有关

  • 合理选用存储芯片

    选择合理的RAM或ROM及其数量
    一般ROM存放系统程序,标准子程序和各种常数等,RAM用于用户编程

  1. 存储器的校验

    海明码具有一位纠错能力,编码的检错能力和纠错能力和编码的最小编码距离有关
    $$L-1 = D+C D>=C$$
    欲检测的二进制代码为n位, 添加k位检测位, 为准确定位错误或者纠错能力
    应该满足$2^k>= n+k+1$
    海明码的k位检测码分别安插在n+k位代码编号的1, 2, 4…2^(k-1)位上
    每个位置的检测码代表不同数位组成的小组, 使检测位和它负责的检测小组所含1的个数为奇数或者偶数
    海明码的纠错过程: 对传送后的海明码形成新的检测位, 根据新检测位的状态可直接指出错误的位置

  2. 提高访存速度

    • 单体多字系统
    • 多体并行系统
    • cache:任何时候都有一些主存块位于缓存块中,, 访问主存时先访问cache, 命中则直接访问, 未命中将主存块调入缓存
  3. Cache主存地址映像

    • 直接映像
    • 全相联映像(相联存储器, 成本高)
    • 组相联映像(cache每组可以存储多个字块)
    • 段相联映像(段之间全相联, 段内直接)
  4. Cache主存块替换算法

    • 先进先出(FIFO)算法
    • 近期最少使用(LRU)算法

4.6 辅助存储器

辅助存储器简称外存, 与主存一起构成了主存-辅存层次, 具有容量大, 速度慢, 价格低等特点, 属于”非易失性”存储器. 目前广泛用于计算机系统的辅助存储器一般是磁表面存储器.

  • 技术指标

    1. 记录密度(单位长度内存储的二进制信息)
    2. 存储容量(C=nks,分为格式化容量和非格式化容量)
    3. 平均寻址时间:平均找道时间和平均等待时间的和
    4. 数据传输率
    5. 误码率
  • 硬磁盘存储器

    磁盘控制器, 磁盘驱动器, 盘片

  • 软磁盘存储器

    硬盘转速快, 存取速度快, 软盘转速低, 存取速度慢

  • 磁带存储器

    磁盘是直接存取设备, 磁带必须进行顺序存取

  • 光盘存储器

5. 输入输出系统

5.1 IO系统的组成

  1. I/O软件

    将用户编写的程序和数据输入到主机内, 将运算结果传输给用户, 实现I/系统和主机工作的协调

    • IO指令
    • 通道指令
  2. I/O硬件

5.3 IO设备和主机的联系方式

  • IO编址方式: 统一编址和不统一编址
  • 设备寻址
  • 传送方式: 并行, 串行
  • 联络方式: 立即响应方式, 异步工作应答信号, 同步时标联络
  • IO与主机之间的连接方式: 辐射式和总线式

5.4 IO与主机信息传送的控制方式

  1. 程序查询方式

    CPU通过程序不断查询IO设备是否已经做好准备, 从而控制IO设备和主机交换信息, CPU工作效率低

  2. 程序中断方式

    CPU在启动IO设备后, 当IO设备准备好并向CPU发出中断请求后处理IO, 提高了CPU工作效率

  3. DMA方式

    主存和I/O设备之间有一条数据通路, 主存和I/O设备交换信息时, 无需处理中断, 若DMA和CPU同时访问主存, CPU总是将总线占有权交给DMA, 即窃取周期, 因此DMA比程序中断方式效率更高

5.5 外部设备

  1. 输入设备:键盘,鼠标器,触摸屏
  2. 输出设备:CRT,打印设备

5.6 IO接口

  • 总线连接的IO接口

    数据线,端口选择线,命令线,状态线

  • 接口的功能和组成

    1. 选址功能
    2. 传送命令
    3. 传送数据
    4. 反映IO设备工作状态

5.7 程序查询方式

程序查询方式按照各个设备在系统中的优先级进行逐级查询
首先执行测试指令,若设备已经准备就绪,执行传送指令,否则执行转移指令

5.8 中断方式

  • 中断请求触发器和中断屏蔽触发器

    每台外设配置一个中断请求触发器INTR,当其为1时,表示该设备向CPU提出中断请求
    CPU在同一时间只能相应一个中断源的中断请求,在IO接口设置一个MASK屏蔽触发器,对各中断进行排队
    设备优先权的处理可以采用硬件或者软件方法,链式排队电路

  • 中断服务程序流程

    1. 保护现场:保存程序断点,保存寄存器内容
    2. 中断服务:设备服务
    3. 恢复现场:回复寄存器信息
    4. 中断返回:回到原来程序的断点处

    多重终端在保护现场之后就可以开中断,允许更高级中断请求,单重中断在恢复现场后开中断

5.9 DMA方式

主存和DMA接口之间有一条数据通路, 因此主存和设备交换信息时不需要通过CPU, 省去了保护现场和恢复现场的时间, 因此工作速度比程序中断方式高
若DMA和CPU争用主存,则通过停止COU访问主存,周期挪用,交替访问解决

  • DMA工作过程

    DMA的数据传送过程分为预处理,数据传送和后处理三个过程

    1. 预处理:指明数据传输方向,向DMA寄存器输入设备号,启动设备。对字计数器赋以交换数据的个数
    2. 数据传送:以数据块为单位
    3. 后处理:校验数据块并检查是否继续使用DMA

6. 计算机的运算方式

6.1 移码表示法

补码不能直观反映出数据的相对大小, 一次引入移码
$$ [x]_(移)=2^(n)+x $$

6.2 数的定点表示和浮点表示

定点数处理非整数或纯小数时容易发生溢出

  • 浮点数表示形式

    浮点数由阶码j和尾数S组成,分别有阶符和阶码,表示浮点数的范围和浮点数的精度
    浮点数超出表示范围会发生下溢或上溢,阶码数值位有m位,尾数的数值位取n位,浮点数表示范围为$$-2^(2^m-1)*(1-2^(-n))~ -2^(-2^m+1)2^(-n) 2^(2^m-1)(1-2^(-n))~ 2^(-2^m+1)*2^(-n)$$
    通过移尾数和修改阶数的方法可以使浮点数规格化
    相同位数的浮点数和定点数,浮点数的表示范围更大,精度更高在溢出的判断方法不同

6.3 定点运算

定点运算包括移位, 加, 减, 乘, 除

  1. 移位运算

    对于有符号数, 移位操作称为算术移位
    算术移位规则: 正数移位后出现的空位用0填补. 对于负数, 原码补0, 补码在左移时补0, 右移时补1, 反码补1
    正数移码在左移时高位丢1, 结果出错, 右移时低位丢1, 影响精度
    负数的原码左移高位丢1, 结果出错, 低位丢1, 影响精度
    负数补码左移高位丢0, 结果出错, 右移时丢1, 影响精度,
    负数反码左移高位丢0, 结果出错, 低位丢0, 影响精度
    无符号数的移位成为逻辑移位, 空位填0

  2. 加减法运算

    加减法采用补码运算, 减法相当于加负
    补码的加法等于加法结果模2n+1, 得到结果的补码

    • 溢出验证: 可以采用一位符号位判断溢出或两位符号位判断溢出
      1. 以为符号为溢出: 当加法两数同号, 但和结果的符号位不同时发生溢出
      2. 在使用两位符号位的补码时, 两位符号位要连同数值一起参加运算, 当两位符号位不变时表示溢出; 同时不论是否溢出, 高位的符号位永远表示真正的符号
        补码定点加减法流程:
  3. 乘法运算

    乘法运算主要包括原码一位乘法,原码两位乘法,补码一位乘法,补码两位乘法

    • 原码一位乘法

    乘积的符号位有两原码符号位异或运算结果决定
    乘积的数值部分由两数的绝对值相乘

    • 原码两位乘法

    原码两位乘法乘法速度更快,符号值的计算和数值部分的计算分开
    但是原码两位乘法使用两位乘数地状态来决定新的部分积如何形成

    • 补码一位运算(比较法)

    考虑到溢出,部分积和被乘数取双符号位
    补码乘法的符号位在运算中自然形成

    • 补码两位运算

    部分积取三位符号位,乘数取两位符号位

  4. 除法运算

    • 原码除法

    原码除法和原码乘法一样,符号位是单独处理的
    恢复余数法:当余数为负数时,加上除数,将其恢复到原来的余数

    加减交替法:恢复余数法的进一步归纳

    • 补码除法

    补码除法一般采用加减交替法,符号位和数值一起参加运算
    若除数和被除数符号相同,采用原码规则上商,否则使用反码原则

    运算步骤:
    新余数获得方法和源码加减法相似,当余数和除数符号相同,商上1,新余数为2倍余数减除数
    若余数的符号和除数不同,商上0,新余数为余数*2减除数

6.4 浮点数运算

  1. 浮点数加减运算

    • 对阶: 使两数的小数点位置对齐
    • 尾数求和: 将对阶后的两尾数按定点加减运算规则求和(差)
    • 规格化: 为增加有效数字的位数, 提高运算精度, 必须将求和的尾数规格化
    • 舍入: 为提高精度, 要考虑尾数右移时丢失的数值位
    • 判断结果, 即判断结果是否溢出
      溢出判断:
  2. 浮点数乘除法运算

两个浮点数相乘, 其乘积的阶码为两乘数阶码之和, 乘积的尾数为相应两数的尾数之积浮点数相除与之相反

  • 阶码运算

    使用补码运算, 乘法补码相加, 除法补码相减

  • 尾数运算

    浮点数乘法:先检测两个尾数中是否有零, 有则直接将结果置零
    尾数的相乘可以使用定点小数的任意一种乘法解决, 相乘结果可能需要左归
    左归时如果发生阶下溢, 则作机器零处理, 如果发生阶上溢, 则作溢出处理
    由于尾数相乘会得到两倍字长的结果, 因此采用截断或者舍入原则舍去低位
    对于原码和补码正数, 采用0舍1入
    对于补码负数, 当丢失的各位都是0时, 不必舍入, 当丢失的各位数中的最高位为0, 且以下各位不全为0; 或者丢失的给尾数的最高位为1, 且以下的各位均为0时, 舍去被丢失的各位;
    当丢失的各位数中的最高位为1, 且以下的各位又不全为0时, 则在保留尾数的最末位加一修正

    浮点数除法:
    首先检测除数和被除数是否为0, 两个浮点数尾数的相除可以采用定点小数的任意一种除法算法
    对已规格化的尾数, 为了防止除法结果溢出, 可先比较被除数和除数的绝对值,
    如果被除数的绝对值大于除数的绝对值, 则先将被除数右移一位, 其阶码加一, 再做尾数相除. 此时所得的结果必然是规格化的定点小数

6.5 算数逻辑单元

  1. ALU电路

    74181是能完成四位二进制代码的逻辑运算部件有两种工作方式, 正逻辑和负逻辑

  1. 快速进位链

    • 并行加法器

    并行加法器由若干个全加器组成,n+1个全加器级联,组成了一个n+1位并行加法器
    一级一级传递进位,大大影响计算速度

    • 串行进位链

    将并行加法器中的进位信号采用串行传输,采用与非电路即可实现进位传递

    若与非门的延时为ty,那么当每位的di和ti形成后,每增加一位,进位时间就会增加2ty
    n位全加器的最长进位时间为2nty

    • 并行进位链

    并行进位链是指并行加法器中的进位信号是同时产生的,又称先行进位,跳跃进位等
    理性的并行进位链是n为全加器的n位进位同时产生,通常有单重分组和双重分组两种实现方案
    单重分组跳跃进位:
    单重分组跳跃进位就是将n位全加器分成若干小组,小组间的进位同时产生
    小组与小组之间采用串行进位,即组内并行,组间串行
    四位一组的并行进位链:
    设与或非门的延迟时间为1.5ty,与非门的延迟时间仍为1ty,则di和ti形成后,只需2.5ty就可以全部进位

    将16位的全加器按四位一组进行分组,便可得单重分组跳跃进位链框图:

    则当n=16时,经过10ty可以完成全部进位

    双重分组跳跃进位:
    将n为全加器分为几个大组,每个大组又包括几个小组,每个大组中包含的各个小组的最高进位同时形成,同一小组非最高位同时形成
    小组内最高位和非最高位不是同时生成的,即小组内并并行,小组间并行,大组间串行

    n=16时进位时间为7.5ty,n=32时进位时间为10ty
    所有Di和Ti在第一个2.5ty形成

7. 指令系统

7.1 机器指令

指令一般由操作码和地址码两部分组成

  • 操作码

    操作码的尾数决定了机器允许的指令条数, 长度可以是固定的, 也可以是变化的
    采用不固定长度的操作码可以减少指令的平均长度, 但会增加译码难度
    因此采用扩展操作码技术, 不同地址数的指令拥有不同长度的操作码
    同时应该尽量安排指令使用频度高的指令占据更短的操作码

  • 地址码: 地址码用来指出该指令源操作数的地址, 结果的地址和下一条指令的地址

  • 指令字长: 现代计算机指令系统允许多字长指令, 但尽量将常用的指令设置成单字长或短字长指令

7.2 操作数类型和操作类型

机器中常见的操作数类型有地址, 数字, 字符, 逻辑数字等
边界对齐, 边界不对齐; 按字编址, 按字节编址

  • 指令的操作类型
    1. 数据传送
    2. 算术逻辑操作
    3. 移位
    4. 转移:无条件转移,有条件转移,调用与返回,陷阱和陷阱指令
    5. 输入输出
    6. 其他

7.3 寻址方式

  • 指令寻址: 顺序寻址(PC+1)和跳跃寻址
  • 数据寻址
    1. 立即寻址:操作数本身在指令中,指令带有立即寻址特征
    2. 直接寻址:指令中的地址为操作数的地址
    3. 隐含寻址:操作数的地址不明显给出,适用于特殊的指令
    4. 间接寻址:指令字中的形式地址不直接指出操作数的地址,而是给出操作数有效地址的存储单元地址,可以有两次间接
    5. 寄存器寻址:指令中直接给出了寄存器的编号,操作数在该寄存器内
    6. 寄存器间接寻址:指令中指定的寄存器存储了操作数的地址
    7. 基址寻址:基址寻址需要设有基址寻址寄存器BR,其操作数的有效地址等于操作数的有效地址等于指令字中的形式地址和基址寄存器中的内容相加
    8. 变址寻址:有效地址等于指令字中的形式地址与变址寄存器IX的内容之和
    9. 相对寻址:有效地址时将PC中的内容与指令字中的形式地址相加
    10. 堆栈寻址:零地址指令

7.4 RISC技术

CISC, 复杂指令计算机
RISC, 精简指令计算机

8. CPU结构及功能

cpu基本功能: 取指令, 分析指令, 执行指令

8.1 CPU的寄存器

  1. 用户可见寄存器:通用寄存器,数据寄存器,地址寄存器,条件代码寄存器
  2. 控制和状态寄存器:MAR,MDR,PC,IR

8.2 指令周期

CPU每取出一条指令所需的全部时间叫指令周期, 不同指令的指令周期不同
一个完整的指令周期应包括取值, 间址, 执行, 中断四个子周期
取值周期: PC->MAR->MDR->IR
间址周期: MAR->MDR

8.3 指令流水

为了提高计算机访存速度, 一般存储芯片芯片的性能, 或采用多体, cache等分级存储措施来提高存储器的处理能力

  1. 提高器件的能力
  2. 改进系统的架构,开发系统并行性

指令的处理过程分解:

  1. 取指(FI)
  2. 指令译码(DI)
  3. 计算操作数地址(CO)
  4. 取操作数(FO)
  5. 执行指令(EI)
  6. 写操作数(WO)

8.4 中断系统

中断因素: 人为设置, 程序性事故, 硬件故障, IO设备, 外部事件

  • 中断服务程序入口地址的寻找

    1. 硬件向量法:使用无条件转移或者向量地址表
    2. 软件查询法
  • 多重中断

    当CPU在执行某个中断服务程序时, CPU响应了另一个中断源产生的新的中断请求
    实现多重中断:
    提前设置开中断指令
    优先级别高的中断源有权中断级别低的

9. 控制单元的功能

控制单元具有发出各种微操作命令序列的功能