Skip to content

(三)IO方式

1. 概念

  • IO 控制方式:CPU实现与 IO 设备进行数据交换的方式;
  • CPU和处设之间交换数据,实质上是通过IO端口进行的;
  • 核心思想:尽可能减少 CPU 对于 IO 过程的参与,避免低速 IO 设备降低 CPU 利用率;
  • 常见的 5 种 IO 控制方式
    • 程序查询
    • 程序中断
    • 直接内存访问 DMA;
    • IO 通道;
    • IO 处理机;

2. IO 控制方式

2.1. 程序查询

  • 概念:完全通过 CPU 执行 IO 程序来控制主机和外围设备之间的信息传送;

  • 方法:在用户的程序中插入一段由 IO 指令和其他指令所组成的程序,直接控制外设工作;

  • 过程

  • 核心三条指令:查询 + 传送数据 + 转移;

    • 查询指令:查询 IO 设备状态;
    • 传送数据:IO 设备就绪时,进行数据交换;
    • 转移指令:IO 设备未就绪时,转回查询指令继续循环;
  • 特点

    • CPU 与 IO 设备串行执行:CPU 一旦启动 IO 设备便停止原程序,不断查询 IO 设备状态和传输数据;
    • 系统效率低,性能较差,CPU 利用率低;
  • 本质是 CPU 和 IO 设备同步通信

2.2. 程序中断

image-20250330174701249

  • 流程

    • 在用户程序中插入一条指令,发出 START 信号启动外围设备,然后机器继续执行程序
    • 当外围设备完成数据传送的准备后,便向 CPU 发出中断请求(INT)信号
    • CPU 收到中断请求后,按中断系统规则处理中断和返回
  • 中断服务程序:通常是传输一个字或一个字节数据,传输完后中断完成,CPU 可返回;

  • 在 IO 设备准备数据未触发中断时,CPU 和 IO 设备是并行工作的

  • 实例分析:CPU 和打印机的数据交换

    image-20250330175235495

    • 由中断服务程序特性,传输全部数据要触发多次中断
    • 宏观上,CPU 和打印机(IO 设备)并行工作
    • 微观上,CPU 中断正在运行的程序来完成 IO 操作;
  • 特点

    • 每次传输单位为 1 字或 1 字节;
    • 每传输一个单位都要触发一次中断;
      • 限制因素:总线和 IO 端口;
    • 启动 IO 设备和传输数据是串行外,CPU 和 IO 设备并行工作,提高 CPU 利用率和系统效率;
    • 完成数据传输的方式为:CPU 响应中断;
    • 单次传输数据量小,数据量较大时,导致中断触发次数多,会消耗较多 CPU 资源
      • 对于存取速度较快的 IO 设备、按块存取的 IO 设备(如 SSD),此方式效率低;

2.3. 直接存储器访问 DMA

