# 第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处理机独立工作 | 不参与 |

I/O系统的发展可以理解为物流系统的进化：早期阶段CPU亲自搬运所有货物，效率低下；接口模块阶段有了快递员（接口），CPU可以做其他事情；DMA阶段有了直达通道，I/O设备和内存之间直接传送数据；通道阶段有了物流中心（通道）独立管理；I/O处理机阶段有了独立物流公司完全独立工作。

### 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）
- 状态测试（查询设备状态）
- 形成操作命令

I/O指令就像快递单：操作码告诉CPU要做什么操作（读数据、写数据、查询状态），命令码告诉I/O设备要做什么，设备码告诉CPU是哪个I/O设备（打印机、硬盘、键盘）。

---

## 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[同步联络]
    end
```

#### 编址方式

| 方式 | 特点 | 优点 | 缺点 |
|------|------|------|------|
| **统一编址** | I/O设备和内存使用同一地址空间 | 指令统一，编程简单 | 占用内存地址 |
| **独立编址** | I/O设备和内存使用不同地址空间 | 不占用内存地址 | 指令不同，编程复杂 |

统一编址就像办公室和仓库使用同一套门牌号，找办公室和仓库都用同一套门牌号简单，但仓库占用了办公室的门牌号；独立编址就像办公室和仓库使用不同的门牌号系统，仓库不占用办公室的门牌号，但找办公室和仓库要用不同的门牌号系统复杂。

#### 联络方式

| 方式 | 特点 | 适用场景 |
|------|------|----------|
| **立即响应** | 设备立即响应CPU请求 | 简单设备 |
| **异步联络** | 使用握手信号，速度灵活 | 大多数设备 |
| **同步联络** | 使用统一时钟，速度固定 | 高速设备 |

立即响应就像你问一个问题对方立即回答，只能用于简单设备；异步联络像你问一个问题对方准备好后回答，速度灵活适合大多数设备；同步联络像所有设备按同一时钟工作，速度快但受限于最慢设备。

---

## 5.3 接口

### 5.3.1 I/O接口的功能

**主要功能**：
1. **设备选择**：选择是哪个I/O设备
2. **数据缓冲**：缓冲数据，解决速度不匹配
3. **数据格式转换**：串行/并行转换
4. **控制命令传递**：传递CPU的控制命令
5. **状态反馈**：反馈设备状态

I/O接口就像快递站：设备选择告诉快递站是哪个包裹，数据缓冲暂时存放包裹解决速度不匹配，数据格式转换把包裹转换成适合运输的形式，控制命令传递传递发货人的命令，状态反馈反馈包裹的状态。

### 5.3.2 I/O接口的类型

| 类型 | 特点 | 应用 |
|------|------|------|
| **并行接口** | 多位数据同时传输 | 打印机接口 |
| **串行接口** | 一位一位传输 | USB、网络 |
| **专用接口** | 为特定设备设计 | 显卡接口 |

并行接口像8个人同时送8封信，速度快但成本高距离短；串行接口像一个人送8封信分8次送，成本低距离长但速度慢；专用接口专门为某种设备设计，性能好兼容性好但只能用于特定设备。

---

## 5.4 程序查询方式

### 5.4.1 工作原理

```mermaid
graph TB
    A[CPU启动设备] --> B[CPU查询设备状态]
    B --> C{设备准备好?}
    C -->|否| B
    C -->|是| D[CPU传输数据]
    D --> E[操作完成]
