这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

总线和输入输出系统

本章在选择题中考察,需要了解总线和I/O的相关概念,看到题目能够选出来即可。
# 总线

## 总线

- 总线的基本概念
- 总线的组成和性能指标
- 总线事务和定时

## I/O接口

- I/O接口的功能和基本结构
- I/O端口和编址

## I/O方式

- 程序查询方式
- 程序中断方式
- DMA方式

1 - 总线

需了解总线的组成、常见的总线标准以及定时方式,可能会在 CPU 和指令大题中作为知识点进行间接考察,也可能在选择题中出现一道。

基本概念

总线是一组电子导线或信号线,它们允许不同的硬件设备(如 CPU、内存、输入/输出设备等)之间进行数据传输和通信。总线是计算机内部和外部设备之间的信息传递通道。

总线分类

按照功能分有三类总线

  1. 核内总线:在处理器核内部各元件之间连线的总线称为核内总线,可连接核内各寄存器、ALU、指令部件等
  2. 系统总线:指连接 CPU、主存和 I/O 接口等主要部件的总线,通常所说的总线是指这类在系统主要模块之间互连的总线。下面要介绍的也是这种系统总线。
  3. 通信总线:计算机系统之间或计算机系统与其他系统(远程通信设备、测试设备)之间进行通信的总线,又称外部总线

按照数据传送方式分有两类总线

  1. 串行总线:只含有一条双向数据线或两条单向数据线,数据按位分时传送。适合远距离通信,大多数通信总线属于串行总线
  2. 并行总线:含有多条双向数据线,可实现多位同时传送。传输效率高,但相邻数据线之间会相互干扰,适合近距离传输。大多数系统总线属于并行总线

按照时序控制方式

  1. 同步总线:采用公共的时钟信号进行定时,挂接在总线上的所有设备都从时钟线上获得定时信号
    • 总线定时以最慢设备所用时间为标准,因此适合于存取时间相差不大的多个功能部件之间的通信
    • 由于时钟偏移问题,导致同步总线不能过长,否则会降低总线传输效率
    • 同步总线常采用并行传输,即总线的数据条数为 8、16、32 或 64 位等
  2. 异步总线:总线上连接的各部件或设备没有统一的时钟,而是依靠各自内部的定时操作,通过信号握手的方式来进行规定的总线操作,从而完成部件或设备之间的数据传输
    • 由于同步并行总线使用快速且长的传输线时,会导致传送到另一端的波形发生变形,从而使得(并行传输的)所有位中最快和最慢的位信号之间的时间差较大,因此现在更多使用异步串行方式进行传输:串行–传输速率可更快+不会影响到其他位

总线架构方式

总线架构方式可以分成单总线、多总线 以及 分层结构三种。

外部设备1
外部设备2
外部设备n
CPU
主存
I/O 接口
I/O 接口
I/O 接口
磁盘
打印机
I/O 接口
I/O 接口
通道/IO 处理器
CPU
主存
单总线结构
多总线结构
系统总线
存储总线
I/O 总线
键盘
I/O 接口
DMA 总线
高速外设
高速外设
  1. 单总线结构:
    • 在单总线结构中,所有的处理器、存储器和 I/O 设备都通过一个共享的通信通道进行连接。
    • 这种设计简单、成本低,但所有设备都必须竞争同一个总线,可能导致瓶颈。
  2. 多总线结构:
    • 多总线结构通过引入额外的总线来减轻单总线所带来的瓶颈问题。
    • 这种结构可能包括一个内部总线,专门用于处理器和主存储器之间的通信,以及一个或多个外部总线,用于处理器和外围设备之间的通信。
  3. 分层总线结构:
    • 在分层总线结构中,总线被组织成层次结构,每一层服务于不同级别的数据传输需求。
    • 例如,高速缓存和处理器可能在顶层使用高速总线,而存储器和 I/O 设备可能在下一层使用较慢的总线。

总线组成

