# 第三章 系统总线
总线 (bus) 是一组能为多个部件分时共享公共信息的传送线路。总线的两个重要特点是分时和共享。
# 总线的分类
根据总线的数据传输形式,可以分为并行传输总线和串行传输总线。根据连接部件的不同,可以分为片内总线、系统总线和通信总线。片内总线是芯片内部的总线,例如在 CPU 内部或寄存器之间的总线。系统总线是连接 CPU、主存和 IO 设备的总线,又称板级总线。根据系统总线传输信息的不同,又可以分为数据总线、地址总线和控制总线。通信总线是连接各计算机的总线,例如光纤等。我们讨论的重点是系统总线。
# 总线结构
# 总线的性能指标
# 总线控制
总线控制是
# 总线判优控制
# 总线通信控制
# 第四章 存储器
# 概述
# 存储单元地址的分配
# 小端存储 (Little Endian)
最低有效字节在前,高地址存储高位字节数据,低地址存储低位字节数据。
# 大端存储 (Big Endian)
最高有效字节在前,高地址存储低位字节数据,低地址存储高位字节数据。
# 分类
# 按介质分类
按照介质分类,存储器可以分为半导体存储器、磁表面存储器、磁芯存储器和光盘存储器等。
# 半导体存储器
半导体存储器的存储元件为半导体器件。可以分为 MOS 半导体存储器和 TTL 半导体存储器。TTL 半导体存储器速度更高,MOS 半导体存储器集成度高,且制造简单、成本低廉、功耗小,因此被更加广泛使用。但半导体存储器的特点在于其属于易失性存储器。因此通常用于 RAM.
# 磁表面存储器
磁表面存储器是在金数或塑料材料的表面涂抹一层磁性材料作为存储介质的。常见的机械硬盘、软盘属于此类。
# 磁芯存储器
磁芯存储器体积大,工艺复杂,功耗高,因此目前几乎不再被使用。
# 光盘存储器
光盘存储器是以激光在记录介质上读写的存储器,具有非易失性的特点。其存储密度高,耐用性强,可靠性高,因此被广泛使用。
# 按存取方式分类
按照存取方式分类,可以将存储器分成随机存储器 (Random Access Memory, RAM)、只读存储器 (Read Only Memory, ROM)、顺序存取存储器、直接存取存储器等。其中,前两者位子随机访问的存储器,后两者为串行访问的存储器。顺序存取存储器的代表为磁带,直接存取存储器的代表为磁盘。
# 按作用分类
根据在计算机中的作用不同,我们将存储器分为
- 主存 (Main Memory, MM)
- 随机存储器 (RAM)
- 静态随机存储器 (Static RAM, SRAM)
- 动态随机存储器 (Dynamic RAM, DRAM)
- 只读存储器 (ROM)
- 掩模式只读存储器 (Mask ROM, MROM)
- 可编程制度存储器 (programmable ROM, PROM)
- 可擦除编程只读存储器 (Erasable Programmable ROM, EPROM)
- 电可擦除编程只读存储器 (Electrical Erasable Programmable ROM, EEPROM)
- 随机存储器 (RAM)
- 闪速存储器即闪存 (Flash Memory)
- 辅存
- 缓存 (Cache)
在后面的笔记中,我将具体介绍 SRAM 和 DRAM 的基本电路和读写过程。这是存储器部分的重点之一。
# 存储器的层次结构
存储器的性能指标包括速度、容量和每位价格。一般速度越高,容量越低。为进行三者平衡,现代计算机包括多级的存储结构。依次为寄存器、缓存、主存、辅存和云存储。从前到后速度依次降低,容量依次变大,位价依次降低。事实上,存储器的层次结构主要体现在缓存 - 主存和主存 - 辅存层次。前者解决 CPU 和主存的速度不匹配的问题,后者解决存储系统的容量问题。
在后面的笔记中,我将介绍缓存 - 主存结构的具体方式,以及于该方式相关的提高访存速度的措施。
# 主存储器
# 半导体芯片的基本结构
半导体存储芯片的基本结构包括存储矩阵 (存储体)、译码电路、读写电路等。
# DDR 内存
DDR 内存全称 Double Data Rate Synchronous Dynamic Random Access Memory (双倍速率同步动态随机存储器)。
# 随机存取存储器 (RAM)
# 静态 RAM (SRAM)
静态 RAM 由
# 提高访存速度的措施
# 双端口 RAM
在同一 RAM 上添加两个相互独立的端口,其分别拥有独立的地址线、数据线和控制线。于是可以提高访问的效率。但存在双端口相互冲突的问题,采用加入置忙信号的方式防止两端口冲突。
# 单体多字系统
单体多字系统通过将寄存器从单字长修改为多字长,使得可以从寄存器中一次读取出多个字,进而增加访问速度。
# 多体并行系统
多体并行系统的想法是将一条数据的
# 高速缓冲存储器
# 概述
高速缓冲存储器 (Cache) 是基于程序访问的局部性原理,为解决 CPU 与主存之间的速度不匹配问题而产生的结构。当前的 CPU 一般含有两级或三级 Cache。Cache 由 组成,读取速度依次下降,容量依次增大。我们常常将一级缓存简称为 L1Cache,其余类似。L1Cache 的容量一般在 4KB 至 64KB 之间,L2Cache 的容量一般在 128KB 至 4MB 之间。若有 L3Cache,则 L3Cache 的容量一般是 L2Cache 容量的 4 倍左右。一般情况下,L1Cache 的读速度约为 1.5TBps,写速度约为 0.7TBps,延迟在 1ns 级别 (古旧的计组书上 Cache 的延迟常取 50ns)。L2Cache 的读速度和写速度大约是 L1Cache 的一半。
# 程序访问的局部性原理
程序访问的局部性原理可以分为空间局部性原理和时间局部性原理。
# Cache 编址方式
Cache 内部按块存储,与主存块大小一致。因此 Cache 地址可以表示为缓存块号 + 块内地址的形式。若块内地址长度为,主存块号长度为,缓存块号长度为,则需要将 个主存块映射到 个 Cache 块中,以解决主存与 Cache 的大小不匹配。这就是 Cache - 主存的地址映射。
# Cache 的命中率
Cache 的命中率 定义为 CPU 欲访问的信息在 Cache 中的比率,即。命中率与 Cache 的容量和块长有关。一般来说,容量越大,Cache 的命中率越高。而随块长增大,Cache 的命中率先升高,后降低。通常去块长为 4 至 8 个字。此外,课本未提及的是,Cache 的命中率与组相联映射中 Cache 的组数有关系。随组数增加,Cache 的命中率降低。但在 512 组以下,Cache 命中率降低的变化不明显。目前的电脑 Cache 命中率一般在 95% 以上。这归功于多级 Cache 的使用。单级 Cache 的命中率在 80% 左右,于是两级 Cache 的命中率就达到了 96%。
# Cache 的访问效率
Cache 的访问效率 定义为访问 Cache 的时间与访问 Cache - 主存系统时间的比值,即。
# 辅助存储器
# 磁表面存储器的技术指标
在辅助存储器中,磁表面存储器的技术指标及计算是一个较重要的部分。磁表面存储器有以下重要的技术指标:
- 记录密度:包括道密度
重点包括 SRAM 和 DRAM。其中 SRAM 应用于缓存,DRAM 应用于主存。为了解决 CPU 与主存之间的速度不匹配,于是加入了 SRAM 作为缓冲 (缓存 Cache)。
命中判断,主存地址和缓存地址的位置和各自容量。命中率、效率...
# 交叉存储
高位交叉和低位交叉两种方式。默认为低位交叉。
高位交叉和低位交叉在同样条件下的带宽的计算。
连续读 8 个字,采用高位交叉和低位交叉存储器的带宽分别是多少?
# 动态 RAM
动态 RAM 的刷新方式
# 第五章 IO 系统
为方便,下面把 I/O 系统简称为 IO 系统 2333333
接口的功能、IO 设备和 CPU 之间的联系方式、外设的编址 (独立编址和统一编址)、程序查询方式、中断方式、DMA 方式
# DMA
DMA 的工作过程?
预处理阶段
传输阶段
后处理阶段
# IO 系统的发展概况
IO 系统即输入输出系统。其发展主要经过了四个阶段。
# 早期阶段
早期阶段中每个 IO 设备单独与 CPU 相连,IO 设备与 CPU 串行工作,效率低,IO 设备增删困难。
# 接口模块和 DMA 阶段
接口模块和 DMA 阶段中,IO 设备通过接口模块与主机相连。接口模块包括数据通路和控制通路。数据通路可以实现数据缓冲和串 - 并转换,控制通路可以实现中断请求处理,使得 IO 设备与 CPU 实现并行工作。但不能做到绝对的并行工作。为进一步提高 CPU 的工作效率,又出现了直接存储器存取 (Direct Memory Access, DMA)。其特点是在 IO 设备与主存之间架设数据通路,使得 IO 设备可以和主存直接交换信息。这也是小型和微型计算机常用的 IO 系统模式。
# 具有通道结构的阶段
此后进入具有通道结构的阶段。IO 通道 (IO Channel) 是大中型计算机系统采用的数据交换方式,其本质是一个具有特殊功能的处理器。其指令单一,且不具有自己的内存,但可以依据 CPU 的 IO 指令管理 IO 设备。
# 具有 IO 处理机的阶段
具有 IO 处理机的阶段是 IO 系统发展的最新阶段。IO 处理机 (IO Processor) 又称外围处理机 (Peripheral Processor),其基本独立于主机工作,与 CPU 的并行性更高。
# IO 系统的组成
IO 系统包括 IO 软件和 IO 硬件。
# IO 软件
IO 软件包括驱动程序、用户程序、管理程序、升级补丁等。通常采用 IO 指令和通道指令实现 CPU 和 IO 设备的信息交换。
# IO 指令
IO 指令属于机器指令,指令的一般格式为操作码 + 命令码 + 设备码。其命令码一般包括以下四种情况:
- 将数据从 IO 设备输入主机
- 将数据从主机输出至 IO 设备
- 状态测试
- 形成某些操作指令
# 通道指令
通道指令又称通道控制字,是通道用于执行 IO 操作的指令。只有具有通道的 IO 系统才具有通道指令。注意到,由于通道本身不具有自己的内存,因此通道指令存放于主存中。
# IO 硬件
在带有接口的 IO 系统中,IO 硬件一般包括接口模块和 IO 设备两部分。
# IO 设备
IO 设备又称外部设备或外围设备,简称外设。可以分为人机交互设备 (例如键盘、鼠标、显示器、打印机等)、计算机信息存储设备 (例如磁盘、光盘、磁带等等)、机 - 机通信设备 (例如解制解调器) 等。
IO 设备不是计算机组成原理的重点。
# IO 接口
IO 接口 (IO interface) 是主机和 IO 设备之间的硬件电路和相应的软件控制,硬件电路主要是 IO 端口 (IO port),就是接口电路中的一些寄存器,用来存放数据信息、控制信息和状态信息 (也因此被称为数据端口、控制端口和状态端口)。因此,我们说若干个 IO 端口加上一些控制逻辑组成 IO 接口。
# IO 接口的功能和组成
IO 接口的主要功能及需要的组成部分如下:
- 选址功能:设备选择线 (即地址线) 发出 IO 指令的设备码。设备选择电路通过将本设备码与 IO 指令中的设备码相匹配,确定 CPU 选择的设备。当两设备码相符时,设备选择电路发出设备选择信号 (SEL)。
- 传送命令的功能:设备选择信号传送至命令寄存器和命令译码器。命令寄存器中用来存放 IO 指令中的命令码。只有设备选择信号有效,命令寄存器才会接受命令线上的命令码,转命令译码器译码,再传输给 IO 设备。
- 传送数据的功能:IO 接口可以通过数据缓冲寄存器 (Data Buffer Register, DBR) 接收来自 IO 设备或 CPU 数据线的数据,实现数据缓冲与暂存。对于磁盘等外设,其 DBR 位数通常等于存储字长位数,因此需要 DBR 实现串 - 并转换。
- 反映 IO 设备工作状态的功能:IO 接口通过设备状态标记实现设备工作状态的反映。设备状态标记实际上是一些触发器,包括完成触发器 D、工作触发器 B、中断请求触发器 INTR、屏蔽触发器 MASK 等。IO 设备状态发生改变后将当前状态传送给设备状态标记中对应的触发器,触发器状态发生改变,使得状态线上的电平高低对应发生变化。
根据上述功能,我们说 CPU 与 IO 之间存在四类线,即数据线、地址线、命令线和状态线,这分别对应 IO 接口的四种功能,即传送数据的功能、寻址功能、传送命令的功能和反映设备状态的功能。由于这些功能,我们要求数据线是双向的,地址线和命令线是 CPU 单向指向 IO 接口的,状态线是 IO 接口单向指向 CPU 的。
与之对应的,IO 接口内部也存在与四种功能对应的四部分结构,依次为数据缓冲寄存器、设备选择电路、命令寄存器和命令译码器、设备状态标记。此外,IO 接口内部还需要控制逻辑电路协调四部分之间的关系和信号传输。这就是 IO 接口的组成。
# IO 设备与主机的联系方式
IO 设备与主机的联系方式包括 IO 设备的编址方式、IO 设备的寻址方式、信息的传送方式、IO 设备与 CPU 的联络方式和 IO 设备与主机的联系方式等。
# IO 设备的编址方式
IO 设备编址可以分为统一编址和不统一编址。统一编址即将 IO 设备地址看作存储器地址的一部分,会占用主存空间,减少主存容量。不统一编址时,需要采用专门的 IO 指令访问 IO 设备。此时不会占用存储器的地址空间。
# IO 设备的寻址方式
对 IO 设备,我们根据 IO 指令中的设备码字段为每个 IO 设备赋予一个设备号,这样就可以访问特定的 IO 设备。
# 信息的传送方式
信息传送方式包括并行传送、串行传送。不同的传送方式需要不同的接口,于是出现了并行传送接口、串行传送接口和串并联用的传送接口等 (这属于 IO 接口的分类)。
# IO 设备与 CPU 的联络方式
IO 设备与 CPU 的联络方式包括立即响应方式、异步工作采用应答信号联络方式、同步工作采用同步时标联络方式。对于工作速度特别缓慢的设备,可以采用立即响应方式。当 I/O 设备与主机工作速度不匹配时,采用 “应答” 方式进行联络。该方式可以是串行的,也可以是并行的。同步工作需要 IO 设备与 CPU 的工作速度完全匹配。
# IO 设备与主机的连接方式
IO 设备与主机的连接方式主要包括辐射式连接和总线式连接两种方式。目前多是总线式连接。
# IO 设备与主机信息传送的控制方式
IO 设备与主机交换信息的控制方式是 IO 系统的重要考点。其包括五种控制方式:
- 程序查询方式
- 程序中断方式
- 直接存储器存取方式 (DMA 方式)
- IO 通道方式
- IO 处理机方式
我们只关注前三种。
# 程序查询方式
程序查询方式的接口电路不是考查的内容。我们在此仅关注程序查询的流程和优劣。
程序查询方式中,信息交换的控制完全由主机执行程序实现,实质上是 CPU 与 IO 串行工作的方式。程序查询方式主要包括查询流程和程序流程。查询流程指的是 CPU 不断查询 IO 设备状态的过程,当 CPU 得知 IO 设备准备就绪后,CPU 将停止现行程序的运行,并与 IO 设备进行数据交换,这一过程就是程序流程。两部分的具体流程如下:
# DMA 方式
# DMA 与 CPU 的冲突管理
DMA 方式涉及的主要问题是 DMA 与 CPU 同时访问主存带来的冲突管理问题。这包括以下三种方法。
# 停止 CPU 访问主存
该方法控制简单,但未充分发挥 CPU 对主存的效率。
# 周期挪用 (周期窃取)
该方法中,当 IO 设备发出 DMA 请求时,IO 设备挪用一个或多个总线周期。DMA 不请求时,CPU 访问主存。
IO 设备请求 DMA 传送又分为三种情况。一是 CPU 不需要访问主存,不发生冲突。二是 CPU 正在访问主存,此时等待存取周期结束后 CPU 让出主存。第三种是 CPU 与 DMA 同时请求访问主存,此时 IO 设备窃取一至两个存取周期,即在 CPU 执行访问指令过程中插入了 DMA 请求。
# DMA 与 CPU 交替访问
该方法适合于 CPU 工作周期比主存存取周期长的情况。此方法不需要申请建立和归还总线使用权,效率较高。
# DMA 的数据传送过程
DMA 的数据传送过程分为预处理、数据传送和后处理三个阶段。
# 第六章 计算机的运算方法
# 数据的表示
在计算机中,数据都是采用二进制进行表示的。可以分为有符号数和无符号数。
在机器中表示一个数,实际上就是构建一个 01 序列与要表示的数之间的双射。我们称要表示的数为真值,称这个存储于计算机的 01 序列为一个机器数。为保证标准,01 序列一般是事先确定长度的。由于需要兼顾占用空间、容量和速度,于是我们将存储的机器数划分为不同类别,每个类别称为一种数据类型。不同数据类型在计算机中的本质区别在于存储的 01 序列的固定长度不同。此外,由于需要表示的数据集不同,数据类型的不同还体现在机器数与真值之间的映射法则不同。
我们假设某种数据类型由 位 01 序列组成,我们可以将其写作向量。
# 无符号数
对于无符号数,我们定义映射为。其中, 是 Binary to Unsigned (长度为) 的缩写。
注意到,映射 是一个双射。于是无符号编码是唯一的。
# 有符号数
对于有符号数,我们同样需要构建相应的映射。
# 补码表示
补码表示 (two's-complement) 是最常见的有符号数的计算机表示方式。我们以 (Binary to Two's-complement) 表示。具体的映射关系为。其中,最高有效位 被称为符号位。
容易验证,补码映射 也是一个双射。于是补码编码是唯一的。
# 反码表示
我们定义反码表示 (Ones' Complement) 的映射关系为。于是 不是一个单射,因为。也就是说,数字 在反码表示下存在两种表示方法,即其对应的机器数不是唯一的。
# 原码表示
我们定义原码表示 (Sign-Magnitude) 的映射关系为。在原码表示下, 仍然有两种表示方法,即。
原码表示和反码表示对数字 的表示不是唯一的,这也是我们弃用原码表示和反码表示的主要原因之一。
# 移码表示
我们定义移码表示 (Offset Binary) 是一种将 映射为最小负值,将 映射为最大正值的表示方法,又称偏置码表示 (biased representation)。对于一种移码映射,我们定义为移码映射的偏移量 (biasing value of offset)。偏移量没有固定的标准,但是一般取。于是,通常的移码映射为。
移码的一个应用在浮点数的阶码表示。根据 IEEE 754 标准,浮点数的阶码表示为移码。其中单精度 float
的移码偏移量为,即移码映射为。此时 的移码表示为,可以表示的数据范围为。
移码表示的优点在于其映射是一一映射,而且通过存储的机器数可以直接看出真值的大小。但是移码不便于进行加减运算。这也是移码不作为存储方法,而只作为中间转换工具的原因。
上面的表示方式都是对整数的表示。下面我们关注小数的表示。
# 小数的定点表示
定点小数只能用来表示纯小数。机器字长为 时,定点表示只能表示大小在 内的小数。定点小数的表示中,包括 位符号位, 位尾数。
此外,上述的整数表示就可以看作整数的定点表示。
# 小数的浮点表示
# 数据的运算
# 第七章 指令系统
# 寻址方式
寻址过程确定的是
# 第八章 CPU 的结构和功能
# CPU 的基本结构和功能
# CPU 的功能
CPU 包括控制器和运算器。这使得 CPU 的功能如下:
- 指令控制:控制程序的顺序执行
- 操作控制:产生完成每条指令所需的控制命令
- 时间控制:对各种操作加以进行时间上的控制
- 数据加工:对数据进行算术运算和逻辑运算
- 处理中断
# CPU 的寄存器
CPU 中的寄存器包括用户可见寄存器和控制和状态寄存器。其中,用户可见寄存器可以分为通用寄存器、数据寄存器、地址寄存器、条件码寄存器。控制和状态寄存器可以分为控制寄存器和状态寄存器。
# 指令周期
CPU 每取出一条指令所需的全部时间称为指令周期 (clock cycles per instruction, CPI),即票数完成一条指令的时间。一个指令周期中,CPU 需要完成取出指令、分析指令和执行指令的过程。我们称取出指令和分析指令所需的时间为取指周期,称执行指令所需的时间为执行周期。
对无条件转移指令,仅存在取指周期而无执行周期。对不同的指令,其执行周期一般不等长。
对于间接寻址的指令,需要进行访存获取有效地址的操作,称为间址周期。其位于取指周期和执行周期之间。
此外,当 CPU 采用中断方式实现主机与外设的信息交换时,每条指令结束前都应发出中断查询信号,若有中断请求,CPU 则进入中断响应,称为中断周期。
于是,指令周期是依次由取指周期、间址周期、执行周期、中断周期组成的。
CPU如何区分指令和数据?
完成一条指令可以分为取指阶段和执行阶段。在取指阶段通过访问存储器可将指令取出;在执行阶段通过访问存储器可将操作数取出。因此虽然指令和数据都是以二进制代码形式存放在存储器中,但 CPU 可以根据指令周期的不同阶段判断出从存储器取出的二进制代码是指令还是数据。
# 指令流水
# 流水线性能
# 吞吐率
我们称单位时间内流水线所完成指令或输出结果的数量为吞吐率。若有 段流水线,各段时间为,则最大吞吐率。连续处理 条指令的吞吐率为。
# 加速比
段流水线的速度与等功能的非流水线的速度之比称为加速比。假设流水线各段时间为,则在 段流水线上完成 条指令所需时间为,在非流水线上完成 条指令所需时间为。于是加速比。
# 效率
效率是流水线中各功能段的利用率。
# 中断系统
中断系统是 CPU 内部用来处理中断的部分。
# 中断请求的分类
中断请求指的是中断源向 CPU 发送中断信号。可以按不同的分组方式分成以下几种:
# 内中断和外中断
按中断源分,可以分为内中断和外中断。内中断的来源为处理器和内存内部产生的中断,例如地址非法、算术操作溢出、除数为零等。外中断是来自处理器和内存之外的中断。例如 I/O 设备发出的 I/O 中断,用户按下 Esc 等操作引起的外部信号中断,定时器引起的时钟中断等。
# 硬件中断和软件中断
通过硬件引起的中断称为硬件中断,通过某指令引起的中断称为软件中断。
# 屏蔽中断和非屏蔽中断
# 中断请求标记
中断系统需要解决的第一个问题是判断中断源。因此,我们在中断系统中设置中断请求标记触发器,简称中断请求触发器,记作 INTR。INTR 本质上是一个寄存器。寄存器的每一位表示一种中断源,则 INTR 的位数越大,说明其判断中断来源的能力越强。INTR 可以位于 CPU 内,也可以分散在不同的中断源处。
实际上,中断寄存器包括五类,详情见此处和此处
# 中断判优逻辑
由于中断系统任一时刻只能响应一个中断请求。由于中断源可能同时发生中断请求,故需要根据中断的优先程度判断如何响应。中断判优可以采用硬件实现,也可以采用软件实现。硬件上,通过链式排队器实现。链式排队器可以分散于各个接口电路,也可以集中于 CPU 内部。
# 中断响应
中断系统需要解决的有一个重要问题是何时响应中断,即响应中断的条件。CPU 响应中断需要满足三个条件:
- 中断源发出中断请求
- CPU 允许中断及开中断
- 一条程序执行完毕,且不存在更紧迫的任务
当中断系统中的允许中断触发器 (EINT) 置 1 时,中断可以被响应。因此,面临的下一个问题是 EINT 何时置 1,何时置 0。
# 保护现场与恢复现场
保护现场包括保护程序断点和保护 CPU 内部各寄存器内容两部分。保护程序断点由中断隐指令完成,保护寄存器内容由中断服务程序 ++ 完成。
恢复现场即在中断返回前,将寄存器内容恢复到中断前状态,同样由中断服务程序完成。