目录

第一章 概述

1.1 计算机系统结构

1.1.1 冯诺依曼(普林斯顿)结构

1.1.2 现代计算机

1.2 计算机各硬件组成

1.3 计算机硬件指标

第二章 总线

2.1 总线分类

2.1.1 片内总线

2.1.2 系统总线

2.1.3 通信总线

2.2 总线结构

2.2.1 单总线结构

2.2.2 双总线结构

2.2.3 三总线结构 

2.2.4 多总线结构

2.3 总线判优控制***

2.3.1 链式查询

2.3.2 计数器定时查询

2.3.3 独立请求方式

2.4 总线通信控制

2.4.1 同步通信

2.4.2 异步通信

2.4.3 半同步通信***

2.4.4 分离式通信***

第三章 存储系统

3.1 主存储器

3.1.1 存储器分类

3.1.2 译码驱动方式

3.1.3 随机存储器与只读存储器

3.1.4 动态RAM刷新

3.2 存储器与CPU的连接

3.2.1 位扩展

3.2.2 字扩展

3.2.2 字、位扩展

3.3 提高访存速度的措施

3.3.1 单体多字系统 

3.3.2 多体并行系统

3.4 高速缓冲存储器

3.4.1 Cache的工作原理

3.2.2 直接映射

3.2.3 全相联映射

3.2.4 组相联映射

3.2.5 Cache的写策略: 

3.2.6 Cache替换算法

3.5虚拟存储器(结合操作系统) 

第四章 输入输出系统

4.1 I/O接口

4.2 中断系统

4.3 DMA方式

4.3.1 DMA的传送方式 

4.4.5 DMA接口与系统的连接方式***

4.4.6 DMA接口类型***

第五章 数据的表示和运算

5.1 计算机中的数值

5.2 定点数的运算

 5.2.1 移位运算

5.2.2 加减法运算

5.2.3 乘法运算

5.2.4 除法运算

5.3 浮点数的运算

5.4 算术逻辑单元

第六章 指令系统

6.1 机器指令

6.2 指令的寻址方式

6.2.1 指令寻址

6.2.2 数据寻址

6.3 程序的机器级代码表示

第七章 中央处理器

7.1 指令周期

7.2 CPU的功能及结构

7.2.1 通路数据

7.2.2 多处理器

7.3 控制器

7.3.1 硬布线控制器 (组合逻辑设计)

7.3.2 微程序控制器

7.4 指令流水线

7.4.1流水线性能指标

7.4.2 影响流水线性能的因素

7.4.3 流水线中的多发技术

7.5 控制方式

7.5.1 同步控制方式

7.5.2 异步控制方式

7.5.3 联合控制方式

7.5.4 人工控制方式


第一章 概述

计算机发展史***: 

  • 第一代:电子管计算机(1946-1958)
  • 第二代:晶体管计算机(1958-1964)
  • 第三代:中小规模集成电路计算机(1964-1971)
  • 第四代:大、超大规模集成电路计算机(1971年以后)

1.1 计算机系统结构

        硬件+软件(系统软件+应用软件)

        第一台电子数字计算机:1946年美国宾夕法尼亚大学的ENIAC

1.1.1 冯诺依曼(普林斯顿)结构

        以运算器为中心 (占用运算器的时间,不利于高效利用运算器)。最根本特征是采用存储程序原理。特点是指令和数据以同等地位位于存储器, 指令由操作码和地址码组成 

原理图: 

1.1.2 现代计算机

        以存储器为中心。

原理图: 

 计算机系统的层次结构图:

翻译程序: 

        编译程序: 将源程序的全部语句一次全部翻译成机器语言程序,而后在执行。

        解释程序: 将源程序的一条语句翻译成对应机器语言的一条语句并立即执行, 接着翻译源程序的下一条语句, 重复执行的语句也会被重新翻译。

从C语言源程序到可执行文件:

1.2 计算机各硬件组成

运算器: 

  • ACC: 累加寄存器
  • MQ: 乘商寄存器
  • X: 通用寄存器
  • ALU: 算术逻辑单元

控制器:

  • CU: 控制单元
  • IR: 指令寄存器, 存放当前执行的指令
  • PC: 程序计数器, 存放下一条指令的地址

主存:

  • MDR: 数据寄存器, 位数=存储字长
  • MAR: 地址寄存器, 位数=存储数量。与PC长度相等

原理图:

        汇编程序员可见PSW(状态寄存器)、通用寄存器、PC、基址寄存器

        兼容: 指的是软硬件兼容(时间上向后兼容)

1.3 计算机硬件指标

        机器字长: CPU一次能处理数据的位数, 与通用寄存器位数和ALU相同。

        存储字长: MDR位数

        数据字长: 数据总线一次能传送信息的位数

        指令字长: 一般为存储字长的整数倍, 若为2倍, 需要2次访存取一条指令。与IR寄存器有关

        存储容量: 存储单元个数(2*MAR位数次方) x 存储字长(MDR)

        CPU主频(时钟频率): 1/CPU时钟周期, 单位Hz。不会影响CPI, 但可以加快指令执行速度

        CPI: 执行一条指令所需时钟周期数

        执行一条指令耗时: CPI x CPU时钟周期

        CPU执行时间: (指令条数 x CPI ) / 主频

        IPS: 每秒执行多少条指令, 主频/平均CPI

        FLOPS: 每秒执行多少浮点运算 (K > M > G > T > P > E > Z, 换算:10^3)

时钟周期图: 

博客参考: 计算机组成原理(唐朔飞)第三版

第二章 总线

2.1 总线分类

        总线带宽影响因素: 总线宽度, 总线频率, 数据传输方式 (间接影响)。

        数据通路: 包含异常和中断处理的电路。

2.1.1 片内总线

        芯片内部的总线。