系统总线通常由一组控制线、一组数据线和一组地址线构成。也有些总线没有单独的地址线,即数据线和地址线复用。

  1. 数据总线(Data Bus):数据总线用于在计算机系统的各个组件之间传输数据。它通常由多条并行线组成,每条线传输一个数据位(比特)。
    • 位数(数据总线条数)与机器字长、存储字长有关,一般是 8 位、16 位、32 位
  2. 地址总线(Address Bus):地址总线用于传输内存地址或外部设备的地址信息,以确定数据的存储位置或目标设备。
    • 地址总线的宽度决定了系统可以寻址的内存或设备的数量。更宽的地址总线通常允许系统寻址更多的内存或设备。
  3. 控制总线(Control Bus):控制总线传输控制信号和命令,用于控制各个硬件组件的操作。这些控制信号包括读/写信号、时钟信号、中断信号、复位信号等。控制总线用于协调数据传输和操作的序列。

常见总线标准

  1. PCI (Peripheral Component Interconnect):PCI 总线是一种用于连接内部扩展卡(如显卡、网卡、声卡等)到主板的标准。PCI 总线存在多个版本,包括 PCI、PCI-X 和 PCI Express(PCIe),它们在带宽、速度和适用范围上有所不同。
  2. SATA (Serial Advanced Technology Attachment):SATA 是一种用于连接存储设备(如硬盘驱动器和光盘驱动器)到计算机的总线标准。它广泛应用于个人电脑和服务器中。
  3. ISA(Industry Standard Architecture):16 位体系结构,只能支持 16 位的 I/O 设备,是已经被淘汰的插槽接口。
  4. IDE (Integrated Drive Electronics):IDE 是早期计算机中用于连接硬盘驱动器和光盘驱动器的总线标准,现在已经被 SATA 所取代。
  5. USB (Universal Serial Bus):USB 是一种通用的总线标准,用于连接各种外部设备(如键盘、鼠标、打印机、存储设备等)到计算机。USB 有多个版本,包括 USB 1.0、USB 2.0、USB 3.0、USB 3.1 和 USB 3.2,它们在传输速度和功能上有所区别。

还有一些其他总线标准比如 PCI-Express、EISA 这种,看到能够认出来是总线标准即可。

总线事务

总线事务是计算机总线操作的一个基本单位。一个总线事务通常涉及一系列的操作,这些操作可以是数据的读取或写入。

在一个总线事务中,主设备(发起事务的设备)通过总线控制线对总线进行控制,并发出地址和数据,以及读写信号。从设备(数据被读取或写入的设备)则识别地址,并根据读写信号进行相应的数据交换。

总线事务包含几个主要阶段:

  1. 请求(Request):主设备发出总线传输请求。
  2. 仲裁(Arbitration): 如果多个设备同时尝试使用总线,它们必须通过某种仲裁过程来决定哪个设备有权控制总线。这通常涉及一个优先级方案,以防止冲突和数据损坏。
  3. 寻址(Addressing): 主设备将目标地址放在总线上,以指定事务的目的地,如特定的内存地址或 I/O 设备。
  4. 传输(Transfer): 一旦地址被确认,数据传输就会发生。这可以是读操作,也可以是写操作。
  5. 终止(Termination): 一旦数据成功传输,事务就会结束。终止阶段可能包括从设备发出的确认信号,或者主设备撤销其对总线的控制。

总线周期

总线周期是指 CPU 通过总线与存储器或 I/O 接口进行一次数据传输所需的时间。 一个总线周期通常包含多个时钟周期,这些时钟周期可以被分为四个阶段(四个时钟周期 $T_1, T_2, T_3, T_4$):

  1. 申请分配阶段:主设备进行请求和仲裁。
  2. 寻址阶段:主设备用地址信息来指明它想读/写的那个从设备是哪一个。
  3. 传输阶段:主设备向从设备发出读命令或者写命令。
  4. 结束阶段:主设备把地址信息、读写命令等从总线上撤除,让出总线的使用权。

总线定时

