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

返回本页常规视图.

总线和输入输出系统

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

## 总线

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

## I/O接口

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

## I/O方式

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

1 - 总线

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

总线的基本概念

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

总线架构方式

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

总线组成

总线通常由多个不同的信号线或导线组成,每条线承担特定的功能。以下是总线的主要组成部分:

  1. 数据总线(Data Bus):数据总线用于在计算机系统的各个组件之间传输数据。它通常由多条并行线组成,每条线传输一个数据位(比特)。数据总线的宽度决定了每次数据传输的位数,例如,32位数据总线可以一次传输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): 一旦数据成功传输,事务就会结束。终止阶段可能包括从设备发出的确认信号,或者主设备撤销其对总线的控制。

总线定时

1. 总线同步定时方式:

  • 工作原理:在总线同步定时方式中,数据传输的时钟信号由一个中央时钟源(通常是主时钟源或总线控制器)生成,并将时钟信号传送到所有参与通信的设备。数据的传输和采样都按照这个中央时钟信号的时序进行。
  • 优点:传输速度快,总线控制逻辑简单。
  • 缺点:对于大规模系统或跨越较长距离的总线,需要保证时钟信号的一致性和稳定性,可能增加系统设计的复杂性。

2. 总线异步定时方式:

  • 工作原理:在总线异步定时方式中,数据传输的时钟信号不是由中央时钟源统一控制,而是由每个设备自己的时钟信号驱动。完全依靠传送双方相互制约的“握手”信号来实现定时控制,通常我们将交换信息的两个设备称为主设备和从设备,主设备发送“请求”,从设备接收到后回复“回答”。
  • 优点:可以适应异构系统,其中不同设备可能具有不同的时钟频率。
  • 缺点:比同步控制方式复杂,速度比同步定时方式慢。

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

  • 不互锁:主设备持续发送请求一段时间,默认从设备接收到请求。
  • 半互锁:主设备接收到来自从设备的回答后停止发送请求,从设备发送回答一段时间,默认主设备接收到回答。
  • 全互锁:从半互锁的基础上,从设备接收到来自于主设备的回答后停止发送回答。
不互锁
不互锁
半互锁
半互锁
不互锁
不互锁
主设备
主设备
从设备
从设备
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 端口

I/O 端口主要包含数据端口、状态端口和控制端口,若干端口加上响应的控制逻辑电路组成接口。通常,CPU 能对数据端口执行读写操作,但对状态端口只能执行读操作,对控制端口只能执行写操作。

为了方便 CPU 对于 I/O 端口的方恩,需要对各个端口进行编号,每个端口对应一个端口地址。编址方式主要有如下两种:

  1. 统一编址(Memory-Mapped I/O):
    • 在统一编址中,计算机的内存和 I/O 设备都被看做是内存地址空间的一部分,即内存地址和 I/O 地址共享同一个地址空间。
    • 这意味着在访问 I/O 设备时,使用的是与访问内存相同的指令和地址。对于 CPU 来说,没有专门的 I/O 指令,只是通过读写特定的内存地址来访问 I/O 端口。
    • 优点是简化了编程,因为访问 I/O 设备的方式与访问内存一致。但缺点是可能导致内存地址的冲突,需要特别注意确保不会与内存地址冲突。
  2. 独立编址(Isolated I/O):
    • 在独立编址中,计算机使用专门的 I/O 指令和地址空间来访问外部设备,与内存地址空间分开。
    • 这意味着有专门的 I/O 指令集,用于读写 I/O 设备,并且有独立的地址空间用于寻址 I/O 端口。
    • 优点是更好地区分了内存和 I/O 访问,减少了潜在的地址冲突。但缺点是编程时需要使用不同的指令和地址,稍微复杂一些。

I/O 方式

程序查询方式

CPU 重复检查 I/O 设备的状态,确定是否可以进行数据传输。

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

程序中断方式

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

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

中断处理过程

FR ⇔  stacked FR
CS ⇔  stacked CS
IP ⇔  stacked IP
X86
microprocessor
System Bus
PIC
System timer
Regsiters
Keyboard
Regsiters
Real-time clock
Regsiters
Mouse
Regsiters
IRQ0
IRQ1
IRQ2
IRQ3
IRQ4
IRQ5
IRQ6
IRQ7
Port 0x20:
Interrupt
command
register
Port 0x21:
Interrupt
data
register
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
Memory
1
Program counter
register (CS:IP)
Flag register (FR)
2
INTR
        
INTA
4
5
INT# = 0x81
NMI
6
7
ISR n
8
9
9.1
9.2
3
10
9.3
  1. 中断触发:
    • 当外部设备完成操作或需要注意时,它会发送一个信号到处理器的中断请求(IRQ)线路。
    • 如果中断使能,并且当前的中断优先级允许,处理器会响应这个中断信号。
  2. 中断识别:
    • 处理器完成当前指令的执行,并开始中断处理过程。
    • 处理器检查中断向量表(一个存储了不同中断处理程序地址的表),确定哪个中断被触发。
  3. 保存上下文:
    • 处理器会保存当前任务的状态,通常包括程序计数器(PC)、程序状态字(PSW)和其他必要的寄存器,以便中断处理完成后能够恢复。
  4. 中断服务程序(ISR)调度:
    • 处理器根据中断向量表跳转到相应的中断服务程序(ISR)。
    • 在执行中断服务程序之前,处理器可能会禁止或优先级屏蔽进一步的中断,以防止中断处理程序被其他中断打断。
  5. 执行中断服务程序:
    • 中断服务程序执行所需的操作以响应外部中断,比如从 I/O 设备读取数据或向其发送数据。
  6. 恢复上下文:
    • 中断服务完成后,处理器通过恢复之前保存的状态(上下文)来恢复中断之前执行的任务。
  7. 中断返回:
    • 处理器执行一条专门的中断返回指令(比如 x86 架构中的 IRET 指令),该指令将程序计数器(PC)和程序状态字(PSW)等恢复到中断前的值,然后继续执行中断之前的程序。

多重中断和中断屏蔽

ISP
ISP
main
prorgam
main...
ISP1
ISP1
ISP2
ISP2
ISP3
ISP3
main
prorgam
main...
Text is not SVG - cannot display

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

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

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 的干预。

步骤

地址信息
数据信息
主线控制
缓冲区
1
3
2
4
5
磁盘控制器
主存
处理器
DMA 控制器
总线
  1. 预处理:在进行 DMA 传输之前,CPU 需要进行初始化设置,包含源地址、目标地址、数据传输长度以及数据传输方向。
  2. DMA 请求:外设向 DMA 控制器发送 DMA 请求,并向 CPU 发送总线请求。
  3. 获取总线控制权:CPU 响应总线请求,发出总线响应信号,DMA 控制器接管总线控制权,进行 DMA 操作周期。
  4. 数据传输:DMA 控制器进行数据传输,这个过程不需要 CPU 的干预。
  5. 释放总线控制权:一旦 DMA 控制器完成数据传输,它会发出 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 控制器都可以在它们的时隙内访问内存,但都无法全时段访问。

视频讲解