2.1.2 系统总线

        CPU、主存、I/O设备等各大部件之间的信息传输线。按传输信息分为以下三种

        数据总线: 双向传输总线, 位数与机器字长、存储字长有关。

        地址总线: 指明CPU访问的存储单元或I/O端口的地址, 单向传输, 位数与存储单元有关。

        控制总线: 用来发出各种控制信号的传输线, 单向传输

2.1.3 通信总线

        用于计算机系统之间或其他系统之间的通信, 按传输方式分为以下两种

        串行通信: 数据在单条1位宽的传输线上, 一位一位按顺序传送, 适宜远距离传送。

        并行通信: 多条并行1位宽的传输线上, 同时由源传送到目的地, 适宜短距离, 通常小于30m。

2.2 总线结构

2.2.1 单总线结构

特点: 

        1) 结构简单, 成本低, 易于接入新的设备。

        2) 带宽低, 负载重, 多个部件只能争用唯一的总线。

单总线图:

2.2.2 双总线结构

 特点: 

        1) 将较低速的I/O设备从单总线上分离出来

        2) 需要增加通道等硬件设备 

双总线结构图: 

2.2.3 三总线结构 

特点:

        1) 提高了I/O设备的性能, 提高系统吞吐量

        2) 系统工作效率较低

三总线结构图:

2.2.4 多总线结构

多层PCI总线图:

2.3 总线判优控制***

        主设备: 对总线有控制权,又称主模块。

        从设备: 只能响应主设备发来的总线命令, 又称从模块。

2.3.1 链式查询

        总线同意信号BG是串行的从一个I/O接口到下一个I/O接口, 离主设备最近的设备有最高优先级, 易扩展, 但对电路故障敏感, 且优先级低的难以获得请求。

原理图:

2.3.2 计数器定时查询

        用 log{ _{2}}^{}n根地址线替换BG同意线, 当某个请求占用总线的设备地址与计数值一致时, 便获得总线使用权。 计数可从0开始, 也可从上一次计数开始。

原理图:

2.3.3 独立请求方式

        每一台设备均有一对总线请求线BR和总线同意线BG, 特点是响应速度快, 优秀控制灵活, 但控制线多, 需要2n根线。

原理图:

2.4 总线通信控制

        主要解决通信双方获知传输开始和传输结束, 及通信双方协调配合。有同步通信异步通信半同步通信分离式通信四种方式。

总线周期的四个阶段:

        1) 申请分配阶段: 可细分为传输请求, 总线仲裁两个阶段

        2) 寻址阶段: 发出本次要访问从模块的地址及有关命令

        3) 传输阶段: 主从模块进行数据交换

        4) 结束阶段: 主模块有关信息从系统总线上撤除, 让出总线使用权

2.4.1 同步通信

        通信双方由统一时标控制数据传送, 时标通常由CPU的总线控制部件发出。

示例图:

        特点: 规定明确, 统一, 模块间的配合简单一致, 但必须按最慢速度的部件来设计公共时钟, 影响总线工作效率。 

2.4.2 异步通信

        采用应答方式(握手方式), 主模块发出请求信号, 从模块反馈响应。根据应答方式可分以下三种类型

        不互锁方式: 主模块发出请求信号, 不必等接受到从模块的回答信号, 而是经过一段时间, 便撤销请求信号, 从模块收到请求信号后, 发出回答信号, 经过一段时间撤销回答信号

        半互锁方式: 主模块必须接受到模块回答信号再撤销请求信号, 从模块不等主模块撤销请求信号, 而是经过一段时间撤销回答信号。

        全互锁方式: 主模块必须等从模块回答再撤销, 从模块必须等主模块撤销请求信号, 才撤销回答信号。 

原理图:

2.4.3 半同步通信***

        通过增加一条WAIT线, 保留了同步通信的基本特点, 又像异步通信, 允许不同速度的模块和谐工作。与同步通信相比, 无需将周期设置为速度最慢的设备, 较慢的从设备可以通过WAIT信号增加等待周期。

 原理图:

2.4.4 分离式通信***

        当从设备按照命令进行读数据的必要准备时, 总线属于空闲状态。为优化这一点, 将一个传输周期分解为两个子周期, 第一个子周期,主模块使用总线发送地址和命令后, 释放总线使用权; 第二个子周期由从设备准备好数据后申请使用总线使用权。

        特点: 各模块欲占用总线必须提出申请, 各模块准备数据过程不占用总线, 总线被占用时都在有效工作, 但这种控制比较复杂, 普通微信计算机很少采用。

五, 总线指标

        总线宽度: 指数据总线的根数

        总线带宽: 总线的数据传输速率(单位: MBps), 单位时间内总线传输数据的位数。

第三章 存储系统

3.1 主存储器

主存的技术指标:

        存储容量: 存储单元个数(MAR) x 存储字长(MDR位数) ( 单位: b ) 。

        存储器带宽: 数据传输率=数据宽度/存储周期, 单位时间内存储器存取的信息量 。

        存储时间: 启动一次存储操作(读/写)到完成该操作所需的全部时间。

        存取周期: 存储器进行连续两次独立的存储器操作所需最小间隔时间, 通常存取周期大于存取时间。

存储周期图:

3.1.1 存储器分类

按存储介质分类: 

        1) 半导体器件: 体积小, 功耗低, 存取时间短。电源消失时, 信息也随机丢失(易失性存储器)。 

        2) 磁性材料: 在金属或塑料表面涂一层磁性材料作为记录介质, 非易失性存储器。

        3) 光盘: 应用激光在记录介质(磁光材料)上进行读/写的存储器, 非易失性存储器。

