vault backup: 2026-07-04 12:12:55

This commit is contained in:
2026-07-04 12:12:55 +08:00
parent 3aac80fb26
commit ba1ad4e098
21 changed files with 8514 additions and 0 deletions

View File

@@ -0,0 +1,583 @@
# 第5章 输入输出系统
> 📖 本章介绍I/O设备与主机交换信息的三种控制方式程序查询、中断和DMA。
> 🎯 重点理解中断处理过程和DMA工作原理
---
## 📋 本章目录
- [[#5.1 概述]]
- [[#5.2 I/O设备]]
- [[#5.3 接口]]
- [[#5.4 程序查询方式]]
- [[#5.5 程序中断方式]]
- [[#5.6 DMA方式]]
- [[#本章小结]]
---
## 5.1 概述
### 5.1.1 输入输出系统的发展
```mermaid
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 输入输出系统的组成
```mermaid
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指令格式
```mermaid
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设备与主机联系方式
```mermaid
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设备之间的桥梁实现数据缓冲、格式转换和控制信号传递。
**主要功能**
1. **选址功能**:识别设备地址
2. **传送命令**接收并执行CPU命令
3. **传送数据**:缓冲数据传输
4. **反映状态**向CPU报告设备状态
### 5.3.2 接口的组成
```mermaid
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设备状态设备准备好后才进行数据传输。
```mermaid
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 程序流程
```mermaid
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暂停现行程序转去处理中断请求处理完毕后返回原程序继续执行。
```mermaid
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. 中断请求
```mermaid
graph LR
subgraph "中断请求信号"
INTR[INTR<br/>可屏蔽中断] --> CPU
NMI[NMI<br/>不可屏蔽中断] --> CPU
end
```
**中断源分类**
- **外部中断**I/O设备请求、定时器中断
- **内部中断**:溢出、除零、缺页
#### 2. 中断判优
> [!info] 问题
> 多个中断同时请求时,如何确定优先级?
**判优方法**
| 方法 | 原理 | 特点 |
|------|------|------|
| 硬件判优 | 硬件优先级电路 | 速度快 |
| 软件判优 | 程序查询顺序 | 灵活,速度慢 |
**优先级原则**
- 硬件故障 > 软件中断
- 高速设备 > 低速设备
- 输入 > 输出
- 实时设备 > 普通设备
#### 3. 中断响应
**响应条件**
1. 中断源有请求
2. CPU允许中断开中断
3. 一条指令执行完毕
4. 没有更高优先级中断
**响应过程**
1. 关中断
2. 保存断点PC、PSW
3. 识别中断源
4. 转入中断服务程序
#### 4. 中断处理
```mermaid
graph TB
subgraph "中断处理过程"
A[关中断] --> B[保存断点]
B --> C[保存现场]
C --> D[识别中断源]
D --> E[执行中断服务程序]
E --> F[恢复现场]
F --> G[开中断]
G --> H[返回断点]
end
```
#### 5. 中断返回
**返回指令**IRET中断返回
**功能**
1. 恢复断点PC
2. 恢复程序状态字PSW
3. 开中断
### 5.5.3 中断服务程序流程
```mermaid
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] 概念
> 在处理中断时,允许更高优先级的中断打断当前中断处理。
**实现方法**
1. 中断服务程序开始时**关中断**
2. 保存现场后**开中断**
3. 允许更高优先级中断
4. 返回前**关中断**
```mermaid
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 中断接口
```mermaid
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] 定义
> DMADirect Memory Access是I/O设备与主存直接进行数据交换不经过CPU的方式。
```mermaid
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访问主存
```mermaid
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
```mermermaid
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交替访问
```mermaid
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控制器组成
```mermaid
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传送过程
```mermaid
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
```
**详细步骤**
1. **预处理**CPU完成
- 设置起始地址
- 设置传输字数
- 设置传输方向
- 启动DMA
2. **数据传输**DMA完成
- 地址送主存
- 发读/写命令
- 数据传输
- 地址+1字计数-1
3. **后处理**CPU完成
- 检测传输是否出错
- 是否继续传输
### 5.6.6 DMA方式特点
| 优点 | 缺点 |
|------|------|
| 传输速度快 | 硬件成本高 |
| CPU效率高 | 控制复杂 |
| 适用于高速设备 | 需要额外硬件 |
---
## 📝 本章小结
### 核心概念
1. **三种IO方式**程序查询、程序中断、DMA
2. **中断处理**:中断请求 → 判优 → 响应 → 处理 → 返回
3. **DMA方式**直接访问主存CPU不参与数据传输
### 关键对比
| 方式 | CPU参与度 | 传输单位 | 速度 | 复杂度 |
|------|----------|----------|------|--------|
| 程序查询 | 完全 | 字 | 慢 | 低 |
| 程序中断 | 部分 | 字 | 中 | 中 |
| DMA | 极少 | 数据块 | 快 | 高 |
### 重点图示
> [!summary] 必须掌握的图
> 1. 中断处理流程图
> 2. DMA控制器组成框图
> 3. 三种IO方式工作时序对比图
---
## 🧪 自测练习
### 概念题
1. 比较三种IO方式的特点和适用场景。
2. 说明中断处理的基本过程。
3. 解释DMA的三种传送方式。
### 分析题
1. 设计一个支持多重中断的处理流程。
2. 说明DMA控制器的工作原理。
---
## 🔗 相关链接
- [[04_存储器]] - 上一章
- [[06_运算方法]] - 下一章
- [[08_CPU结构与功能]] - CPU中断处理
---
*本章难度:⭐⭐⭐ 中等*
*重要程度:⭐⭐⭐⭐ 重点*