第1章 计算机系统概述
一、计算机发展历程
1. 计算机系统的组成
计算机系统=硬件+软件
- 硬件:计算机的实体,如主机、外设等
- 软件:由具有各类特殊功能的程序组成
2. 硬件的发展

3. 软件的发展
- 系统软件:用来管理整个计算机系统
- 应用软件:按任务需要编制成的各种程序
4. 目前的发展趋势
- 微型计算机向更微型化、网络化、高性能、多用途方向发展(微型计算机的发展以微处理机技术为标志)
- 巨型机向更巨型化、超高速、并行处理、智能化方向发展
二、计算机系统层次结构
1. 计算机硬件的基本组成
(1)冯诺依曼结构

特点:
- 采用"存储程序"的工作方式
- 将指令以二进制代码的形式事先输入计算机的主存储器,然后按其在存储器中的首地址执行程序的第一条指令,以后就按该程序的规定顺序执行其他指令,直至程序执行结束
- 计算机由五大部件组成
- 输入设备,输出设备,存储器,运算器,控制器
- 指令和数据以同等地位存储在存储器中,并按地址寻问
- 指令和数据均以二进制代码表示
- CPU 区分指令和数据的依据是指令周期的不同阶段
- 数据由指令的地址码给出

- 指令 = 操作码 + 地址码
- 操作码用来表示操作的性质
- 地址码用来表示操作数在存储器中的位置
- 指令在存储器内按顺序存放
- 通常,指令是顺序执行的,在特定条件下可根据运算结果或根据设定的条件改变执行顺序
- 以运算器为中心,输入输出设备通过运算器与存储器传送数据
- 是单处理机
- 基本工作方式是控制流驱动方式
(2)现代计算机结构

特点:
- 以存储器为核心
- 计算机 = 主机 + 输入/输出设备
- 主机 = CPU + 主存
- CPU = 运算器 + 控制器
- 控制器:指挥各部件使得程序执行
- 运算器:计算机的执行部件,进行算术运算和逻辑运算
- 存储器 = 主存 + 辅存,存放数据和指令
- 主存储器(内存):CPU 可直接访问
- 工作方式:按存储单元的地址进行存取(按地址存取方式)
- 辅助存储器:调入主存后,才可被 CPU 访问
- 主存储器(内存):CPU 可直接访问
- I/O 设备 = 输入设备 + 输出设备
- 输入设备:将信息转换为机器能够识别的形式
- 输出设备:将结果转换为人们熟悉的形式
2. 计算机的功能部件
(1)存储器
基本组成:
- 存储体:存放二进制信息,有许多存储单元组成
- 地址寄存器(MAR):存放访存地址,经过地址译码后找到所选的存储单元
- 可用于寻址,位数反映最多可寻址的存储单元的个数
- MAR 为 10 位,则最多 2^{10}=1024 个存储单元,记为 1 K
- MAR 的长度与 PC 的长度相等
- 数据寄存器(MDR):暂存要从存储器中读或写的信息
- 位数 = 存储字长
- 时序控制逻辑:用于产生存储器操作所需的各种时序信号

相关概念: - 存储元:即存储二进制的电子元件,每个存储元可存 1 bit
- 存储单元:每个存储单元存放一串二进制代码,包含若干存储元
- 存储字:存储单元中二进制代码的组合
- 存储字长:存储单元中二进制代码的位数
- 机器字长:计算机能一次处理的二进制代码长度
- 指令字长:指令的二进制长度
- 数据字长:数据总线一次能并行传送信息的次数

(2)运算器
相关概念:
- ALU:算术逻辑单元,是运算器的核心,用电路实现各种算数运算、逻辑运算
- ACC:累加器,用于存放操作数,或运算结果
- MQ:乘商寄存器,在乘,除计算时用于存放操作数或运算结果
- X:通用的操作数寄存器,用于存放操作数
以上是必须具备的 - IX:变址寄存器
- BR :基址寄存器
- PSW:程序状态寄存器,也称标志寄存器,用于存放 ALU 运算得到的一些标志信息或处理机的状态信息(结果溢出、进位、错位、结果负等)


(3)控制器
相关概念:
- PC:程序计数器,存放下一条指令的地址,并跟踪下一条要执行的指令的地址
- IR:指令寄存器:存放当前正在执行的指令,其内容来自主存储器的 MDR
- 操作码 OP (IR) 送至 CU
- 地址吗 Ad (IR) 送往 MAR,用以取操作数
- CU:控制单元,分析指令,给出控制信号

(4)输入设备
(5)输出设备
3. 计算机系统的细节
(1)系统组成

- CPU:中央处理器
- PC:程序计数器
- MAR:存储器地址寄存器
- ALU:算术逻辑部件
- IR:指令寄存器
- MDR:存储器数据寄存器
- GPRs:通用寄存器组(由若干通用寄存器组成,早期就是累加器)
(2)指令的执行
完成一条指令:
- 取指令 PC,分析指令 IR,执行指令 CU
- 取指 PC + IR,执行 CU
- 开始时,将第一条指令地址放到 PC 中
- 将 PC 的指令存到 MAR 中,发出读命令,读 MAR 里面的内容,然后存到 MDR 中,再把 MDR 的指令放到 IR 中
- 翻译 IR 的操作性质
- 取操作数
- 将操作数送往运算器,进行运算
- 送结果到寄存器中或者送到内存
- PC 加一

(3)计算机的工作过程







三、计算机软件
1. 两类软件
- 系统软件:管理计算机系统的硬件资源,向上层应用程序提供服务
- 如:操作系统、网络服务程序、语言处理程序、数据库管理系统、程序设计语言、分布式软件系统
- 数据库系统不是系统软件
- 应用软件:按应用场景需要编制成的各种程序,直接为用户提供服务
- 办公软件、多媒体软件、辅助设计软件、企业应用软件、网络应用软件、安全防范软件、娱乐休闲软件
2. 三种级别的语言
- 机器语言
- 二进制代码
- 是计算机唯一可以直接识别和执行的语言
- 汇编语言
- 助记符
- 由汇编程序 (系统软件) 翻译为机器语言后,再执行
- 高级语言
- 如 C,C++,Java
- 一种是经过编译程序得到汇编语言,然后得到机器语言,然后再执行
- 【高级语言->汇编语言->机器语言】
- 一种是由高级语言程序直接翻译成机器语言(边翻译边执行,不生成可执行文件)
- 【高级语言->机器语言】
翻译程序:将高级语言程序转换为机器语言程序
- 汇编程序(汇编器):将汇编语言程序翻译为机器语言程序
- 解释程序(解释器):将源程序中的语句按执行顺序逐条翻译成机器指令并立即执行(每次执行都需翻译)
- 编译程序(编译器):将高级语言程序翻译成汇编语言或机器语言程序(只需翻译一次)
3. 软件和硬件的逻辑功能等价性
同一个功能,既可以用硬件实现(性能高成本高),也可以用软件实现(性能低成本也低)
- 对于乘法运算,可以设计一个专门的硬件电路实现乘法运算
- 也可以用软件的方式,执行多次加法运算来实现
4. 指令集体系结构(ISA)
- 软件和硬件之间的界面
- 设计计算机系统的ISA,就是要定义一台计算机可以支持哪些指令,以及每条指令的作用是什么、每条指令的用法是什么
- ISA 是指软件能够感知到的部分,也称软件可见部分
四、计算机系统的层次结构

- 微程序机器层:由硬件直接执行微指令
- 传统机器语言层:用微程序解释机器指令
- 操作系统层:用机器语言解释操作系统
- 汇编语言层:用汇编程序翻译成机器语言程序
- 高级语言层:用编译程序翻译成汇编语言程序
- 下层是上层的基础,上层是下层的拓展
- 没有配备软件的纯硬件系统称为裸机
- 第 3~5 层称为虚拟机,软件实现的机器
比较: - 计算机体系结构:机器语言程序员所见到的计算机系统的属性概念性的结构与功能特性
- 指令系统、数据类型、寻址技术、I/O机理
- 如何设计硬件与软件之间的接口
- 有无乘法指令
- 计算机组成原理:实现计算机体系结构所体现的属性,对程序员“透明”(看不见)
- 具体指令的实现
- 如何用硬件实现所定义的接口
- 如何实现乘法指令
五、计算机系统的工作原理
1. 从 c 语言源程序到可执行文件
预处理 -> 编译 -> 汇编 -> 链接

- hello. c:源程序(文本)
- hello. i:修改了的源程序(文本)
- hello. s:汇编程序(文本)
- hello. o:可重定位目标程序(二进制)
- hello. exe:可执行目标程序(二进制)
2. “存储程序”工作方式

3. 指令执行过程的描述
以取数指令为例
- 取指令:PC -> MAR -> M -> MDR -> IR
- 根据 PC 取指令到 IR
- 分析指令:OP (IR) -> CU
- 指令译码并送出控制信号
- 执行指令:Ad (IR) -> MAR -> M -> MDR -> ACC
- 取数操作
六、计算机的性能指标
1. 字长
- 机器字长(字长):计算机进行一次整数运算所能处理的二进制的位数
- 字长一般等于通用寄存器的位数或 ALU 的宽度
- 字长越长,数的表示范围越大,计算精度越高
- 字长通常选定为字节(8 位)的整数倍
2. 数据通路带宽
- 外部数据总线一次能并行传送信息的位数,非 CPU 内部数据总线宽度
- 各个子系统通过数据总线连接形成的数据传送路径称为数据通路
3. 主存容量
- 主存储器所能存储信息的最大容量
- 通常以字节来衡量【1 B=8 bit】
- 也可以用 字数*字长 表示
- MAR 为 16 位,2^{16}=65536,即存储体内有 65536 个存储单元(可称作 64 K,1 K=1024)
- MDR 为 32 位,表示存储容量为 64K*32 位
4. 吞吐量和响应时间
- 吞吐量:系统在单位时间内处理请求的数量
- 响应时间:指用户向计算机发送一个请求,到系统对该请求做出响应并获得所需结果的等待时间
- 通常包括 CPU 时间和等待时间
5. 主频和 CPU 时钟周期
- 主频(CPU 时钟频率):机器内部主时钟的频率,代表每秒执行多少个时钟周期数
- 值越大代表一个操作所需时间越少,CPU 运行速度越快
- CPU 时钟周期:机器内部主时钟脉冲信号的宽度,节拍脉冲或 T 周期,即主频的倒数
- 是 CPU 工作的最小的时间单位,每个动作至少需要 1 个时钟周期
- 时钟脉冲信号
- 时钟周期 = 1 / 主频,如主频为 2.4 GHz,则时钟周期 = 1 / 2.4 G 秒
6. CPI
- 执行一条指令所需要的时钟周期数
- CPI 是一个平均值
- CPI 与系统结构,指令集,计算机组织有关,与时钟频率无关
- CPI=\frac{时钟周期数量}{指令数量}
- IPS:每秒执行多少条指令,IPS=\frac{主频}{平均CPI}
7. CPU 执行时间
- 运行一个程序所花费的时间
- 执行时间= 时钟周期数量×时钟周期=\frac{时钟周期数量}{主频}=\frac{指令条数×CPI}{主频}
8. MIPS
- MIPS:每秒执行多少百万条指令【Million instructions per second】
- MIPS=\frac{指令条数}{执行时间×10^6}=\frac{主频}{CPI×10^6}
- MFLOPS:每秒执行多少百万次浮点运算
- MFLOPS = \frac{浮点操作数次数}{执行时间 × 10^6}
- GFLOPS:每秒执行多少十亿次浮点运算
- GFLOPS = \frac{浮点操作数次数}{执行时} × 10^9
- TFLOPS:每秒执行多少万亿次浮点运算
- TFLOPS = \frac{浮点操作数次数}{执行时间 × 10^{12}}
9. 其他换算
- 1 kb = 2^{10} b=1024 b,1 B【字节】=8 bit【位】
- 描述速率,频率时: 1 T= 10^3 G=10^6 M= 10^9 K
第2章 数据的表示和运算
略
第3章 存储系统
一、存储系统基本概念
1. 存储系统的层次结构

- 层次思想:上一层的存储器作为低一层存储器的高速缓存,上一层的内容是下一层的内容的一部分
- Cache —— 主存层
- 解决 CPU 和主存速度不匹配的问题
- 数据调度由硬件自动完成
- 对所有程序员透明
- 主存 —— 辅存层
- 解决存储系统容量的问题
- 数据调度由硬件和操作系统共同完成【换入换出技术】
- 对应用程序员透明
- 逐渐发展形成虚拟存储系统
- 主存与 CPU,Cache,辅存都能交换信息
- Cache 和主存能与 CPU 直接交换信息
- 辅存要通过主存与 CPU 交换信息
2. 存储器的分类
(1)按在计算机中的作用分类
- 主存储器【主存/内存】
- 用来存放计算机运行期间所需的程序和数据
- 容量较小
- 存取速度较快
- 价格较高
- 辅助存储器【辅存/外存】
- 用来存放当前暂时不用的程序和数据以及一些需要永久性保存的信息
- 容量大
- 存取速度较慢
- 单位成本低
- 高速缓存存储器【Cache】
- 位于主存和 CPU 之间
- 用来存放当前 CPU 经常使用的指令和数据,以便 CPU 能高速地访问它们
- 现代计算机通常将其制作在 CPU 内
- 存取速度可与 CPU 速度相匹配
- 存储容量小
- 价格高
(2)按存储介质分类
- 磁表面存储器:磁盘,磁带
- 磁芯存储器
- 半导体存储器:MOS 型存储器,双极型存储器
- 光存储器:光盘
(3)按存取方式分类
- 随机存储器【RAM】
- 存储器的任何一个存储单元都可以随机存取
- 存取时间与存储单元的物理位置无关
- 主要用于做主存或高速缓冲存储器
- 读写方便,使用灵活
- RAM 分为静态 RAM 和动态 RAM
- RAM 主要为用户编程设置的
- 只读存储器【ROM】
- 存储器的内容只能随机读出而不能写入
- 信息一旦写入就不变,断电后也不消失
- 通常用于存放固定不变的程序,常数和汉字字库
- ROM 与 RAM 一起统一构成主存的地址域
- ROM 和 RAM 的存取方式均为随机存取
- 操作系统的内存储器既有 RAM 也有 ROM
- 广义上的 ROM 现在可通过电擦除进行写入,写入速度比读取速度慢
- ROM 存放系统程序,标准子程序和各类常数
- 串行访问存储器
- 对存储单元进行读写操作时,需按其物理位置的先后顺序寻址
- 顺序存取存储器:磁带
- 存取速度慢,只能按某种顺序存取
- 直接存取存储器:磁盘、光盘
- 既不是随机存取,也不是顺序存取
- 相联存储器
- 按内容访问
- 快表
(4)按信息的可保存性分类
- 易失性存储器
- 断电后,存储信息消失【RAM,主存,Cache】
- 非易失性存储器
- 断电后,信息仍保存【ROM,磁表面存储器,光存储器】
- 破坏性读出
- 信息读出后,原存储信息被破坏【DRAM 芯片,读出数据后要进行重写】
- 非破坏性读出
- 信息读出后,原存储信息不被破坏【SRAM 芯片,磁盘,光盘】
3. 存储器的性能指标
(1)存储容量
- 存储容量 = 存储字数 * 字长 (1 M * 8 bit)
- 存储字数表示存储器的地址空间大小【MAR】
- 字长表示一次存取操作的数据量【MDR】
(2)单位成本
- 每位价格 = 总成本 / 总容量
(3)存取速度
- 数据传输率 = 数据宽度 / 存取周期
- 数据传输率中的 K, M 是 10 的次方不是 2 的次方,只有存储容量是 2的次方
- 存取周期 = 存取时间 + 恢复时间

