计算机组成原理之期末复习

道心破碎了,怎么还考硬件电路啊,还有一堆基础概念和名词复习点基本完全偏了✋😭✋✋😭✋✋

祝明天的自己好运🙏

开始补天。仅挑选重点部分。

虽然是重点部分,但也写了 1.2w 字左右,不过看了下之前每章整理的笔记,加起来有 2w 字左右,压缩比有 50% 左右(笑)。

很喜欢 zf 老师的一句话:

“我到现在也没有看到过试卷,所以我讲的不一定是重点,我没讲的不一定不是重点”。

第一章 计算机概述

1.1 冯•诺依曼机

  1. 采用“存储程序”的工作方式。
  2. 计算机硬件系统由运算器、存储器、控制器、输入设备和输出设备 5 大部件组成;
  3. 指令和数据以同等地位存储在存储器中,形式上没有区别,但计算机应能区分它们。
  4. 指令和数据均用二进制代码表示。
  5. 指令由操作码和地址码组成,操作码指出操作的类型,地址码指出操作数的地址。

“存储程序”的基本思想是:将事先编制好的程序和原始数据送入主存储器后才能执行,一旦程序被启动执行,就无须操作人员的干预,计算机会自动逐条执行指令,直至程序执行结束。

基本工作方式:控制流驱动方式
基本特点:按地址访问并顺序执行指令;

1.2 计算机性能指标

1.2.1 什么是机器字长?

机器字长,简称字长,是指计算机进行一次整数运算(即定点整数运算)所能处理的二进制数据的位数。字长一般等于通用寄存器的位数ALU 的宽度,字长越长,数的表
示范围越大,计算精度越高。

1.2.2 什么是数据通路带宽?

数据通路带宽是指数据总线一次所能并行传送信息的位数。

1.2.3 主存容量

略。

1.2.4 运算速度

  1. 主频/时钟周期:CPU的工作节拍受主时钟控制,主时钟的频率称为 CPU 的主频,单位是 MHz(10610^6)、GHz(10910^9);主频的倒数称为 CPU 时钟周期;
  2. 吞吐量:单位时间内能够完成的任务数,也称为带宽;
  3. 利用率:在给定的时间间隔内系统被实际使用的时间所占的比率,用百分比表示;
  4. 响应时间:计算机完成某任务的总时间,包括硬盘访问、内存访问、I/O活动、操作系统开销和 CPU 执行时间。也称为执行时间;
  5. CPU 执行时间:特指执行某一任务在CPU上花的时间,又分为用户CPU时间(程序执行时花费的CPU时间)和系统CPU时间(为执行程序而花费在操作系统上的时间);
  6. CPI(Clock Cycles Per Instruction):单条指令需要花费的CPU时钟周期数,事实上是平均数,即 CPI = 程序执行所需的CPU时钟周期总数 / 程序的指令总数;
  7. CPU 性能公式: 程序的CPU执行时间 = 程序的指令数 ×\times CPI ×\times 时钟周期长度;
  8. MIPS 每秒百万指令数:MIPS = 指令总数 / 程序执行时间 ×106\times 10^{-6}
  9. MFLOPS:每秒百万次浮点操作次;
  10. TFLOPS:每秒万亿次浮点操作次;

需要记忆的主要是主频和时钟周期,以及 CPI、CPU 执行时间和每秒指令数的计算。

第二章 运算方法和运算器

运算器部分设计一些数字电路相关的内容,应该并非重点。这章比较重要的是数据表示。

2.1 定点数

2.1.1 原码

很简单,符号位正数为 0 负数为 1 ,e.g. 假设以下字长均为 8 位:

  • +0110 \rightarrow 0 000 0110-0110 \rightarrow 1 000 0110

对于字长为 nn ,用原码表示,范围是 (2n11)2n11-(2^{n - 1} - 1)\sim 2^{n-1}-1 ,关于原点对称,但其表示 0 时有 2 种表示方式,并不好。

2.1.2 补码

正数不变,负数 + 2n2^n (n 位补码),其实就是模 2n2^n ,e.g. 假设以下字长均为 8 位:

  • +1010 \rightarrow 0000 1010-1101 \rightarrow 1111 0011

在二进制上的操作事实上就是除符号位以外,按位取反再加 1 。对于负数,原码转补码,补码转原码都是如此。

对于字长为 nn ,用补码表示,范围是 (2n1)2n11-(2^{n - 1})\sim 2^{n-1}-1

2.1.3 反码

正数不变,负数除符号位各位取反。同样存在 0 对表示不唯一的问题。

2.1.4 移码

对于字长为 nn ,移码就是真值 + 2n12^{n-1} ,二进制表示时,与补码仅差符号位

2.2 运算器

仅提一下标志寄存器,SF 和 ZF 都没啥问题,主要是 CF 和 OF 。

OF :溢出标志,用于判断有符号数运算是否溢出,简单来说就是若参与运算的两数符号位相同但与运算结果符号位不同,那么 OF = 1 ;

CF: 进位/借位标志,用于判断无符号数运算时是否溢出,一种较为简单的方式是,都转成减法进行操作,如果是小 - 大,则 CF = 1 ;

2.3 溢出判断

  • 变形补码;
  • 单符号位法:CfC0C_f \oplus C_0 ,其中 CfC_f 为符号位产生的进位, C0C_0 为最高数值位产生的进位;

2.5 原码乘法

两个 nn 位无符号数相乘,共需 nn 次加法和 nn 次移位操作。

2.6 原码除法

主要操作就是加减交替法,先减,如果结果小于 0 则商 0 左移加 Y ,如果结果大于 0 则商 1 左移减 Y 。

2.4 浮点数

浮点数表示为:

N=(1)S×M×REN = (-1)^S \times M \times R^E

  • SS 表示符号;
  • MM 表示尾数,是一个定点小数,反应浮点数的精度;一般用原码表示;
  • EE 表示阶码/指数,是一个整数,反应浮点数的表示范围
  • RR 表示基数,一般为 2,8,16 ;