按存取方式分类:

        1) 串行访问存储器: 对存储体进行读/写操作时, 需按其物理位置的先后顺序寻找地址

        2) 随机存储器(Random Access Memory): 存储器的任何一个存储单元的内容都可以随机存取, 分静态RAM(触发器原理)和动态RAM(电容充放电原理), 存取时间与存储单元物理位置无关。

        3) 只读存储器(Read Only Memory): 存储的内容只能读, 而不能重新写入的存储器, 通常存放固定不变的程序。

按在计算机中的作用分类:

        1) 主存储器: 主要特点是可以与CPU直接交换信息, 速度快容量小价格高。

        2) 辅助存储器: 存放当前占时不用的程序和数据, 不能与CPU直接交换信息, 速度慢容量大, 价位低 。

        3) 缓冲存储器: 用在两个速度不同的部件之间, 如CPU与主存间, 主存与辅助存储器之间。

存储器的层次结构图:

        备注: 主存和cache之间的数据调动是由硬件自动完成的, 主存与辅存之间的数据调动是硬件和操作系统共同完成的。

3.1.2 译码驱动方式

线选法:

        特点: 一根字选择线直接连接一个存储单元, 只适用容量不大的存储芯片

行列译码器:

        特点: 对比线选法, 可以减少地址线, 如32*32根地址线可以连接1024个存储单元。

3/8 译码器:

对比图:

芯片引脚题注意事项:

        1) 数据线

        2) 地址线, DRAM采用地址复用技术, 地址线减半。

        3) 读写控制线1根 或 2根

        4) 片选线1根 或 行通选和列通选共两根(复用技术, DRAM采用)

3.1.3 随机存储器与只读存储器

        静态RAM: 基于触发器工作原理存储信息, 电源掉电时, 原存信息丢失, 属易失性存储器

        动态RAM: 基于电容存储电荷的原理来寄存信息。若电容上存有足够多的电荷表示 "1''; 电容上无电荷表示存 "0" 属易失性存储器。电容上的电荷一般只能维持1-2ms, 因此必须在2ms内对所有存储单元恢复一次原状态, 即刷新。

静态RAM与动态RAM的比较:

只读存储器: 

        掩模ROM: 不可重写

        PROM: 可以实现一次性编程的只读存储器, 依靠熔丝断和未断来区别所存信息是 "0" 或 "1" 。

        EPROM: 一种可擦除可编程只读存储器。可进行多次重写

        Flash Memory: 闪速存储器, 如U盘, 看进行多次快速擦除重写, 但写比读慢

        SSD: 固态硬盘, 集成度高, 功耗低, 价格贵

3.1.4 动态RAM刷新

        刷新的过程实质上是将原存信息先读出, 再由刷新放大器形成原信息重新写入的过程。一般取2ms为刷新周期或称再生周期。通常有三种方式刷新: 集中刷新分散刷新异步刷新

1) 集中刷新

        集中刷新是在规定的一个刷新周期内, 对全部存储单元集中一段时间逐行进行刷新, 刷新过程必须停止读/写操作。不能进行读/写操作的这段时间称为访存 "死区"

集中刷新时间分配示意图:

2) 分散刷新

        分散刷新是指对每行存储单元的刷新分散到每个存取周期内完成, 存取周期分读/写周期+刷新周期。这样不存在 "死区" , 但存取周期变长, 系统速度下降。

分散刷新时间分配示意图:

3) 异步刷新

        异步刷新是前两种方式的结合, 既可以缩短 "死区" , 又充分利用最大刷新间隔2ms的特点。

异步刷新时间分配示意图:

3.2 存储器与CPU的连接

        将若干存储芯片连在一起组成足够容量的存储器, 称为存储容量的扩展, 通常有位扩展字扩展

3.2.1 位扩展

        增加存储字长。

示意图:

3.2.2 字扩展

        增加存储器字的数量。

示意图:

3.2.2 字、位扩展

        既增加存储字的数量, 又增加存储字长。

示意图:

3.3 提高访存速度的措施

3.3.1 单体多字系统 

        根据程序和数据在存储体内是连续存放的, 因此CPU也是连续访存取出信息的。通过增大存储器的带宽, 在一个周期内, 从同一地址取出多条指令, 可以提高系统速度。但遇到转移指令, 或操作数不能连续存放, 则效果不明显。

原理图:

3.3.2 多体并行系统

        采用多体模块组成的存储器。每个模块都有独立的读写控制电路等, 可并行工作。

高位交叉, 顺序编址示意图:

低位交叉编址的四体存储器: 

3.4 高速缓冲存储器

        基于程序的局部性原理, 提高系统效率。

3.4.1 Cache的工作原理

Cache - 主存存储空间的基本结构图:

Cache的基本结构原理图:

3.2.2 直接映射

       主存在Cache的位置=主存块号%Cache总快数。先根据行号找到对应Cache行, 而后比较标记位。缺点是不够灵活, 每个主存块只能固定某个对应的缓存块, 使缓存的存储空间得不到充分利用。

示意图:

直接映射的地址结构:

3.2.3 全相联映射

        全相联映射允许主存中的每一字块映射到Cache中的任何一块位置上, 方式灵活, 但标记位数增多, 且访问Cache时主存字块标记需要和Cache的全部标记位进行比较

示意图: 

3.2.4 组相联映射

        组相联映射是对直接映射和全相联映射的一种折中。所属分组=主存块号%分组数。

示意图: 

组相联映射地址结构:

3.2.5 Cache的写策略: 

写命中时: 

        全写法写操作时数据既写入Cache又写入主存, 但增加了访存次数。

        回写法即写操作时只把数据写入Cache而不写入主存, 当Cache数据被替换出去时才写回主存。可设置一个脏位, 表示被修改过才需写回主存。多次写操作只需一次写入内存, 但增加了Cache的复杂性。

写不命中时:

        写分配法: 加载主存中的块到Cache中, 而后更新这个Cache块, 一般配合回写法。

        写非分配法只写入主存, 不进行调块。通常配合全写法使用 。