根据 时钟周期 一节可知,计算机中的设备也许并不使用相同的时钟周期,但是设备间在交换数据的过程中需要时间上配合。

这种时间配合的控制过程就叫做总线定时,总线定时包含 同步定时 和 异步定时 两种方式。

同步定时方式

在总线同步定时方式中,数据传输的时钟信号由一个中央时钟源(通常是主时钟源或总线控制器)生成,并将时钟信号传送到所有参与通信的设备。

这个时钟信号每次都产生一个相等的时间间隔,这个间隔为一个总线传输周期,主设备和从设备必须在这个限定的时间内完成规定的操作。

T1
T2
T3
T4
总线传输周期
时钟
地址
读命令
数据
  • $T_{1}$ 的上升沿到来时,主模块向从模块发送地址
  • $T_{2}$ 的上升沿到来时,主模块发送读命令
  • $T_{3}$ 的上升沿到来时,从模块提供数据
  • $T_{4}$ 的上升沿到来时,主模块撤销读命令,从模块撤销数据

同步通信适用于总线长度较短(出现信息错误的概率小)及总线所接部件的存取时间比较接近的系统。 如果有的从设备速度较慢,就会跟不上总线的节奏,进而拖慢了主设备的速度。

异步定时方式

在总线异步定时方式中,数据传输的时钟信号不是由中央时钟源统一控制,而是由每个设备自己的时钟信号驱动。完全依靠传送双方相互制约的“握手”信号来实现定时控制,通常我们将交换信息的两个设备称为主设备和从设备,主设备发送“请求”,从设备接收到后回复“回答”。

异步定时根据“请求”和“回答”的类型,可以分为三种类型:

  • 不互锁:主设备持续发送请求一段时间,默认从设备接收到请求。
  • 半互锁:主设备接收到来自从设备的回答后停止发送请求,从设备发送回答一段时间,默认主设备接收到回答。
  • 全互锁:从半互锁的基础上,从设备接收到来自于主设备的回答后停止发送回答。
不互锁
不互锁
半互锁
半互锁
不互锁
不互锁
主设备
主设备
从设备
从设备
Text is not SVG - cannot display

2 - I/O 系统

重点掌握程序查询、程序中断和 DMA 三种 IO 方式,常常在选择题中考察。

输入/输出系统

  • 输入设备:用于向计算机系统输入命令和本文或数据,比如鼠标和键盘。
  • 输出设备:用于将计算机系统的信息输出到外部进行显示、交换的部件。
  • I/O 接口:外部设备和主机之间进行数据传输时进行各种协调工作的逻辑部件,暴扣传输过程中速度的匹配、电平和格式转换等。
  • I/O 软件:包含驱动程序、管理程序等,这些程序通过 I/O 指令来实现 CPU 和 I/O 设备的信息互换。
  • I/O 端口:接口电路中可以直接被 CPU 访问的寄存器

I/O 接口

CPU
数据缓冲
寄存器
状态寄存器
控制寄存器
I/O 控制逻辑
地址译码器及
设备选择电路
外设
接口
控制
逻辑
地址线
控制线
数据线
地址信号
控制信号
设备
地址
交互数据
设备状态
控制命令
外设1
控制
状态
数据
外设
接口
控制
逻辑
外设1
控制
状态
数据
外设
接口
控制
逻辑
外设1
控制
状态
数据
I/O 接口

I/O 接口是主机与外设之间信息传输的桥梁,用于解决它们之间的同步与协调、工作速度的匹配和数据格式的转换等问题。 它在主机侧和外设侧各提供一个接口:主机侧为内部接口,通过系统总线和 CPU、内存相连;外设侧为外部接口,通过 USB、串/并行电缆等各种接口电缆与外设相连。

通过 I/O 接口,可以在 CPU、主存和外设之间建立一个高效的信息传输“通路”,这个“通路”即:CPU 和内存 —- I/O 总线 —- I/O 接口(带连接器插座的设备控制器)—- 电缆 —- 外设。一个 I/O 接口可以通过多个外部接口连接多个设备。