2.4.1 规格化

规格化数要求:

1RM<1\frac{1}{R} \le |M| < 1

即保证尾数最高数值位是一个有效值,对于 R=2R = 2 时,有:

可以发现,对于正数,其规格化形式尾数最高有效位均为 1

注意负数采用补码表示,其规格化范围是 1M<12-1 \le M < -\frac{1}{2} ,特例是 12-\frac{1}{2}

如果并未指明使用 IEEE 754 标准,题目一般会告诉你尾数/阶码采用什么形式表示。

2.4.2 IEEE 754 标准

  • 阶码,用移码表示,注意对于 nn 位阶码偏置值为 2n112^{n - 1} - 1 ,即:
    • 单精度:二进制表示 = 实际值 + 127 ;
    • 双精度:二进制表示 = 实际值 + 1023 ;
    • 同样,从二进制表示写出实际值,则为减法;
    • 注意对于非规格化数,阶码二进制表示 = 1 - Bias(并非实际值 0 ,因为需要保证平滑过渡);
  • 尾数,用原码表示,注意 IEEE 754 标准下,标准化的定义为尾数的整数部分恒为 1 ,即 1.xxxxx 这种形式,所以忽略整数部分的 1 不存储它,所以 IEEE 754 标准下:
    • 规格化数表示:实际尾数=1.Frac实际尾数 = 1.Frac
    • 非规格化数表示:实际尾数=Frac实际尾数 = Frac

需要注意,在计算最大可表示的浮点数范围时,阶码的全 0 和全 1 都用作特殊值保留,即阶码最大为 2n22^n - 2

对于非规格化数,阶码全为 0 。注意其阶码实际值计算时用 1 - Bias 即可。

2.4.3 浮点数加减法

  1. 对阶:
    1. 小阶向大阶看齐;
    2. 所以小阶的尾数部分需要进行右移操作,阶码增大;
  2. 尾数加减;
  3. 尾数规格化;(左规 or 右规)
  4. 舍入;(向偶数舍入)
  5. 溢出判断;(主要是指数部分,即阶码是否上溢);

对阶或右规格化时可能会发生舍入

2.4.4 浮点数乘除法

理论上来说并非重点,所以仅摆一张图。

第三章 存储系统

东西太多了。留到最后。

3.1 存储器分类

仅介绍常用的。

  • RAM 易失性半导体存储器
    • SRAM ;
    • DRAM ;
  • ROM 非易失性半导体存储器
    • MASK ROM(掩膜);
    • PROM(可编程);
    • EPROM(可擦除PROM)
      • 紫外线擦除;
      • 电擦除;
    • Flash Memory 闪存;

3.2 技术指标

  • 访问时间/存取时间TAT_A:从启动一次存储器操作到该操作完成所经历的时间,即从存储器接收到读/写命令到信息被读出或写入完成所需的时间;
  • 存取周期TmT_m:存储器在连续读写过程中,完成一次完整的读/写操作所需的全部时间,即 CPU 连续两次独立访问存储器的最小时间间隔

3.3 RAM

3.3.1 SRAM vs. DRAM

静态随机存储器(SRAM)的存储元是用六晶体管 MOS 来记忆信息的,静态是指即使信息被读出后,它仍保持其原状态而不需要再生(非破坏性读出)

DRAM 靠 MOS 管中栅极电容是否存储电荷来表示 0 和 1 。其需要的 MOS 管和 SRAM 相比更少,所以体积更小,集成度更高,但是,由于存在漏电,需要周期性对电容进行充电,防止内容丢失,我们称该过程为动态刷新。总的对比可参考下表:

对比项 SRAM DRAM
速度 (10ns 级) 慢(几十 ns)
集成度 高(适合大容量)
功耗 高(持续维持状态) 低(尽管需刷新,但每位电路简单)
成本
送地址 行列地址同时送 行列地址分两次送(分时复用)
破坏性读出 非破坏性(静态) 破坏性(动态)
刷新机制 无需刷新 需要定期刷新
结构复杂度 使用 6 个晶体管 使用 1 个晶体管 + 1 个电容
用途 高速缓存(Cache)、寄存器 主存(RAM)、显存等

3.3.2 DRAM 的刷新

DRAM 是按行刷新;行地址和列地址分别先后通过地址线送入地址锁存器,实现地址线的分时复用,RAS(行地址有效信号) 先与 CAS(列地址有效信号) 有效,即先送入行地址,再送入列地址

刷新方式进一步分为:

  • 集中式刷新:前一段时间进行读/写周期,后一段时间进行逐行刷新所有行;
    • 缺点:刷新时 CPU 无法访问主存;
  • 分布式刷新:每一行的刷新操作被均为分配到刷新周期内,e.g. 某 DRAM 有 1024 行,若刷新周期为 8ms,则必须在 8ms 内把所有 1024 行刷新一遍,即每隔 7.8μs 刷新一行;

其他部分应该不太重要,摆了,真来不及了。

3.4 存储器容量扩展



3.5 只读存储器 ROM

  • 掩膜 MASK ROM;
  • 一次可编程 PROM;
  • 多次可编程 EPROM(可擦除PROM):
    • 光擦除EPROM:利用雪崩注入,擦除是对所有存储单元进行,不能实现选择性擦除;
    • 电擦除EEPROM/E2^2PROM;
    • 电改写EAROM;
  • Flash Memory 闪存;
    • NAND 闪存:只允许顺序按页(Page)存取数据;
      • 优点:按页写入和读出擦除,写入和擦除速度快;
      • 缺点:随机访问困难,无法只写单字节;
    • NOR 闪存:具有完整地址/数据结构,能快速随机地读取任一单元;
      • 优点:随机访问,读出快;能只写单字节;
      • 缺点:写入和擦除速度慢;
  • 固态硬盘 SSD ;

