vault backup: 2026-07-04 12:12:55
This commit is contained in:
583
计算机组成原理/学习笔记/05_输入输出系统.md
Normal file
583
计算机组成原理/学习笔记/05_输入输出系统.md
Normal 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] 定义
|
||||
> DMA(Direct 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中断处理
|
||||
|
||||
---
|
||||
|
||||
*本章难度:⭐⭐⭐ 中等*
|
||||
*重要程度:⭐⭐⭐⭐ 重点*
|
||||
Reference in New Issue
Block a user