功能

  • 数据缓冲:CPU 寄存器、主存等主机部件的存取速度比外设快很多,因此为了速度匹配,可将数据提前存到 I/O 接口中的数据缓冲区,用以中和高速系统组件和低速外部设备之间的速度差异
  • 数据格式转换:主机和外设的数据格式不同,I/O 接口提供数据格式的相互转换,如串并转换、数模转换等
  • 控制和定时:为来自系统总线的控制信号和定时信号提供控制和定时逻辑,对内部资源及外设间动作的先后关系进行协调,并对数据通信过程进行控制
  • 错误或状态检测:提供可以保存各种状态信息的状态寄存器,CPU 通过读取这些寄存器来了解接口和外设的出错情况或状态
  • 与主机和设备通信:上述四个功能都必须通过主机与 I/O 接口之间和 I/O 接口与外设之间的通信来完成

I/O 端口

I/O 端口(输入/输出端口)是计算机与外部设备(如打印机、键盘、鼠标等)进行数据交换的接口。 它们允许 CPU 与外围设备之间进行数据交换。

组成部分

I/O 端口可以根据其功能和传输的数据类型进行分类:

  • 数据端口: 用于传输实际的数据。
  • 状态端口: 用于传输外围设备的状态信息,例如设备是否准备好。
  • 控制端口: 用于传输控制命令,例如启动或停止设备。

编址方式

为了方便 CPU 对于 I/O 端口的访问,需要对各个端口进行编号,每个端口对应一个端口地址。

编址方式主要统一编址和独立编址两种。

内存地址
(共960KB)
端口地址
(共64KB)
0
EFFFFH
F0000H
FFFFFH
内存地址
(共960KB)
端口地址
(共64KB)
0
FFFFH
0
FFFFFH
统一编址
独立编址
  1. 统一编址(Memory-Mapped I/O):
    • 特点:计算机的内存和 I/O 设备都被看做是内存地址空间的一部分,即内存地址和 I/O 地址共享同一个地址空间。
    • 优点:访问 I/O 端口和访问内存单元一样,所有访问内存的指令都可以访问 I/O 端口,不用设置专门 的 I/O 指令;也不需要专用的 I/O 端口控制信号,简化了系统总线。
    • 缺点:占用一部分 CPU 地址空间。划出的端口地址范围,不能再作为内存地址使用 ,所以减少了内存地址空间。
  2. 独立编址(Isolated I/O):
    • 特点:计算机使用专门的 I/O 指令和地址空间来访问外部设备,与内存地址空间分开。
    • 优点:不占用内存空间,而且 I/O 端口地址线根数少,译码电路简单。
    • 缺点:需要专用的控制信号和专用的 I/O 指令。

注意

I/O 端口和接口的区别?

  • I/O 接口: 是主机和外设之间的交接界面,通过接口可以实现主机和外设之间的信息交换。
  • I/O 端口: 是接口电路中可被 CPU 直接访问的寄存器。

I/O 方式

程序查询方式

程序查询方式不断轮询设备状态以判断其是否可以进行数据传输,数据从 设备 → CPU → 主存。

给 I/O 模块发出
读命令
读 I/O 模块的
状态
检查状态
从 I/O 模块中
读取字
往存储器中
写入字
完成?
CPU → I/O
I/O → CPU
错误条件
I/O → CPU
CPU → 存储器
下一条指令
未准备好
准备好
CPU 向控制器
发出命令
将 I/O 状态信息
读入 CPU 寄存器
设备可能出现错误
将数据寄存器的内容
读入 CPU 寄存器
将 CPU 寄存器中的内容
写到内存中

程序查询方式包含以下步骤:

  1. 查询:CPU 定期查询或检查 I/O 设备的状态寄存器,查看设备是否准备就绪。
  2. 判断:如果设备未就绪,CPU 会继续执行其他任务或持续轮询;如果设备就绪,则进行数据传输。
  3. 数据传输:CPU 直接与 I/O 设备交换数据,可以是读操作或写操作。
  4. 结束:数据传输完成后,CPU 继续执行其他任务,同时继续轮询 I/O 设备状态。

