第六章 I/O系统与异常中断

6.1 I/O系统概述

6.1.1 I/O系统的组成

┌─────────────────────────────────────────┐
│                 CPU                      │
├─────────────────────────────────────────┤
│              I/O接口                     │
│  ┌─────────┬─────────┬─────────┐       │
│  │数据端口 │状态端口 │控制端口 │       │
│  └─────────┴─────────┴─────────┘       │
├─────────────────────────────────────────┤
│           I/O设备 (键盘/显示器/磁盘等)   │
└─────────────────────────────────────────┘

6.1.2 I/O接口的功能

  1. 数据缓冲:匹配CPU和外设的速度差异
  2. 格式转换:串行/并行转换、数据格式转换
  3. 信号匹配:电平转换、功率放大
  4. 通信控制:中断处理、DMA传输控制

6.2 I/O接口

6.2.1 I/O端口

I/O接口中能被CPU访问的寄存器称为I/O端口

端口类型 功能 CPU访问方式
数据端口 存放数据 读/写
状态端口 反映设备状态 只读
控制端口 存放控制命令 只写

状态位示例: - Busy位:设备是否忙 - Ready位:数据是否准备好 - Error位:是否有错误

6.2.2 I/O编址方式 ⭐

独立编址(I/O映射)

特点:
- 有专门的I/O指令(如IN、OUT)
- I/O地址空间与内存空间分离
- 优点:I/O指令简单,执行快
- 缺点:需专门指令支持

统一编址(内存映射I/O)

特点:
- I/O端口占用内存地址空间
- 使用普通访存指令访问I/O
- 优点:无需专门指令,编程灵活
- 缺点:占用内存地址空间

6.2.3 两种编址方式对比

特性 独立编址 统一编址
地址空间 分离 合并
指令 专门I/O指令 普通访存指令
优点 I/O操作快 编程灵活
缺点 需专门指令 占内存空间

6.3 程序查询方式 ⭐

6.3.1 工作原理

CPU:
  LOOP:
    检查I/O设备状态
    IF 就绪 THEN 传输数据
    ELSE 继续检查

特点: - CPU全程参与数据传输 - CPU不断轮询设备状态 - 效率低,但实现简单

6.3.2 程序查询流程

1. CPU向I/O接口写入控制字,启动设备
2. CPU不断读取状态端口
3. 检查Ready位或Busy位
4. 若设备就绪,进行数据传输
5. 若设备未就绪,继续查询

6.3.3 程序查询方式的特点

优点 缺点
实现简单 CPU利用率低
硬件简单 无法处理突发情况
编程容易 等待时间长

6.3.4 应用场景


6.4 中断方式 ⭐⭐

6.4.1 中断的基本概念

中断:CPU在执行程序过程中,因外部或内部事件而暂停当前程序,转去执行相应处理程序的过程。

6.4.2 中断的类型

分类标准 类型 说明
按来源 硬件中断 来自外部设备
软件中断 程序执行中的异常或INT指令
按可屏蔽性 可屏蔽中断 可被IF位屏蔽
不可屏蔽中断 必须响应(如电源故障)
按触发方式 边沿触发 上升沿/下降沿
电平触发 高电平/低电平

6.4.3 中断处理过程 ⭐⭐

1. 中断请求
   ↓ 设备向CPU发送中断请求信号(INTR)
2. 中断判优
   ↓ 当多个中断同时发生时,选择优先级最高者
3. 中断响应
   ↓ 保护现场(PC、PSW等),关中断
4. 中断服务
   ↓ 执行中断处理程序
5. 中断返回
   ↓ 恢复现场,返回断点继续执行

6.4.4 中断向量

中断向量:中断服务程序的入口地址

中断向量号 ──→ 中断向量表 ──→ 中断服务程序入口

6.4.5 中断屏蔽

中断屏蔽字:控制哪些中断可以被响应

IF (中断屏蔽字相应位 = 1) THEN 禁止响应该中断
IF (中断屏蔽字相应位 = 0) THEN 允许响应该中断

6.4.6 中断的特点

优点 缺点
提高CPU利用率 需要中断处理程序
可处理突发情况 可能产生中断嵌套
实现异步通信 中断响应有额外开销

6.5 DMA方式 ⭐⭐

6.5.1 DMA基本概念

DMA(Direct Memory Access):直接存储器访问

在外设和主存之间直接传输数据,无需CPU干预

6.5.2 DMA工作过程 ⭐

1. CPU初始化DMA控制器
   设置:源地址、目的地址、传输长度

2. DMA请求总线控制权
   DMA向CPU发送HOLD信号

3. CPU响应HOLD,释放总线控制权
   CPU进入保持状态

4. DMA控制器接管总线
   直接与主存交换数据