3.6 多模块交叉存储器

3.6.1 特点

  • 地址码的高位字段确定存储字,低位字段选择模块;
  • 同一个模块内地址不连续;
  • 对连续字的成块传送可以实现流水线并行存取

3.6.2 有关计算

若模块字长 = 数据总线宽度,存储器的交叉模块数为 mm ,则有:

  • 交叉存取度 m=Tτm = \frac{T}{\tau}
  • 连续读出 mm 个字的用时为 t1=T+(m1)τt_1 = T + (m - 1)\tau
  • 对于顺序方式存储器,则需要 t2=mTt_2 = mT

(和流水线思路是一致的)

3.7 Cache

最大的一坨之一来了。

3.7.1 什么是局部性原理?

一个编写良好的程序倾向于一次又一次访问相同的数据项,或访问邻近的数据项集合。包括时间局部性空间局部性

3.7.2 Cache 特点

  • SRAM 组成;
  • 完全由硬件调度,对用户透明(不可见);
  • 小而快;

3.7.3 地址映射

v 路组相联比较重点。

  • 全相联映射:一个主存中的块和所有 Cache 中的块均构成映射;
    • 需要逐个比较 Tag 字段;
    • 优点:冲突概率低,空间利用率高,命中率高
    • 缺点:逐行比较速度慢;需要 CAM ;
  • 直接映射:一个主存块只能复制到 Cache 的一个特定行上。即 mm 行 Cache 的行号 ii 和主存的块号 jj 有如下函数关系:j%m=ij \% m = i
    • 其地址结构为:Tag + Line Index + Block Offset ;
    • 缺点:块冲突概率最高,空间利用率最低;
  • v 路组相联映射:它将 Cache 分为 uu 组,每组 vv 行,主存块 jj 放到那一组中是固定的,即组号 qq 满足 j%u=qj \% u = q ;但是主存块在组内的具体哪行并不固定,需要根据 Tag 逐个进行匹配,类似全相联映射,但是每组的行数并不多。
    • 其地址结构为:Tag + Set Index + Block Offset ;
    • 需要 vv 个比较器;
    • 性能介于前两者之间;

:CAM ,即内容可寻址储存器(相连存储器),既能按内容寻址,也能按地址进行读/写操作。

3.7.4 替换算法

主要是以下 2 种满足局部性的算法:

  • 最少使用 LFU(Least Frequently Used);
    • 将最近一段时间内访问次数最少的块替换出;
    • 需要对每个 Cache 块设定访问计数器;
  • 最久未使用 LRU(Least Recently Used);
    • 将近期内最长时间未被访问过的数据块换出;
    • 需要对每个 Cache块设定计时器,一旦被访问,计时器清 0 ;

3.7.5 一致性问题

记一下写命中 + 写缺失的 2 种组合即可:

  • 直写法/写穿透 Write-Through(更新 Cache 和主存) + 非写分配 Non-Write-Allocate(只更新主存)
  • 回写法 Write Back(先写入 Cache ,若修改才写回主存) + 写分配 Write-Allocate(更新主存和 Cache)

3.8 虚存

3.8.1 特点

  • 将主存 + 辅存空间统一编址
  • 目的是给用户提供一个比实际内存大得多的编址空间;
  • 软件(操作系统)与硬件共同实现,对系统程序员不透明,但对应用程序员透明;

3.8.2 存储管理方式

比较重要的是页式存储管理,剩下 2 个了解吧。

  • 段式存储管理:将程序按逻辑功能划分为多个大小不等的段,用段表来指明各段在主存中的位置,各段都有它的段号段起址装入位(是否装入主存)和段长
    • 优点:有利于按段实现信息共享和内存保护
    • 缺点:易造成主存中出现不好用的碎块,造成浪费;
  • 页式存储管理:把虚拟空间和主存空间都分成大小相同的页,以页为单位进行数据交换;虚拟页号经过页表基址寄存器找到对应页表项,再通过页表(控制位 + 物理页号) 进行查询;
    • 优点:页面大小固定,页表简单,调入方便;
    • 缺点:处理、保护、共享不如段式方便;
  • 段页式存储管理:程序先按逻辑进行分段,然后把每段分成固定大小的页;操作系统对主存的调入和调出是按页进行的;
    • 优点:可以按段实现信息共享和保护;
    • 缺点:需要多次查表(段表 + 页表),开销大;

3.8.3 TLB 快表

TLB 是一个特殊的 Cache ,而普通的页表在主存中,查表是,同时查 TLB 和页表,如果在 TLB 中查到,就不要花费访存的时间查页表了。

块表的结构类似 Cache ,包括有效位 + 标记(虚拟页号) + 物理页号,根据虚拟页号与物理页号的映射关系不同,在对虚拟页号部分还可能进一步拆分:

注意点

  • “TLB 命中 + 页表缺失”不可能?:
    • TLB 是页表的缓存
    • TLB 中的信息必须来自页表
    • 如果页表中都没该项(或页不在内存),TLB 根本不可能提前装到该项
  • 为什么“Cache 命中 + 页表缺失”不可能?
    • Cache 使用的是物理地址访问
    • 若页表都还没得到物理地址,根本没法查 Cache

第四章 指令系统

4.1 基本概念

可能涉及术语解释。

  • 微指令:微程序级的命令,属于硬件
  • 机器指令:介于微指令与宏指令之间,单独一条即可完成一个独立的算术/逻辑运算;
  • 宏指令:有若干条机器指令组成的软件指令,属于软件
  • 指令系统 ISA:一台计算机中所有机器指令的集合;

4.2 MIPS 指令格式

应该不用背出来吧。

4.3 寻址方式