- 存取时间 T_a = 从启动一次存储器到完成该操作所经历的时间
- 存取周期 T_m = 存储器进行一次完整的读写操作所需的全部时间
- 主存带宽 B_m = 数据传输率 = 每秒从主存进出信息的最大数量 = 单位字 / 秒
二、主存储器
1、主存储器的基本组成
(1)基本元件
- MOS 管,作为通电"开关"
- 电容,存储电容(即存储二进制 0/1)
(2)存储芯片的结构
- 译码驱动电路:译码器将地址信号转化为字选通线的高低电平
- 存储矩阵(存储体):由多个存储单元构成,每个存储单元又由多个存储元构成
- 读写电路:每次读 / 写一个存储字
- 读 RD / 写 WR控制线:决定芯片是进行读还是写操作(可能分开两根,也可能只有一根)
- 片选线 CS:确定哪个存储芯片被选中,可用于容量扩充
- 引脚最低数目:片选线(1)+控制线(2)+ 数据线 + 地址线
地址复用技术: - 由于DRAM 芯片容量大,地址位数多,为了减少地址引脚线,采用地址复用技术
- DRAM 因为分两次发送,长度相同,因此地址线可以复用,线数减少了一半
- 引脚数 = 地址线减半 + 数据线不变 + 行通选 (1) + 列通选 (1) + 读写控制线 (2)
- 片选线用行通选线替代

- 总容量 = 存储单元个数 * 存储字长
- 常见的描述:8 K × 8 位,即 2^{13}×8 bit = 8 KB

(3)寻址方式
- 题目上没有明确指定按字编址,那么就默认是按字节编址【一字节8位】
- 32位的计算机中:32位(bit) = 4字节(byte) = 1字(word)
- 64位的计算机中:64位(bit) = 8字节(byte) = 1字(word)
- 存放一个机器字的存储单元,通常称为字存储单元,相应的单元地址叫字地址
- 存放一个字节的存储单元,称为字节存储单元,相应的地址称为字节地址
- 如果计算机中可编程的最小单位是字存储单元,则该计算机称为按字寻址的计算机
- 如果计算机中可编程的最小单位是字节,则该计算机称为按字节寻址的计算机
- 一个机器字可以包含数个字节,所以一个存储单元也可以包含数个能够单独编制的字节地址

(4)主存储器的组成部分
- 数据线的宽度 = MDR 的宽度 = 存储字长
- 地址线的宽度 = MAR 的宽度 = 存储字数
- 下图总容量 = 2^{36}×64 位= 2^{39} B

2、DRAM 和 SRAM
(1)比较
| SRAM | DRAM | |
|---|---|---|
| 主要用途 | 高速缓存 | 主机内存 |
| 存储信息 | 双稳态触发器 | 电容 |
| 破坏性读出 | 非,即使信息被读出后,它仍保持其原状态而不需要再生 | 是 |
| 需要刷新 | 不要 | 需要 |
| 送行列地址 | 同时送 | 分两次送 |
| 运行速度 | 快 | 慢 |
| 集成度 | 低 | 高 |
| 存储成本 | 高 | 低 |
![]() |
(2)DRAM 的刷新
1)刷新的概念
- DRAM电容的电荷维持时间短,即使电源不断电,信息也会自动消失
- 因此每隔一段时间必须刷新,一般取2ms,即刷新周期(再生周期)
- DRAM的刷新是以行为单位的
- 一次完整的刷新过程只需要占用一个存储周期
2)集中刷新
- 在规定的一个刷新周期内,对全部存储单元集中一段时间逐行进行刷新,此刻必须停止读 / 写操作

刷新过程 - 用 0.5μs ×128=64μs 的时间对 128 行进行逐行刷新
- 由于这 64μs 的时间不能进行读/写操作,故称为死时间或访存死区”
- 由于存取周期为 0.5μs,刷新周期为 2 ms,即 4000 个存取周期
为什么刷新与存取不能并行 - 因为内存就一套地址译码和片选装置,刷新与存取有相似的过程
- 它要选中一行【这期间片选线、地址线、地址译码器全被占用着】
- 同理,刷新操作之间也不能并行【意味着一次只能刷一行】
3)分散刷新
- 是指对每行存储单元的刷新分散到每个存取周期内完成
- 其中,把机器的存取周期tc分成两段,前半段tM用来读 / 写或维持信息,后半段tR用来刷新

刷新过程 - 在每个存取操作后绑定一个刷新操作,延长了存取周期
- 这样存取周期就成了 0.5μs + 0.5μs =1μs
- 但是由于与存取操作绑定,就不需要专门给出一段时间来刷新了
- 这样,每有 128 个读取操作,就会把 0-127 行全部刷新一遍
- 故每隔 128μs 就可将存储芯片全部刷新一遍【即刷新周期是 1μs×128=128μs 远短于 2 ms】
- 而且不存在停止读 / 写的死时间,但是存取周期长了,整个系统速度降低了
- 分散刷新的刷新周期 128μs ,其实不需要这么频繁,会导致浪费
4)异步刷新
- 既可以缩短“死时间”【仍然存在死时间】,又充分利用最大刷新间隔为2ms的特点

刷新过程 - 具体操作为:在 2 ms 内对 128 行各刷新一遍
- 即每隔 15.6μs 刷新一行 (2000μs/128≈15.6μs),而每行刷新的时间仍为 0.5μs
- 这样,刷新一行只能停止一个存取周期
- 但对每行来说,刷新间隔时间仍为 2 ms,而死时间为 0.5μs
- 相对每一段来说,是集中式刷新,相对整体来说,是分散式刷新
特点 - 将 DRAM 的刷新安排在 CPU 对指令的译码阶段,这个阶段 CPU 不访问存储器
- 既克服了分散刷新需独占 0.5μs 用于刷新,使存取周期加长且降低系统速度的缺点
- 又不会出现集中刷新的访存“死区”问题
- 从根本上提高了整机的工作效率
3、只读存储器 ROM
(1)ROM 的特点
- 结构简单,位密度比可读写存储器高
- 具有非易失性,可靠性高
(2)ROM 的类型
1)掩模式只读存储器 MROM
- 内容在生产过程中写入,任何人不可重写
- 可靠性高,集成度高,价格便宜但灵活性差
2)一次可编程只读存储器 PROM
- 用于用户实现一次性编程
- 一次写入后不可更改
3)可擦除可编程只读存储器 EPROM
- 用于用户实现多次性编程
- 可多次重写,但次数有限,写入时间过长
4)Flash 存储器
- 既可在不加电的情况下长期保存信息,又能在线进行快速擦除和重写
- 需要先擦除后写入,写速度一般比读速度慢
- 每个存储元只需要单个 MOS 管,位密度比 RAM 高
- U盘就是基于Flash的只读存储器
- 价格便宜,集成度高,电可擦除重写且擦除重写速度快
5)固态硬盘 SSD
- SSD 是基于闪存的硬盘,是一种非易失性存储器,采用随机访问方式
- 由控制单元和存储单元(Flash 芯片)组成
- 可长期保存信息,快速擦除和重写
- 相比传统硬盘也有读写速度快、低功耗的特性,但价格较高
4、多模块存储器
(1)概念
- 一种空间并行技术,利用多个结构完全相同的存储模块的并行工作来提高存储器的吞吐率
(2)单体并行存储器
- 定义:存储器中只有一个存储体,每个存储单元存储 m 个字,总线宽也为 m 个字,地址必须顺序排列并处于同一存储单元
- 过程:在一个存取周期内,从同一地址取出 m 条指令,然后将指令逐条送至 CPU
- 缺点:指令和数据在主存内必须是连续存放的,一旦遇到转移指令,或操作数不能连续存放,这种方法的效果就不明显

(3)多体并行存储器
由多体模块组成,每块都有相同容量和读取速度,各模块都有独立的读写控制电路、MAR 和 MDR,既能并行工作也能交叉工作
1)高位交叉编址(顺序方式)【竖】
- 特点:先在一个模块内访问,等到该模块访问完之后才转到下一个模块访问
- 编号:高位地址表示体号【模块号】,低位地址表示体内地址
- 优点:
- 某个模块进行存取时,其它模块不工作
- 某一模块出现故障时,其它模块可以照常工作
- 通过增添模块来扩充存储器容量比较方便
- 缺点:各模块串行工作,存储器的带宽受到了限制,并不能提高吞吐量

2)低位交叉编址(交叉方式)【横】
- 特点:
- 连续地址分布在相邻的不同模块内,同一模块内的地址是不连续的
- 地位交叉编制是交叉存放的,满足程序的局部性原理
- 编号:高位地址表示体内地址,低位地址表示体号【模块号】
- 优点:对连续字的成块传送可实现多模块并行存取,提高了存储器的带宽
- 计算:每个模块按“模 m”交叉编址,模块号 = 单元地址 % m

- 启动方式:
-
轮流启动方式:
- 设模块字长等于数据总线宽度,模块存取周期为 T,总线周期为 r
- 存储器交叉模块的数目最小为 m = T / r
- 每隔 1/m 个存取周期轮流启动各模块,则每隔 1/m 个存取周期就可读出或写入一个数据,存取速度提高 m 倍
- 当模块数目不小于 m 时,就可以保证 T 时间之后再启动该模块,上次的存取操作已经完成,流水线就不会断
- **连续存取 m 个字的时间为 T + (m - 1) r
- 判断发送访问冲突的规则:给定的访存地址在相邻的四次访问中出现在同一个存储模块中【m=4 时】

-
同时启动方式:
- 所有模块一次并行读 / 写的总位数正好等于数据总线位数
- 同时启动所有模块进行读 / 写
-
- 计算带宽

5、主存储器与 CPU 的连接
(1)连接原理
- 主存储器通过数据总线、地址总线和控制总线与 CPU 连接
- 数据总线的位数与工作频率的乘积正比于数据传输速率
- 地址总线的位数决定了可寻址的最大内存空间
- 控制总线(读 / 写)指出总线周期的类型和本次输入 / 输出操作完成的时刻
- CPU 读指令,通过地址线去访问存储器的 MAR(地址寄存器)
- MAR(地址寄存器)通过选通线去访问矩阵中的数据
- 矩阵需要通过数据线与 MDR(数据寄存器)进行接发


(2)主存容量的扩展
1)位扩展法
- 8 K* 8 位 的存储器 = 8片 8 K*1 位 的 RAM 组成
- 地址线并行,数据线一一接上

2)字扩展法
-
线选法
- 16 K * 8 位的存储器 = 2片 8 K*8 位的存储器
- 地址线是 A_0~A_{12} 共 13 位,译码线是 A_{13} 和 A_{14} 共 2 位
- 由片选信号来区分各芯片的地址范围
- 当 A_{13} 为 1 时,第一块工作,A_{14} 的 CS 必须为 0
- 谁工作,数据线就接送谁的数据,即将 CS 设置为 1
- 2 位二进制时:只能利用 01,10

-
译码片实现
- 有 4 块芯片,不需要 4 条线而只需要两条
- 地址线是 A_0~A_{12} 共 13 位,译码线是 A_{13} 和 A_{14} 共 2 位
- 2 位二进制时:可以利用 00,01,10,11
- 【译码器】一个二进制转十进制的物理元件,将左边三根地址线表示的二进制意义映射到右边十进制的选通线

比较

3)字位同时扩展法
- 一块芯片只有 4 位,因此通过 2 片叠加先实现位拓展
- 等价于实现了一个 8 位的存储芯片
- 再通过译码片选的方式实现字拓展
- 在不同的地址线中选择不同的芯片组合进行工作

三、外部存储器
1、磁盘存储器
2、固态硬盘 SSD
(1)原理
- 基于闪存技术 Flash Memory,属于电可擦除 ROM,即 EEPROM
(2)组成
- 闪存翻译层:负责翻译逻辑块号,找到对应页(Page)
- 存储介质:多个闪存芯片(Flash Chip),每个芯片包含多个块(block),每个块包含多个页(page)

(3)读写性能特性
- 以页为单位读 / 写:相当于磁盘的“扇区”
- 以块为单位“擦除”:擦干净的块,其中的每页都可以写一次,读无限次
- 支持随机访问:系统给定一个逻辑地址,闪存翻译层可通过电路迅速定位到对应的物理地址
- 读快,写慢:要写的页如果有数据,则不能写入,需要将块内其他页全部复制到一个新的(擦除过的块)中,再写入新的页
(4)与机械硬盘相比的特点
- SSD 读写速度快,随机访问性能高,用电路控制访问位置;机械硬盘通过移动磁臂旋转磁盘控制访问位置,有寻道时间和旋转延迟
- SSD 安静无噪音、耐摔抗震、能耗低、造价更贵
- SSD 的一个“块”被擦除次数过多(重复写同一个块)可能会坏掉,而机械硬盘的扇区不会因为写的次数太多而坏掉
(5)磨损均衡技术
- 思想:将“擦除”平均分在各个块上,以提升使用寿命
- 动态磨损均衡:写入数据时,优先选择累计擦除次数少的新闪存块
- 静态磨损均衡:SSD 检测并自动进行数据分配、迁移,让老旧的闪存块承担以读为主的存储任务,让较新的闪存块承担更多的写任务
四、高速缓存存储器
1、Cache 的基本原理
(1)基本概念
- 高速缓冲存储器就是存在于主存与 CPU 之间的一级存储器,有了它 CPU 可以直接对其存取数据,从而减少了时间,提高了系统的运行速度
- CPU 与 Cache / 主存的信息交互单位为字,Cache 与主存的信息交互单位为块
- 一个块通常由若干字组成
- Cache 利用了局部性原理:将程序中正在使用的部分存在在容量较小但速度更快的 cache 中
(2)局部性原理
- 时间局部性:
- 在最近的未来要用到的信息,很可能是现在正在使用的信息(指令和数据)
- 例如循环
- 空间局部性:
- 在最近的未来要用到的信息(指令和数据),很可能与现在正在使用的信息在存储空间上是邻近的
- 例如对数组的访问,如果数组按行存的,则先行再列的访问方式空间局部性更好
(3)读写过程
-
CPU、Cache、和主存三者的读写关系
- Cache 会从主存中一并读取目标数据以及附近空间的数据
【通常以块为单元取出】【速度如图需要 1000 ns】 - CPU 要取数据会优先从 Cache 中读取,因为速度快
【速度如图 5 ns】 - CPU 计算完后,会把数据再次返回给 Cache
【速度也是 5 ns】