备注:

        多级Cache:  现代计算机中, 各级Cache之间使用写非分配法+全写法, Cache和主存中使用写回法+分配法。

        分离Cache结构: 分离指令Cache和数据Cache, 充分利用指令和数据的不同局部性来优化性能。减少指令流水线的冲突。

3.2.6 Cache替换算法

        1) 随机算法: 不需要算法位

        2) 先进先出算法: 不需要算法位

        3) 近期最少使用算法(LRU): 2路时有一位LRU位, 4路时用2位LRU位。新装入的行计数器置为0, 其余全+1; 命中时, 命中行清零, 比其低的计数器+1; 未命中时且无空闲行, 则淘汰最高的行。

        4) 最不经常使用算法:(LFU): 为每个Cache块设置一个计数器, Cache满后, 替换计数器值最小的。曾经被经常访问的主存块在未来不一定会用到, 实际运行效果不好。

        计算cache大小: 行数*(数据位+标记位+有效位+算法位(仅LRU有, 取组相联路数的对数)+脏位) 

3.5虚拟存储器(结合操作系统) 

原理图: 

第四章 输入输出系统

显示器相关参数:

        分辨率: 能表示的像素个数

        灰度级: 灰度级越多, 图像层次越清楚, 如8位(256级)

        刷新频率: 单位时间内扫描整个屏幕内容的次数

        显示存储器(VRAM): 存储容量由图像分辨率和灰度级决定

VRAM容量=分辨率 x 灰度级位数

VRAM带宽 = 分辨率 x 灰度级位数 x 帧数

4.1 I/O接口 (设备控制器)

        即I/O控制器, 是主机和外设之间的交接界面, 协调主机与外设之间的数据传输。

示例图:

I/O接口的功能:

        1) 进行地址译码和设备选择

        2) 实现主机和外设通信联络控制

        3) 实现数据缓冲

        4) 信号格式的转换

        5) 传送控制命令和状态信息

 I/O接口图:

        端口: 接口电路中可以进行读写的存储器, 若干端口加上相应的控制逻辑才可以组成接口

接口与端口区别图:

4.2 中断系统

        中断请求: 中断系统需对每个中断源设置中断请求标记触发器INTR, 当状态为"1"时, 表示中断源有请求。通过INTR线发出的是可屏蔽中断, 通过NMI线发出的是不可屏蔽中断。

示例图:

        中断响应判优: 通常通过硬件排队器实现, 响应优先级在硬件线路上是固定的, 处理优先级可以利用中断屏蔽技术动态调整。具体优先级如下:

        1) 不可屏蔽中断 > 内部异常 > 可屏蔽中断

        2) 内部异常中, 在关中断模式下也会被响应。硬件故障 > 软件中断

        3) DMA中断请求 > I/O设备传送的中断请求

        4) I/O 传送类中断里, 高数设备 > 低速设备

        5) 输入设备 > 输出设备, 实时设备 > 普通设备

示例图:

中断屏蔽技术 (优先级: D>A>C>B) 图:

        中断响应: 由硬件直接实现, 称为中断隐指令, 并不是一条具体的指令, 本质是硬件一系列自动操作, 操作如下:

        1) 关中断

        2) 保存断点: 如PC, PSW的内容。(保存到栈中), 异常的断点是当前指令的地址, 中断的断点是下一条指令的地址。

        3) 引出中断服务程序: 识别中断源, 将对应服务程序入口地址送入程序计数器PC中。有硬件向量法和软件查询法。

硬件向量法示意图:

中断服务程序处理过程:

        1) 保护现场和屏蔽字: 保存通用寄存器和状态寄存器的内容。(保存到堆中)

        2) 开中断(可多重中断)

        3) 执行中断服务程序

        4) 关中断(可多重中断)

        5) 恢复现场和屏蔽字

        6) 开中断, 中断返回: 中断服务程序的最后一条指令通常是一条中断返回指令。

示意图:

中断响应条件:

        1) 中断源有中断请求

        2) CPU允许中断, 即开中断 (异常和不可屏蔽中断不受此限制)

        3) 对于外中断, CPU在每条指令执行阶段结束前向接口发出中断查询信号。 (异常不受此限制)

中断与异常:

        中断: 来自CPU外部, 与CPU执行指令无关的事件引起的中断。分为可屏蔽中断与不可屏蔽中断。中断不和任何指令相关联, 异常与指令相关。

        异常: 分为硬件故障和程序性异常, 程序性异常也称软件中断, 可分为故障, 自陷, 终止。

                1) 故障: 执行结束前被检测到的异常事件

                2) 自陷: 预先安排的一种 "异常" 事件, 故障与自陷属于软件中断。

                3) 终止: 发生了使计算机无法继续执行的硬件故障, 如控制器出错, 存储器校验错。终止与外中断属于硬件中断

广义的中断类型:

        中断响应时间: 一条指令执行结束。

4.3 DMA方式

        直接存储器(Direct Memory Access, DMA) 技术使I/O设备与主存之间有一条直接数据通路, 可以直接与主存交换信息。实现了CPU和I/O设备并行工作, 但CPU要响应中断请求, 还不能真正做到并行工作。

 DMA控制器图:

DMA传送图:

DMA接口基本组成原理图:

        AR: 主存地址寄存器, 用于存放主存中需要交换数据的首地址, 每交换一次数据, AR+1

        WC: 字计数器, 记录传送数据的总字数, 通常使用补码形式, 计数器为0时, 表示数据传送完成。

        BR: 数据缓存寄存器, 用于暂存每次传送的数据。

        DAR: 设备地址寄存器, 存放I/O设备的设备码或表示设备信息存储区的寻址信息。如磁盘数据所在的区号、盘面号和柱面号。

        DREQ: I/O设备向DMA接口提出申请。

        HRQ: 向CPU发出总线使用权的请求信号。

        HLDA: CPU发出的响应信号。

        DACK: 通知I/O设备。