首先,读/写 操作数或指令的方式有:

  • 地址指定方式(最主要);
  • 相联存储方式:既能按地址寻址,又能按内容寻址(Cache 中,用于匹配 Tag);
  • 堆栈存取方式;

寻址方式记住下表即可:

寻址方式 有效地址 访存次数
立即寻址 A 即是操作数 0
直接寻址 EA = A 1
一次间接寻址 EA = (A) 2
寄存器寻址 EA = Ri 0
寄存器间接一次寻址 EA = (Ri) 1
相对寻址 EA = (PC) + A 1
基址寻址 EA = (BR) + A 1
变址寻址 EA = (IX) + A 1

并了解堆栈寻址,堆栈是一块能存储数据的存储区域,且数据的存取一般只能通过栈顶进行,其特点是“后进先出”,即:LIFO 。

  • 寄存器堆栈称为“硬堆栈”;
  • 主存中划分出堆栈空间称为“软堆栈”;

注意点

  • 数组访问适合用变址寻址
  • 主存地址不能为负数!!!但偏移量可以为负,所以注意直接寻址中的地址范围。

4.4 指令分类

  • 数据传送指令:主存 - 寄存器,寄存器 - 寄存器;
  • 算术/逻辑运算指令;
  • 程序控制指令:
    • 条件转移;
    • 无条件转移;
    • 调用子程序;
    • 返回;
    • 中断返回;
  • 输入输出指令:CPU - 外设;
  • 串处理指令:对内存中连续存放的字节或字序列进行处理的指令;
  • 特权指令:特权指令是指具有特殊权限的指令。一般不直接供给用户程序使用,是由系统程序使用的指令;

4.5 CISC vs. RISC

知道 CISC(复杂指令集)计算机和 RISC(精简指令集)计算机的区别:

特性 CISC(Complex Instruction Set Computer) RISC(Reduced Instruction Set Computer)
指令数量 多、复杂(上百种) 少、简单(几十种)
指令长度 不固定,指令格式复杂 固定长度
执行时间 每条指令执行时间不确定 每条指令一般在一个机器周期内完成
指令使用频度 差异很大 差异不大,都比较常用
寻址方式 多种寻址方式(如立即数、变址、基址等) 寻址方式较少,简单
操作对象 内存和寄存器都可操作,可以访问存储器的指令不受限制 只操作寄存器,访问内存需专门指令(Load/Store)
通用寄存器数量 通用寄存器数量较少 通用寄存器数量多,减少访存次数
控制器 微程序控制方式,指令使用频度差异大 硬布线控制逻辑,控制器简单,Cache 容量大
编译 难以用优化编译生成高效的目标代码 编译器技术优化
性能优化方式 各种指令的执行时间相差很大,不利于流水线处理 大部分指令都能在一个机器周期内完成,采用流水线技术

  • RISC 由于指令结构精简,每条指令功能简单,往往需要通过组合实现复杂功能,编译器的设计难度和编程难度增大,兼容性差于 CISC ;

第五章 中央处理器

时序产生器和控制方式并非重点,没时间了,略。

5.1 CPU 模型

CPU ,即中央处理器,按照冯•诺依曼机的思路,就是控制器 + 运算器。

5.2 指令周期 vs. CPU/机器周期 vs. 时钟周期

5.3 指令周期

  1. 取指周期:从主存取出指令,更新 PC ;
  2. 间址周期(如果有):计算操作数的有效地址;
  3. 执行周期:取出操作数,执行运算,存操作数;
  4. 中断周期:检查是否有中断请求;

注意点

  1. CPU 如何区分指令和数据?

控制器根据指令周期的不同阶段区分。

  1. 什么是公操作

是一条指令执行完毕后,CPU 所进行的公共操作,如中断处理等。

5.4 控制器

硬布线控制器非重点,只需了解即可。

5.4.1 微程序控制器

基本概念

采用存储逻辑实现。

微命令和微操作是最小单位,两者一一对应。

  • 微命令:控制部件通过控制线向执行部件发出各种控制命令(即:控制信号);

  • 微操作:执行部件接受微命令后所进行的特定操作;

    • 相容性操作;
    • 相斥性操作;
  • 微指令由若干微命令购成;

  • 微周期是从控制存储器中取出一条微指令并执行所需的全部时间,通常为 1 个时钟周期;

  • 微程序是多条微指令的有序集合;

程序由若干条指令构成,1 条指令对应一段微程序,即:

  • 程序 —— 微程序,指令 —— 微程序 —— 多条微指令 —— 若干微命令和微操作;
  • 指令 —— 指令周期 —— 多个微周期 —— 多个时钟周期;

微指令格式

  • 操作控制:对应的微命令;
  • 顺序控制:产生下一条微指令的地址;

水平型微指令 vs. 垂直型微指令

特性 水平型微指令 垂直型微指令
微指令长度 较长(几十位以上) 较短(一般十几位)
控制信号表达方式 每一位直接对应一个控制信号(位控) 每一字段经过译码,控制一类信号,类似机器指令
并行性 高(多个控制信号可同时激活) 低(同类操作需顺序进行)
执行时间
灵活性 强(可并行调度) 弱(调度受限)
容易程度 用户难以掌握 用户容易掌握

水平型微指令 e.g.

垂直型微指令 e.g.

工作过程

  1. 地址转移逻辑:默认就是当前微指令的 P 字段,即顺序控制部分,出现分支时,需要结合状态条件计算;
  2. 微地址寄存器:接收微地址形成部件送来的微地址,为读取微指令做准备;
  3. 地址译码 + 控制存储器:根据微地址寄存器的地址,从控存中读出微指令内容;
  4. 微指令寄存器:存放微指令