- Cache 会从主存中一并读取目标数据以及附近空间的数据
-
整个过程全部由硬件实现
(4)性能分析
设 t_c 为访问一次 Cache 所需的时间,t_m 为访问一次主存所需的时间
-
Cache 命中率 H = \frac{Cache 的总命中次数}{Cache 的总命中次数+访问主存的总次数}
-
缺失(未命中)率 M = 1 - H
-
Cache - 主存系统的平均访问时间 t
- 先访问 Cache,未命中再访问主存:t=Ht_c+(1-H)(t_c+t+m)
- 同时访问 Cache 和主存:t=Ht_c+(1-H)t_m
-
系统平均访问时间 = 命中的概率*命中所需要花费的时间+缺失的概率*平均访存次数*一次总线读突发总线事务所需时间 【13 年统考大题】
-
性能效率 = \frac{访问 Cache 的时间}{系统平均访问时间}

(5)要解决的关键问题
- 地址映射:主存块如何存放在 Cache 中,如何将主存地址转换为 Cache 地址
- 替换策略:Cache 满后,使用何种策略对 Cache 块进行替换或淘汰
- 写入 / 更新策略:如何既保证主存块和 Cache 块的数据一致性,又尽量提升效率
2、Cache-主存映射方式
(1)全相联映射
- 只规定了主存需要映射到 Cache 中
- 没有规定它映射到 Cache 中的哪一个位置
- 通常使用按内容访问的相联存储器进行地址映射

优点 - 映射灵活
- 块冲突概率比较低
- 空间利用率也高
缺点 - 成本高
- 速度慢耗时多
(2)直接映射
-
规定好了主存中每一块都放置在 cache 中的哪个地方
-
相邻块之间映射的位置也是相邻的
-
因为主存的容量肯定比 cache 大得多,所以其实它相当于一轮轮映射过去

-
主存地址长度:主存中存储单元个数为 2^{10}, 则主存地址长度就是10
-
Cache 地址长度:Cache 中存储单元个数为 2^{10}, 则 Cache 地址长度就是10
-
Cache 行的总位数: = 标记位数t + 数据位 + 1 位有效位 + 1 位脏位 (回写策略)
-
t:【主存区号】【Tag 位】【主存字块标记】
- 通过主存区的标记位数就能知道这个 cache 是属于主存的第几区
- t = 主存地址长度 - Cache 地址长度
- t = 主存大小 / Cache 大小
-
c:【Cache 块的地址位数】
- 如有 1 k 个 Cache 行,则 Cache 块的地址位数=10
-
m:【主存块的地址位数】
- 如有 1 k个主存块,则主存块的地址位数=10
-
b:【块内地址位数】
- 如块的大小为 32 B,按字节编制,块内地址位数=5
-
标记项:
- 包括有效位,脏位,替换算法位,标记位
- 每个 Cache 行对应一个标记项
优点
- 简单、成本低、易实现
- 由于物理位置也是相邻的所以地址变换速度快
- 不需要替换算法
缺点 - 映射方式不够灵活
- 空间利用率最低
- 块冲突概率最高
(3)组相联映射
- 先按号分组【组间是直接映射】
- 组内再任意放【组内是全相联映射】
- 所属分组 = 主存块号 % 分组数

- Cache 的总块数:2^c
- Cache 分组个数:2^q 【分块个数 / 组内块数】
- 组内包含的块数:2^r 【r=1,每组包含 2 块,即二路组相联】
优点 - 另外两种方式的折中,综合效果较好
例题
-
假设主存容量为 512 KB, Cache 容量为 4 KB, 每个字块为 16 个字,每个字为 32 位
- Cache 地址为多少位?可容纳多少块?
- 主存地址为多少位?可容纳多少块?
- 在直接映射方式下,主存的第几块映射到 Cache 中的第五块(设起始字块号为 1)
- 画出直接映射方式下主存地址字段中各段的位数

-
假设主存容量为 512 K*16 位,Cache 容量为 4096*16 位,块长为 4 个 16 位的字,访存地址为字
- 在直接映射下,设计主存的地址格式
- 在全相联映射下,设计主存的地址格式
- 在二路组相联映射方式下,设计主存的地址格式
- 若主存容量为 512 K*32 位,块长不变,在四路组相联映射下,设计主存的地址格式

3、Cache 替换算法
(1)随机算法
- 若Cache已满,则随机选择一块替换
- 实现简单,但完全没考虑局部性原理,命中率低,实际效果很不稳定

(2)先进先出 FIFO
- 按调入 cache 的先后顺序来淘汰,先进的先替换
- 需要记录进入 cache 的先后次序
- 实现起来比较简单
- 没有考虑局部性原理
- 会有抖动现象:频繁的换入换出现象(刚被替换的块很快又被调入)

(3)近期最少使用 LRU
- 把最近比较少用的替换掉
- 需要记录进入 cache 的先后次序
- 需要软件计数器来记录使用的频率
- 实现起来是比较复杂且开销大
- 根据程序访问局部性原理选择近期使用得最少的存储块作为替换的块

(4)最不经常使用 LFU
- 只统计使用次数,用的最少的就替换掉谁
- 需要硬件设计计数器支持

4、Cache 写策略
(1)写命中
1)全写法【写直达法】
- 当 CPU 对 Cache 写命中时,必须把数据同时写入 Cache 和主存,一般使用写缓冲(write buffer)
- 访存次数增加,速度变慢,但更能保证数据一致性
- 在写的时候 cpu 将数据通过数据总线橙色箭头方向传输
- 由于 cpu 写给 cache 的速度和写入主存的速度会差很多
- 所以需要设计一个缓冲,先写到缓冲块中,再慢慢写入
2)回写法
- 当 CPU 对 Cache 写命中时,只修改 Cache 的内容,而不立即写入主存,只有当此块被换出时才写回主存
- 减少了访存次数,但存在数据不一致的隐患
- 在 cpu 执行写操作时,先按橙色线写入 cache 存储体中
- 此时并没有修改主存的内容,会在 cache 中设计一个脏位
- 当一块中的任何一个单元被修改时,脏位 (修改位) 被置“1”
- 需要替换掉这一块时,如果修改位为“1”,则必须先把这一块写回到主存中,然后才能再调入新的块
- 如果修改位为“0”,则这一块不必写回主存,只要用新调入的块覆盖这一块即可
(2)写不命中
1)写分配法
- 当 CPU 对 Cache 写不命中时,把主存中的块调入 Cache ,在 Cache 中修改
- 搭配回写法使用

2)非写分配法
- 当 CPU 对 Cache 写不命中时只写入主存,不调入 Cache
- 搭配全写法使用

(3)多级 Cache
- 现代计算机通常采用多级 Cache 结构


第4章 指令系统
一、指令系统
1、指令集体系结构
- 指令【机器指令】:指示计算机执行某种操作的命令,是计算机运行的最小功能单位
- 一条指令就是机器语言的一个语句,它是一组有意义的二进制代码
- 指令集:一台计算机的所有指令集合构成该机的指令系统,也称为指令集
- 指令系统是指令集体系结构(ISA) 中最核心的部分
- ISA 规定的内容主要包括:
- 指令格式,指令寻址方式,操作类型,以及每种操作对应的操作数的相应规定
- 操作数的类型,操作数寻址方式,以及是按大端方式还是按小端方式存放
- 程序可访问的寄存器编号、个数和位数,存储空间的大小和编址方式
- 指令执行过程的控制方式等,包括程序计数器、条件码定义等
2、指令格式
(1)基本指令结构
- 一条指令通常要包括操作码字段和地址码字段
- 操作码:指出该指令应执行什么操作以及具有何种功能
- 地址码:给出被操作的信息(指令或数据)的地址
- 指令的地址由程序计数器给出

(2)指令的分类
- 按指令长度分类
指令字长指一条指令所包含的二进制代码的位数,其取决于操作码的长度、地址码的长度和地址码的个数
- 单字长指令:指令长度 = 机器字长 【只需访存 1 次就能将指令完整取出】
- 双字长指令:指令长度 = 2 个机器字长 【访存 2 次才能完整取出,耗费 2 个存取周期】
- 半字长指令:指令长度 = 半个机器字长
- 按是否定长分类
- 定长指令字结构:所有指令的长度都是相等的,执行速度快,控制简单
- 变长指令字结构:指令的长度随功能而异
主存一般按字节编制,所以指令字长多为字节的整数倍
(3)具体指令结构
- 下图指令字长 32 位:
- 【操作码 (OP) 8 位】+【地址码 (A) 共 4 个,每个 6 位】
- 指令访问内存的过程:
- 首先 000000 这个位置上存放着操作指令
- A_1,A_2 上存着两串数
- 他们在 000000 指令的执行下,要进行加法操作,将结果填入到 A_3 中
- A_3 中的数据就是 A_1 + A_2 的和
- 最后再去 A_4 读取出指令,开始下一轮工作
- 内存中既有操作码,又有地址码,这样把他们放在一起并不好可以优化他们
- 把操作码放一起,地址码放一块
- 通过程序计数器使操作码 +1 顺序执行
- 优化后的好处:
- 将操作码放一块,我们可以让程序执行完一步就自动执行下一句指令
- 这样我们的指令就不用存放下一条指令的位置了
- 这样访存的次数少了一次,速度也会快点
- 如无例外(如跳转指令),执行完就直接下一条继续,也就是顺序执行

(4)指令地址码
1)零地址指令
只给出操作码 OP,没有显示地址

- 不需要操作数的指令:空操作指令,停机指令,关中断指令
- 堆栈计算机,两个操作数来自堆栈的栈顶和次栈顶单元
2)一地址指令

- 只有目的操作数的单操作数指令:
- OP (A_1) -> A_1
- 自增、自减、取反、求补
- 若地址码字段均为主存地址,完成一条指令需要 3 次访存(取指 -> 读 A_1 -> 写 A_1)
- 隐含约定目的地址的双操作数指令
- (ACC) OP (A_1) -> ACC
- 另一个操作数由 ACC(累加器)提供
- 完成一条指令需要 2 次访存(取指 -> 读 A_1)
3)二地址指令

- (A_1) OP (A_2) -> A_1
- 常用于需要两个操作数的算术运算、逻辑运算相关指令
- 完成一条指令需要 4 次访存(取指 -> 读 A_1 -> 读 A_2 -> 写 A_1)
4)三地址指令

- 常用于需要两个操作数的算术运算、逻辑运算相关指令
- (A_1) OP (A_2) -> A_3
- 完成一条指令需要 4 次访存(取指 -> 读 A_1 -> 读 A_2 -> 写 A_3)
5)四地址指令

- (A_1) OP (A_2) -> A_3,A_4 =下一条将要执行指令的地址
- 正常情况下:取指令之后 PC + 1,指向下一条指令
- 四地址指令:执行指令后,将 PC 的值修改为 A_4 所指地址
- 完成一条指令需要 4 次访存(取指 -> 读 A_1 -> 读 A_2 -> 写 A_3)
(5)指令操作码
1)定长操作码
- 在指令字的最高部分分配固定的若干位(定长)表示操作码
- 一般取 n 位操作码字段的指令系统最大能表示 2^n 条指令
- 优点:简化计算机硬件的设计,提高指令译码和识别速度
- 缺点:指令数量增加时会占用更多固定位,留给表示操作数地址的位数受限
2)可变长度操作码
- 全部指令的操作码字段的位数不固定,且分散地放在指令字的不同位置上
- 最常见的变长操作码方法是扩展操作码,使操作码的长度随地址码的减少而增加,不同地址数的指令可以具有不同长度的操作码,从而在满足需要的前提下,有效地缩短指令字长
- 优点:在指令字长有限的前提下扔保持比较丰富的指令种类
- 缺点:增加了指令译码和分析的难度,使控制器的设计复杂化
计算 - 指令字长为 16 位,每个地址码占 4 位:前 4 位为基本操作码字段 OP ,另有 3 个 4 位长的地址字段 A_1 、A_2 和 A_3
- 4 位基本操作码若全部用于三地址指令,则有 16 条,但至少须将 1111 留作扩展操作码之用,即三地址指令为 15 条
- 1111 1111 留作扩展操作码之用,二地址指令为 15 条
- 1111 1111 1111 留作扩展操作码之用,一地址指令为 15 条
- 零地址指令为 16 条

设计原则 - 不允许短码是长码的前缀,即短操作码不能与长操作码的前面部分的代码相同
- 各指令的操作码一定不能重复
总结
- 对使用频率较高的指令,分配较短的操作码
- 对使用频率较低的指令,分配较长的操作码
- 拓展操作码不一定只能有一条,也就是说不一定只有 1111 作拓展操作码
- 地址长度为 n,上一层留出 m 条指令,下一层可扩展出 m×2^n 条指令
(6)指令操作类型
1)数据传送类
- 进行 CPU 和主存之间的数据传送
- LOAD:把存储器中的数据放到寄存器中
- STORE:把寄存器中的数据放到存储器中
2)运算类
- 算术:加、减、乘、除、增1、减1、求补、浮点运算、十进制运算
- 逻辑:与、或、非、异或、位操作、位测试、位清除、位求反
- 移位操作:算术移位、逻辑移位、循环移位(带进位和不带进位)
3)程序控制类
- 改变程序执行的顺序
- 无条件转移 JMP、条件转移 BRANCH
- 调用 CALL、返回 RETURN、陷阱 Trap
- 调用指令和转移指令的区别:前者必须保存下一条指令的地址,当子程序执行结束时,根据返回地址返回到主程序继续执行,后者不需要返回
- 转移指令,子程序调用与返回指令用于解决变动程序中指令执行次序的需求,而不是数据调用次序的需求
4)输入输出类
- 进行 CPU 和 I/O 设备之间的数据传送
- 传送控制命令和状态信息
二、指令的寻址方式
1、指令寻址
(1)概念
- 确定下一条要执行的指令的存放地址
- 由程序计数器 PC 指明
- 程序计数器是指让程序执行完一步就自动执行下一句指令的物理硬件
- 若机器按字寻址,PC 给出下一条指令字的访存地址 (指令在内存中的地址),因此 PC 的位数取决于存储器的字数
- 若机器按字寻址,指令寄存器 IR 用于接收取得的指令,因此 IR 的位数取决于指令字长
(2)种类
- 顺序寻址:通过程序计数器 PC + 1,自动形成下一条指令的地址
- “1” 理解为指令字长,实际加的值会因指令长度、编址方式而不同
- 现代计算机通常是按字节编址,若指令字长 16 位,(PC) + 2
- 跳跃寻址:通过转移类指令(如相对寻址)实现,可用来实现程序的条件或无条件转移
- 跳跃:指下条指令的地址不由 PC 自动给出,而由本条指令给出下条指令地址的计算方式
- 跳跃的方式分为绝对转移【地址码直接指出转移目标地址】和相对转移【地址码指出转移目的地址相对于当前 PC 值的偏移量】
- 跳跃的结果是当前指令修改 PC 值,下一条指令仍然通过 PC 给出,CPU 总是根据 PC 的内容去主存取指令

2、数据寻址
(1)概念
- 确定本条指令的地址码指明的真实地址
- 表示的是操作数的地址
(2)地址码的组成
- 地址码 = 寻址特征 + 形式地址
- 寻址特征:指明属于那种寻址方式(其位数决定了寻址方式的种类)
- 形式地址 A:不代表操作数的真实地址,需要根据寻址特征的要求转换为对应存储器的地址
- 有效地址 EA:通过寻址方式和形式地址计算出操作数在存储器中的真实地址