DMA方式与程序中断方式的比较:

DMA方式程序中断方式
传输方式靠硬件传送由程序来传送
保护现场不需要中断现行程序需要保护现场
响应指令周期内任意存储周期结束时响应指令执行结束才响应
软硬件仅靠硬件控制传输数据软硬结合
优先级DMA方式 高于 中断方式

4.3.1 DMA的传送方式 

        1) 停止CPU访问主存: 由DMA接口向CPU发一个停止信号, 让出总线使用权。这种方式控制简单, 缺点是CPU基本处于不工作状态或保持原状态。

示意图:

        2) 周期挪用: DMA与CPU同时访问主存时, CPU总是将总线占有权让给DMA (I/O不立即访问主存可以丢失数据) , 一般为一个存取周期,  DMA的这种占有成为周期挪用周期窃取。每挪用一个主存周期都需要申请、建立和归还总线控制权。

示意图:

        3) DMA与CPU交替访问: 适用于CPU的工作周期比主存存取周期长的情况 (如: CPU工作周期是1.2us, 主存周期小于0.6us) 。 这种情况不需要总线使用权的申请、建立和归还。

示意图:

4.4.5 DMA接口的连接方式***

        主要有以下两种, 与总线判优类似。

        具有公共请求线的DMA: 若干个DMA接口通过一条公用的DMA请求线先CPU申请总线控制权, 采用链式查询, 最前面的DMA优先级最高。  

示意图:

        独立的DMA: 每个DMA接口个有一对DMA请求线和响应线, 由CPU的优先级判别机构裁决响应。

示意图:

4.4.6 DMA接口类型***

        选择性DMA接口: 物理上连接多个I/O设备, 逻辑上只允许连接一个设备, 适用于数据传输率很高的设备

逻辑框图:

        多路型DMA接口: 物理上可以连接多个设备, 逻辑上也运行多个设备同时工作, 每个与DMA连接的I/O设备都有一套寄存器存放各自参数, 各个I/O设备采用字节交叉的方式与DMA接口进行数据传送,适用于同时为多个数据传输率低的I/O设备服务

逻辑框图:

第五章 数据的表示和运算

5.1 计算机中的数值

        有符号数与无符号数 (即没有符号的数) 不同, 区分正负;最高位用"0"表示正, "1" 表示负号。 

        机器数: 把符号"数字化"的数称为机器数。

        真值: 带 "+" 或 "-" 符号的数称为真值。

        原码: 符号位"0"表示正数, "1"表示负数。数值位即真值的绝对值。 

        反码: 通常用来作为原码求补码, 或补码求原码的中间过渡。正数反码是其正数本身。

        补码: 可以将减法操作化作加法操作。正数的补码是其本身, 负数的补码可以看作对其原码除符号位外, 每位求反, 末位加1。特别地, [x]补 经过符号位和数值位按位取反+1 得到[-x]补。

        移码: 针对补码无法直接比较大小而引出的一种表示法, 即对补码加上一个2^{n} , 即将最高位符号位取反。 

        除0: 故障

各类机器数真值范围图:

移码与补码对照图:

备注: 

        1) 十进制小数不一定都能用二进制表示。

        2) 原码, 反码的表示在数轴上对称, 存在+0和-0;而补码, 移码的0是唯一的。

        3) 移码和补码的符号位相反, 数值位相同

        4) 负数的补码中, 数值部分越大, 真值越大(更靠近0), 多表示一个最小负数

        5) 移码保持数据原有大小顺序, 移码大则真值大

大小端存储方式:

边界对齐存储方式:

        边界对齐特点: 浪费了一些存储空间, 但提高指令和取数的速度。

        边界不对齐特点: 可以充分利用存储空间, 但可能需要多次访存, 影响了指令执行效率。

原理图:

5.2 定点数的运算

    在计算机中, 小数点不用专门的器件表示, 而是按约定的方式标出, 即定点表示法浮点表示法

        定点表示法: 小数点位于数符和第一数值之间时, 机器内的数为纯小数; 当小数点位于数值位之后时, 机器内的数为纯整数

定点数示意图:

 5.2.1 移位运算

        通过移位运算与加减法运算可实现乘除运算。

算术移位规则:

5.2.2 加减法运算

        现代计算机中都采用补码做加减法运算。符号位一起参与运算。

基本公式:

溢出判断: 

方法一示意图:

         方法二: 采用一位符号位, 根据数据位进位C1与符号位进Cs位异或判断, 不同为溢出 

示意图: 

        方法三: 采用双符号位, 符号位不同为溢出。(模4补码, 更容易检查加减法溢出问题)

5.2.3 乘法运算

原码乘法步骤:

        1) 符号位与数值位分开求, 符号位采用异或

        1) 由乘数末位值确定被乘数是否与原部分积相加, 然后右移一位, 形成新的部分积, 同时乘数也右移一位, 空出最高位放部分积的最低位。重复n次

示例图:

补码乘法示例图: 符号位参与运算, 进行n+1累加, n次右移    

5.2.4 除法运算

        恢复余数法: 相减后, 当余数为负时, 需要加上除数, 将其恢复成原来的余数。

原码恢复余数法示例图:

        加减交替法: 可以认为是恢复余数法的一种改进算法。设余数为R, 除数为y, 则:

                1) R>0时, 上商"1", 再2R-y;

                2) R<0时, 上商"0", 先R+y, 再左移一位-y, 即2(R+y)-y=2R+y。

                3) 商符由两个操作数的符号异或而得, 第n+1步余数为负时, 需要加上|y|得到正确余数

原码加减交替法示意图:

补码除法原理图:

原码除法与补码除法对比图:

5.3 浮点数的运算

        浮点表示: 小数点位置可以浮动的数。位数相同时,表示数值的范围比定点数大。将尾数最高位为1的浮点数称为规格化数, 此时精度最高。尾数是小数, 其位数n反映了浮点数的精度。

浮点数形式示意图:

规格化: 

        原码表示的尾数规格化: 尾数最高位数值必须是1

        补码表示的尾数规格化: 尾数最高数值位必须和尾数符号位相反

IEEE 754 标准:

最大最小值的绝对值:

全0全1阶码情况:

        全0阶码全0尾数: 正负零(机器零), 符号取决数符

        全1阶码全0尾数: 正负无穷

浮点数加减运算步骤:

        1) 对阶: 小阶向大阶看齐

        2) 尾数加减

        3) 规格化

        4) 舍入 (最简单的是处理方法是 截断法)

        5) 判断溢出: 阶码溢出才算溢出

C语言中的类型转化:

        int 转化 float : 可能会精度缺失

        float转化int: 可能会溢出或精度缺失

5.4 算术逻辑单元

逻辑门电路图:

一位全加器:

并行进位加法器: 

带标志的加法器:

        OF: 有符号数的加减运算是否发生了溢出, OF=1时, 说明有溢出。(次高进位异或最高位的进位) 

        SF: 有符号数加减运算结果的正负性。SF=0时表示运算结果为正 (最高位生成)

        ZF: 加减运算结果是否为0, ZF=1表示运算结果为0 

        CF: 无符号数加减法运算是否发生了溢出, CF=1时说明发生了溢出 (Sub异或Cout)

多路选择器:  有k个输入, 控制信号的位数   m\geq \left \lceil log_{2}^{k} \right \rceil bit

三态门图:

 ALU框图:

        补码加减运算部件: Sub控制端为1时表示做减法, 实现 X+Y(取反)+1 = [X]补+[-Y]补

第六章 指令系统

6.1 机器指令

        机器语言由一条条语句构成, 习惯把每一条机器语言的语句称为机器指令, 将全部的机器指令的集合称为机器的指令系统

        80-20规律: 典型程序中80%的语句仅仅使用处理机中的20%的指令, 这些指令都属于简单指令。
        RISC: 精简指令系统计算机 (Reduced Instruction Set Computer), 指令按边界对齐。

        CISC: 复杂指令系统计算机 (Complex Instruction Set Computer), 大多能实现软件兼容, 即高档机包含了低档机的全部指令。

RISC与CISC比较图:

        指令集体系结构(ISA): 包括指令格式, 数据类型及格式, 操作数的存放方式, 程序可访问的寄存器个数, 位数和编号, 存储空间大小和编址方式, 寻址方式, 指令执行过程的控制方式等。 

 指令的一般格式图:

按地址码数目分类: 

        四地址指令:该指令完成(A1)OP(A2) -->A3的操作, 4个地址各占6位, 直接寻址范围为2^{6}=64。共需访问4次存储器(取指令一次, 取两个操作数两次, 存放结果一次)。

        三地址指令: 该指令完成(A1)OP(A2)-->A3的操作, 程序中大多数指令是按顺序执行的, 后续指令的地址隐含在程序计数器PC中。3个地址字段各占8位, 寻址范围为2^{8}=256, 需要访问4次存储器。

        二地址指令: 该指令完成(A1)OP(A2)-->A1 的操作, A1即代表原操作数, 也代表存放本次运算的结果地址。共需要4次访问存储器; 若为(A1)OP(A2)-->ACC, 只需要两次访存。直接寻址范围为2^{12}=4K。

        一地址指令: 可完成(ACC)OP(A1)-->ACC的操作, 只需两次访存, 直接寻址范围为2^{24}=16M。

        零地址指令: 无地址码部分, 如空操作, 停机, 中断返回等指令, 或是操作数的地址隐含在堆栈指针SP中。

示意图:

按操作码长度分类:

        1) 定长操作码: 适用于字长较长的计算机以及RISC, 指令译码时间短。

        2) 不定长操作码: 在字长较短的微型计算机中广泛使用, 会增加指令译码和分析的难度。

不定长操作码图:

操作类型:

        1) 数据传送: 寄存器与存储单元, 存储单元与存储单元,, 寄存器与存储单元,之间的传送。

        2) 算术逻辑操作: 算术运算(加,减,乘,除等)与逻辑运算(与,或,非,异或等)。

        3) 移位: 左移, 右移。

        4) 转移: 无条件转移, 条件转移, 调用与返回, 陷阱与陷阱指令。

        5) 输入输出:与I/O设备交互。

        6) 其他: 停机指令, 开中断指令等。

6.2 指令的寻址方式

6.2.1 指令寻址

        分为顺序寻址与跳跃寻址, 顺序寻址可以通过PC自动加"1个指令字长", 形成下一条指令的地址; 跳跃寻址通过转移类指令实现。

指令寻址方式示意图:

6.2.2 数据寻址

   数据寻址方式种类多, 在指令中需设一字段表明是哪一种寻址方式。

