13 KiB
13 KiB
第5章 输入输出系统
📖 本章介绍I/O设备与主机交换信息的三种控制方式:程序查询、中断和DMA。 🎯 重点理解中断处理过程和DMA工作原理
📋 本章目录
5.1 概述
5.1.1 输入输出系统的发展
graph LR
A[早期阶段] --> B[接口模块阶段]
B --> C[DMA阶段]
C --> D[通道阶段]
D --> E[IO处理机阶段]
style A fill:#ff9999
style B fill:#ffcc99
style C fill:#ffff99
style D fill:#99ff99
style E fill:#99ccff
| 阶段 | 特点 | CPU参与度 |
|---|---|---|
| 早期阶段 | IO设备直接连CPU,串行工作 | 完全参与 |
| 接口模块阶段 | 通过接口连接,可并行工作 | 部分参与 |
| DMA阶段 | IO与主存直接通路,CPU不参与数据传输 | 少量参与 |
| 通道阶段 | 通道独立管理IO | 不参与 |
| IO处理机阶段 | IO处理机独立工作 | 不参与 |
5.1.2 输入输出系统的组成
graph TB
A[输入输出系统] --> B[I/O软件]
A --> C[I/O硬件]
B --> B1[I/O指令]
B --> B2[通道指令]
B --> B3[管理程序]
C --> C1[I/O接口]
C --> C2[I/O设备]
I/O指令格式
graph LR
subgraph "I/O指令格式"
OP[操作码] --> CMD[命令码] --> DEV[设备码]
end
命令码功能:
- 数据输入(IO → CPU)
- 数据输出(CPU → IO)
- 状态测试(查询设备状态)
- 形成操作命令
5.2 I/O设备
5.2.1 I/O设备分类
| 类型 | 设备 | 特点 |
|---|---|---|
| 输入设备 | 键盘、鼠标、扫描仪 | 人 → 机 |
| 输出设备 | 显示器、打印机 | 机 → 人 |
| 外存储器 | 磁盘、磁带、光盘 | 存储信息 |
5.2.2 I/O设备与主机联系方式
graph TB
subgraph "联系方式"
A[I/O设备] --> B[编址方式]
B --> B1[统一编址]
B --> B2[独立编址]
A --> C[联络方式]
C --> C1[立即响应]
C --> C2[异步联络]
C --> C3[同步联络]
A --> D[连接方式]
D --> D1[辐射式]
D --> D2[总线式]
end
5.3 接口
5.3.1 接口的功能
[!info] 接口定义 接口是主机与I/O设备之间的桥梁,实现数据缓冲、格式转换和控制信号传递。
主要功能:
- 选址功能:识别设备地址
- 传送命令:接收并执行CPU命令
- 传送数据:缓冲数据传输
- 反映状态:向CPU报告设备状态
5.3.2 接口的组成
graph TB
subgraph "I/O接口"
DR[数据缓冲寄存器] <--> |"数据"| DATA[数据总线]
CR[控制/状态寄存器] <--> |"控制"| CTRL[控制总线]
AR[设备选择电路] <--> |"地址"| ADDR[地址总线]
DR --> |"数据"| DEV[I/O设备]
CR --> |"控制"| DEV
end
寄存器说明:
| 寄存器 | 功能 | 方向 |
|---|---|---|
| 数据缓冲寄存器 | 暂存传输数据 | 双向 |
| 控制寄存器 | 存放CPU命令 | CPU→接口 |
| 状态寄存器 | 存放设备状态 | 接口→CPU |
| 设备选择电路 | 识别设备地址 | CPU→接口 |
5.3.3 接口类型
| 类型 | 特点 | 应用 |
|---|---|---|
| 并行接口 | 数据并行传输 | 近距离 |
| 串行接口 | 数据串行传输 | 远距离 |
| 可编程接口 | 功能可编程设置 | 灵活应用 |
5.4 程序查询方式
5.4.1 工作原理
[!info] 核心思想 CPU主动查询I/O设备状态,设备准备好后才进行数据传输。
sequenceDiagram
participant CPU
participant IO as I/O设备
loop 查询过程
CPU->>IO: 查询状态
IO-->>CPU: 返回状态
alt 设备未就绪
Note over CPU: 继续查询
else 设备就绪
CPU->>IO: 传输数据
IO-->>CPU: 完成传输
end
end
5.4.2 程序流程
graph TB
START[开始] --> INIT[初始化]
INIT --> QUERY[查询状态]
QUERY --> CHECK{就绪?}
CHECK -->|否| QUERY
CHECK -->|是| TRANS[传输数据]
TRANS --> NEXT[下一个数据?]
NEXT -->|是| QUERY
NEXT -->|否| END[结束]
5.4.3 特点分析
| 优点 | 缺点 |
|---|---|
| 实现简单 | CPU效率低 |
| 硬件成本低 | 实时性差 |
| 易于理解 | 不能并行工作 |
[!warning] 适用场景 适用于I/O设备较少、数据传输不频繁的简单系统。
5.5 程序中断方式
5.5.1 中断的概念
[!info] 定义 中断是指CPU暂停现行程序,转去处理中断请求,处理完毕后返回原程序继续执行。
sequenceDiagram
participant CPU
participant IO as I/O设备
Note over CPU: 执行主程序
CPU->>IO: 启动设备
Note over CPU: 继续执行主程序
Note over IO: 设备准备数据
IO->>CPU: 中断请求
Note over CPU: 保存现场
CPU->>IO: 中断响应
Note over CPU: 执行中断服务程序
CPU->>IO: 传输数据
Note over CPU: 恢复现场
Note over CPU: 返回主程序
5.5.2 中断系统的功能
1. 中断请求
graph LR
subgraph "中断请求信号"
INTR[INTR<br/>可屏蔽中断] --> CPU
NMI[NMI<br/>不可屏蔽中断] --> CPU
end
中断源分类:
- 外部中断:I/O设备请求、定时器中断
- 内部中断:溢出、除零、缺页
2. 中断判优
[!info] 问题 多个中断同时请求时,如何确定优先级?
判优方法:
| 方法 | 原理 | 特点 |
|---|---|---|
| 硬件判优 | 硬件优先级电路 | 速度快 |
| 软件判优 | 程序查询顺序 | 灵活,速度慢 |
优先级原则:
- 硬件故障 > 软件中断
- 高速设备 > 低速设备
- 输入 > 输出
- 实时设备 > 普通设备
3. 中断响应
响应条件:
- 中断源有请求
- CPU允许中断(开中断)
- 一条指令执行完毕
- 没有更高优先级中断
响应过程:
- 关中断
- 保存断点(PC、PSW)
- 识别中断源
- 转入中断服务程序
4. 中断处理
graph TB
subgraph "中断处理过程"
A[关中断] --> B[保存断点]
B --> C[保存现场]
C --> D[识别中断源]
D --> E[执行中断服务程序]
E --> F[恢复现场]
F --> G[开中断]
G --> H[返回断点]
end
5. 中断返回
返回指令:IRET(中断返回)
功能:
- 恢复断点(PC)
- 恢复程序状态字(PSW)
- 开中断
5.5.3 中断服务程序流程
graph TB
START[中断响应] --> SAVE1[保存断点]
SAVE1 --> SAVE2[保存现场]
SAVE2 --> EI[开中断]
EI --> SERVICE[执行服务程序]
SERVICE --> DI[关中断]
DI --> RESTORE1[恢复现场]
RESTORE1 --> RESTORE2[恢复断点]
RESTORE2 --> RET[中断返回]
[!note] 现场保存
- 断点:由硬件自动保存(PC、PSW)
- 现场:由软件保存(通用寄存器)
5.5.4 多重中断
[!info] 概念 在处理中断时,允许更高优先级的中断打断当前中断处理。
实现方法:
- 中断服务程序开始时关中断
- 保存现场后开中断
- 允许更高优先级中断
- 返回前关中断
sequenceDiagram
participant CPU
participant IO1 as 低优先级设备
participant IO2 as 高优先级设备
Note over CPU: 执行主程序
IO1->>CPU: 中断请求1
Note over CPU: 保存现场,开中断
Note over CPU: 执行服务程序1
IO2->>CPU: 中断请求2(优先级高)
Note over CPU: 保存现场,开中断
Note over CPU: 执行服务程序2
Note over CPU: 恢复现场,返回
Note over CPU: 继续服务程序1
Note over CPU: 恢复现场,返回
Note over CPU: 继续主程序
5.5.5 中断接口
graph TB
subgraph "中断接口"
DR[数据缓冲寄存器] <--> DATA[数据总线]
AR[设备选择电路] <--> ADDR[地址总线]
IR[中断请求触发器] --> INTR[INTR线]
IM[中断屏蔽触发器] --> MASK[屏蔽信号]
READY[准备就绪触发器] --> DR
end
关键触发器:
- 中断请求触发器(IR):记录中断请求
- 中断屏蔽触发器(IM):控制中断是否允许
- 准备就绪触发器(READY):设备是否就绪
5.5.6 程序中断方式特点
| 优点 | 缺点 |
|---|---|
| CPU效率提高 | 保护和恢复现场开销 |
| 实时性好 | 硬件成本增加 |
| 可处理突发事件 | 程序设计复杂 |
5.6 DMA方式
5.6.1 DMA的基本概念
[!info] 定义 DMA(Direct Memory Access)是I/O设备与主存直接进行数据交换,不经过CPU的方式。
graph TB
subgraph "DMA方式"
CPU[CPU] <--> |"控制"| DMA[DMA控制器]
DMA <--> |"数据"| MEM[主存]
DMA <--> |"数据"| IO[I/O设备]
CPU -.-> |"不参与数据传输"| MEM
end
特点:
- 数据传输不经过CPU
- CPU与I/O设备并行工作
- 适用于高速I/O设备
5.6.2 DMA与中断方式对比
| 特性 | 中断方式 | DMA方式 |
|---|---|---|
| 数据传输 | 通过CPU | 直接访问主存 |
| CPU参与 | 参与每次传输 | 只参与启动和结束 |
| 传输单位 | 字 | 数据块 |
| 适用速度 | 中低速设备 | 高速设备 |
| 开销 | 保护/恢复现场 | 硬件成本 |
5.6.3 DMA传送方式
1. 停止CPU访问主存
sequenceDiagram
participant CPU
participant DMA
participant MEM as 主存
Note over CPU: 正常访问主存
DMA->>CPU: DMA请求
Note over CPU: 停止访问主存
DMA->>MEM: 数据传输
Note over CPU: 等待
DMA->>CPU: DMA结束
Note over CPU: 恢复访问主存
特点:CPU处于空闲状态,效率低
2. 周期挪用(Cycle Stealing)
sequenceDiagram
participant CPU
participant DMA
participant MEM as 主存
Note over CPU: 执行指令
DMA->>DMA: DMA请求
Note over DMA: 等待CPU周期结束
DMA->>MEM: 挪用一个周期传输
Note over CPU: 继续执行
Note over DMA: 重复挪用
特点:CPU效率影响小,常用
3. DMA与CPU交替访问
sequenceDiagram
participant CPU
participant DMA
participant MEM as 主存
Note over CPU,DMA: CPU周期
CPU->>MEM: CPU访问
Note over CPU,DMA: DMA周期
DMA->>MEM: DMA访问
Note over CPU,DMA: 交替进行
特点:效率最高,硬件复杂
5.6.4 DMA控制器组成
graph TB
subgraph "DMA控制器"
AR[地址寄存器] <--> |"地址"| MEM[主存]
WC[字计数器] --> |"计数"| CTRL[控制逻辑]
DAR[数据缓冲寄存器] <--> |"数据"| IO[I/O设备]
CSR[控制状态寄存器] <--> |"控制"| CPU
CTRL --> |"请求"| DREQ[DREQ线]
CTRL <--> |"响应"| DACK[DACK线]
end
寄存器功能:
| 寄存器 | 功能 |
|---|---|
| 地址寄存器(AR) | 存放主存地址,每次传输后+1 |
| 字计数器(WC) | 存放传输字数,每次传输后-1 |
| 数据缓冲寄存器(DAR) | 暂存传输数据 |
| 控制状态寄存器(CSR) | 存放控制命令和状态 |
5.6.5 DMA传送过程
graph TB
subgraph "DMA传送过程"
A[CPU初始化DMA] --> B[DMA请求]
B --> C[DMA响应]
C --> D[数据传输]
D --> E{传输完成?}
E -->|否| D
E -->|是| F[DMA结束]
F --> G[中断CPU]
G --> H[CPU处理]
end
详细步骤:
-
预处理(CPU完成):
- 设置起始地址
- 设置传输字数
- 设置传输方向
- 启动DMA
-
数据传输(DMA完成):
- 地址送主存
- 发读/写命令
- 数据传输
- 地址+1,字计数-1
-
后处理(CPU完成):
- 检测传输是否出错
- 是否继续传输
5.6.6 DMA方式特点
| 优点 | 缺点 |
|---|---|
| 传输速度快 | 硬件成本高 |
| CPU效率高 | 控制复杂 |
| 适用于高速设备 | 需要额外硬件 |
📝 本章小结
核心概念
- 三种IO方式:程序查询、程序中断、DMA
- 中断处理:中断请求 → 判优 → 响应 → 处理 → 返回
- DMA方式:直接访问主存,CPU不参与数据传输
关键对比
| 方式 | CPU参与度 | 传输单位 | 速度 | 复杂度 |
|---|---|---|---|---|
| 程序查询 | 完全 | 字 | 慢 | 低 |
| 程序中断 | 部分 | 字 | 中 | 中 |
| DMA | 极少 | 数据块 | 快 | 高 |
重点图示
[!summary] 必须掌握的图
- 中断处理流程图
- DMA控制器组成框图
- 三种IO方式工作时序对比图
🧪 自测练习
概念题
- 比较三种IO方式的特点和适用场景。
- 说明中断处理的基本过程。
- 解释DMA的三种传送方式。
分析题
- 设计一个支持多重中断的处理流程。
- 说明DMA控制器的工作原理。
🔗 相关链接
- 04_存储器 - 上一章
- 06_运算方法 - 下一章
- 08_CPU结构与功能 - CPU中断处理
本章难度:⭐⭐⭐ 中等 重要程度:⭐⭐⭐⭐ 重点