- A 既可以是寄存器编号,又可以是内存地址,(A) 表示地址为 A 的数值
- EA=A 表示形式地址 A 就是真实地址 EA
- EA=(A) 表示形式地址 A 的内容就是真实地址 EA
(3)常见的数据寻址方式
访问主存空间的:
1)隐含寻址
- 定义:不直接给出操作数的地址,而是在指令中就隐含操作数的地址
- 寻址过程:
- 形式地址 A 取出对应的一个操作数
- 另一个操作数通过隐含寻址方式的指令设置,隐含在 ACC 中
- 有效地址:由程序指定
**
- 优点:有利于缩短指令字长
- 缺点:需增加存储操作数或隐含地址的硬件
2)立即寻址
- 定义:把我们实际要操作的数,直接存放在形式地址中
- 寻址过程:
- 寻址特征为#,代表立即寻址的意思
- 形式地址写的是操作数 3 的补码(011)
- 有效地址: A 就是操作数,也称立即数

- 优点:指令在执行阶段不访存,指令执行速度最快
- 缺点:A 的位数限制了立即数的范围
3)直接寻址
- 定义:地址字段给的是操作数的有效位置
- 寻址过程:根据这个有效位置去内存中寻找操作数
- 有效地址:EA = A

- 优点:简单,不需要专门计算操作数的地址,指令在执行阶段仅需访存 1 次
- 缺点:A 的位数限制了该指令操作数的寻址范围,操作数的地址不易修改
4)间接寻址
- 定义:地址字段给出的是,操作数有效地址所在主存单元的地址
- 寻址过程:去该主存单元取操作数的地址,再去找操作数
- 有效地址:EA = (A)

- 优点:可扩大寻址范围【EA 的位数大于 A 的位数】,便于编制程序【方便完成子程序的返回】
- 缺点:指令在执行阶段要多次访存(1 次间址 2 次访存),执行速度较慢
访问寄存器的:
5)寄存器寻址
- 定义:地址字段给出的是操作数所在寄存器的编号
- 寻址过程:访问该寄存器,取出操作数
- 有效地址:EA = R_i

- 优点:指令在执行阶段不用访存,只访问寄存器,执行速度快,指令字长较短【寄存器数量远小于内存单元数,地址码位数较少】
- 缺点:寄存器价格昂贵,CPU 的寄存器数量有限
6)寄存器间接寻址
- 定义:地址字段给出的是操作数所在的寄存器的地址
- 寻址过程:根据该地址去寄存器中找到操作数的有效地址
- 有效地址:EA = (R_i)

- 优点:相比间接寻址,既扩大了寻址范围,又减少了访存次数(执行阶段仅访存 1 次)
- 缺点:相比寄存器访存,执行阶段需要访存(操作数在主存中)
偏移寻址:
7)基址寻址
- 定义:CPU 中基址寄存器(BR)的内容 + 形式地址 A = 操作数的有效地址
- 寻址过程:程序运行前,CPU 将 BR 的值修改为程序的起始地址(存放在操作系统 PCB 中 )
- 有效地址:EA = (BR) + A
- 基址寄存器:
- 可采用专用寄存器,可指定某个通用寄存器
- 面向操作系统,内容由操作系统或管理程序确定,用于解决程序逻辑空间与存储器物理空间的无关性
- 程序执行过程中,基址寄存器内容不变(作为基地址),形式地址可变(作为偏移量)
- 采用通用寄存器时,可由用户决定哪个寄存器,但其内容仍由操作系统确定

- 优点:
- 可以扩大寻址范围(基址寄存器的位数大于 A 的位数)
- 用户不必考虑自己的程序存于主存的具体位置,有利于多道程序设计
- 可用于编制浮动程序
- 缺点:偏移量(A)的位数较短
8)变址寻址
- 定义:变址寄存器(IX)的内容 + 形式地址 A = 操作数的有效地址
- 有效地址:EA = (IX) + A
- 变址寄存器:
- 面向用户,程序执行过程中,内容可由用户改变(作为偏移量)
- 形式地址 A 不变(作为基地址)

- 优点:
- 可以扩大寻址范围(变址寄存器的位数大于 A 的位数)
- 在数组处理过程中,可设定 A 为数组的首地址,不断改变 IX 的内容,便可很容易形成数组中任意一个数据的地址,适合编制循环程序
- 偏移量的位数足以表示整个存储空间
9)相对寻址
- 定义:PC 的内容 + 形式地址 A = 操作数的有效地址
- 有效地址:EA = (PC) + A
- A 是相对于 PC 所指地址(下一条指令地址)的偏移量,可正可负,补码表示
- A 的位数决定操作数的寻址范围

- 优点:
- 操作数的地址不是固定的,随 PC 值的变化而变化,与指令地址之间总是相差一个固定的偏移量,因此便于程序浮动
- 广泛应用于转移指令
其他寻址:
10)堆栈寻址
- 定义:操作数存放在堆栈中,隐含使用堆栈指针(SP)作为操作数地址
- 堆栈:
- 存储器(或专用寄存器组)中一块特定的按“后进先出(LIFO)“原则管理的存储区
- 该存储区中被读 / 写单元的地址是用一个特定的寄存器给出的,该寄存器称为堆栈指针(SP)
- 硬件自动完成 SP 的加减操作
- 硬堆栈:寄存器堆栈,成本较高,不需要访存,不适合做大容量堆栈
- 软堆栈:从主存中划出一段区域,执行阶段访存 1 次
- 有效地址:入栈 / 出栈时 EA 的确定方式不同

(4)对比
- 速度方面:立即寻址 > 寄存器寻址 > 直接寻址 > 寄存器间接寻址 > 间接寻址

三、程序的机器级代码表示
四、CISC 和 RISC
1、复杂指令系统计算机(CISC)
- 设计思路:一条指令完成一个复杂的基本功能
- 代表:x86 架构,主要用于笔记本、台式机等
- 指令系统:复杂庞大
- 指令数目:一般大于 200 条
- 指令字长:不固定,指令格式多,寻址方式多
- 可访存指令:不加限制
- 各种指令执行时间:相差较大,大多数指令需要多个时钟周期才能完成
- 各种指令使用频度:相差很大
- 通用寄存器数量:较少
- 目标代码:难以用优化编译生成高效的目标代码程序
- 控制方式:绝大多数为微程序控制
- 指令流水线:可通过一定方式实现
- 兼容性:可兼容很多不同的高级语言和软件
2、精简指令系统计算机(RISC)
- 设计思路:一条指令完成一个基本“动作”,多条指令组合完成一个复杂的基本功能
- 代表:ARM 架构,主要永远手机、平板等
- 指令系统:简单精简
- 指令数目:一般小于 100 条
- 指令字长:定长,指令种类少,寻址方式种类少
- 可访存指令:只有 Load / Store 指令
- 各种指令执行时间:绝大多数在一个周期内完成
- 各种指令使用频度:都比较常用
- 通用寄存器数量:多
- 目标代码:采用优化的编译程序,生成代码较为高效
- 控制方式:绝大多数为组合逻辑控制,硬布线
- 指令流水线:必须实现
- 兼容性:较差
和 CISC 相比,RISC 的优点体现在:
- RISC 更能充分利用 VLSI(超大规模集成电路)芯片的面积
- RISC 更能提高运算速度
- RISC 便于设计,可降低成本,提高可靠性
- RISC 有利于编译程序代码优化
第5章 中央处理器
一、CPU 的功能和基本结构
1、CPU 的功能
- 指令控制:
- 完成取指令、分析指令和执行指令的操作,即程序的顺序控制
- 操作控制:
- 管理并产生由内存取出的每条指令的操作信号
- 把各种操作信号送往相应的部件,从而控制这些部件按指令的要求进行动作
- 时间控制:
- 严格控制各种操作信号的出现时间、持续时间及出现的时间顺序
- 数据加工:
- 对数据进行算术和逻辑运算
- 中断处理:
- 对计算机运行过程中出现的异常情况和特殊请求进行处理
2、CPU 的基本结构
(1)组成部分
- CPU = 运算器 + 控制器
- 运算器:对数据进行加工
- 控制器:负责协调并控制计算机各部件执行程序的指令
- CPU = 数据通路 + 控制部件

(2)CPU 寄存器的分类
按汇编语言(或机器语言)程序是否可以访问
1)用户可见的寄存器
- 可对这类寄存器编程
- 使用这类寄存器可减少对主存储器的访问次数
- 如:通用寄存器(含基址 / 变址)、程序状态字寄存器、程序计数器、累加寄存器、移位寄存器
2)用户不可见的寄存器
- 对用户透明,不可编程
- 被控制部件使用,以控制 CPU 的操作
- 保留各种状态信息:溢出标志 OF,符号标志 SF,零标志 ZF,进位标志 CF
- 如:存储器地址寄存器、存储器数据寄存器、指令寄存器、暂存寄存器
(2)运算器基本结构
1)功能
- 运算器是计算机对数据进行加工处理的中心
- 接收从控制器送来的命令并执行相应的动作,对数据进行加工和处理
2)组成
- 算术逻辑单元(ALU):进行算术 / 逻辑运算
- 程序状态字寄存器(PSW):
- PSW 存放程序状态字【标志位的组合】,用于保存系统的运行状态
- PSW 包括状态标志和控制标志
- 溢出标志 OF,符号标志 SF,零标志 ZF,进位标志 CF
- 中断标志,陷阱标志
- 累加寄存器(ACC):
- 是一个通用寄存器
- 暂放 ALU 运算的结果信息,可作为加法运算的输入端
- 通用寄存器组(GPRS):
- 如 AX,BX,CX,DX,SP
- 用于存放操作数和各种地址信息,所以其位数与机器字长相等
- SP 是堆栈指针,用于指示栈顶的地址
- 暂存寄存器:
- 暂存从数据总线或通用寄存器读来的操作数
- 对应用程序员透明
- 移位寄存器(SR):对操作数或运算结果进行移位运算
- 计数器:控制乘除运算的操作步数
(3)控制器基本结构
1)功能
- 协调并控制计算机各部件执行程序的指令序列
- 基本功能包括取指令、分析指令、执行指令
- 取指令:自动形成指令地址;自动发出取指令的命令
- 分析指令:操作码译码(分析本条指令要完成什么操作),产生操作数的有效地址
- 执行指令:根据分析指令得到的“操作命令”和“操作数地址”,形成操作信号控制序列,控制运算器、存储器以及I/O设备完成相应的操作
- 中断处理:管理总线及输入输出;处理异常情况(如掉电)和特殊请求(如打印机请求打印一行字符)
2)组成
- 程序计数器(PC):
- 用于指出下一条指令在主存中的存放地址(PC 总是存放指令地址)
- PC 有自增功能
- PC 的值会根据 CPU 在执行指令过程中自增或转移到程序的某处 (跳转指令)
- PC 的位数等于主存储器地址位数
- 指令寄存器(IR):
- 用于保存当前正在执行的那条指令
- IR 的位数取决于指令字长
- 指令译码器(ID):
- 仅对操作码字段进行译码,以确定指令的操作功能
- 存储器地址寄存器(MAR):
- 存放要访问的主存储器单元的地址
- MAR 的位数等于主存储器地址线位数
- 存储器数据寄存器(MDR):
- 存放向主存储器写入的信息或从主存储器读出的信息
- MDR 的位数等于存储字长
- 时序系统:用于产生各种时序信号,都由统一时钟 CLOCK 分频得到
- 微操作信号发生器:
- 根据 IR 的内容 (指令),PSW 的内容 (状态信息) 和时序信号产生控制计算机系统所需的各种控制信号
- 有组合逻辑型和存储逻辑型
(4)数据通路基本结构
1)专用数据通路方式
- 根据指令执行过程中的数据和地址的流动方向安排连线线路
- 使用多路选择器控制一路的输出
- 使用三态门控制输出
- 优点:性能较高,基本不存在数据冲突现象
- 缺点:结构复杂,硬件量大,不易实现
2)CPU 内部单总线方式
- 将所有寄存器的输入端和控制端都连接到一条公共通路
- 优点:结构简单,容易实现
- 缺点:传输存在较多冲突现象,性能较低
3、CPU 常混淆点
- 转移指令时,需要判别转移是否成功,若成功则 PC 修改为转移指令的目标地址,否则下一条指令的地址仍然为 PC 自增后的地址
- 计算机分两大部分:控制部件和执行部件
- 控制器就是控制部件,指令寄存器,操作控制器,程序计数器都是控制部件
- 运算器,存储器,外围设备就是执行部件
- 各寄存器的位数等于什么?【和地址有关的就取决于机器字长,和数据大小有关的就取决于容量】
- 通用寄存器:机器字长
- PC:
- 按字节编址:与存储器地址的位数相等,取决于存储器容量
- 按字编址:位数 = 存储器地址的位数 - log_2(指令字长的字节数) 【指令必须按边界对齐的方式存放】,取决于存储器容量和存储字长
- IR:指令字长
- MAR:存储器容量
- MDR:存储字长
二、指令执行过程
1、指令周期相关概念
-
指令周期:CPU 从主存中每取出并执行一条指令所需的全部时间,一个指令周期由多个机器周期组成

-
指令周期最多有 4 种机器周期:取指周期、间址周期、执行周期、中断周期(都有访问主存的操作)
-
分别对应标志触发器:FE、IND、EX、INT(“1”表示有效,如 1-->FE 表示有取值周期)