微命令编码

  1. 直接表示法:微指令的控制字段中每一位对应一个微命令(即控制信号);
    • 简单直观,无需译码;
    • 操作控制部分过长;
  2. 编码表示法:把一组相斥的微命令合并成一个小组,对应一个字段,通过小组译码器对微命令信号进行译码,译码输出作为控制信号。nn 位二进制译码后可以表示 2n12^{n} - 1个微命令。(注意全 0 表示没有任何微操作,所以需要 - 1)
    • 需要译码;
  3. 混合表示法;

微地址形成方法

  1. 计数器方式
    • 与程序计数器PC类似:
      • 顺序执行微指令时,下一条微指令的地址通过当前微地址 + 一个增量产生;
      • 非顺序执行时需要通过一定的转移方式产生下一条微地址;
    • 优点:需要的顺序控制字段少;
    • 缺点:多路并行转移功能弱,速度慢、灵活性差;
  2. 多路转移方式
    • 程序运行时:
      • 不产生分支时:后继微地址直接由本条微地址的顺序控制字段给出;
      • 产生分支时:根据本条微地址的顺序控制字段的P字段(即判别测试位)和状态条件位来从若干“候选”微地址中选择;
    • 状态条件有 nn\Rightarrow 可以实现 2n2^n 路转移(即对应 2n2^n 个微程序入口);
    • 优点:多路并行转移功能强,速度快,更灵活;
    • 缺点:多路转移需要复杂的组合逻辑;

5.4.2 硬布线控制器

非重点,摆了。知道和微程序控制器的区别即可:

特性 硬布线控制器 微程序控制器
控制信号产生方式 用组合逻辑电路(如译码器、状态机)直接生成 用微指令存储在控制存储器(Control Memory)中
控制器本质 固定逻辑电路 存储程序 + 微程序解释器
结构复杂度 高(电路复杂) 低(程序驱动)
速度 (信号由逻辑门直接产生) 较慢(每条指令需读微指令)
修改灵活性 (要重新布线/改电路) (只需改微程序)
适用范围 高速处理器、简单控制器 多功能、通用处理器
设计成本 一次性高,不易修改和扩展 长期维护简单
例子 RISC 处理器(如 MIPS 硬件控制) CISC 处理器(如 Intel 早期 x86)

5.5 流水线 CPU

5.5.1 时空图

要求会画时空图。

5.5.2 有关计算

设阶段 SiS_i 所需的时间为 τi\tau_i ,缓冲寄存器的延时为 τl\tau_l ,则

  • 线性流水线的时钟周期τ=max{τi}+τl\tau = max\{\tau_i\} + \tau_l
  • 流水线处理的频率为:f=1τf = \frac{1}{\tau}

使用 k 级流水线完成 n 个任务,则:

  • 流水线用时:Tk=kΔt0+(n1)Δt0=(k+n1)τT_k = k\Delta t_0 + (n - 1)\Delta t_0 = (k + n - 1)\tau
  • 非流水线用时:T0=nkτT_0 = n\cdot k\cdot \tau
  • 加速比S=T0Tk=nkτ(k+n1)τ=nkk+n1S = \frac{T_0}{T_k} = \frac{n\cdot k\cdot \tau}{(k + n - 1)\tau} = \frac{n\cdot k}{k + n - 1} ;当 n>>kn >> k 时,最大加速比为 kk
  • 吞吐率,即执行 n 条指令的速度为:TP=n(k+n1)τTP = \frac{n}{(k + n - 1)\tau} ;当 nn \rightarrow \infty 时,最大吞吐率 TPmax=limnn(k+n1)τ=1τTP_{max} = \lim_{n \to \infty} {\frac{n}{(k + n - 1)\tau}}= \frac{1}{\tau}

5.5.3 流水线冒险/相关

  • 结构冒险/资源相关:同一时钟周期下,指令同时试图争用同一资源。比如,取指和访存由于都需要访问存储器,可能会造成资源冲突;最常见的就是访存冲突
    • 消除方法:
      • 暂停其中一条指令的时钟,停顿一拍后再启动;
      • 指令和数据存储在不同的存储器中;
  • 数据冒险:一条指令的执行依赖于更早的一条还在流水线中指令的执行结果;会产生气泡
    • 具体又分为:
      1. 写后读 RAW:Read after Write;
      2. 读后写 WAR:Write after Read,又称为反相关;
      3. 写后写 WAW:Write after Write,又称输出相关;
    • 解决方法:
      • 前推 Forwarding/旁路 Bypassing :即采用额外的通路连接,不需要等结果写入寄存器;
  • 控制冒险:由条件转移指令引起,即下一条指令依赖当前分支指令的结果。但是按照流水线工作方式,取指是连续进行的。条件转移导致流水线无法始终取到正确的指令,需要等待分支指令的结果出来才能取指,导致流水线阻塞。
    • 解决方法是分支预测
      • 静态分支预测:
        • 简单分支预测:直接预测莫分支发生 or 不发生;
        • 复杂分支预测:编译器在编译时进行分支,对指令进行重排从而消除控制冒险,可以把一条与分支无关、原本在跳转后执行但可以提前的指令,重排到延迟槽中,重排后的代码并不会影响程序的正确性!
      • 动态分支预测:通过历史行为进行预测,需要硬件支持,处理器需要维护一张分支历史表 BHT ;

5.5.4 什么是指令流水线,优势是什么?

指令流水线是把指令分解为若干子过程,通过将每个子过程与其他子过程并行执行,来提高计算机的吞吐率的技术。

采用流水线技术只需增加少量硬件就能把计算机的运算速度提高几倍,因此成为计算机中普遍使用的一种并行处理技术,通过在同一个时间段使用各功能部件,使得利用率明显提高。

第六章 总线系统

6.1 基本概念

6.1.1 什么是总线?

在功能部件和功能部件或设备和设备之间的一组进行互联和传输的信号线,分时与共享;

6.1.2 总线的分类

