Files
obsidian/计算机组成原理/学习笔记/05_输入输出系统.md

13 KiB
Raw Blame History

第5章 输入输出系统

📖 本章介绍I/O设备与主机交换信息的三种控制方式程序查询、中断和DMA。 🎯 重点理解中断处理过程和DMA工作原理


📋 本章目录


5.1 概述

5.1.1 输入输出系统的发展

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 输入输出系统的组成

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指令格式

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设备与主机联系方式

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 接口的组成

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设备状态设备准备好后才进行数据传输。

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 程序流程

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暂停现行程序转去处理中断请求处理完毕后返回原程序继续执行。

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. 中断请求

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. 中断处理

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 中断服务程序流程

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. 返回前关中断
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 中断接口

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的方式。

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访问主存

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

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交替访问

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控制器组成

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传送过程

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控制器的工作原理。

🔗 相关链接


本章难度: 中等 重要程度: 重点