易混淆知识点
-
指令:
- CPU 区分指令和数据的依据是指令周期的不同阶段【取指周期取指令,执行周期取数据】
- 不同长度的指令,取指操作可能不同(如双字指令,三字指令和单字指令);指令长度相同的情况下,指令的取指操作是相同的
- 指令总是根据 PC 从主存中读出(无条件转移指令或中断返回指令也是如此,最终的结果还是根据 PC 从主存读出)
-
取指:
- 取指操作是控制器固有的功能,不需要操作码的控制
- 取指操作是自动进行的,控制器不需要得到相应的指令
- 取指周期简单来说是取指,即从主存中取出指令字
-
字长:
- 为了硬件设计方便,指令字长一般取存储字长的整数倍
- 如果指令字长=存储字长的 2 倍,则取一条指令需要访存 2 次,取指周期是机器周期的 2 倍
- 指令字长和机器字长无任何关系
-
中断:
- CPU 在每条指令执行结束前,都要发中断查询信号
- CPU 响应中断的时间是一条指令执行结束后
-
周期:
- 指令周期:CPU 从主存中取出并执行一条指令的时间,一个指令周期由多个机器周期组成
- 机器周期(CPU 周期):一个机器周期包含若干时钟周期
- 时钟周期(节拍 / T 周期):计算机工作的最小时间周期,是 CPU 操作的基本单位;一个时钟周期内控制信号不发生改变
- 存取周期:连续启动两次独立的读/写操作所需要的最短时间
-
周期的关系:
- 机器周期通常由存取周期确定【因为存取周期时间最长】
- 执行各条指令的机器周期数可变,各机器周期的长度可变
- 机器周期是指令执行中每步操作(如取指令,存储器读/写)所需要的时间
- 每个机器周期内的节拍数可以不等,因此长度可变
- 各种指令的功能不同,所以指令执行时所需的机器周期数可变
- 采用 DMA 方式传递数据,每传送一个数据就要占用存取周期
-
其他:
- 不采用 Cache 表明每次取指令都只是要访问内存一次
- 不采用指令预取技术表明每个指令周期都需要取指令
2、不同指令的指令周期举例
- 无条件转移指令 JMP X:
- 指令周期 = 取指周期+执行周期
- PC 被修改两次【 取值周期结束 PC 自动加 1 + 执行周期 PC 值修改为要调转到的地址】
- 间接寻址的指令:
- 指令周期 = 取指周期 + 间址周期 + 执行周期
- 为了取操作数,需要先访问一次主存,取出有效地址--->取指周期
- 然后访问主存,取出操作数--->间址周期
- 间址周期结束时,CPU 中 MDR 中的内容是操作数的有效地址 EA
- CPU 采用中断方式实现主机和 I/O 设备的信息交换且有中断请求:
- 指令周期 = 取指周期 + 间址周期 + 执行周期 + 中断周期
- CPU 在每条指令执行结束前,都要发中断查询信号
- 若有中断请求,则 CPU 进入中断响应阶段----->中断周期
- 中断周期进栈操作是将 SP-1,计算机的堆栈都是向低地址(栈顶)增加,所有进栈操作减 1 而不是加 1
3、指令周期的数据流
- 数据流:根据指令要求一次访问的数据序列
- 指令执行不同阶段,访问的数据序列不同
- 不同的指令,数据流也不同
(1)取指周期
- 任务:根据 PC 中的内容从主存中取出指令代码并放在 IR 中
- 数据流向:PC 中存放的是指令的地址,根据此地址从内存单元中取出的指令,并放在指令寄存器 IR 中,取指同时,PC+1
- PC--->MAR--->地址总线--->主存
- CU (控制单元) 发出读命令--->控制总线--->主存
- 主存--->数据总线 MDR--->IR(存放指令)
- CU 发出控制信号--->PC 内容加 1

(2)间址周期
- 任务:取操作数的有效地址
- 数据流向:以一次间址为例,将指令中的地址码送到 MAR 并送至地址总线,此后 CU 向存储器发出读命令,以获取有效地址并存至 MDR
- Ad(IR)(或 MDR)--->MAR--->地址总线--->主存
- CU 发出读命令--->控制总线--->内存
- 主存--->数据总线--->MDR(存放有效地址)
- 有效地址--->指令的地址码字段
- Ad(IR) 表示取出 IR 中存放的指令字的地址字段

(3)执行周期
- 任务:取操作数,并根据 IR 中的指令字的操作码通过 ALU 操作产出执行结果
- 数据流向:不同指令操作不同,无统一的数据流向
(4)中断周期
- 任务:处理中断请求
- 数据流向:假设程序断点存入堆栈中,并用 SP 指示栈顶指针,而且进栈操作是先修改指针,后存入数据;出栈操作是先删除数据,后修改指针
- CU 控制将 SP 减 1,SP--->MAR--->地址总线--->主存
- CU 发出写命令--->控制总线--->主存
- PC--->MDR--->数据总线--->主存(程序断点存入主存)
- CU(中断服务程序的入口)--->PC

4、指令的执行方案
(1)单周期处理器
- 定义:
- 每条指令都在固定的时钟周期内完成【CPI = 1】,指令之间串行执行
- 指令周期取决于执行时间最长的指令的执行时间
- 特点:串行,相同执行时间
(2)多周期处理器
- 定义:
- 指令之间串行执行
- 指令需要几个周期就为其分配几个周期
- 可以选用不同个数的时钟周期来完成不同指令的执行过程【CPI > 1】
- 特点:串行,不同执行时间
(3)流水线处理器
- 定义:
- 力争在每个时间脉冲周期完成一条指令的执行过程【理想情况下,CPI = 1】
- 尽量让多条指令同时运行,但各自处在不同的执行步骤中
- 特点:并行
三、数据通路的功能和基本结构
1、数据通路概述
- 定义:
- 数据在指令执行的过程中所经过的路径,包括路径上的部件,称为数据通路
- ALU、通用寄存器、状态寄存器、异常和中断处理逻辑等都收数据通路的一部分
- 它描述了信息从哪里开始,中间经过哪些部件,最后被传送到哪里
- 功能:实现 CPU 内部的运算器与寄存器及寄存器之间的数据交换
- 易混淆知识点:
- 数据通路是由控制部件控制,控制部件根据每条指令功能的不同生成对数据通路的控制信号
- 单总线数据通路将所有寄存器的输入输出端都连接在一条公共通路上,一个时钟内只允许一次操作,无法完成指令的所有操作
- CPU 的读 / 写控制信号线决定了是从存储器读还是向存储器写
- 内部总线是指同一部件之间的线,系统总线是同一台计算机系统各部件之间的线
2、数据通路的基本结构
(1)CPU 内部单总线方式
- 定义:将所用寄存器的输入端与输出端连接到一条公共通路上
- 特点:结构比较简单,数据传输存在较多的冲突现象,性能较低

- in 表示该部件的允许输入控制信号;out 表示该部件的允许输出控制信号
- ALU 只能有一个输入端与总线相连,另一个输入端需要通过暂存器与总线相连
(2)CPU 内部多总线方式
- 定义:将所用寄存器的输入端与输出端都连接到多条公共通路上
- 特点:相较单总线结构,效率较高
(3)专用数据通路方式
- 定义:根据指令执行过程中的数据和地址的流动方向安排连接线路
- 特点:避免使用共享的总线,性能较好,但硬件总量较大
3、数据通路的操作举例
以 CPU 内部单总线数据通路为例:
(1)寄存器之间数据传送
比如把 PC 内容送至 MAR,实现传送操作的流程及控制信号为:
- (PC) -> Bus 【PCout 有效,PC 内容送至总线】
- Bus -> MAR 【MARin 有效,总线内容送 MAR】
(2)主存与 CPU 之间的数据传送
比如 CPU 从主存读取指令,实现传送操作的流程及控制信号为:
- (PC) -> Bus -> MAR 【PCout 和 MARin 有效,现行指令地址 -> MAR】
- 1 -> R 【CU 发读命令(通过控制总线)】
- MEM (MAR) -> MDR 【MDRin 有效】
- MDR -> Bus -> IR 【MDRout 和 IRin 有效,现行指令 -> IR】
(3)执行算术或逻辑运算
比如一条加法指令,微指令序列及控制信号为:
- Ad (IR) -> Bus -> MAR 【MDRout 和 Yin 有效】
- 1 -> R 【CU 发读命令】
- MEM (MAR) -> 数据线 -> MDR 【MDRin 有效】
- MDR -> Bus -> Y 【MDRout 和 Yin 有效,操作数 -> Y】
- (ACC) + (Y) -> Z 【ACCout 和 ALUin 有效,CU 向 ALU 发送加命令】
- Z -> ACC 【Zout 和 ACCin 有效,结果 -> ACC】
四、控制器的功能和工作原理
1、硬布线控制器
(1)基本原理
- 根据指令的要求、当前的时序及外部和内部的状态,按时间顺序发送一系列微操作控制信号
- 是由复杂的组合逻辑门电路和一些触发器构成,又称组合逻辑控制器

(2)CU 的输入信号来源
- 经指令编译器译码产生的指令信息
- 时序系统产生的机器周期信号和节拍信号
- 来自执行单元的反馈信号,即标志
微操作控制信号的形成主要与指令译码信号和时钟信号有关
(3)硬布线控制器的时序系统及微操作
- 时钟周期:用时钟信号控制节拍发生器,可以产生节拍,每个节拍的宽度正好对应一个时钟周期
- 机器周期:可以视为所有指令执行过程中的一个基准时间
- 指令周期:CPU 从主存中取出并执行一条指令的时间称为指令周期
- 微操作命令分析:控制单元发出各种操作命令序列的功能
(4)CPU 的控制方式
1)同步控制方式
- 系统有一个统一的时钟,所有的控制信号都来源于这个统一的时钟信号
- 通常以最长的微操作序列和最繁琐的微操作作为标准
- 采取完全统一的、具有相同时间间隔和相同数目的节拍作为机器周期来运行不同的指令
- 优点:控制电路简单
- 缺点:运行速度慢
2)异步控制方式
- 不存在基准时标信号,各部件按照自身固有速度工作,通过应答方式进行联络
- 优点:运行速度快
- 缺点:控制电路较为复杂
3)联合控制方式
- 介于同步、异步之间的一种折中
- 对大部分采用同步控制,小部分采用异步控制
(5)设计步骤

(6)安排微操作时序的原则
- 原则一:微操作的先后顺序不得随意更改
- 原则二:被控对象不同的微操作尽量安排在一个节拍内完成
- 原则三:占用时间较短的微操作尽量安排在一个节拍内完成并允许有先后顺序
2、微程序控制器
(1)基本原理
- 采用存储逻辑实现,即把微操作信号代码化
- 将每条机器指令编写成一个微程序,每个微程序包含若干微指令,每条微指令对应一个或几个微操作命令
- 机器指令---->微程序---->微指令----->微操作命令
- 这些微程序可以存到一个控制存储器中,用寻址用户程序机器指令的办法来寻址每个微程序中微指令
(2)基本概念
1)微命令与微操作
- 微操作:执行部件收到微命令后所进行的操作【是计算机中最基本、不可再分解的操作】
- 微命令:控制部件向执行部件发出的各种控制命令【是构成控制序列的最小单位】
- 相容性微命令:可以同时出现、共同完成某一些微操作的微命令
- 互斥性微命令:指在机器中不允许同时出现的微命令
硬布线控制器中也有微命令和微操作的概念
2)微指令与微周期
- 微指令:若干微命令的集合
- 操作控制字段【微操作码字段】:用于产生某一步操作所需的各种控制信号
- 顺序控制字段【微地址码字段】:用于控制产生下一条要执行的微指令地址
- 微周期:指从控制存储器中取出并执行一条微指令所需的全部时间,通常为一个时钟周期
- 微地址:存放微指令的控制存储器的单元地址
3)主存储器与控制存储器
- 主存:用于存放程序和数据,在 CPU 外部,用 RAM 实现
- 控制存储器【CM】: 用于存放微程序,在 CPU 内部,用 ROM 实现
4)程序与微程序
- 程序:是指令的有序集合,用于完成特定的功能
- 微程序:是微指令的有序集合,一条指令的功能由一段微程序实现
5)微程序和机器指令
- 一般来说,一条机器指令对应一个微程序
(3)寄存器分类
- 地址寄存器【MAR】:存放主存的读 / 写地址
- 微指令地址寄存器【uPC 或 CMAR】:存放待执行的微指令在控制存储器中的微地址
- 指令寄存器【IR】:存放从主存中读出的指令
- 微指令寄存器【uIR 或 CMDR】:存放从控制存储器中读出的微指令
(4)基本组成
- 控制存储器:核心部件,用于存放各指令对应的微程序,控制存储器可用 ROM 构成
- 微指令寄存器:存放从 CM 中取出的微指令,位数与微指令字长相等
- 微地址形成部件【起始和转移地址形成部件】:用于产生初始微地址和后继微地址,以保证微指令的连续执行
- 微地址寄存器:接受微地址形成部件送来的微地址,为在 CM 中读取微指令做准备

(5)工作过程
实际上就是在微程序控制器的控制下计算机执行机器指令的过程:
- 执行取微指令公共操作
- 在机器开始运行时,自动地将取指微程序的入口地址送入 CMAR,并从 CM 中读出相应的微指令进入 CMDR
- 取指微程序的入口地址一般为 CM 的 0 号单元
- 取指微程序执行完成后,从主存中取出的机器指令就已存入指令寄存器中
- 由机器指令的操作码字段通过微地址形成部件产生该及其指令所对应的微程序的入口地址,并送入 CMAR
- 从 CM 中逐条取出对应的微指令并执行
- 执行完对应于一条机器指令的一个微程序后,又回到取指微程序的入口地址,继续第一步
(6)微指令的编码方式【控制方式】
目的:保证速度的情况下尽量缩短指令字长
1)直接编码方式
- 无需进行译码,微指令的微命令字段中的每一位都代表一个微命令
- 优点:简单、直观、执行速度快,操作并行性好
- 缺点:微指令字长过长,n 个微指令就要求微指令的操作字段有 n 位,造成控制存储器容量极大

2)字段直接编码方式
- 将微命令字段分成若干小字段,每段经译码后发出控制信号
- 每个字段独立编码,每种编码都代表一个微命令且各字段编码含义单独定义,与其他字段无关
- 分段原则:
- 互斥性微命令组合在同一字段中,把相容性微命令组合在不同字段中
- 每个小段中包含的信息位不能太多,否则将增加译码电路的复杂性和译码时间
- 一般每个小段还要留出一个状态,表示本字段不发出任何微命令【某字段长度 3 位时,最多只有 7 个互斥微命令】
- 优点:可以缩短微指令字长
- 缺点:要通过译码电路之后再发出微命令,速度慢

3)字段间接编码方式
- 一个字段的某些微命令需由另一字段中的某些微命令解释
- 由于不是靠字段直接译码发出的微命令,因此称为字段间接编码
- 优点:可进一步缩短微指令字长
- 缺点:削弱了微指令的并行能力

(7)微指令的格式
| 水平型 | 垂直型 |
|---|---|
| 并行操作能力强、效率高、灵活性强 | 相反 |
| 执行一条指令的时间短 | 相反 |
| 微指令字较长但微程序短 | 相反 |
| 用户难以掌握 | 与指令相似,相对容易掌握 |
1)水平型微指令
- 一条水平型微指令定义并执行多个并行操作的微指令
- 直接编码,字段直接编码,字段间接编码都属于水平型微指令
- 优点:微程序短,执行速度快
- 缺点:微指令长,编写微程序比较麻烦

2)垂直型微指令
- 一条微指令只能定义并执行一个微命令
- 由微操作码字段规定具体功能
- 优点:微指令短、简单、规整、便于编写程序
- 缺点:微程序长,执行速度慢,工作效率低

3)混合型微指令
- 在垂直型的基础上增加一些不太复杂的并行操作
- 微指令较短,仍便于编写;微程序也不长,执行速度加快
(8)微指令的地址形成方式
- 直接由微指令的下地址字段指出:微指令格式中设置一个下地址字段【断定方式】
- 根据机器指令的操作码形成:机器指令取至 IR 后,微指令的地址由操作码经微地址形成部件形成
- 增量计数器法【微地址连续】:(CMAR) + 1 -> CMAR
- 分支转移:根据各种标志
- 通过测试网络形成:由硬件直接产生微程序入口地址
(9)设计步骤