5. 每传输一个数据
   - 地址自动增加
   - 计数自动减1

6. 传输完成
   - DMA释放总线
   - 发送中断通知CPU

6.5.3 DMA控制器组成

┌──────────────────────────────────────┐
│           DMA控制器                    │
│  ┌────────┐  ┌────────┐  ┌────────┐  │
│  │地址寄存器│  │计数寄存器│  │控制寄存器│  │
│  └────────┘  └────────┘  └────────┘  │
│  ┌─────────────────────────────┐     │
│  │         总线请求逻辑          │     │
│  └─────────────────────────────┘     │
└──────────────────────────────────────┘

6.5.4 DMA传输方式

方式 说明 适用场景
停止CPU访问 DMA期间CPU完全让出总线 长时间传输
周期挪用 DMA挪用一两个周期 单字节传输
交替访问 CPU和DMA分时使用总线 高速设备

6.5.5 DMA方式的特点

优点 缺点
CPU效率高 硬件复杂
传输速度快 需要DMA控制器
适用于批量传输 控制复杂

6.6 四种I/O方式对比 ⭐⭐

6.6.1 对比表

方式 CPU介入程度 数据传输单位 适用场景 优点 缺点
程序查询 全程参与 字节/字 低速设备 简单 CPU利用率低
中断方式 初始化和结尾 字节/字 中速设备 可处理异步 中断开销
DMA方式 仅初始化和结束 数据块 高速设备 高效 硬件复杂
通道方式 基本不参与 数据块 大型设备 独立性强 成本高

6.6.2 选择原则


6.7 总线系统

6.7.1 总线的类型

类型 说明 示例
系统总线 连接CPU和主存 地址线、数据线、控制线
I/O总线 连接I/O设备 PCI、PCIe、USB
通信总线 短距离通信 I2C、SPI、UART

6.7.2 总线仲裁

解决多个设备争用总线的问题

方式 说明
集中式仲裁 总线控制器统一管理(链式查询、计数器定时查询、独立请求)
分布式仲裁 各设备自行仲裁(自举分布式仲裁)

6.7.3 总线标准

总线 说明 特点
PCI 并行总线 32/64位,33/66MHz
PCIe 串行总线 高速,点对点
USB 通用串行总线 热插拔,即插即用
I2C 串行总线 两根线,时钟+数据

章节练习题

一、选择题

  1. I/O端口中,用于存放数据的是( ) A. 状态端口 B. 数据端口 C. 控制端口 D. 中断端口

  2. 采用统一编址方式时,I/O端口占用( ) A. 独立的地址空间 B. 内存地址空间 C. 寄存器空间 D. Cache空间

  3. DMA方式中,数据传输完成后需要( ) A. CPU轮询 B. 中断通知CPU C. 无需通知 D. 软件查询

  4. 下列I/O方式中,CPU介入最少的是( ) A. 程序查询 B. 中断 C. DMA D. 通道

  5. 中断处理过程中,保护现场是为了( ) A. 提高速度 B. 便于恢复执行 C. 节省内存 D. 减少中断

二、填空题

  1. I/O接口中的三个端口分别是数据端口、状态端口和______端口。

  2. I/O编址方式有独立编址和______两种。

  3. DMA的中文全称是______。

  4. 中断向量是中断服务程序的______。

  5. 程序查询方式中,CPU通过______端口获取设备状态。

三、简答题

  1. 比较独立编址和统一编址的优缺点。

  2. 简述DMA方式的工作过程。

  3. 说明中断处理的基本过程。

  4. 比较程序查询、中断、DMA三种I/O方式的优缺点。

  5. 为什么高速外设通常采用DMA方式?

四、分析题

某磁盘用DMA方式传输4KB数据,已知磁盘转速7200RPM,传输速率为100MB/s。请分析: 1. DMA传输过程中CPU是否需要参与? 2. 如何判断DMA传输结束? 3. 如果采用中断方式,会有什么问题?


参考答案

选择题

  1. B 2. B 3. B 4. D 5. B

填空题

  1. 控制
  2. 统一编址(内存映射)
  3. 直接存储器访问(Direct Memory Access)
  4. 入口地址
  5. 状态

分析题答案

  1. DMA传输过程中CPU是否需要参与?
  2. 基本不需要。DMA获得总线控制权后,可直接与主存交换数据。

  3. 如何判断DMA传输结束?

  4. DMA内部有计数器,当计数到0时,表示传输完成
  5. DMA发送中断信号通知CPU

  6. 如果采用中断方式会有什么问题?

  7. 传输4KB数据若用中断方式,每传一个字节就产生一次中断
  8. 产生8192次中断,开销巨大
  9. CPU大部分时间在处理中断,效率极低
  10. 因此批量传输应采用DMA方式