7.1 I/O 系统概述
I/O 系统由 I/O 软件和 I/O 硬件组成。I/O 硬件包括:外部设备、I/O 接口、I/O 总线。I/O 接口是主机与外设之间的交接界面,完成数据缓冲、电平转换、数据格式转换、地址译码、控制定时等。
I/O 端口编址方式
- 统一编址(存储器映射编址):I/O 端口与主存单元共用同一地址空间,用地址区分。无需专用 I/O 指令,但占用主存空间。如 ARM、RISC-V。
- 独立编址(I/O 映射编址):I/O 端口有独立地址空间,用 IN/OUT 指令访问。不占主存空间,但需专用指令。如 x86。
| I/O 控制方式 | CPU 介入程度 | 数据传送单位 | 效率 | 适用场景 |
|---|---|---|---|---|
| 程序查询 | 全程 | 字/字节 | 最低 | 简单、低速设备 |
| 程序中断 | 启动+中断时介入 | 字/字节 | 中 | 中速、随机设备 |
| DMA | 仅启停时介入 | 数据块 | 高 | 高速大批量设备 |
7.2 程序查询方式
CPU 不断读取设备状态口,查询设备是否就绪。就绪则进行数据传送,否则继续轮询。
- 优点:硬件简单。
- 缺点:CPU 与外设串行工作,大量时间浪费在等待上,无法实现多设备并行。
7.3 程序中断方式
中断
CPU 暂停现行程序,转去处理紧急事件(中断服务),处理完后再返回原程序继续执行的过程。中断处理过程
- 中断请求:中断源发出请求信号 INTR,送中断请求触发器。
- 中断响应:CPU 在每条指令执行末尾检测 INTR,若开中断且无更高级请求,则响应。
- 关中断:保护现场期间禁止再次响应中断(防止断点丢失)。
- 保存断点:将 PC(和 PSW)压栈。
- 保护现场:中断服务程序中保存通用寄存器内容。
- 中断服务:执行具体的中断处理任务(数据传送等)。
- 恢复现场:恢复通用寄存器内容。
- 开中断:允许响应新的中断(允许中断嵌套)。
- 中断返回:IRET 指令,从栈中恢复 PC(和 PSW),返回原程序。
多重中断(中断嵌套)
允许优先级更高的中断打断当前中断服务。在保护现场后、中断服务前开中断;恢复现场前再次关中断。开中断的时机决定了能否嵌套。
关键:保护现场和恢复现场阶段必须关中断,否则断点/现场可能被破坏。开中断应在保护现场之后、中断服务之前。
中断优先级与判优
- 硬件排队器:由硬件电路实现固定优先级,速度快。
- 软件查询:按顺序查询各中断源,先查到的优先级高,速度慢但灵活。
典型优先级:硬件故障 > 时钟中断 > 程序性错误 > 外部中断 > 输入输出中断。
7.4 DMA 方式
DMA (Direct Memory Access)
直接存储器存取。在 DMA 控制器控制下,外设与主存之间直接进行数据交换,不经过 CPU,用于高速大批量数据传送。DMA 工作过程
- 预处理:CPU 向 DMAC 写入:读/写命令、主存起始地址、数据块长度、设备号。CPU 启动 DMAC 后转其他工作。
- 数据传送:DMAC 控制总线,直接在主存与外设间传送数据。每传送一个字,主存地址加 1、计数器减 1。
- 后处理:计数器减到 0 时,DMAC 向 CPU 发中断请求,CPU 进行结束处理(校验、是否继续等)。
DMA 与中断对比
| 对比项 | 中断方式 | DMA 方式 |
|---|---|---|
| CPU 介入 | 每传送一个字介入一次 | 仅开始和结束介入 |
| 数据传送 | 由 CPU 执行指令完成 | 由 DMAC 硬件完成 |
| 响应时间 | 指令执行末尾响应 | 总线周期结束即可响应(更快) |
| 传送单位 | 字/字节 | 数据块 |
| 适用场景 | 中速设备 | 高速设备 |
| 优先级 | 低 | 高(DMA 优先于中断) |
DMA 传送方式
- 停止 CPU 访存:DMA 期间 CPU 让出总线,简单但 CPU 利用率低。
- 周期挪用(周期窃取):DMA 挪用 CPU 不访存的周期,需判断总线冲突,效率高。
- 交替访存:CPU 与 DMA 分时使用存储周期,无需申请总线,效率最高。
7.5 I/O 接口
I/O 接口
主机与外设之间的缓冲、转换部件,含数据端口、状态端口、控制端口三类寄存器。- 数据端口:存放传送的数据。
- 状态端口:反映设备状态(就绪、忙、错误等)。
- 控制端口:接收 CPU 控制命令(启动、停止、模式选择)。