(10)微程序设计分类
-
静态微程序设计和动态微程序设计
- 静态:微程序无需改变,采用 ROM
- 动态:通过改变微指令和微程序改变机器指令,有利于仿真,采用 EPROM
-
毫微程序设计
- 微程序设计:用微程序解释机器指令
- 毫微程序设计: 用毫微程序解释微程序
- 毫微指令与微指令的关系好比微指令与机器指令的关系
两者的比较
| 微程序控制器 | 硬布线控制器 | |
|---|---|---|
| 工作原理 | 微操作控制信号以微程序的形式存放在控制存储器中,执行指令时读出即可 | 微操作控制信号由组合逻辑电路根据当前的指令码、状态和时序,即时产生 |
| 执行速度 | 慢 | 快 |
| 规整性 | 较规整 | 烦琐、不规整 |
| 应用场合 | CISC CPU | RISC CPU |
| 易扩充性 | 易扩充修改 | 困难 |
五、异常和中断机制
中断和异常本质上一样,不同点:
- 缺页”或“溢出”等异常事件是由特定指令在执行过程中产生的;中断不与任何指令相关联,也不阻止任何指令的完成
- 异常的检测由 CPU 自身完成,不必通过外部的某个信号通知 CPU;而 CPU 必须通过中断请求线获取中断源的信息,才能知道哪个设备发生了何种中断
1、异常(内中断)
(1)基本概念
- 由 CPU 内部产生的意外事件被称为异常
- 是 CPU 执行一条命令时,由 CPU 在其内部检测到的,与正在执行指令相关的同步事件
- 每个指令周期末尾,CPU 都会检查是否有外中断信号需要处理
(2)分类
- 硬故障中断:由硬连线出现异常引起的
- 如存储器校验错、总线错误等
- 包括终止异常和外中断
- 程序性异常【软件中断】:指在 CPU 内部因执行指令而引起的异常事件
- 如整除 0、溢出、断点、单步跟踪、非法指令、栈溢出、地址越界、缺页等
- 包括故障异常和自陷异常
按异常发生的原因和返回方式不同,可分为:
1)故障(Fault)
- 概念:在引起故障的指令启动之后、执行结束前被检测到的异常事件
- 举例:
- 指令译码时,出现“非法操作码”
- 取数据时,发生“缺段”或“缺页”
- 除数为零
- 地址越界
- 注意:
- 对于“缺段”“缺页”等异常事件,处理之后回到发生故障的指令继续执行
- 断点为当前发生故障的指令
- 对于“非法操作码”“除数为 0”等,因无法通过异常处理程序恢复故障,因此不能回到原断点执行,必须终止进程的执行
2)自陷(Trap)
- 概念:也称陷阱或陷入,是预先安排的一种“异常事件”,就像预先设置好的“陷阱”一样
- 举例:
- x86 机器中,用于程序调试“断点设置”和单步跟踪功能
- 系统调用命令
- 条件自陷指令
- 注意:
- 系统调用等自陷异常处理之后,回到自陷指令的下一条指令继续执行
3)终止(Abort)
- 概念:若在执行指令的过程中发生了使计算机无法继续执行的硬件故障,那么程序将无法继续执行,只能终止
- 举例:
- 控制器出错
- 存储器校验错
- 调出中断服务程序来重启系统
- 注意:
- 不是由特定指令产生的,而是随机发生的
2、中断(外中断)
(1)基本概念
- 由来自 CPU 外部的设备发出的中断请求(常用于输入输出)被称为中断
- 典型的由外部设备触发的、与当前正在执行的指令无关的异步事件
- 外部 I/O 设备通过特定的中断请求信号线向 CPU 提出中断请求
- CPU 每执行完一条指令就检查中断请求信号线,若检测到中断请求,则进入中断响应期
- 外部中断都是在一条指令执行完成后(中断周期)才被检测并处理的
(2)分类
举例:
- I/O 中断:键盘输入,打印机缺纸
- 时钟中断
1)可屏蔽中断
- 概念:
- 通过可屏蔽中断请求线 INTR 向 CPU 发出的中断请求
- CPU 可以通过在中断控制器中设置相应的屏蔽字来屏蔽或不屏蔽它,被屏蔽的中断信号将不被送到 CPU
2)不可屏蔽中断
- 概念:
- 通过不可屏蔽中断请求线 NMI 向 CPU 发出的中断请求
- 通常是非常紧急的硬件故障,如电源掉电等
3、异常和中断响应过程
- 从 CPU 检测到异常或中断事件,到调出相应的处理程序,整个过程称为异常和中断响应
- 响应过程不可被打断,整个中断处理过程是软 / 硬件协同实现的
- 异常和中断事件都是由硬件检测实现的
(1)关中断
- 在保存断点和程序状态期间,不能被新的中断打断,因此要禁止响应新的中断,即关中断
- 设置中断允许触发器(IF)实现【IF = 1 代表开中断,表示允许响应中断】
(2)保存断点和程序状态
- 为了能在异常和中断处理后正确返回到被中断的程序继续执行,必须将程序的断点(返回地址)送到栈或特定寄存器中
- 通常保存在栈中,为了支持异常或中断的嵌套
- 被中断时的 PSW 也要保存,并在返回时恢复
(3)识别异常和中断并转到相应的处理程序
- 软件识别:
- CPU 设置一个异常状态寄存器,用于记录异常原因
- 操作系统使用一个统一的异常或中断查询程序,按优先级顺序查询异常状态寄存器,然后转到内核处理相应程序
- 异常、中断采用
- 硬件识别【向量中断】:
- 异常或中断处理程序的首地址称为中断向量
- 所有中断向量存放在中断向量表
- 每个异常或中断被指定一个中断类型号,可据此快速找到对应的处理程序
- 中断采用
六、指令流水线
1、流水线的基本概念
(1)如何提高处理机的并行性
- 时间上的并行技术:
- 将一个任务拆分成几个不同的子阶段
- 每个阶段在不同的功能部件上并行执行,即流水线技术
- 空间上的并行技术:
- 在一个处理机设置多个执行相同任务的功能部件
- 并让这些功能部件并行工作,这样的处理机称为超标量处理机
(2)指令流水线的定义
- 将指令执行过程的各阶段视为相应的流水段,则指令的执行过程就构成了一条指令流水线

- 设用时最长的流水段用时 X 秒 (如 200 ns),总执行时间为 y 秒 (如 700 ns),系统由 N 条指令,度为 1
- 则单处理机用时为 y × N,流水线处理机用时为 y + (N - 1) × X
- 不能缩短单条指令的执行时间,但对于整个程序来说,执行效率得到大幅提升
(3)指令集应具备的特点
- 指令长度尽量一致,有利于简化取指和指令译码操作
- 指令格式尽量规整,尽量保证源寄存器的位置相同,有利于在指令未知时就可取存寄存器操作数
- 采用 Load/Store 指令,把 Load/Store 指令的地址计算和运算指令的执行步骤规整到同一个周期中,有利于减少操作步骤
- 数据和指令在存储器中“对齐”存放,这样有利于减少访存次数使所需数据在一个流水段内就可以从存储器中找到
(4)流水线的表示方法
- 采用时空图描述流水线的执行情况

(5)流水线的性能指标
1)流水线的吞吐率(TP)
- 吞吐率:单位时间内流水线所完成的任务数量,或是输出结果的数量
- 设任务数 m,处理完成 n 个任务所用的时间为 T_k
- TP=\frac{n}{T_k}=\frac{n}{(k+n-1)Δt}
- 最大吞吐率:TP_{max}=\frac{1}{Δt}

- 注意:
- m 段流水线的 CPU 吞吐能力 = m 个并行部件的 CPU 吞吐能力
- m 段流水线在第 m 个时钟周期后,每个时钟周期都可完成一条指令
- m 个并行部件在 m 个时钟周期后能完成全部的 m 条指令,等价于平均每个时钟周期完成一条指令
2)流水线的加速比(S)
- 加速比:完成同样一批任务,不使用流水线所用的时间与使用流水线所用的时间之比
- 设顺序执行的时间为 T_0,使用流水线的执行时间 T_k
- S=\frac{T_0}{T_k}=\frac{kn}{k+n-1}
- 最大加速比: S_{max}=k

3)流水线的效率(E)
- 效率:流水线的设备利用率,在时空图上,表示为完成 n 个任务占用的时空区有效面积与 n 个任务所用的时间与 k 个流水段所围成的时空区总面积之比
- E=\frac{T_0}{kT_k}

2、流水线的基本实现
(1)流水线的数据通路
- 数据通路:数据在功能部件之间传送的路径
- 包括数据通路上流经的部件(如 PC,ALU,通用寄存器,状态寄存器,异常和中断处理逻辑)
- 数据通路由控制部件控制,控制部件根据每条指令功能的不同生成对数据通路的控制信号
- 数据通路不包含生成控制信号的控制部件

(2)流水线的控制信号

- 流水寄存器保存的信息
- 后面流水段要用到的所有数据信息
- 包括 PC+4,、指令、立即数、目的寄存器、ALU 运算结果、标志信息等
- 它们是前面阶段在数据通路中执行的结果
- 后面传递过来的后面各流水段要用到的所有控制信号
- 后面流水段要用到的所有数据信息
(3)流水线的执行过程
- 假设一条指令的执行有 5 条流水线
- 取指(IF):从指令寄存器或 Cache 中取指令
- 译码/读寄存器(ID):操作控制器对指令进行译码,同时从寄存器堆中读取操作数
- 执行/计算地址(EX):执行运算操作或计算地址
- 访存(MEM):对存储器进行读写操作
- 写回(WB):将指令执行结果写回寄存器
3、流水线的冒险与处理
- 流水线冒险:在指令流水线中,可能会遇到一些情况使得后续指令无法正确执行而引起流水线阻塞的现象
- 根据导致冒险的原因不同分为:结构冒险、数据冒险和控制冒险
(1)结构冒险
- 定义:由于多条指令在同一时刻争用同一资源而形成的冲突,也称资源冲突

解决方法: - 前一指令访存时,使后一条指令(以及其后续指令)暂停一个时钟周期
- 设置多个独立的部件:
- 寄存器访存冲突:将寄存器的读口和写口独立开来
- 访存冲突:单独设置数据存储器和指令存储器,使取数和取指令操作各自在不同的存储器中进行(分离结构的 Cache)
(2)数据冒险
-
定义:后面指令用到前面指令的结果时,前面指令的结果还没有产生,也称数据相关
-
乱序执行的流水线中存在三种数据相关:
- 写后读 RAW:当前指令将数据写入寄存器后,下一条指令才能从该寄存器读取数据
- 读后写 WAR:当前指令读出数据后,下一条指令才能写入寄存器
- 写后写 WAW:当前指令写入寄存器后,下一条指令才能写入寄存器
-
按序执行的流水线中,只可能出现 RAW 冲突

解决方法: -
延迟执行相关指令:把遇到数据相关的指令及其后续指令都暂停一至几个时钟周期,直至数据相关问题消失后再继续执行,可分为硬件阻塞(stall) 和软件插入空操作 nop

-
转发(旁路)技术:设置相关转发通路,不等前一条指令把计算结果写回寄存器,下一条指令也不再从寄存器读,而将数据通路中生成的中间数据直接转发到 ALU 的输入端

-
load-use 数据冒险处理:load 指令与紧邻的运算类指令存在数据相关问题,可以使用延迟+转发技术解决,最好是在程序编译时进行优化,通过调整指令顺序避免出现该现象

(3)控制冒险
- 定义:当流水线遇到转移指令和其他改变 PC 值的指令而造成断流时,会引起控制相关

解决办法 - 延迟:延迟损失多少时间片,就插入多少条 nop 指令或者进行 stall
- 对转移指令进行分支预测:
- 静态预测:总是预测条件不满足,则按序继续执行分支指令的后续指令
- 动态预测:根据程序执行的历史情况,进行动态调整,有效提高预测准确率
- 预取转移成功和不成功两个控制流方向上的目标指令
- 加快和提前形成条件码
- 提高转移方向的猜准率
4、高级流水线技术
(1)超标量流水线技术
- 定义:每个时钟周期内可并发多条独立指令,以并行操作方式将两条或多条指令编译并执行,也称动态多发射技术

- 每个时钟周期内可并发多条独立指令
- 并不影响流水线功能段的处理时间
- 要配置多个功能部件,实际上是以空间换时间
- 乱序执行
- 通过编译优化技术,把可并行执行的指令搭配起来
(2)超长指令字技术
- 定义:由编译程序挖掘出指令潜在的并行性,将多条能并行操作的指令组合成一条具有多个操作码的超长指令字(可达几百位),也称静态多发射技术

- 需要多个处理部件
(3)超流水线技术
- 定义:在一个时钟周期内再分段

- 流水线功能段越多,时钟周期越短,指令吞吐率越高
- 通过提高流水线主频的方式来提升流水线性能的
- 流水线级数越多,用于流水线寄存器的开销越大
七、多处理器的基本概念
1、SISD、SIMD、SIMD、MIMD 的基本概念
- 基于指令流的数量和数据流的数量,将计算机体系结构分为 SISD,SIMD,MISD 和 MIMD
- 常规的单处理机属于 SSID,常规的多处理机属于 MIMD
(1)单指令流单数据流结构 (SISD)
- 串行计算机结构
- 通常只包含一个处理器和一个存储器
- 有些使用流水线的方式,所以有时会设置多个功能部件,并采用多模块交叉方式组织存储器
(2)单指令流多数据流结构(SIMD)
- 一个指令流同时对多个数据流进行处理,称为数据级并行技术
- 由一个指令控制部件、多个处理单元组成
- 每个处理单元虽然执行的都是同一条指令, 但每个单元都有自己的地址寄存器,就有了不同的数据地址
- 一个顺序应用程序被编译之后, 可能按照 SISD 组织并运行于串行硬件上,也可能按 SIMD 组织并运行于并行硬件上
- for 循环效率高,但 switch 或 case 时效率低
- 向量处理器也是 SIMD 的变体,是一种实现了直接操作一维数组(向量)指令集的 CPU
(3)多指令流单数据流结构(MISD)
- 同时执行多条指令,处理同一个数据
- 实际上不存在这样的计算机
(4)多指令流多数据流结构(MIMD)
- 同时执行多条指令,处理多个不同的数据
- 分为多计算机系统和多处理器系统
- 多计算机系统:
- 每个计算机节点都具有各自的私有存储器,并且具有独立的主存地址空间
- 不能通过存取指令来访问不同节点的私有存储器
- 而要通过消息传递进行数据传送,也称为消息传递 MIMD
- 多处理器系统:
- 共享存储多处理器(SMP)系统的简称
- 它具有共享的单一地址空间,通过访存指令来访问系统中的所有存储器,也称共享存储 MIMD
- 多计算机系统:
(5)联系与区别
- SIMD 和 MIMD 是两种并行计算模式(多数据就是并行)
- SIMD 是一种数据级并行模式【数据级别】
- MIMD 是一种并行程度更高的线程级并行或线程级以上并行计算模式【线程级别】
2、硬件多线程
- 引入硬件多线程的目的:为了减少开销
- 硬件多线程中必须为每个线程提供单独的通用寄存器组、单独的程序计数器等
- 线程的激活只需要激活选中的寄存器,从而省略了与存储器数据交换的环节,节省了开销