程序中断方式

在程序中断方式中,当 I/O 设备准备好进行数据传输时,会触发一个硬件中断来通知 CPU。 CPU 会暂停当前正在执行的任务,处理中断,然后恢复执行被中断的任务。

相比于轮询方式,CPU 在执行程序中断之前不需要一直检查 IO 设备的状态,这提升了效率。

给 I/O 模块发出
读命令
读 I/O 模块的
状态
检查状态
从 I/O 模块中
读取字
往存储器中
写入字
完成?
CPU → I/O
I/O → CPU
错误条件
I/O → CPU
CPU → 存储器
下一条指令
准备好
CPU 向控制器
发出命令
将 I/O 状态信息
读入 CPU 寄存器
设备可能出现错误
将数据寄存器的内容
读入 CPU 寄存器
将 CPU 寄存器中的内容
写到内存中
中断
做其他事情

基础概念

  • 系统中断向量:系统中断向量是一个指向中断处理程序入口地址的指针。
  • 中断向量表(Interrupt Vector Table, IVT):
    • IVT 是一个数据结构,它将中断号映射到中断处理程序的地址。
    • 每个中断向量都包含中断处理程序的入口地址。
  • 中断服务程序(Interrupt Service Routine, ISR):中断处理程序是一段特殊的代码,用于响应特定的中断事件。
    • 保存被中断程序的上下文(寄存器状态等)。
    • 处理中断事件,例如读取硬件设备的数据、响应软件错误等。
    • 恢复被中断程序的上下文,使程序能够从中断点继续执行。
ISR 0 vector
ISR 1 vector
ISR 129 vector
ISR 255 vector
ISR 0
ISR 1
ISR 129
ISR 255
中断向量
中断
向量表
中断处理程序
CPU
根据中断向量找到中断处理程序
INT <中断号>
根据中断号
找到中断向量

CPU 可以通过 INT <中断号> 指令来执行特定的中断。 当中断发生时,CPU 会根据中断类型(中断号)查找中断向量表,找到相应的中断向量。然后,CPU 会使用中断向量中的地址,跳转到对应的中断处理程序执行。

中断处理过程

FR ⇔  stacked FR
CS ⇔  stacked CS
IP ⇔  stacked IP
x86 CPU
系统总线
PIC
外设1
寄存器
外设3
寄存器
外设2
寄存器
外设4
寄存器
IRQ0
IRQ1
IRQ2
IRQ3
IRQ4
IRQ5
IRQ6
IRQ7
Port 0x20:

中断命令
寄存器
Port 0x21:

中断数据
寄存器
0x0000: ISR 0 vector
0x0004: ISR 1 vector
0x0008: NMI vector   
· · · · ·
0x0204: ISR 129 vector
· · · · ·
0x03FC: ISR 255 vector
ISR 0
ISR 129
while (1) {                     
instructoin 1     
        ........                           instruction j        
      
instruction j+1  
........                
instruction n     
}                                  
Frame: saved registers
· · · · ·
Frame: saved registers
主存
1
程序计数器
(CS:IP)
标志寄存器 (FR)
INTR
        
INTA
INT# = 0x81
NMI
ISR n
9.1
9.2
9.3
系统
中断
向量
2
6
4
5
3
8
9
7
10
中断
服务
程序
程序
进程
栈帧