image-20250330180616793

  • 概念:让 IO 设备可以直接和主存交换数据,而不必每次都经过 CPU;

  • DMA 控制器(DMAC):实现 DMA 接口的核心功能,由三大部分组成;

  • DMA 控制器的组成

    • DMA 控制逻辑
      • 向 CPU 发出 DMA 申请;
      • 处理总线控制权的转交;
      • 管理系统总线,控制数据传输;
      • 确定传输数据的首地址和长度。若出错,还需负责修正
      • DMA 传输完成时,发出完成信号;
    • 寄存器:设置四类寄存器
      • 命令/状态寄存器 CR:存放 CPU 发出的 IO 命令、控制信息或者 IO 设备的状态;
      • 地址寄存器 MAR
        • 外部数据输入时,存放起始目标地址;
        • 内部数据输出时,存放起始源地址;
      • 数据寄存器 DR:暂存正在交换的数据;
      • 数据计数器 DC:存放本次操作要读/写的字数或字节数;
    • 中断机构:负责在一个数据块传输完毕后触发中断
      • CPU 不能主动感知数据传输完毕与否,必须要靠中断机构触发中断;
  • DMA 本质上是和 CPU 的异步通信

  • 过程:预处理,数据传输,后处理;

    • 1)预处理:需要 CPU 执行 IO 指令;

      • 设置数据传输方向;
      • 主存起始地址 > DMA;
      • IO 设备地址 > DMA;
      • 传输字数/字节数 > DMA;
      • 启动 IO 设备;
    • 2)数据传输:DMAC 控制 IO 设备自动完成

      image-20250330181513673

      • DMAC 为纯硬件实现,CPU 无需执行任何指令;
      • 处理完成后,DMAC 向 CPU 触发中断;
    • 3)后处理:CPU 运行中断服务程序

      • CPU 响应中断,进入中断服务程序;
      • 数据校验;
      • 决定是否继续使用 DMA;
        • 因为 DMA 一次是传一个数据块,若有多个数据块,可能需要连续多次 DMA;
      • 检测传送过程是否正确完成,否则转入诊断程序;
  • 访存冲突:CPU 和 DMA 控制器同时需要访问主存

    • DMA 优先级高于 CPU 访存
    • 原因
      • 一些外设实时性强,如网卡,声卡等,必须及时将数据传入主存,否则会丢数据;
      • CPU 的缓存机制和流水线机制使得其有一定容错能力,可以短暂停止执行而不会丢失数据;
  • DMA 的数据交换方式

    • 暂停 CPU:DMA 访问主存时,暂停 CPU 访存和执行对应程序,DMA 完成后才交还控制权;

      image-20250330183729430

      • 降低了 CPU 对内存的利用率;
    • 交替访问:划分主存存储周期,专供 CPU 和 DMA 使用;

      image-20250330183918874

      • 实际情况下,CPU 访存频率远高于 DMA 的,导致 CPU 利用率显著降低,系统效率降低;
    • 周期窃取/挪用

      image-20250330184527106

      • 原理
        • DMA 访存时,CPU 可能为:(1) 不访存,(2) 正在访存;
        • DMA 访存时,受限于总线和相关寄存器,每个总线周期也只能读写一个字/字节;
        • DMA 访存频率低于 CPU 的;
      • 实现
        • 按**机器周期(CPU/存取周期)**对主存分时;
        • 若 CPU 不访存,则 DMA 获得主存控制权,可进行访存;
        • 若 DMA 要求访存时,CPU 正在访存,则该周期结束后,CPU 将将来的 1~2 个周期让出给 DMA;
        • 若 DMA 和 CPU 同时要求访存,则 CPU 直接让出 1~2 个周期给 DMA;
      • DMA 通常都是采用周期窃取方式访存;
  • DMA 工作过程

    • 1)要传输数据时,IO 设备向 DMAC 发送 DMA 请求;
    • 2)DMAC 接收 IO 设备请求,向 CPU 发出总线占用请求
    • 3)CPU 响应总线请求,发出总线响应信号,DMA 接管总线,进入 DMA 周期
    • 4)DMAC 确定数据的主存地址和长度,自动计算和修改地址计数和长度计数;
    • 5)DMAC 确定数据传输方向后,发出读/写和其他控制信号,进行数据传输;
    • 6)DMA 结束后,DMA 中断机构触发中断;
    • 7)由 CPU 决定是否继续使用 DMA;
  • DMA 特点

    • DMA 的基本单位是数据块(实际传输时,每个机器周期还是传一个字/字节);
    • 数据直接由 IO 设备进入内存,或直接读出到 IO 设备;
    • 仅在一个数据块传输的开始和结束时,CPU 进行干预和控制。其余过程由 DMAC 自动完成;

2.4. DMA 和程序中断方式对比

程序中断DMA
控制器程序硬件 DMAC
CPU 响应时机指令周期完机器/存取周期完
异常处理不能
中断时机每单元数据后处理
优先级

2.5. IO 通道