(1)细粒度多线程
- 多个线程之间轮流交叉执行指令,多个线程之间的指令是互不相关的
- 可以乱序并行执行
- 该方式下,处理器能在每个时钟周期切换线程
- 实现指令级并行
(2)粗粒度多线程
- 连续几个时钟周期都执行同一线程的指令序列
- 仅在一个线程出现较大开销的阻塞时,才切换线程;如 Cache 缺失
- 当发生流水线阻塞的时候,必须清除被阻塞的流水线
- 新线程的指令开始执行前需要重载流水线,开销较上一种较大
- 实现指令级并行
(3)同时多线程(SMT)
- 又叫做超线程技术 HT
- 在实现指令级并行的同时,实现线程级并行
3、多核处理器
- 将多个处理单元集成到单个 CPU 中,每个处理单元称为一个核(core)
- 每个核可以有自己的 Cache,也可以共享一个 Cache
- 所有核一般都是对称的,并且共享主存,因此多核属于共享存储的对称多处理器
- 在多核计算机系统中,若要充分发挥硬件的性能,必须采用多线程执行,使每个核在同一时刻都有线程在执行,这是真正的并行执行
4、共享内存处理器(SMP)
- 定义:具有共享的单一物理地址空间的多处理器
- 处理器通过存储器中的共享变量相互通信,所有处理器都能通过存取指令访存任何存储器的位置
- 即使这些系统共享同一个物理地址空间,它们仍然可以在自己的虚拟地址空间中单独地运行程序
- 单一地址空间的多处理器分类
- 统一存储访问(UMA)多处理器:
- 根据处理器与共享存储器之间的连接方式
- 分为基于总线、基于交叉开关网络和基于多级交换网络连接等几种处理器
- 每个处理器对所有存储单元的访问时间都是大致相同的
- 非统一存储访问(NUMA)多处理器:
- 某些存储器的访存速度较快,具体取决于哪个处理器退出访问请求及访问哪个字【由于主存被分割给了不同的处理器】
- 处理器中不带高速缓存时,被称为 NC-NUMA
- 处理器中带有一致性高速缓存时,被称为 CC-NUMA(某些访问请求要比其他的快)
- 统一存储访问(UMA)多处理器:
第6章 总线
一、总线概述
1、总线的基本概念
(1)总线的定义
- 总线:一组能够为多个部件分时和共享的公共信息传送线路
- 目的:I/O 设备的种类和数量越来越多,设计总线来解决 I/O 设备与主机之间连接的灵活性
- 优点:便于增减外设,减少信息传输线的条数
- 缺点:降低了信息传输的并行性和信息的传输速度
(2)总线的特点
- 分时性:同一时刻只允许有一个部件向总线发送消息,如果系统中有多个部件,则它们只能分时地向总线发送消息
- 共享性:指总线上可以挂接多个部件,各个部件之间互相交换的信息都可通过这组线路分时共享,多个部件可同时从总线上接收相同的信息
(3)总线设备
- 按其对总线有无控制能力可分为主设备和从设备
- 主设备:获得总线控制权的设备
- 从设备:被主设备访问的设备,它只能响应从主设备发来的各种总线命令
(4)总线特性
- 机械特性:尺寸,形状
- 电气特性:传输方向和有效电平范围
- 功能特性:每根传输线的功能
- 时间特性:信号和时序的关系
2、总线的分类
(1)按功能
- 片内总线:
- 芯片内部的总线
- 是 CPU 芯片内部寄存器与寄存器之间、寄存器与 ALU 之间的公共连接线
- 系统总线:
- 计算机系统内各功能部件(CPU、主存、I/O 接口)之间相互连接的总线
- 按系统总线传输内容的不同又可分为 3 类
- 数据总线:
- 传输各功能部件之间的数据信息
- 是双向传输线
- 位数反映一次能传送的数据的位数【与机器字长、存储字长有关】
- 地址总线:
- 指出主存和 I/O 设备接口电路的地址
- 是单向传输线
- 位数反映最大的寻址空间【与主存地址空间大小及设备数量有关】
- 控制总线:
- 一根控制线传输一个信号
- 有出:CPU 送出的控制命令
- 有入:主存(或外设)返回 CPU 的控制信号
- 数据总线:
- I/O 总线:
- 主要用于连接中低速的 I/O 设备
- 通过 I/O 接口与系统总线相连接
- 目的是将低速设备和高速总线分离,以提升总线的系统性能
- 常见的有 USB、PCI 总线
- 通信总线:
- 计算机系统之间或计算机系统与其他系统(如远程通信服务、测试设备)之间传送信息的总线
- 也称外部总线
(2)按时序控制方式
- 同步总线:总线上连接的部件或设备通过统一的时钟进行同步
- 异步总线:以信号握手的方式来协调各部件或设备之间的信息传输,总线操作时序不是固定的
(3)按数据传输方式
- 串行传输:只有一条双向传输或两条单向传输的数据线,数据按比特位串行顺序传输
- 优点:
- 成本低廉,广泛应用于长距离传输
- 应用于计算机内部时,可以节省布线空间
- 可通过不断提高工作频率来提高传输速度,使其速度最终超越并行总线
- 缺点:
- 在数据发送和接收的时候要进行拆卸和装配,要考虑串行-并行转换的问题
- 优点:
- 并行传输:有多条双向传输的数据线,可以实现多比特位的同时传输
- 优点:
- 总线的逻辑时序比较简单,电路实现起来比较容易
- 缺点:
- 信号线数量多,占用更多的布线空间
- 数据线之间相互干扰会造成传输错误,因此适合近距离传输
- 优点:
- 总线复用方式:不同信号在同一条信号线上分时传输
3、系统总线的结构
(1)单总线结构
- 结构:CPU、主存、I/O 设备(通过 I/O 接口)都连接在一组系统总线上,允许 I/O 设备之间、I/O 设备和 CPU 之间或 I/O 设备与主存之间直接交换信息

- 优点:结构简单,成本低,易于接入新的设备
- 缺点:带宽低,负载重,多个部件只能征用唯一的总线,且不支持并发传送操作
(2)双总线结构
- 结构:双总线结构有两条总线,一条是主存总线,用于 CPU、主存和通道之间进行数据传送;另一条是 I/O 总线,用于多个外部设备与通道之间进行数据传送

- 优点:将较低速的 I/O 设备从单总线上分离出来,实现存储器总线和 I/O 总线分离
- 缺点:需要增加通道等硬件设备
(3)三总线结构
- 结构:三总线结构是在计算机系统各部件之间采用 3 条各自独立的总线来构成信息通路,这 3 条总线分别为主存总线、I/O 总线和直接内存访问 DMA 总线
- 优点:提高了 I/O 设备的性能,使其更快地响应命令,提高系统吞吐量
- 缺点:系统工作效率较低
4、总线的性能指标
- 总线传输周期【总线周期】:
- 一次总线操作所需的时间,由若干总线时钟周期构成
- 包括申请阶段、寻址阶段、传输阶段和结束阶段
- 总线时钟周期:
- 机器的时钟周期
- 计算机有一个统一的时钟,以控制整个计算机的各个部件,总线也要受此时钟的控制
- 现在的计算机中,总线时钟周期也有可能由桥接器提供
- 总线工作频率:
- 总线上各种操作的频率,为总线周期的倒数
- 工作频率=\frac{1}{总线周期}
- 若总线周期 = N 个时钟周期,则总线的 工作频率=\frac{时钟频率}{N}
- 实际上指一秒内传送几次数据
- 总线时钟频率:
- 机器的时钟频率,为时钟周期的倒数
- 时钟频率=\frac{1}{时钟周期}
- 实际上指一秒内有多少个时钟周期
- 总线宽度【总线位宽】:
- 总线上同时能传输的数据位数
- 通常指数据总线的根数,如 32 根称为 32 位(bit)总线
- 总线带宽:
- 总线的最大数据传输率,即单位时间内总线上最多可传输数据的位数
- 总线带宽=总线工作频率×\frac{总线位宽}{8}(bit/s)=总线工作频率×(总线带宽/8)(B/s)
- 总线带宽=\frac{总线宽度}{总线周期}(bit/s)=\frac{总线宽度/8}{总线周期}(B/s)
- 在计算实际的有效数据传输率时,要用实际传输的数据量除以耗时
- 总线复用:
- 一种信号线在不同的时间传输不同的信息
- 可以使用较少的线传输更多的信息,从而节约空间和成本
- 信号线数:
- 地址总线、数据总线和控制总线3种总线数的总和称为信号线数
5、常见的总线标准
- 总线标准是国际上公布的互连各个模块的标准,是把各种不同的模块组成计算机系统时必须遵守的规范
- PCI,EISA,ISA是并行总线
- USB,PCI-Expressx16是串行总线
- 高速设备采用局部总线连接,可以节省系统的总带宽
- ISA:
- 工业标准体系结构
- 非局部总线
- 最早出现的微型计算机的系统总线,应用在IBM的AT机上
- EISA:扩展的ISA
- VESA:视频电子标准协会
- PCI:
- 外部设备互连
- 支持即插即用,局部总线
- AGP:加速图形接口,一种视频接口标准
- PCI-E:最新的总线接口标准,它将全面取代线性的PCI和AGP
- RS-232C:
- 由美国电子工业协会推荐的一种串行通信总线
- 适用于串行二进制交换的数据终端设备和数据通信设备之间的标准接口
- USB:
- 通用串行总线
- 即插即用,热插拔,有很强的连接能力,有很好的可扩展性;高速传输
- PCMCIA:
- 广泛应用于笔记本电脑的一种接口标准
- 是一个用于扩展功能的小型插槽。即插即用
- IDE:
- 集成设备电路
- 更准确地称为ATA,硬盘和光驱通过IDE接口与主板连接
- SCSI:
- 小型计算机系统接口
- 是一种用于计算机和智能设备之间(硬盘、软驱)系统级接口的独立处理器标准
- SATA:
- 串行高级技术附件
- 是一种基于行业标准的串行硬件驱动器接口
二、总线事务和定时
1、总线事务
- 定义:从请求总线到完成总线使用的操作序列【在一个总线周期中发生的一系列活动】
- 过程:
- 请求阶段:主设备(CPU 或 DMA)发出总线传输请求,并且获得总线控制权
- 仲裁阶段:总线仲裁机构决定将下一个传输周期的总线使用权授予某个申请者
- 寻址阶段:主设备通过总线给出要访问的从设备地址及有关命令,启动从模块
- 传输阶段:主模块和从模块进行数据交换,可单向或双向进行数据传送(一般只能传输一个字长的数据)
- 释放阶段:主模块的有关信息均从系统总线上撤除,让出总线使用权
- 总线上的数据传方式:
- 非突发式:
- 在每个传送周期内都先传送地址,再传送数据
- 主、从设备之间通常每次只能传输一个字长的数据
- 突发(猝发)式:
- 发送方在传输完成地址后,连续进行若干次数据的发送,即一次传输一个地址和一批连续的数据
- 能够进行连续成组数据的传送;其寻址阶段发送的是连续数据单元的首地址
- 可以提高总线数据传输率
- 主设备只需给出一个首地址,从设备就能从首地址开始的若干连续单元读出或写入多个数据
- 非突发式:
2、总线定时
- 定义:总线在双方交换数据的过程中需要时间上配合关系的控制【实质是一种协议或者规则】
(1)同步定时方式
1)定义
- 由统一时序控制的通信方式
- 同步通信采用公共时钟,有统一的时钟周期,同步时钟信号不由各设备提供
- 同步控制既可以用于 CPU 控制,又可用于高速的外部设备控制

2)优点
- 传送速度快,具有较高的传输速率
- 总线控制逻辑简单
- 同步通信不需要应答信息且总线长度短
- 同步通信用一个公共的时钟信号进行同步
- 同步通信中,各部件的存取时间较接近
3)缺点
- 主从设备属于强制性同步
- 不能及时进行数据通信的有效性验证
- 可靠性较差
4)适用场景
- 适用于总线长度较短及总线所接部件的存储时间比较接近的系统
- 采用同步控制也可以进行数据的传输,但不能发挥快速设备的高速性能
(2)异步定时方式
1)定义
- 没有统一的时钟;没有固定的时间间隔【不采用时钟信号,只采用握手】
- 完全依靠传送双方相互制约的“握手”信号来实现定时控制
- 传送操作是由双方按需求分配时间的
- 每次握手完成一次通信,但是一次通信往往交换多位数据
2)优点
- 总线周期长度可变
- 能保证两个工作速度相差很大的部件或设备之间可靠地进行信息交换
- 自动适应时间的配合
3)缺点
- 比同步稍复杂一些,速度比同步方式慢
4)适用场景
- 主要用于在不同的设备间进行通信
5)分类
- 不互锁方式:
- 主设备发出“请求”信号后,不必等到接到从设备的“回答”信号,而是经过一段时间,便撤销“请求”信号
- 从设备在接到“请求”信号后,发出“回答”信号,并经过一段时间,自动撤销“回答”信号。双方不存在互锁关系
- 速度最快,可靠性最差
- 半互锁方式:
- 主设备发出“请求”信号后,必须待接到从设备的“回答”信号后,才撤销“请求”信号,有互锁的关系
- 从设备在接到“请求”信号后,发出“回答”信号,但不必等待获知主设备的“请求”信号已经撤销,而是隔一段时间后自动撤销“回答”信号,不存在互锁关系
- 全互锁方式:
- 主设备发出“请求”信号后,必须待从设备“回答”后,才撤销“请求”信号
- 从设备发出“回答”信号,必须待获知主设备“请求”信号已撤销后,再撤销其“回答”信号。双方存在互锁关系
- 最可靠,速度最慢

(3)半同步定时方式
1)定义
- 统一时钟的基础上,增加一个 “等待”响应信号 WAIT
- 同步:
- 发送方用系统时钟前沿发信号
- 接收方用系统时钟后沿判断、识别
- 异步:允许不同速度的模块和谐工作

2)优点
- 控制方式比异步定时简单
- 各模块在系统时钟的控制下同步工作,可靠性较高
3)缺点
- 系统的时钟频率不能要求太高
- 整体上看,系统工作的速度不是很高
(4)分离式定时方式
上述三种通信的共同点:
一个总线传输周期(以输入数据为例):
- 主模块发地址、命令【使用总线】
- 从模块准备数据【总线空闲】
- 从模块向主模块发数据【使用总线】
1)定义
- 将总线事务分解为请求和应答两个子过程
- 子周期 1:主模块申请占用总线,使用完后放弃总线的使用权
- 子周期 2:从模块申请占用总线,将各种信息送至总线上
- 各模块均有权申请占用总线
- 采用同步方式通信,不等对方回答
- 各模块准备数据时,不占用总线
- 总线利用率提高
2)优点
- 在不传送数据是释放总线,使总线可接受其他设备的请求,不存在空闲等待时间
3)缺点
- 控制复杂,开销较大
第7章 输入输出系统
一、I/O 系统基本概念
二、I/O 接口
1、I/O 接口
(1)I/O 接口的定义
- 也称 I/O 控制器,是主机和外设时间的交接界面
- 通过接口可以实现主机和外设之间的信息交换