```

**工作流程**：
1. CPU启动I/O设备
2. CPU不断查询设备状态
3. 设备准备好后，CPU传输数据
4. 操作完成

程序查询方式就像你等公交车：你到公交站等车（CPU启动设备），不断看公交站牌看车来了没有（查询设备状态），公交车来了（设备准备好），你上车（CPU传输数据），到达目的地（操作完成）。

**特点**：
- **优点**：简单，容易实现
- **缺点**：CPU要不断查询，效率低

早期计算机和简单嵌入式系统常用这种方式，CPU要等打印机打印完才能做其他事情。

---

## 5.5 程序中断方式

### 5.5.1 中断的基本概念

> [!info] 定义
> 中断是指CPU暂时中止当前程序，转去处理某个紧急事件，处理完后返回原程序继续执行。

中断就像你正在工作时有人敲门：你正在工作（CPU执行程序），有人按门铃（I/O设备请求服务），你暂停工作（CPU暂停当前程序），去开门（CPU处理中断请求），回来继续工作（CPU返回原程序继续执行）。

### 5.5.2 中断的分类

| 分类方式 | 类型 | 特点 |
|----------|------|------|
| **产生原因** | 硬件中断、软件中断 | 硬件中断由设备产生，软件中断由程序产生 |
| **是否可屏蔽** | 可屏蔽中断、不可屏蔽中断 | 可屏蔽中断可以被禁止，不可屏蔽中断不能 |
| **优先级** | 高优先级、低优先级 | 高优先级中断可以打断低优先级中断 |

硬件中断像有人按门铃，由硬件设备产生；软件中断像你自己决定要开门，由程序产生。可屏蔽中断像你可以选择不开门，某些不重要的中断可以被禁止；不可屏蔽中断像你必须开门，电源故障、硬件错误不能被禁止。

### 5.5.3 中断处理过程

```mermaid
graph TB
    A[中断请求] --> B[中断判优]
    B --> C[中断响应]
    C --> D[保存现场]
    D --> E[中断服务]
    E --> F[恢复现场]
    F --> G[中断返回]
```

**详细流程**：

1. **中断请求**：I/O设备向CPU发送中断请求信号，CPU在每条指令执行完后检查中断请求

2. **中断判优**：如果有多个中断请求，需要判优，优先级高的中断先处理

3. **中断响应**：CPU响应中断请求，关中断防止新的中断打断

4. **保存现场**：保存当前程序的状态（PC、寄存器等），以便中断返回后继续执行

5. **中断服务**：执行中断服务程序，处理I/O设备的请求

6. **恢复现场**：恢复之前保存的状态，准备返回原程序

7. **中断返回**：返回原程序继续执行，开中断允许新的中断

这就像你正在工作时有人敲门：有人按门铃（中断请求），如果有多个人按门铃决定先开哪个门（中断判优），你决定去开门（中断响应），把正在做的工作记下来（保存现场），去开门处理事情（中断服务），回来看看之前做到哪里了（恢复现场），继续之前的工作（中断返回）。

当你按键盘时：键盘向CPU发送中断请求，如果有其他中断键盘中断可能优先级较低，CPU响应键盘中断，保存当前程序的状态，执行键盘中断服务程序处理按键，恢复之前保存的状态，返回原程序继续执行。

### 5.5.4 中断判优方法

| 方法 | 特点 | 优点 | 缺点 |
|------|------|------|------|
| **软件查询** | CPU用程序查询哪个设备请求中断 | 简单，灵活 | 速度慢 |
| **硬件判优** | 用硬件电路判优 | 速度快 | 复杂，成本高 |

软件查询像你挨个问"是你按门铃吗？"，简单容易实现但速度慢；硬件判优像有一个专门的设备告诉你谁按了门铃，速度快立即知道是谁但需要额外设备成本高。

### 5.5.5 中断优先级

**设置原则**：
1. **硬件故障中断**：最高优先级
2. **软件中断**：较高优先级
3. **I/O中断**：中等优先级
4. **用户程序中断**：较低优先级

硬件故障中断像火灾报警最紧急，软件中断像重要电话比较紧急，I/O中断像门铃响了一般紧急，用户程序中断像有人找你聊天不紧急。

### 5.5.6 中断屏蔽

**原理**：通过设置中断屏蔽字，可以禁止某些中断。

中断屏蔽就像你设置了"请勿打扰"，设置了门铃响了你也不去开门；不设置门铃响了你就去开门。CPU正在处理重要任务时屏蔽某些中断，CPU空闲时允许所有中断。

---

## 5.6 DMA方式

### 5.6.1 DMA的基本概念

> [!info] 定义
> DMA（Direct Memory Access）是指I/O设备和内存之间直接传送数据，不经过CPU。

DMA就像直达快递：传统方式你要从A地寄东西到B地必须经过C地（CPU），DMA方式A地直接寄到B地不经过C地。硬盘读取数据时直接把数据传到内存不经过CPU。

### 5.6.2 DMA的工作方式

| 方式 | 特点 | 优点 | 缺点 |
|------|------|------|------|
| **停止CPU访问** | DMA传送时，CPU停止访问内存 | 简单 | CPU效率低 |
| **周期挪用** | DMA在CPU不访问内存时传送 | CPU效率高 | 控制复杂 |
| **交替访问** | DMA和CPU交替访问内存 | 效率最高 | 硬件复杂 |

停止CPU访问像高速公路完全给DMA使用，CPU不能使用，简单但CPU效率低；周期挪用像DMA在CPU不使用高速公路时使用，CPU效率高但需要复杂的控制逻辑；交替访问像DMA和CPU轮流使用高速公路，效率最高但硬件复杂成本高。

### 5.6.3 DMA的工作过程

```mermaid
graph TB
    A[CPU初始化DMA] --> B[DMA请求]
    B --> C[DMA响应]
    C --> C1[DMA接管总线]
    C1 --> D[数据传送]
    D --> E[传送完成]
    E --> F[DMA释放总线]
    F --> G[CPU继续工作]