image-20250330223006619

  • 概念:通道控制方式是DMA方式的进一步发展,实质上,通道也是实现外设和主存之间直接交换数据的控制器
  • 作用:I/O通道方式可进一步减少 CPU 对 IO 过程的干预;
    • 通道把对一个数据块的读写为单位的干预,减少为对一组数据块的读读写及有关的控制和管理为单位的干预;
  • IO 通道 v.s. DMA
    • DMA 纯专用硬件,IO 通道是一个特殊功能处理器,具有自己的指令集和程序,通过执行一个通道程序实现对数据传送的控制;
      • 通道具有更强的独立处理数据 IO 的功能;
    • DMA 控制器通常只能控制一台或少数几台同类设备,通道则可以同时控制许多台同类或不同类的设备;
  • 基本功能
    • 接受 CPU 的 IO 指令,按指令要求与指定的外设进行联系;
    • 从主存取出属于该通道程序的通道指令,经译码后向设备控制器和设备发送各种命令;
    • 实施主存和外设间的数据传送;
  • 工作过程
    • 使用访管指令进入管理程序,通过管理程序组织和运行一个通道程序,启动通道;
    • 通道执行CPU为它组织的通道程序,完成指定的工作;
    • 通道程序结束后向 CPU 发中断,CPU响应这个中断请求后再次调用管理程序对中断请求进行处理;
  • 注意:通道方式会触发两次中断,进入访管程序也是中断,称为访管中断

习题

    1. DMA 接口采用周期窃取方式传输。设 1 字符大小 1B,DMA 最大批量 400B,存取周期 100ns,中断处理耗时 5us,字符 IO 设备传输速率 9600bps。设字符之间连续传输无间隙,忽略预处理时间,则每秒中 DMA 因数据传输需要占用 CPU 的时间为多少?如果完全采用程序中断,结果又为多少?
    • 答案:135us,6000us;
    • 解析:9600bps = 1200Bps,即每秒传 1200 字符;
      • DMAt1=3×5μs+1200×100ns=135μs
        • 后处理时中断一次,每 400B 为一块,每秒 3 块;
        • 每传 1 字符需要窃取一个周期,每秒 1200 字符;
      • 中断方式:每传 1 字符中断一次,所以为 t2=1200×5μs=6000μs
    1. 下列选项中,在 IO 总线上传输的信息包括
    • Ⅰ IO 接口命令字;
    • Ⅱ IO 接口状态字;
    • Ⅲ 中断类型号;
    • A. 仅Ⅰ;
    • B. 仅Ⅰ,Ⅱ;
    • C. 仅Ⅱ,Ⅲ;
    • D. 全部;
    • 答案:D
    • 解析:注意 IO 总线一般是复用的;
    1. CPU 主频 500 MHz,外设数据传输速率 5MB/s,使用 DMA 方式,DMA 块大小 5KB,且预处理和后处理总开销为 500 时钟周期。不考虑 DMA 和 CPU 的访存冲突,则 CPU 用于该外设 IO 的时间占整个 CPU 时间的百分比为?
    • 答案
    • 解析:不考虑 DMA 和 CPU 访存冲突,即不考虑周期窃取,DMA 传输每个字的总线周期不记为 CPU 时间;
      • 速率 5MB/s,块大小 5KB,则每秒 1K 块;
      • 每块开销 500 时钟周期,故总开销 1K×500 = 500K 时钟周期;
      • 每秒 500M 个时钟周期,则百分比为 500K/500M,约为 0.1%;
    • 拓展:传输单位 32 位,若考虑周期窃取,计算新的时间百分比;
      • 考虑周期窃取,注意传输单位 32 位即 4B,则每秒周期数 500K + 5M/4
      • 则百分比 (500K+5M/4)/500M,约为 0.12%;
    1. 下列说法错误的是
    • Ⅰ DMA 优先级高于程序中断的;
    • Ⅱ 程序中断方式需要保护现场,DMA 不需要;
    • Ⅲ 程序中断方式触发中断是报告传输结束,而 DMA 是为了传输数据;
    • A. Ⅱ;
    • B. Ⅱ,Ⅲ;
    • C. Ⅲ;
    • D. Ⅰ,Ⅲ;
    • 答案:C
    • 解析
      • Ⅱ:说的是进行数据传输时是否需要保护现场,而不是二者都触发中断时。因为程序中断方式触发中断 = 数据传输,因此需要保护现场,而 DMA 数据传输时和 CPU 无关,所以不需要;
      • Ⅲ:说反了;