(2)I/O 接口的功能
- 进行地址译码和设备选择:使主机和指定外设交换信息
- 实现主机和外设的通信联络控制:实现主机—I/O 接口—I/O 设备之间的通信
- 实现数据缓冲:通过数据缓冲寄存器(DBR)达到主机和外设工作速度的匹配
- 信号格式的转换:串-并、并-串、电平、数-模、模-数等格式转换
- 传送控制命令和状态信息:接收从控制总线发来的控制信号、时钟信号;通过状态寄存器反馈设备的各种错误、状态信息,供 CPU 查用

(3)I/O 接口的基本结构

- 外部接口:通过接口电缆与外设连接,数据传输可能是串行方式,因此 I/O 接口需具有串/并转换功能
- 内部接口:与系统总线相连,实质上是与内存、CPU 相连
- 如何确定要操作的设备:每个设备对应一组寄存器,操作不同的寄存器就是在操作不同的设备
- I/O 指令:对数据缓冲寄存器、状态/控制寄存器的进行访问操作的指令
- 只能在 OS 内核的底层 I/O 软件中使用
- I/O 指令实现的数据传送通常发生在通用寄存器和 I/O 端口之间
- 是一种特权指令
(4)I/O 接口的类型
- 按数据传送方式(外设和接口一侧)分:
- 并行接口:一个字节或一个字所有位同时传送
- 串行接口:一位一位地传送
- 按主机访问 I/O 设备的控制方式分:
- 程序查询接口
- 中断接口
- DMA 接口
- 按功能选择的灵活性分:
- 可编程接口
- 不可编程接口
2、I/O 端口及其编址
(1)I/O 端口
- I/O 端口:接口电路中可以被 CPU 直接访问的寄存器,可以进行读/写的寄存器
- 接口 = 端口 + 相应的控制逻辑
- I/O 端口想要能被 CPU 访问,则必须对各个端口进行编号,每个端口对应一个端口地址
- 主要的 I/O 端口有:
- 数据端口:CPU 对数据端口中的数据执行读写操作
- 状态端口:对状态端口中的外设状态只能执行读操作
- 控制端口:对控制端口中的各种控制命令只能执行写操作
(2)I/O 编址
1)统一编址
- 定义:
- 存储器映射方式
- 把 I/O 端口当做存储器的单元进行地址分配,CPU 不需要设置专门的 I/O 指令,用统一的访存指令就可以访问 I/O 端口
- 特点:依靠地址码的不同区分存储单元和 I/O 设备
- 优点:
- 不需要专门的 I/O 指令
- 可以使 CPU 访问 I/O 的操作更灵活、更方便
- 可以使端口有较大的编址空间
- 缺点:
- 端口占用主存地址空间,使内存容量变小
- 外设寻址时间长(地址位数多,地址译码速度慢)
- 译码电路复杂,降低了译码速度【在识别 I/O 端口时全部地址线都需要参加译码】
2)独立编址
- 定义:
- I/O 映射方式
- I/O 端口的地址空间与主存地址空间是两个独立的地址空间
- 需要设置专门的 I/O 指令来访存 I/O 端口
- 特点:通过专门的 I/O 指令来区分存储单元和 I/O 设备【I/O 指令的地址码给出 I/O 端口号】
- 优点:
- 使用专用 I/O 指令,程序编制清晰
- I/O 端口地址位数少,译码简单,地址译码速度快
- 缺点:
- I/O 指令少,一般只能对端口进行传送操作
- 需要 CPU 提供存储器读/写、I/O 设备读/写两组控制信号,增加了控制逻辑电路的复杂性
三、I/O 方式
- I/O方式:输入/输出系统实现主机与 I/O 设备之间数据传送的控制方式

1、程序查询方式
- 基本概念:
- 信息交换的控制完全由 CPU 执行程序实现
- 接口中设置一个数据缓冲寄存器(数据端口)和一个设备状态寄存器(状态端口)
- 主机进行 I/O 操作时,先发出询问信号,读取设备状态决定下一步操作到底是进行数据传送还是等待
- CPU 一旦启动 I/O,就必须停止现行程序的运行,并在现行程序中插入一段程序

- 主要特点:
- CPU 有“踏步”等待现象
- CPU 与 I/O 串行工作
- 优点:
- 接口设计简单,设备量少
- 缺点:
- CPU 在信息传送过程中要花费很多时间来查询和等待
- 在一段时间内只能和一台外设交换信息,效率大大降低
- 独占查询:一旦设备被启动,CPU 就一直持续查询接口状态,CPU 花费 100% 的时间用于 I/O 操作,此时外设和 CPU 完全串行工作
- 定时查询:CPU 周期第查询接口状态,每次总是等到条件满足才进行一个数据的传送,传送完成后返回到用户程序【时间间隔与设备的数据传输速率有关】
2、程序中断方式
(1)基本概念
- 在计算机执行现行程序的过程中,出现某些急需处理的异常情况或特殊情求 CPU 暂停中止现行程序而转去对这些异常情况或特殊请求进行处理,处理完毕后再返回到现行程序的断点处,继续执行原程序
- 早期的中断技术就是为了处理数据传送
- 中断响应阶段 CPU 进行的操作:关中断,保护断点和程序状态,识别中断源
- 多重中断系统在保护被中断进程现场时关中断,执行中断程序时开中断
- CPU 一般在一条指令执行结束的阶段采样中断请求信号,查看是否存在中断请求,然后决定是否响应中断
- 中断隐指令的工作:关中断+保存断点+引出中断服务程序
- 通用计算器的保护由中断服务程序完成
- 中断优先级由屏蔽字决定,而不是根据请求的先后次序
- 有中断请求时,如果是关中断的姿态,或新中断请求的优先级较低,则不能响应新的中断请求
(2)中断技术的主要功能
- 实现 CPU 和 I/O 设备的并行工作
- 处理硬件故障和软件错误
- 实现人机交互,用户干预机器需要用到中断系统
- 实现多道程序、分时操作,多道程序的切换需要借助于中断系统
- 实时处理需要借助中断系统来实现快速相应
- 实现应用程序和操作系统(管态程序)的切换,称为软中断
- 多处理器系统中各处理器之间的信息交流和任务切换
(3)程序中断方式的主要思想
- CPU 在程序中安排好在某个时机启动某台外设
- 然后 CPU 继续执行当前的程序,不需要像查询方式那样等待外设准备就绪
- 一旦外设完成数据传送的准备工作,就主动向 CPU 发出中断请求,请求 CPU 为自己服务
- 在可以响应中断的条件下,CPU 暂时中止正在执行的程序,转去执行中断服务程序为外设服务,在中断服务程序中完成一次主机与外设之间的数据传送,传送完成后,CPU 回到原来的程序

(4)程序中断的基本流程
1)中断请求
- 中断源是请求 CPU 中断的设备或事件【一台计算机允许有多个】
- 中断系统对每个中断源设置中断请求标记触发器【1 表示有请求】
- 这些触发器组成中断请求标记寄存器【可集中在 CPU 中,也可分散在各个中断源中】
- 可屏蔽中断:INTR 线发出,关中断模式下不被响应
- 不可屏蔽中断:NMI 线发出,如时钟中断、电源掉电
2)中断响应判优
- 通过硬件排队器实现
- 不可屏蔽中断 > 内部异常 > 可屏蔽中断
- 内部异常中,硬件故障 > 软件中断
- DMA 中断请求 > I/O 设备传送的中断请求
- 在 I/O 传送类中断请求中,高速设备 > 低速设备
- 输入设备优先于输出设备,实时设备 > 普通设备
- 注意:中断优先级包括响应优先级和处理优先级
- 响应优先级由硬件线路或查询程序的查询顺序决定,不可动态改变
- 处理优先级可有中断屏蔽技术动态调整,以实现多重中断
3)CPU 响应中断的条件
- 中断源有中断请求
- CPU 允许中断与开中断(异常和不可屏蔽中断不受此影响)
- 一条指令执行完毕(异常不受此限制),且没有更紧迫的任务
- 注意:CPU 响应中断的时间是在每条指令执行阶段的结束时刻【仅指 I/O 中断】
4)中断响应过程
- 中断隐指令:硬件的一系列自动操作,用于执行中断服务程序【并不是指令系统中的一条真正的指令】
- 关中断:在保护程序的断点和现场信息过程中,不能响应更高级中断源的中断请求
- 保存断点:将原程序的断点保存在栈或特定寄存器中【中断的断点是下一条指令的地址】
- 引出中断服务程序:识别中断源,将对应的服务程序入口地址送入 PC
5)中断向量
- 中断识别分为向量中断【硬件向量法】和非向量中断【软件查询法】两种
- 每个中断源有一个唯一的类型号
- 每个中断类型号对应一个中断服务程序
- 每个中断服务程序都有一个入口地址,即中断向量
- 中断向量表:存储系统中的全部中断向量
- 中断向量法【硬件向量法】:CPU 响应中断后,通过识别中断源获得中断类型号然后据此计算出对应中断向量的地址;再根据该地址从中断向量表中取出中断服务程序的入口地址,并送入 PC,以转而执行中断服务程序
- 采用中断向量法的中断被称为向量中断
- 注意:
- 中断请求和响应信号是在 I/O 总线的控制线上传送
- CPU 响应某一中断后,就从数据线上获取该中断源的中断类型号,并计算对应中断向量在中断向量表中的位置
6)中断处理过程

(5)多重中断和中断屏蔽技术
1)单重中断和多重中断
- 单重中断:若CPU在执行中断服务程序的过程中,又出现了新的更高优先级的中断请求,而CPU对新的中断请求不予响应
- 多重中断【中断嵌套】:若 CPU 在执行中断服务程序的过程中,又出现了新的更高优先级的中断请求,CPU 暂停现行的中断服务程序,转去处理新的中断请求

2)中断屏蔽技术
- 中断屏蔽技术主要用于多重中断,CPU 要具备多重中断的功能,要满足:
- 在中断服务程序中提前设置开中断指令
- 优先级别高的中断源有权中断优先级别低的中断源
- 每个中断源都有一个屏蔽触发器(MASK),1 表示屏蔽该中断源的请求,0 表示可以正常请求
- 所用 MASK 组合在一起便构成一个屏蔽字寄存器,寄存器的内容称为屏蔽字
- 屏蔽字中 1 越多,优先级越高
- 每个屏蔽字中至少有一个 1【至少能屏蔽自身的中断】

3、DMA 方式
(1)基本概念
- 一种完全由硬件进行成组信息传送的控制方式
- 在数据准备阶段,CPU与外设并行工作,在外设与内存之间开辟一条“直接数据通路”
- 信息传送不再经过CPU(也就不需要保护、恢复CPU现场等操作),降低了CPU在传送数据时的开销
- 被称为直接存储器存取方式
- 适用于磁盘、显卡、声卡、网卡等高速设备大批量数据的传送,硬件开销大
- DMA 方式中,中断的作用仅限于故障和正常传送结束时的处理
(2)DMA 方式的特点
- 主存既可以被 CPU 访问,也可被外设访问
- 在数据块传送时,主存地址的确定、传送数据等都由硬件电路直接实现
- 主存中要开辟专用缓冲区,及时供给和接收外设的数据
- DMA 传送速度快,CPU 和外设并行工作,提高了系统效率
- DMA 在传送开始前要通过程序进行预处理,结束后要通过中断方式进行后处理
(3)DMA 控制器
1)定义
- DMAC 又叫 DMA 控制器(DMA 接口),是对数据传送过程进行控制的硬件
- 在 DMA 过程中,DMAC 将接管 CPU 的地址总线、数据总线和控制总线,CPU 的主存控制信号被禁用
2)功能
- 接收外设发出的 DMA 请求,并向 CPU 发出总线请求
- CPU 响应此总线请求,发出总线响应信号,接管总线控制权,进入 DMA 操作周期
- 确定传送数据的主存单元地址及长度,并自动修改主存地址计数和传送长度计数
- 规定数据在主存和外设间的传送方向,发出读写等控制信号,执行数据传送操作
- 向 CPU 报告 DMA 操作结束
3)组成
- 主存地址计数器:存放要交换数据的主存地址
- 传送长度计数器:记录传送数据的长度(总字数)。每传送一个字,计数器就减 1,直至计数器为 0,表示该批数据传送完毕
- 数据缓冲寄存器:暂存每次传送的数据【DMA 接口与主存之间的传送单位为字,DMA 与设备之间的传送单位可能为字节或位】
- DMA 请求触发器:每当 I/O 设备准备好数据后,给出一个控制信号,使 DMA 请求触发器置位
- “控制/状态”逻辑:由控制和时序电路及状态标志组成,用于指定传送方向,修改传送参数,并对 DMA 请求信号、CPU 响应信号进行协调和同步
- 中断机构:当一个数据块传送完毕后触发中断机构,向 CPU 提出中断请求

(4)传送方式
1)停止 CPU 访问
- 定义:当 I/O 设备有 DMA 请求时,由 DMA 接口向 CPU 发送一个停止信号,使 CPU 放弃总线控制权,停止访问主存,直到 DMA 传送一块数据结束

- 优点:控制简单,适用于数据传输速率很高的 I/O 设备实现成组数据的传送
- 缺点:DMA 访问主存时,CPU 基本上处于不工作状态
2)周期挪用
- 定义:由于 I/O 访存的优先级高于 CPU 访存(I/O 不立即访存就可能丢失数据),因此由 I/O 设备挪用一个存取周期,传送完一个数据字后立即释放总线【单字传送方式】
- I/O 设备有 DMA 请求时,会遇到 3 种情况:
- 此时 CPU 不访存
- CPU 正在访存,待存取周期结束后,CPU 再将总线占有权让出
- I/O 和 CPU 同时请求访存,CPU 要暂时放弃总线占有权

- 优点:既实现了 I/O 传送,又较好地发挥了主存与 CPU 的效率
- 缺点:每挪用一个主存周期,DMA 接口都要申请、建立和归还总线控制权
3)DMA 与 CPU 交替访问
- 定义:将 CPU 的工作周期分成两个时间片,一个给 CPU 访存,另一个给 DMA 访存,这样在每个周期内,CPU 和 DMA 就都可以轮流访存
- 总线使用权分时控制

- 优点:不需要申请、建立和归还总线控制权,具有很高的传送速率
- 缺点:相应的硬件逻辑变得更复杂
(5)传送过程
- 预处理:由 CPU 完成一些必要的准备工作
- 首先,初始化 DMA 控制器的有关寄存器、设置传送方向、测试并启动设备等
- 然后,CPU 继续执行原程序,直到 I/O 设备准备好发送的数据或接收的数据时,I/O 设备向 DMA 控制器发送 DMA 请求
- DMA 控制器向 CPU 发出总线请求【这两个过程可统称为 DMA 请求】
- 数据传送:
- 以数据块为基本传送单位
- DMA 占用总线后的数据输入/输出操作通过循环实现【DMA 控制器】
- 后处理:
- DMA 控制器 向 CPU 发出中断请求
- CPU 执行中断服务程序做 DMA 结束处理
- 后处理包括:
- 校验送入主存的数据是否正确
- 测试传送过程中是否出错(错误则转诊断程序)
- 决定是否继续使用 DMA 传送其他数据等

4、各种方式的比较