按功能层次分类:

  • 内部总线:CPU 内部各寄存器之间及寄存器与 ALU 之间的连接;
  • 系统总线:CPU 和计算机其他部件连接;
    • 数据总线:双向,与机器字长、存储字长有关;
    • 地址总线:单向,与存储地址、I/O 地址有关;
    • 控制总线:一般单向;
  • 设备总线/通信总线/外总线:计算机与慢速 I/O 设备连接;

6.1.3 总线结构

  1. 单总线结构:
    • 优点:简单,成本低,易添加新设备;
    • 缺点:带宽低、负载重,多个部件只能争用唯一的总线,且不支持并发传送操作;

  1. 双总线结构:主存总线 + I/O 总线;
    • 优点:将低速 I/O 设备分离出来;
    • 缺点:增加了硬件;

  1. 三总线结构:按照 PPT 上是多了一条主板总线,连接到主存总线上,降低了处理器 - 主存总线负载。

6.2 串行传送方式

6.3 总线仲裁方式及特点

  • 集中仲裁:由唯一的总线仲裁器进行指挥;
    • 链式查询:设备按优先级从高到低连成一个“菊花链”,总线授权信号(Bus Grant)沿着链依次传递,直到被某个设备接收,接收后会对该信号进行拦截。
      • 优点:简单,便于增删总线上的设备;
      • 缺点:对电路故障敏感;仲裁速度慢;优先级低的设备有可能会“饿死”;
    • 计数器定时查询方式:增加了一个计时器,当接收到总线请求时启动,如果计时器的值 = 请求总线的设备地址,则将总线给该设备;
      • 从“0”开始计时,则 = 链式查询;
      • 从“暂停点”开始计时,则每个设备优先级相同;
      • 优点:能动态改变优先次序;
      • 缺点:需要调整地址线数;
    • 独立请求方式并行仲裁;
      • 优点:判优速度快,且与模块数无关;对优先级的控制灵活;对故障不敏感;
      • 缺点:电路复杂,需要的线路较多,不易增加设备;
  • 分布式仲裁:没有中央仲裁器,而是多个仲裁器竞争使用总线;
    • 当某设备需要使用总线时,将它的仲裁号 CN 发到仲裁总线上,各设备通过仲裁总线相互比较其仲裁号的大小,谁的 CN 最大则获得总线使用权;

6.4 总线数据传输

总线事物,即从请求总线到完成总线到操作一般包括:

  1. 请求/申请阶段:主设备(CPU/DMA)发出总线传输请求;
  2. 仲裁阶段:总线仲裁机构决定将下一个传输周期的总线使用权授予某个申请者,解决多个主设备同时申请总线的问题;
  3. 寻址阶段:主设备通过总线发出命令和地址
  4. 传输阶段:主设备和从设备之间进行数据传输;
    1. 同步方式:由统一时钟控制数据传送
    2. 异步方式:采用应答方式,没有公共时钟
    3. 半同步方式:同步和异步方式的结合
    4. 分离方式:分成两个子周期完成传送
  5. 释放阶段;

6.5 PCI 总线

大致了解。

6.5.1 特点

PCI 总线(Peripheral Component Interconnect,总线式部件互联标准),特点包括:

特性 说明
设备独立性 独立于处理器,不依赖处理器架构(x86、MIPS、PowerPC 都可使用);
总线时钟频率 33.3MHz(V2.0)/ 66.6MHz(V2.1)
总线宽度 数据线为 32 位(可扩展至 64 位),数据并行传输
数据传输速率 133MB/s(266MB/s)
支持突发传输 连续传送多个数据,提升效率
支持同步操作 支持同步操作
总线主从机制 除了 CPU,其他设备也可成为“总线主控方”(支持总线主控转移)
即插即用(PnP) 能自动识别外设,自动分配地址和中断资源,简化硬件配置
预留扩展空间 预留扩展空间
总线仲裁方式 集中式仲裁方式
引脚数 采用多路复用方式(地址线和数据线)减少了引脚数
兼容性 全面支持 PCI 总线主设备
电压 5V 或 3.3V(有键槽区分)

6.5.2 PCI vs. PCI Express