一地址指令的格式图:

        1) 立即寻址: 操作数本身设在指令字内, 即形式地址就是数据本身, 数据采用补码形式存放。

        2) 直接寻址: 指令字中的形式地址A就是操作数的真实地址。

        3) 隐含寻址: 不明显给出操作数的地址, 操作数的地址隐含在操作码或某个寄存器中。

        4) 间接寻址: 形式地址是操作数的有效地址所在的存储单元地址。与直接寻址相比, 扩大了操作数的寻址范围, 但多次间接寻址时, 可用存储字首位来标记是否还需要继续访存寻址。

        5) 寄存器寻址: 地址码字段直接给出了寄存器的编号, 无需访存, 减少执行时间。

        6) 寄存器间接寻址: 比间接寻址少访存一次。

        7) 基址寻址: 需要设有寄存器BR, 可以扩大操作数的寻址范围。面向操作系统, 有利于多道程序设计, 便于编制浮动程序, 可由用户指定具体寄存器为基址寄存器。

        8) 变址寻址: 与基址寻址极为相似, 面向用户, 有效地址等于指令字的形式地址+变址寄存器IX, 处理数组问题时, 只需改变寄存器IX内容, 无需多条指令, 适合编制循环程序

        9) 相对寻址: 有效地址是程序计数器PC+形式地址。 位移量可正可负, 由补码表示, 便于程序浮动, 广泛用于转移指令

        10) 堆栈寻址: 要求计算机中设有堆栈, 操作数只能从栈顶中存或取, 堆栈寻址可视为一种隐含寻址, 操作数的地址总是被隐含在SP指针中。硬堆栈不访存, 软堆栈访存1次。

对比图:

6.3 程序的机器级代码表示

x86架构CPU中的寄存器图:

AT&T格式与Inter格式对比图:

算术运算指令:

逻辑运算指令:

选择语句的机器级表示:

循环语句的机器级表示:

loop指令实现循环: 

函数调用的机器级表示:

函数调用时:

函数返回时:

函数的传参与函数的局部变量:

函数的返回值: 

        push xxx : 先让esp减4, 在将xxx压入栈中

        pop xxx: 将栈顶元素出栈写入xxx中, 在让esp加4 

第七章 中央处理器

7.1 指令周期

        CPU从主存中每取出并执行一条指令所需的全部时间。 指令周期的不同阶段区分二进制数是指令还是数据。

        机器周期: 即CPU周期, 一个机器周期包含若干时钟周期, 一般为访存时间

        时钟周期: 也称节拍, T周期, CPU时钟周期, CPU操作的基本单位

        存取周期: 存储器进行连续两次独立的存储器操作所需最小间隔时间

各周期关系示意图:

不同指令的指令周期:

 指令流程图:

取指周期数据流:

间址周期数据流:

中断周期数据流:

指令执行方案:

        单指令周期: 对所有指令选用相同的执行时间来完成, 指令之间串行执行

        多指令周期: 对不同类型指令选用不同个数的时钟周期, 指令之间串行执行

        流水线方案

7.2 CPU的功能及结构

CPU功能:

        1) 指令控制

        2) 操作控制

        3) 时间控制

        4) 数据加工

        5) 中断处理

控制器的基本功能:

        1) 取指令

        2) 分析指令

        3) 执行指令

运算器:

        1) 算术逻辑单元

        2) 暂存寄存器

        3) 累加寄存器

        4) 通用寄存器

        5) 程序状态字寄存器

        6) 移位器

        7) 计数器

控制器:

        1) 程序计数器

        2) 指令寄存器

        3) 指令译码器

        4) 存储器地址寄存器

        5) 存储器数据寄存器

        6) 时序系统

        7) 微操作信号发生器

CPU基本结构图:

7.2.1 通路数据

        1) CPU内部单总线方式: ALU需要配合暂存器使用

示意图:

        2) CPU内部多总线方式: 同时在多个总线上传送不同的数据

        3) 专用数据通路方式: 性能较高, 但硬件量大

示意图:

7.2.2 多处理器

        单指令流单数据流(SISD)结构: 一个处理器和一个存储器, 一段时间内仅执行一条指令, 可采用指令流水线方式, 多模块交叉方式组织存储器

示意图:

        单指令流多数据流(SIMD)结构: 通常由一个指令控制部件, 多个处理单元组成, 一个指令流同时对多个数据进行处理, 称为数据级并行技术, 使用for循环最有效, case或switch语句效率最低。向量处理器是SIMD的变体。

示意图:

向量处理器:

        多指令流单数据流(MISD)结构: 实际不存在

        多指令流多数据流(MIMD)结构: 指同时执行多条指令分别处理多个不同数据, 分为多计算机系统和共享式存储多处理器(SMP)系统。

多计算机系统示意图:

多核处理器示意图:

硬件多线程的三种实现方式:

        多核处理器: 将多个处理单元集成到单个CPU, 每个处理单元称为一个核。属于共享内存的对称多处理器。

        共享内存多处理器(SMP): 多个处理器共享单一的地址空间。分为UMA和NUMA两种类型。

        统一存储访问UMA多处理器: 处理器对所有存储单元的访问时间是大致相同的

        非统一存储访问NUMA多处理器: 某些访存请求比其他的快

7.3 控制器

7.3.1 硬布线控制器 (组合逻辑设计)

CU的输入信号来源图: 

        备注: 控制单元还要接收来自系统总线(控制总线)的控制信号, 如中断请求, DMA请求

        FE: 取值周期 (标志触发器)

        IND: 间址周期

        EX: 执行周期

        INT: 中断周期

硬布线控制单元设计步骤:

        1) 列出微操作命令的操作时间表

如取值周期示意图:

        2) 进行微操作信号综合

如汇总M(MAR) --> MDR 的操作时间表:

        3) 画出微操作命令的逻辑图

如M(MAR) --> MDR命令的逻辑图:

7.3.2 微程序控制器

        将一条机器指令编写成一个微程序, 每一个微程序包含若干条微指令, 每一条微指令对应一个或几个微操作命令。然后把这些微程序存到一个控制存储器中。

微指令格式:

        水平型微指令: 一条微指令能定义多个可并行的微命令; 微程序短, 执行速度快; 缺点是微指令长, 造成控存容量极大。

        垂直型微指令: 一条微指令只能定义一个微命令; 微指令短, 简单, 规整, 便于编写微程序;  缺点是微程序长, 执行速度慢, 效率低。

        混合型微指令: 在垂直型的基础上增加一些不太复杂的并行操作。

微指令格式图:

        微周期: 执行一条微指令所需的时间, 通常为一个时钟周期

