┌─────────────────────────────────────────┐
│ CPU │
├─────────────────────────────────────────┤
│ I/O接口 │
│ ┌─────────┬─────────┬─────────┐ │
│ │数据端口 │状态端口 │控制端口 │ │
│ └─────────┴─────────┴─────────┘ │
├─────────────────────────────────────────┤
│ I/O设备 (键盘/显示器/磁盘等) │
└─────────────────────────────────────────┘
I/O接口中能被CPU访问的寄存器称为I/O端口。
| 端口类型 | 功能 | CPU访问方式 |
|---|---|---|
| 数据端口 | 存放数据 | 读/写 |
| 状态端口 | 反映设备状态 | 只读 |
| 控制端口 | 存放控制命令 | 只写 |
状态位示例: - Busy位:设备是否忙 - Ready位:数据是否准备好 - Error位:是否有错误
特点:
- 有专门的I/O指令(如IN、OUT)
- I/O地址空间与内存空间分离
- 优点:I/O指令简单,执行快
- 缺点:需专门指令支持
特点:
- I/O端口占用内存地址空间
- 使用普通访存指令访问I/O
- 优点:无需专门指令,编程灵活
- 缺点:占用内存地址空间
| 特性 | 独立编址 | 统一编址 |
|---|---|---|
| 地址空间 | 分离 | 合并 |
| 指令 | 专门I/O指令 | 普通访存指令 |
| 优点 | I/O操作快 | 编程灵活 |
| 缺点 | 需专门指令 | 占内存空间 |
CPU:
LOOP:
检查I/O设备状态
IF 就绪 THEN 传输数据
ELSE 继续检查
特点: - CPU全程参与数据传输 - CPU不断轮询设备状态 - 效率低,但实现简单
1. CPU向I/O接口写入控制字,启动设备
2. CPU不断读取状态端口
3. 检查Ready位或Busy位
4. 若设备就绪,进行数据传输
5. 若设备未就绪,继续查询
| 优点 | 缺点 |
|---|---|
| 实现简单 | CPU利用率低 |
| 硬件简单 | 无法处理突发情况 |
| 编程容易 | 等待时间长 |
中断:CPU在执行程序过程中,因外部或内部事件而暂停当前程序,转去执行相应处理程序的过程。
| 分类标准 | 类型 | 说明 |
|---|---|---|
| 按来源 | 硬件中断 | 来自外部设备 |
| 软件中断 | 程序执行中的异常或INT指令 | |
| 按可屏蔽性 | 可屏蔽中断 | 可被IF位屏蔽 |
| 不可屏蔽中断 | 必须响应(如电源故障) | |
| 按触发方式 | 边沿触发 | 上升沿/下降沿 |
| 电平触发 | 高电平/低电平 |
1. 中断请求
↓ 设备向CPU发送中断请求信号(INTR)
2. 中断判优
↓ 当多个中断同时发生时,选择优先级最高者
3. 中断响应
↓ 保护现场(PC、PSW等),关中断
4. 中断服务
↓ 执行中断处理程序
5. 中断返回
↓ 恢复现场,返回断点继续执行
中断向量:中断服务程序的入口地址
中断向量号 ──→ 中断向量表 ──→ 中断服务程序入口
中断屏蔽字:控制哪些中断可以被响应
IF (中断屏蔽字相应位 = 1) THEN 禁止响应该中断
IF (中断屏蔽字相应位 = 0) THEN 允许响应该中断
| 优点 | 缺点 |
|---|---|
| 提高CPU利用率 | 需要中断处理程序 |
| 可处理突发情况 | 可能产生中断嵌套 |
| 实现异步通信 | 中断响应有额外开销 |
DMA(Direct Memory Access):直接存储器访问
在外设和主存之间直接传输数据,无需CPU干预
1. CPU初始化DMA控制器
设置:源地址、目的地址、传输长度
2. DMA请求总线控制权
DMA向CPU发送HOLD信号
3. CPU响应HOLD,释放总线控制权
CPU进入保持状态
4. DMA控制器接管总线
直接与主存交换数据
5. 每传输一个数据
- 地址自动增加
- 计数自动减1
6. 传输完成
- DMA释放总线
- 发送中断通知CPU
┌──────────────────────────────────────┐
│ DMA控制器 │
│ ┌────────┐ ┌────────┐ ┌────────┐ │
│ │地址寄存器│ │计数寄存器│ │控制寄存器│ │
│ └────────┘ └────────┘ └────────┘ │
│ ┌─────────────────────────────┐ │
│ │ 总线请求逻辑 │ │
│ └─────────────────────────────┘ │
└──────────────────────────────────────┘
| 方式 | 说明 | 适用场景 |
|---|---|---|
| 停止CPU访问 | DMA期间CPU完全让出总线 | 长时间传输 |
| 周期挪用 | DMA挪用一两个周期 | 单字节传输 |
| 交替访问 | CPU和DMA分时使用总线 | 高速设备 |
| 优点 | 缺点 |
|---|---|
| CPU效率高 | 硬件复杂 |
| 传输速度快 | 需要DMA控制器 |
| 适用于批量传输 | 控制复杂 |
| 方式 | CPU介入程度 | 数据传输单位 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|---|---|
| 程序查询 | 全程参与 | 字节/字 | 低速设备 | 简单 | CPU利用率低 |
| 中断方式 | 初始化和结尾 | 字节/字 | 中速设备 | 可处理异步 | 中断开销 |
| DMA方式 | 仅初始化和结束 | 数据块 | 高速设备 | 高效 | 硬件复杂 |
| 通道方式 | 基本不参与 | 数据块 | 大型设备 | 独立性强 | 成本高 |
| 类型 | 说明 | 示例 |
|---|---|---|
| 系统总线 | 连接CPU和主存 | 地址线、数据线、控制线 |
| I/O总线 | 连接I/O设备 | PCI、PCIe、USB |
| 通信总线 | 短距离通信 | I2C、SPI、UART |
解决多个设备争用总线的问题
| 方式 | 说明 |
|---|---|
| 集中式仲裁 | 总线控制器统一管理(链式查询、计数器定时查询、独立请求) |
| 分布式仲裁 | 各设备自行仲裁(自举分布式仲裁) |
| 总线 | 说明 | 特点 |
|---|---|---|
| PCI | 并行总线 | 32/64位,33/66MHz |
| PCIe | 串行总线 | 高速,点对点 |
| USB | 通用串行总线 | 热插拔,即插即用 |
| I2C | 串行总线 | 两根线,时钟+数据 |
I/O端口中,用于存放数据的是( ) A. 状态端口 B. 数据端口 C. 控制端口 D. 中断端口
采用统一编址方式时,I/O端口占用( ) A. 独立的地址空间 B. 内存地址空间 C. 寄存器空间 D. Cache空间
DMA方式中,数据传输完成后需要( ) A. CPU轮询 B. 中断通知CPU C. 无需通知 D. 软件查询
下列I/O方式中,CPU介入最少的是( ) A. 程序查询 B. 中断 C. DMA D. 通道
中断处理过程中,保护现场是为了( ) A. 提高速度 B. 便于恢复执行 C. 节省内存 D. 减少中断
I/O接口中的三个端口分别是数据端口、状态端口和______端口。
I/O编址方式有独立编址和______两种。
DMA的中文全称是______。
中断向量是中断服务程序的______。
程序查询方式中,CPU通过______端口获取设备状态。
比较独立编址和统一编址的优缺点。
简述DMA方式的工作过程。
说明中断处理的基本过程。
比较程序查询、中断、DMA三种I/O方式的优缺点。
为什么高速外设通常采用DMA方式?
某磁盘用DMA方式传输4KB数据,已知磁盘转速7200RPM,传输速率为100MB/s。请分析: 1. DMA传输过程中CPU是否需要参与? 2. 如何判断DMA传输结束? 3. 如果采用中断方式,会有什么问题?
基本不需要。DMA获得总线控制权后,可直接与主存交换数据。
如何判断DMA传输结束?
DMA发送中断信号通知CPU
如果采用中断方式会有什么问题?