对比项 PCI PCI Express (PCIe)
通信方式 并行通信(Parallel) 串行通信(Serial)、点对点
时钟方式 同步时钟 嵌入式时钟、异步传输
传输速率 32bit@33MHz ≈ 133MB/s PCIe 3.0 ×16 ≈ 16GB/s(双向)
带宽共享 总线共享,多设备竞争 每设备独享点对点链路
仲裁机制 显式集中仲裁(REQ#/GNT#) 无需仲裁,点对点
热插拔 不支持 支持(如 PCIe 热插拔 NVMe SSD)

PCIe 使用差分传输,实现了全双工端到端连接

第七章 外围设备

7.1 基本概念

  • 外围设备:
    • 存储介质;
    • 驱动装置:驱动存储介质移动;
    • 控制电路;

7.2 磁盘

磁盘(又称磁表面存储器,如硬盘等):

  • 优点:
    • 存储容量大;
    • 位成本低;
    • 记录介质可以重复使用;
    • 记录信息可长久保存;
    • 非破坏性读出;
  • 缺点:
    • 存取速度较慢;
    • 机械结构复杂;

硬磁盘机,简称硬盘:

  • 基本组成:
    • 磁盘驱动器;
    • 磁盘控制器;

7.1.1 磁盘上信息分布的有关计算

  • 柱面是所有磁盘面上,相同编号磁道的集合。

  • 存储密度

    • 道密度:沿磁盘半径方向单位长度的磁道数,单位:道/英寸;
    • 位密度:磁道单位长度上能记录的二进制代码位数,单位:位/英寸;
    • 面密度:位密度 ×\times 道密度,单位:位/平方英寸;
  • 存储容量

    • 非格式化容量:磁记录表面可以利用的磁化单元总数 = 磁头数 ×\times 磁道(柱面)数 ×\times 每道扇区数 ×\times 每道扇区字节数;
    • 格式化容量:由于需要对数据指定某种记录格式占去了一部分容量,所以这才是用户真正使用的容量,一般是非格式化容量的 60% ~ 70% ;
  • 平均存取时间 TaT_a :从发出读/写命令开始,磁头移动至指定位置,读出/写入 1 个扇区的数据所需的总时间。Ta=Tavg_seek+Tavg_rotation+Tavg_transT_a = T_{avg\_seek} + T_{avg\_rotation} + T_{avg\_trans}

    • 寻道时间 TseekT_{seek} :将磁头移动至所要求的磁道的时间,Tavg_seek=310msT_{avg\_seek}=3 - 10ms
    • 旋转/等待时间 TrotationT_{rotation} :需要访问的扇区信息旋转到磁头下的时间,一般用平均时间表示,即旋转 1/2 圈所需的时间,用 RPM(Round Per Minute,每分钟圈数)表示磁盘转速,则 Tavg_rotation=RPM2×60sT_{avg\_rotation}=\frac{RPM}{2}\times{60s}
    • 传送时间 TtransT_{trans} :读出/写入 1 个扇区数据所需的时间,Tavg_trans=1BPM×1S×60sT_{avg\_trans}=\frac{1}{BPM}\times\frac{1}{S}\times 60sSS 为每个磁道的平均扇区数;
  • 数据传输率 = 每转传输的数据 ×\times 转速

  • 磁盘地址格式 = 组号 + 柱面号 + 记录面号 + 扇区号,最小寻址单位是扇区(Sector)

7.1.2 提高磁盘 I/O 速度的手段

  • 加快磁盘机主轴转速 \rightarrow 旋转时间和传送时间均减小,平均存取时间减小;
  • 提高 I/O 总线速度
  • 采用磁盘 Cache :弥补慢速磁盘和主存之间速度上的差异;
    • 采用硬件和软件共同完成;
    • 采用 SRAM 或 DRAM ;

7.1.3 磁盘阵列 RAID

RAID ,即 Redundant Arrays of Independent (Inexpensive) Disks),中文是独立磁盘冗余阵列,是将多个硬盘组合成一个逻辑磁盘,利用数据分块并行处理技术,在多个磁盘上交错存放数据,使之可以并行存取。并且磁盘可存有冗余信息,一旦系统中某一磁盘失效,可以利用冗余信息重建用户信息。

  • 优点:
    • 传输速率快
    • 有容错功能
    • 成本低;
  • 一些级别:
    • RAID 0:数据条带方式
      • 无冗余信息,无校验码;简单;
    • RAID 1:镜像方式
      • 具有 100% 数据冗余,提供最高的数据安全保障;
      • 空间利用率低;
    • 之后的基本都有校验码的功能,

总之,RAID 通过同时使用多个磁盘,提高了传输速率;通过在多个磁盘上并行存取来大幅提高存储系统的数据吞吐量;通过镜像功能,提高安全可靠性;通过数据校验,提供容错能力。

7.2 磁带

了解其与磁盘的区别即可。

比较项 磁盘 磁带
读写方式 直接访问(DAM),即随机访问(任意位置可读写) 顺序访问(从头到尾依次读写)
速度 较快(可随机寻址) 较慢(需前进/倒带)

7.3 光盘

了解其读写原理即可:

  • 光盘的记录信息以凹坑方式永久性存储,根据反射光的光强变化并进行光电转换,即可读出记录信息;
  • 信息记录的轨迹称为光道
  • 光道上划分出一个个扇区,扇区是光盘的最小可寻址单位;

7.4 显示设备

7.4.1 基本概念

显示系统组成:

  • 显示器;
  • 显示适配器,即显卡
    • 集成显卡:集成在主板 / CPU 上;
    • 独立显卡:单独插在总线插槽上;

7.4.2 CRT 显示器的有关计算

  • 刷新存储器:为刷新提供信号的存储器。容量取决于分辨率和灰度级;
    • 容量 = 分辨率 ×\times 灰度级
    • 带宽 = 分辨率 ×\times 灰度级 ×\times 刷新率;(存取周期必须满足刷新频率的要求)

第八章 输入输出系统

也是一坨大的。

8.1 数据传送方式

CPU 直接访问的寄存器称为 I/O 端口,I/O 端口控制与外设的交互,所以数据传送也分为 CPU 和 I/O 端口的数据传送、I/O 端口和外设的数据传送。

8.1.1 I/O 接口与外设间的数据传送

  • 无条件传送:适用于速度极慢或简单的外围设备,直接用数据线连接接口和外设,比如机械开关等。此时接口仅用于寻址和数据缓冲;
  • 应答方式(异步传送方式):适用于慢速或中速设备,或者操作时间间隔不固定的设备,比如键盘;在数据传送线之外还有信号线,用于传递控制信息;
  • 同步传送方式:适用于高速设备且操作时间间隔均匀的设备,接口以某一确定的时钟速率和外设交换信息。一旦接口和外设确认同步,它们之间的数据交换便靠时钟脉冲控制来进行。

8.1.2 CPU 与外设间的数据传送

中断和 DMA 是重点,别的了解即可。

  • 无条件传送
    • 优点:简单,硬件成本低;
    • 缺点:可能出现丢失数据、覆盖数据或重复输入的情况;
  • 程序查询方式
    • 优点:简单,硬件成本低;
    • 缺点:需要不断查询并等待慢速设备,效率低,CPU 和外设无法并行工作;
  • 程序中断方式:具体见后;
  • DMA 方式:通过硬件控制实现主存与 I/O 设备间的直接数据传送,在传送过程中无需 CPU 的干预。数据传送是在 DMA 控制器控制下完成的;
    • 优点:速度快;
  • 通道方式:通道与 CPU 分时使用主存,通过通道控制若干个外设,实现 CPU 内部处理 与 I/O设备并行工作;并非重点;