微程序控制单元的基本框图:

        CMDR: 微指令寄存器, 又称uIR, 存放微指令

        CMAR: 微地址寄存器, 又称uPC, 存放微指令地址

        CM: 控制存储器

工作过程:

        1) 取指令: 取指微程序入口地址一般为CM的0号单元, 为公共操作, 机器开始运行时, 自动将取指微程序入口地址送入CMAR。

        2) 译指: 由机器指令的操作码字段通过微地址形成部件产生该机器指令所对应的微程序入口地址, 并送入CMAR。

        3) 从CM中逐条取出对应的微指令并执行

        4) 执行完对应一条机器指令的一个微程序后, 回到取指微程序的入口地址, 重复 (1)。

微指令的编码方式:

        1) 直接编码: 每一位代表一个微操作命令。

直接编码方式图:

        2) 字段直接编码方式: 将微指令的操作控制字段分成若干段, 将一组互斥的微操作命令存放在一个字段内(字段位数要考虑留出一个状态表示不操作)。执行速度稍微减慢。

字段直接编码图:

        3) 字段间接编码: 又称隐式编码, 可进一步缩短微指令字长, 但削弱了微指令并行控制能力, 故通常作为字段直接编码方式的一种辅助手段。

示意图:

微指令序列地址的形成

        1) 直接由微指令的下地址字段指出

        2) 根据机器指令的操作码形成

        3) 增量计数器: 即(CMAR) --> CMAR

        4) 根据各种标志决定微指令分支转移的地址

        5) 由硬件产生微程序入口地址: 响应中断时

        6) 通过测试网络

后续微指令地址形成方式的原理图:

        断定法:  微指令格式中设置一个下地址字段, 由微指令下地址字段直接指出后继微指令地址。

微程序控制单元的设计步骤:

        1) 写出对应机器指令的微操作命令及节拍安排

如取指周期的微操作命令及节拍安排示意图:

        2) 确定微指令格式: 确定微指令的编码方式, 以确定微指令的操作控制字段位数, 根据CM中存的微指令总数, 确定微指令的顺序控制字段的位数, 最后可确定微指令字长。

        3) 编写微指令码点: 根据操作字段每一位代表的微操作命令, 编写每一条微指令的码点。

7.4 指令流水线

        类似与工厂的流水线。

指令的串行执行:

指令的二级流水:

指令的六级流水:

五段式指令流水线图:

7.4.1流水线性能指标

        1) 吞吐率: 指单位时间内流水线所完成的任务数量, 或是输出结果的数量。

理想的流水线时空图:

        2) 加速比: 同样的任务量, 不使用流水线与使用流水线所用的时间之比

理想状态下的流水线图: 

         3) 效率: 流水线的设备利用率, 完成n个任务占用的时空区有效面积与总面积之比

示意图:

7.4.2 影响流水线性能的因素

        1) 结构相关: 不同指令争用同一功能部件产生资源冲突, 如访存冲突 (互斥)。

        解决方法:

                1) 后一相关暂停一周期;

                2) 资源重复配置

        2) 数据相关: 读写先后顺序不同, 影响计算结果 (同步)。

        解决方法:

                1) 通过硬件阻塞(stall)或软件插入"NOP" 来延后冲突的相关指令的执行;

                2) 数据旁路技术: 直接把前一条指令的ALU计算结果作为自己的输入数据

                3) 编译优化: 调整指令顺序

        3) 控制相关: 由转移指令引起, 使流水线的连续流动被破坏 。

        解决方法:

                1) 静态预测: 总是预测条件不满足

                2) 动态预测: 根据程序执行的历史情况, 进行动态预测调整, 准确率较高

                3) 预取转移成功和不成功两个控制流方向的目标指令

                4) 加快和提前形成条件码

7.4.3 流水线中的多发技术

        超标量技术: 指在每个时钟周期内可同时并发多条独立指令, 即以并行操作方式将两条或两条以上指令编译执行。需要配置多个功能部件

超标量流水图:

        超流水线技术:  将一些流水寄存器插入流水线段中, 好比流水线再分段。通过提高主频方式

超流水线图:

        超长指令字技术: 由编译程序挖掘指令间潜在的并行性, 将多条能并行操作的指令组成一条具有多个操作码字段的超长指令字。需要多个处理部件

超长指令字图:

7.5 控制方式

        控制不同微操作序列所采用的时序控制方式称为 CU 的控制方式。

7.5.1 同步控制方式

         任何一条指令或微操作的执行都是事先确定的, 并且受统一基准时标的时序信号所控制的方式。

        1) 采用定长的机器周期: 一律以最长的微操作序列和最繁的微操作作为标准, 会造成时间上的浪费。

        2) 采用不定长的机器周期: 把大多数微操作安排在一个较短的机器周期内完成, 对于复杂微操作, 采用延长机器周期或增加节拍的办法来解决 

延长机器周期示意图:

        3) 采用中央控制和局部控制相结合的方法: 将机器的大部分指令安排在统一的, 较短的机器周期内完成, 称为中央控制, 将少数操作复杂的指令中的某些操作 (如: 乘除法和浮点运算) 采用局部控制方式来完成。

示意图:

7.5.2 异步控制方式

        不存在基准时标信号, 没有固定的周期节拍和严格的时钟同步, 由专门的应答线路控制, 即执行部件完成操作后发回 "回答" 信号,再开始新的微操作, 需要采用各种应答电路, 较同步控制方式复杂。

7.5.3 联合控制方式

        同步控制和异步控制相结合, 对各种不同指令的微操作实行大部分统一, 小部分区别对待的办法。

7.5.4 人工控制方式

        为了调机和软件开发的需要, 在机器面板或内部设置一些开关或按键, 来达到人工控制的目的。

注: 以上部分图片来源王道计算机组成原理教材 

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