中断处理的详细过程如上图所示,总的来说,中断处理包含如下过程:

  1. 中断触发:
    • 当外部设备完成操作或需要注意时,它会发送一个信号到处理器的中断请求(IRQ)线路。
    • 如果中断使能,并且当前的中断优先级允许,处理器会响应这个中断信号。
  2. 中断识别:
    • 处理器完成当前指令的执行,并开始中断处理过程。
    • 处理器检查中断向量表(一个存储了不同中断处理程序地址的表),确定哪个中断被触发。
  3. 保存断点:
    • 处理器会保存当前任务的状态,通常包括程序计数器(PC)、程序状态字(PSW)和其他必要的寄存器,以便中断处理完成后能够恢复。
  4. 中断屏蔽(关中断):
    • 在执行中断服务程序之前,处理器会禁止或优先级屏蔽进一步的中断,以防止中断处理程序被其他中断打断。
  5. 执行中断服务程序:
    • 处理器根据中断向量表跳转到相应的中断服务程序(ISR)。
  6. 恢复上下文:
    • 中断服务完成后,处理器通过恢复之前保存的状态(上下文)来恢复中断之前执行的任务。
  7. 中断返回:
    • 处理器执行一条专门的中断返回指令(比如 x86 架构中的 IRET 指令),该指令将程序计数器(PC)和程序状态字(PSW)等恢复到中断前的值,然后继续执行中断之前的程序。

注意

保护断点和保护现场的区别

一般来说,程序的上下文包含 CS:IP(断点) 以及 各种寄存器(现场),所以 保存上下文 也包含 保存断点

  • 保存断点:由 中断隐指令 自动保存(硬件 完成),保存 CPU 在中断时即将执行的指令地址,即通过寄存器CS:IP指向的内存地址,完成中断后可通过保存的CS:IP内容恢复下一条指令的执行。
  • 保存现场:在 中断服务程序 内保存(软件 完成),中断服务程序可能会使用到 CPU 中的某些寄存器,通过保存这些寄存器的内容,确保在中断程序执行完后,CPU 可以恢复到执行中断服务程序前的状态。

多重中断和中断屏蔽

若 CPU 在执行中断服务程序的过程中,又出现了新的更高优先级的中断请求,而 CPU 对新的中断请求不予响应,则这种中断称为单重中断。

若 CPU 暂停现行的中断服务程序,转去处理新的中断请求,则这种中断称为多重中断,又称中断嵌套。

ISR
主程序
单级中断
ISR3
ISR1
ISR1
ISR2
ISR2
主程序
多级中断

CPU 要具有处理多重中断的功能,必须满足下列条件:

  1. 在中断服务程序中提前设置开中断指令。
  2. 优先级高的中断源有权中断优先级低的中断源。

可以利用中断屏蔽技术动态调整中断处理优先级,每个中断源都有一个屏蔽触发器,1 表示屏蔽该中断源的请求,0 表示可以正常申请,所有的屏蔽触发器组合在一起便构成一个屏蔽字触发器。

中断源
A
B
屏蔽字
C
D
A
B
C
D
1
1
1
1
0
1
1
1
0
0
1
1
0
0
0
1
优先级 A > B > C > D

如上图,中断屏蔽字中的每一位表示在执行一个中断的时候,我们是否屏蔽来自于其他中断源的请求。比如 B 的优先级高于 C、D,所以在处理来自于中断源 B 的中断时,需要屏蔽 B、C、D,即屏蔽字为 0100。

DMA 方式

DMA(Direct Memory Access,直接内存访问)是一种计算机系统的 I/O(输入/输出)方式,它允许外部设备直接访问主内存而无需 CPU 的干预。

有了上面的程序中断方式,虽然在一定程度上实现了 CPU 和外设的并行工作,但并不完全并行。CPU 只是在外设的数据准备阶段可以去执行其他程序而不需要原地等待,在执行中断服务程序传输数据时仍要全程参与。因此如果是高速 I/O 设备,CPU 仍要频繁的暂停现行程序去处理中断。 DMA 方式就是为了解决程序中断方式的这种缺陷,它增加了 “数据传输过程与主程序并行工作” 的特点。

原理

DMA 让数据传送不再需要经过 CPU,而是直接在外设和内存之间开辟一条“直接数据通路”,使得数据传送期间不再需要占用 CPU 时间处理中断、保护断点和恢复 CPU 现场等繁琐操作。