8.2 程序中断方式

8.2.1 什么是中断

中断是指 CPU 暂停当前程序执行,转去处理随机发生的紧急事件,处理完后再返回原程序中断位置继续执行的技术。

不同于 DMA ,中断是通过软件 + 硬件实现的,中断系统包括:

  • CPU 中的中断机构;
  • 在系统中设置的中断控制器;
  • 中断服务程序(软件);

8.2.2 中断处理流程

牢牢记住上面这张图。

  1. 当当前指令执行完毕后,会就入公操作阶段,CPU 会检查当前有无中断请求;如果有,则进入 2. 中断周期,响应中断;
  2. 中断周期包括以下步骤:
    1. 关中断,即进行中断屏蔽;
    2. 找出中断源,并保存至 PC ;
    3. 根据 PC ,跳转至中断服务程序;
  3. 接下来是中断服务程序的执行流程:
    1. 保护 CPU 现场
    2. 中断事件处理,比如设备服务;
    3. 恢复 CPU 现场
    4. 开中断
    5. 中断返回

注意点

  1. 中断周期执行的操作通过硬件自动完成,也称其为中断隐指令,但其并不同于软件层面上的指令;

8.2.3 中断源识别

  1. 使用中断控制器,识别哪个设备发出的中断;
  2. 单级中断方式下,使用串行排队链电路实现具有公共请求线的中断源判优识别;

8.2.4 获取中断向量

不同中断源发出的中断请求有不同的中断向量号,通过查询中断向量表,获取对应中断向量,即中断服务程序的入口地址。

:除此之外,还有一种方式是查询中断,即预先规定中断服务程序的入口地址;

8.2.5 多级中断

  • 优先级高的中断可以打断优先级低的中断程序,以多级嵌套的方式进行工作;
  • nn 级中断,则说明 CPU 中有 nn 个 IM 和 IR ;
  • 若某级的中断被响应,则将本级和低于本级的 IM 置 1 ,屏蔽本级和低于本级的中断请求,但允许更高级的中断;
  • 采用独立请求方式 + 链式查询方式相结合的方式,确定哪一级的中断和中断源;
  • 使用堆栈保护现场(包括 IM );

:IM 和 IR 是 CPU 中决定是否需要响应中断请求的机构中的两个标志寄存器,分别表示 interpret mask(中断屏蔽,高有效)和 interpret request(中断请求,高有效);

8.3 DMA 方式

8.3.1 特点

  • 完全由硬件实现 I/O 交换;
  • 数据交换不经过 CPU
  • 速度快,适用于高速外设;

8.3.2 工作流程

  1. 申请阶段(DMA 控制器 \rightarrow CPU):DMA 控制器收到 DMA 传送请求后,向 CPU 发出总线请求信号,申请占用总线;
  2. 响应阶段(CPU \rightarrow DMA 控制器):CPU 响应总线请求,释放总线(将三总线变为高阻),并回送总线应答信号,表示让出总线(总线证实);
  3. 数据传送阶段(外设 \leftrightarrow 主存):DMA 控制器在收到总线应答信号后,占用总线,向存储器和外设发出读/写控制信号,完成数据传送操作,并修改地址记录器传送字的个数(一次不一定能传完,所以要记录传送到哪了);
    • 具体又分为 3 个步骤:
      1. 预处理:CPU 对 DMA 控制器进行初始化,设置传送有关参数,准备内存缓冲区数据;
      2. 数据传送:DMA 控制器控制外设与内存缓冲区进行数据交换;
      3. 后处理:对内存缓冲区的处理(取走缓冲区数据或填入新数据,因为会分多次进行传输);
  4. 传送结束阶段(DMA 控制器 \rightarrow CPU):在规定字数传送完成后,DMA 控制器以中断方式或状态位方式向 CPU 报告操作结束,释放总线,CPU 重新占用总线;

这里还涉及的一些设备:

  • 内存地址计数器:初始指向内存缓冲区首地址,每传送一次自动加 1 ;
  • 字计数器:传送数据块长度计数,每传送一次自动减 1 ;
  • 数据缓冲寄存器:暂存每次传送的数据;
  • 控制/状态逻辑:完成控制;
  • 中断机构:当字计数器溢出时,表示传送结束,中断机构向 CPU 发出传送结束的请求,表示 DMA 传送结束;

8.3.3 数据传送方式

  • 成组传送方式
    • 优点:控制简单,适用于高速设备;
    • 缺点:CPU 在 DMA 传送过程中无法访存;
  • 周期窃取(挪用)方式
    • DMA 控制器与主存间传送一个数据,占用/窃取一个 CPU 周期;
    • 缺点:总线申请和归还存在过多时间开销;
  • 交替访存方式/透明 DMA 方式
    • 分时访存;

8.3.4 中断 vs. DMA

比较项 程序中断方式 DMA 方式
保护现场 需要保护和恢复现场 无需保护现场
CPU 参与度 高,CPU 要处理中断并逐个字节读写 低,仅在预处理和后处理阶段需要 CPU
传送方式 主要靠中断服务程序 靠额外的 DMA 控制器硬件进行传送
响应请求时机 每条指令执行完毕 每个总线周期结束
效率 中,适合低速/间歇设备 高,适合高速设备的成组数据传送
传输粒度 一次中断传送一个或少量字节 一次 DMA 可传送多个字节(甚至整个块)
中断频率 多次中断 一次中断(DMA 传输完毕后通知)
典型应用 键盘、鼠标、串口等 硬盘、显卡、声卡、网卡等高速设备
CPU 空闲度 占用高 占用低,可并发运行其他任务
优先级 低于 DMA 请求 高于中断请求

计算机组成原理之期末复习
https://blog.yokumi.cn/2025/06/13/计算机组成原理之期末复习/
作者
Yokumi
发布于
2025年6月13日
许可协议
CC BY-NC-SA 4.0