```

**详细流程**：

1. **CPU初始化DMA**：CPU设置DMA控制器的参数，包括内存起始地址、传送字节数、传送方向

2. **DMA请求**：I/O设备向DMA控制器发送请求，DMA控制器向CPU发送总线请求

3. **DMA响应**：CPU响应总线请求，DMA控制器接管总线

4. **数据传送**：DMA控制器控制数据传送，I/O设备和内存直接传送数据

5. **传送完成**：DMA控制器传送完成，向CPU发送中断请求

6. **DMA释放总线**：DMA控制器释放总线，CPU继续工作

这就像你让快递员帮你寄东西：你告诉快递员要寄什么东西寄到哪里（CPU初始化DMA），快递员去取东西（DMA请求），快递员拿到东西（DMA响应），快递员把东西送到目的地（数据传送），快递员告诉你东西送到了（传送完成），快递员去忙其他事情（DMA释放总线）。

当你从硬盘复制文件到内存时：CPU告诉DMA控制器要从硬盘读取多少数据到内存哪里，DMA控制器向CPU请求总线使用权，CPU把总线使用权给DMA控制器，硬盘直接把数据传到内存不经过CPU，DMA控制器告诉CPU传送完成了，DMA控制器释放总线CPU继续工作。

### 5.6.4 DMA与中断的区别

| 特性 | DMA | 中断 |
|------|-----|------|
| **数据传送** | I/O和内存直接传送 | 通过CPU传送 |
| **CPU参与度** | 只在开始和结束参与 | 全程参与 |
| **响应时间** | 每个机器周期结束响应 | 每条指令结束响应 |
| **适用场景** | 大量数据传送 | 少量数据传送 |

DMA像直达快递，东西直接从A地寄到B地不经过C地，速度快C地可以做其他事情但需要额外的快递员；中断像普通快递，东西从A地寄到C地再从C地寄到B地，简单不需要额外快递员但速度慢C地要全程参与。

硬盘读取大量数据到内存用DMA，键盘按键、鼠标点击用中断。

---

## 📝 本章小结

### 核心概念

1. **I/O系统发展**：从CPU完全参与到完全不参与
2. **I/O设备**：输入设备、输出设备、外存储器
3. **I/O接口**：设备选择、数据缓冲、格式转换
4. **程序查询**：CPU不断查询，效率低
5. **程序中断**：CPU响应中断，效率较高
6. **DMA**：I/O和内存直接传送，效率最高

### 关键术语

| 术语 | 英文 | 含义 |
|------|------|------|
| I/O | Input/Output | 输入输出 |
| DMA | Direct Memory Access | 直接内存访问 |
| Interrupt | Interrupt | 中断 |
| Interface | Interface | 接口 |

### 重点图示

> [!summary] 必须掌握的图
> 1. I/O系统发展过程图
> 2. 中断处理过程图
> 3. DMA工作过程图
> 4. 三种I/O方式的比较

---

## 🧪 例题与解析

### 例题1：中断处理过程

**题目**：简述中断处理的完整过程。

**答案**：

中断处理的完整过程：中断请求（I/O设备向CPU发送中断请求信号），中断判优（如果有多个中断请求决定先处理哪个），中断响应（CPU响应中断请求，关中断），保存现场（保存当前程序的状态），中断服务（执行中断服务程序），恢复现场（恢复之前保存的状态），中断返回（返回原程序继续执行，开中断）。

这就像你正在工作时有人敲门：有人按门铃，如果有多个人按门铃决定先开哪个门，你决定去开门，把正在做的工作记下来，去开门处理事情，回来看看之前做到哪里了，继续之前的工作。

### 例题2：DMA与中断比较

**题目**：比较DMA和中断两种I/O方式的区别。

**答案**：

DMA是I/O和内存直接传送，CPU只在开始和结束参与，每个机器周期结束响应，适合大量数据传送；中断是通过CPU传送，CPU全程参与，每条指令结束响应，适合少量数据传送。

DMA像直达快递，东西直接从A地寄到B地不经过C地，速度快C地可以做其他事情但需要额外的快递员；中断像普通快递，东西从A地寄到C地再从C地寄到B地，简单不需要额外快递员但速度慢C地要全程参与。

### 例题3：程序查询方式

**题目**：简述程序查询方式的工作原理和优缺点。

**答案**：

工作原理：CPU启动I/O设备，不断查询设备状态，设备准备好后CPU传输数据，操作完成。优点是简单容易实现，不需要额外硬件；缺点是CPU效率低要不断查询，不能同时处理多个设备。

这就像你等公交车：你到公交站等车，不断看公交站牌看车来了没有，公交车来了你上车，到达目的地。简单但你不能做其他事情效率低。

### 例题4：中断优先级

**题目**：简述中断优先级的设置原则。

**答案**：

硬件故障中断最高优先级（火灾报警最紧急），软件中断较高优先级（重要电话比较紧急），I/O中断中等优先级（门铃响了一般紧急），用户程序中断较低优先级（有人找你聊天不紧急）。

### 例题5：DMA工作过程

**题目**：简述DMA的完整工作过程。

**答案**：

DMA的完整工作过程：CPU初始化DMA（设置参数），DMA请求（I/O设备向DMA控制器发送请求），DMA响应（CPU响应总线请求，DMA控制器接管总线），数据传送（I/O设备和内存直接传送数据），传送完成（向CPU发送中断请求），DMA释放总线（CPU继续工作）。

这就像你让快递员帮你寄东西：你告诉快递员要寄什么东西寄到哪里，快递员去取东西，快递员拿到东西，快递员把东西送到目的地，快递员告诉你东西送到了，快递员去忙其他事情。

---

## ⚡ 知识点速记卡

> 考前快速过一遍，30秒回忆整章核心

**三种I/O方式**（CPU参与度从高到低）：程序查询（CPU一直等）→ 程序中断（设备准备好通知CPU）→ DMA（I/O和内存直接传，CPU只管开头和结尾）。

**程序查询**：CPU不断轮询设备状态，简单但CPU效率最低，适合简单嵌入式系统。

**中断处理七步**：中断请求 → 中断判优 → 中断响应（关中断）→ 保存现场 → 中断服务 → 恢复现场 → 中断返回（开中断）。

**中断优先级**：硬件故障 > 软件中断 > I/O中断 > 用户程序。

**DMA三大要点**：①I/O和内存直接传送，不经过CPU ②CPU只在初始化和结束时参与 ③每个机器周期结束时响应（比中断更快）。

**DMA三种工作方式**：停止CPU访问（简单但CPU空等）、周期挪用（CPU不访存时DMA传送）、交替访问（效率最高但硬件复杂）。

**DMA vs 中断**：DMA适合大量数据传送（硬盘），中断适合少量数据（键盘）。DMA在机器周期末响应，中断在指令周期末响应。

---

## 🔗 相关链接

- [[00_计算机组成原理学习指南]] - 返回主目录
- [[04_存储器]] - 上一章
- [[06_运算方法]] - 下一章
- [[08_CPU结构与功能]] - CPU相关内容

---

*本章难度：⭐⭐⭐⭐ 中等*
*重要程度：⭐⭐⭐⭐ 重要*