在 DMA 方式中,CPU 只参与预处理(CPU 通过初始化程序来设置 DMA 控制器的个参数寄存器的初始值,如内存首地址、字计数值等)和后处理过程(传送完成后 CPU 会进行数据校验等工作)。通常适用于以块读写的设备。

DMA 控制器

DMA 控制器由以下若干组件构成:

  • 主机-控制器接口
    • DR(数据寄存器):暂存从设备到内存或从内存到设备的数据。
    • MAR(内存地址寄存器):暂存数据在内存中的地址。
    • DC(数据计数器):表示剩余要读/写的字节数。
    • CR(命令/状态寄存器):用来存放 CPU 发来的 I/O 命令,或设备的状态信息。
  • I/O 控制逻辑
  • 块设备-控制器接口
DR
MAR
DC
CR
I/O
与块设备
的接口
CPU
DMA 控制器
内存
系统总线
主机-控制器接口
块设备-控制器接口
磁盘

步骤

DMA 方式与中断 I/O 方式一样,也是采用 “请求-响应” 的方式,只是中断 I/O 方式请求的是处理器的时间,DMA 方式请求的是总线控制权。如下图,为进程 P1 在磁盘和主存之间进行数据交换的过程示意图:

地址信息
数据信息
主线控制
缓冲区
1
3
2
4
5
处理器
DMA 控制器
总线
磁盘控制器
主存

DMA 进行 I/O 传输包含如下过程:

  1. 预处理:在进行 DMA 传输之前,CPU 需要进行初始化设置,包含源地址、目标地址、数据传输长度以及数据传输方向。
  2. DMA 请求:外设向 DMA 控制器发送 DMA 请求,并向 CPU 发送总线请求。
  3. 获取总线控制权:CPU 响应总线请求,发出总线响应信号,DMA 控制器接管总线控制权,进行 DMA 操作周期。
  4. 数据传输:DMA 控制器进行数据传输,这个过程不需要 CPU 的干预。
  5. 释放总线控制权:一旦 DMA 控制器完成数据传输,它会发出 DMA 传输完成信号,通知外设设备数据已经传输完毕。同时 DMA 控制器会释放总线控制权,使 CPU 可以继续执行其他任务。

使用总线方式

在 DMA 方式中,DMA 接口和 CPU 共享主存,因此它们同时访问主存时,会出现总线的争用问题,为了实现主存的分时复用,有以下三种方法:

  1. 总线独占(Bus Mastering):
    • 在这种模式下,DMA 控制器会取得对总线的独占控制权。在传输期间,CPU 将无法访问内存,因为总线已经被 DMA 控制器占用了。
    • 在独占期间,CPU 通常会执行不涉及内存访问的指令,如计算或寄存器操作,或者进入等待状态直到 DMA 操作完成。
  2. 周期挪用(Cycle Stealing,也叫做循环窃取):
    • 在循环窃取模式下,DMA 控制器会逐个窃取总线周期来进行数据传输,而不是一次性占据所有的总线周期。
    • 这意味着 CPU 在 DMA 控制器未使用总线时仍然可以访问内存。因此,DMA 和 CPU 会交替使用总线,通常不会显著影响 CPU 的操作。
  3. 分时多路复用(Time-Division Multiplexing):
    • 在分时多路复用模式下,DMA 控制器和 CPU 会在预定的时钟周期内轮流使用总线。
    • 这种方式确保了 CPU 和 DMA 控制器都可以在它们的时隙内访问内存,但都无法全时段访问。
周期挪用方式
总线分时复用
总线独占
DMA 独占总线
总线时钟周期
DMA 使用总线
CPU 使用总线

注意

CPU 和 DMA 控制器哪一个对于总线访问的优先级更高?

当 CPU 和 DMA 都需要访问主存时,DMA 控制器可以优先获得总线使用权。因为磁盘一旦开始读写,就必须按时完成数据传送,否则数据缓冲区中的数据会发生丢失。