Skip to content
Notes
GitHub

第 7 章 输入输出系统

内容
  • I/O 接口(I/O 控制器)
    • I/O接口的功能和基本结构
    • I/O 端口及其编址
  • I/O 方式
    • 程序查询方式
    • 程序中断方式
      • 中断的基本概念
      • 中断响应过程
      • 中断处理过程
      • 多重中断和中断屏蔽的概念
    • DMA 方式
      • DMA 控制器的组成
      • DMA 传送过程

7.2. I/O 接口

I/O 接口是主机和外设之间的交界界面,通过接口可以实现主机和外设之间的信息交换。主机和外设具有各自的工作特点,它们在信息形式上和工作速度上具有很大的差别,接口正是为了解决这些差异二设置的。

7.2.1. I/O 接口的功能

  • 进行地址译码和设备选择
  • 实现主机和外设的通信联络控制
  • 实现数据缓冲
  • 信号格式转换
  • 传送控制命令和状态信息

7.2.2. I/O 接口的基本结构

I/O 接口在主机侧通过 I/O 总线与内存、CPU 链接。通过数据总线,在数据缓冲寄存器与内存或 CPU 的寄存器之间进行数据传送。同时接口和设备的转台信息被记录在状态寄存器中,通过数据线将状态信息送到 CPU。CPU 对外设的控制命令也通过数据线传送,一般将其送到 I/O 接口的控制寄存器。状态寄存器和控制寄存器在传送方向上是相反的。

public/jz/jziointerface.png

接口中的地址线用于给出要访问的 I/O 接口中的寄存器的地址,和读写控制信号一起被送到 I/O 接口的控制逻辑部件,通过控制线传送来的读写信号确认是读寄存器还是写寄存器,此外控制线还会传送一些仲裁信号和握手信号。

接口中的 I/O 控制逻辑还要能对控制寄存器中的命令字进行译码,并将译码得到的控制信号通过外设界面控制逻辑送到外设,同时将数据缓冲寄存器的数据发送到外设或从外设接收数据到数据缓冲寄存器。

对于数据缓冲寄存器、状态/控制寄存器的访问操作是通过相应的指令来完成的,通常称这类指令为 I/O 指令,I/O 指令只能在操作系统内核的底层 I/O 软件中使用,是一种特权指令。

端口是指接口电路中可以进行读/写的寄存器,若干端口加上相应的控制逻辑才可以组成接口。

7.2.3. I/O 接口的类型

  1. 按数据传送方式可分为
    1. 并行接口
    2. 串行接口
  2. 按主机访问 I/O 设备的控制方式可分为
    1. 程序查询接口
    2. 中断接口
    3. DMA 接口
  3. 按功能选择灵活性可分为
    1. 可编程接口
    2. 不可编程接口

7.2.4. I/O 端口及其编址

I/O 端口是指接口电路中可被 CPU 直接访问的寄存器,主要有数据端口、状态端口和控制端口,若干端口加上相应的控制逻辑电路组成接口。通常,CPU 能对数据端口执行读写操作,但对状态端口只能读,对控制端口只能写。

I/O 端口想要能够被 CPU 访问,就必须要对各个端口进行编号,每个端口对应一个端口地址。而对 I/O 端口的编址方式有与存储器统一编制和独立编制两种。

1. 统一编制

又称存储器映射方式,指把 I/O 端口当作存储器的单元进行地址分配,这种方式 CPU 不需要设置专门的 I/O 指令,用统一的访存指令就可以访问 I/O 端口。

  • 优点:不需要专门的 I/O 指令,可使 CPU 访问 I/O 的操作更灵活、更方便,还可使端口有较大的编址空间。
  • 缺点:端口占用存储器地址,使内存容量变小,而且利用存储器编址的 I/O 设备进行输入输出操作,执行速度较慢。

2. 独立编制

又称 I/O 映射方式,I/O 端口的地址空间与主存地址空间是两个独立的地址空间,因而无法从地址码的形式上区分,需要设置专门的 I/O 指令来访问 I/O 端口。

  • 优点:I/O 指令与存储器指令有明显区别,程序编制清晰,便于理解
  • 缺点:I/O 指令少,一般只能对端口进行传送操作,尤其需要 CPU 提供存储器读/写、I/O 设备读写两组控制信号,增加了控制的复杂性

7.3. I/O 方式

7.3.1. 程序查询方式

信息交换的控制完全由 CPU 执行程序实现,程序查询方式接口中设置一个数据缓冲寄存器(数据端口)和一个设备状态寄存器(状态端口)。主机进行 I/O 操作时,先发出询问信号,读取设备的状态并根据设备状态决定下一步操作究竟是进行数据传递还是等待。

工作流程

  1. CPU 执行初始化程序,并预置传送参数
  2. 向 I/O 接口发出螟蛉子,启动 I/O 设备
  3. 从外设接口读取其状态信息
  4. CPU 不断查询 I/O 设备状态,知道外设准备就绪
  5. 传送一次数据
  6. 修改地址和计数器参数
  7. 判断传送是否结束,若未结束转第 3 步,直到计数值为 0

public/jz/jzchengxuchaxunfangs.png

这种控制方式下,CPU 一番启动 I/O,必须停止现行程序,并在现行程序中插入一段程序。

程序查询方式的主要特点是 CPU 有 “踏步” 等待现象,CPU 与 I/O 串行工作。这种方式的接口设计简单,设备量少,但 CPU 在信息传递过程中要花费发亮时间查询和等待,效率低。

7.3.1. 程序中断方式

1. 基本概念

在计算机执行现行程序的过程中,出现某些继续处理的异常情况或特殊请求,CPU 暂时终止现行程序,而转去对这些异常情况或特殊请求进行处理,处理完毕后再返回到现行程序的断点处,继续执行原程序。

中断的主要功能
  • 实现 CPU 与 I/O 设备的并行工作
  • 处理硬件故障和软件错误
  • 实现人机交互,用户干预机器需要用到中断系统
  • 实现多道程序、分时操作,多道程序的切换需借助中断系统
  • 是是处理需要借助中断系统来实现快速响应
  • 实现应用程序和操作系统(管态程序)的切换,称为“软中断”
  • 多处理器系统中各处理器之间的信息交流和任务切换

CPU 在程序中安排好在某个时机启动某台外设,然后 CPU 继续执行当前程序,不需要一直等待外设就绪。一但外设完成数据传送的准备工作,就主动向 CPU 发出中断请求,请求 CPU 为自己服务。

在可以响应中断的条件下,CPU 暂时中止正在执行的程序,转去执行中断服务程序为外设服务,在中断服务程序中玩陈一次主机与外设之间的数据传送,传送完成后,CPU 返回原来的程序。

public/jz/jzzhongduanfangs.png

2. 程序中断的工作流

中断请求

中断源是请求 CPU 中断的设备或时间,一台计算机允许有多个中断源。每个中断源向 CPU 发出中断请求的时间是随机的。

通过 INTR 线发出的是可屏蔽中断,优先级较低;通过 NMI 线发出的是不可屏蔽中断,在关中断模式下也会被响应。

中断响应判优

中断响应优先级是指 CPU 响应中断请求的先后顺序。由于许多中断源提出中断请求的时间都是随机的,因此当多个中断源同时提出请求时,需通过中断判优逻辑来确定响应哪个中断源的请求,中断响应的判优判优通常是通过硬件排队器实现的。

  • 不可屏蔽中断 > 内部异常 > 可屏蔽中断
  • 内部异常,硬件故障 > 软件中断
  • DMA 中断请求优先于 I/O 设备传送的中断请求
  • 在 I/O 传送类中断请求中,高速设备优先于低速设备,输入设备优先于输出设备,是是设备优先于普通设备
Caution

中断优先级包括响应优先级和处理优先级,响应优先级在硬件线路上是固定的,不便改动。处理优先级可利用中断屏蔽技术动态调整,以实现多重中断。

CPU 响应中断的条件
  • 中断源有请求
  • CPU 允许中断源及开中断(异常和不可屏蔽中断不受此限制)
  • 一条指令执行完毕(异常不受此影响),且没有更紧迫的任务
Caution

I/O 设备的就需时间是随机的,而 CPU 在统一的时刻即每条指令执行阶段结束前向接口发出中断查询信号,以获取 I/O 的中断请求。也就是说,CPU 响应中断的时间是在每条指令执行阶段的结束时刻。(内部异常不属于这类情况)

中断响应过程

CPU 响应中断后,经过某些操作,转去执行中断服务程序。这些操作是由硬件直接实现的,称为中断隐指令。

  • 关中断
    • CPU 响应中断后,首先要保护程序的断点和现场信息,在保护断点和现场的过程中,不能响应更高级中断源的中断请求,否则断点或现场保存不完整,就无法恢复继续执行。
  • 保存断点
    • 为保证在中断服务程序执行后能正确的返回到原来的程序,必须将原程序的断点保存在栈或特定寄存器中
    • 异常和中断的差异
      • 异常指令通常没有执行成功,异常处理后要重新执行,断点是当前指令的地址
      • 中断的断点是下一条指令的地址
  • 引出中断服务程序
    • 识别中断源,将对应的服务程序入口地址送入程序计数器 PC
    • 有两种办法识别中断源
      • 硬件向量法
      • 软件查询法
中断向量

中断识别分为向量中断和非向量中断。非向量中断即软件查询法,详见 第 5 章

每个中断都有唯一的类型号,每个中断类型号都对应一个中断服务程序,每个中断服务程序都有一个入口地址,CPU 必须找到入口地址,即中断向量。把系统中的泉币中断向量机中存放到存储器的某个区域内,这个存放中断向量的存储区就称为中断向量表。

中断向量法:CPU 响应中断后,通过识别中断源获得中断类型号,然后据此计算出对应中断向量的地址;再根据该地址从中断向量表中取出中断服务程序的入口地址,并送入 PC,以转而执行中断服务程序。

中断处理过程
Hint
  • 中断隐指令(硬件自动)完成
    • 关中断
    • 保存断点
    • 中断服务程序寻址
  • 中断服务程序完成
    • 保存现场和屏蔽字
      • 操作不可被中断,否则无法恢复现场继续执行
    • 开中断
      • 允许更高级中断请求得到响应,实现中断嵌套
    • 执行中断服务程序
    • 关中断
      • 保证在恢复现场和屏蔽字时不被中断
    • 恢复现场和屏蔽字
    • 开中断、中断返回
      • 返回原程序的断点处,以便继续执行原程序

3. 多重中断和中断屏蔽技术

若 CPU 在执行中断服务程序的过程中,又出现了新的更高优先级的中断请求,而 CPU 对新的中断请求不予响应,这种中断称为单重中断。若 CPU 暂停现行的中断服务程序,转去处理新的中断请求,这种中断称为多重中断,又称中断嵌套。

CPU 要具备多重中断的功能,必须满足

  • 在终端服务程序中提前设置开中断指令
  • 优先级别高的中断源有权中断优先级别低的中断源

中断处理优先级是指多重中断的实际优先级处理次序,可以利用中断屏蔽技术动态调整,从而可以灵活的调整中断服务程序的优先级,使中断处理更加灵活。如果不使用中断屏蔽技术,则处理优先级和响应优先级相同,

每个中断源都有一个屏蔽触发器1 表示屏蔽该中断源的请求,0 表示可以正常申请,所有屏蔽触发器组合在一起便构成一个屏蔽字寄存器,屏蔽字寄存器的内容称为屏蔽字。

public/jz/jzdanchongduochong.png

例 7.1 设某机器有 4 个中断源 A, B, C, D,其硬件排队优先次序为 A > B > C > D,现要求将中断处理次序改为 D > A > C > B

写出每个中断源对应的屏蔽字

D 拥有最高优先级,可以屏蔽其他所有中断,并且不能中断自身,屏蔽字为 1111。A 次优,只能被 D 中断,屏蔽字为 1110

屏蔽字
中断源ABCD
A1110
B0100
C0110
D1111

public/jz/jz7-1liyi.png

按图中所示时间轴给出 4 个中断源的请求时刻,画出 CPU 执行程序的轨迹。设每个中断源的中断服务程序时间均为 20 μs\mu s

public/jz/jz7-1daan.svg

7.3.3. DMA 方式

DMA 方式是一种完全由硬件进行成组信息传递的控制方式,它具有程序中断方式的优点,即在数据准备阶段,CPU 与外设并行工作。DMA 方式在外设与内存之间开辟一条“直接数据通道”,信息传送不再经过 CPU,降低了 CPU 在传送数据时的开销,因此称为直接存储器存取方式。由于数据传送不经过 CPU,也就不需要保护、恢复 CPU 现场等操作。

这种方式适用于磁盘、显卡、声卡、网卡等高速设备大批量数据的传送,它的硬件开销比较大。在 DMA 方式中,中断的作用仅限于故障和正常传送结束时的处理。

1. 特点

主存和 DMA 接口之间有一条直接数据通路。由于 DMA 方式传送数据不需要经过 CPU,因此不必中断现行程序,I/O 与主机并行工作,程序和传送并行工作

  • 它使主存与 CPU 的固定联系脱钩,主存既可被 CPU 访问,又可被外设访问
  • 在数据块传送时,主存地址确定、传送数据的计数都由硬件电路直接实现
  • 主存要开辟专用缓冲区,及时供给和接收外设的数据
  • DMA 传送速度快,CPU 和外设并行工作,提高了系统效率
  • DMA 在传送开始前要通过城西进行预处理,结束后要通过中断方式进行后处理

2. DMA 控制器的组成

在 DMA 方式中,对数据传送过程进行控制的硬件称为 DMA 控制器(DMA接口)。当 I/O 设备需要进行数据传送时,通过 DMA 控制器向 CPU 提出 DMA 传送请求,CPU 响应之后让出系统总线,由 DMA 控制器接管总线进行数据传送。

主要功能
  • 接受外设发出的 DMA 请求,并向 CPU 发出总线请求
  • CPU 响应此总线请求,发出总线响应信号,接管总线控制权,进入 DMA 操作周期
  • 取定传送数据的主存单元地址及长度,并自动修改主存地址计数和传送长度计数
  • 规定数据在主存和外设间的传送方向,发出读写等控制信号,执行数据传送操作
  • 向 CPU 报告 DMA 操作结束

public/jz/jzdmakojngzhiq.png

  • 主存地址计数器:存放要交换数据的主存地址
  • 传送长度计数器:记录传送数据的长度,计数溢出时,数据即传送完毕,自动发中断请求信号
  • 数据缓冲寄存器:暂存每次传送的数据
  • DMA 请求触发器:每当 I/O 设备准备好数据后,给出一个控制信号,使 DMA 请求触发器置位
  • “控制/状态”逻辑:有控制和是虚电路及状态标志组成,用于指定传送方向,修改传送参数,并对 DMA 请求信号、CPU 响应信号进行协调和同步
  • 中断机构:当一个数据块传送完毕后触发中断机构,向 CPU 提出中断请求

在 DMA 传送过程中,DMA 控制器将接管 CPU 的地址总线、数据总线和控制总线,CPU 的主存控制信号被禁止使用。而当 DMA 传送结束后,将恢复 CPU 的一切权利并开始执行其操作。由此可见,DMA 控制器必须具有控制系统总线的能力。

3. DMA 的传送方式

主存和 I/O 设备之间交换信息时,不通过 CPU。但当 I/O 设备和 CPU 同时访问主存时,可能发生冲突,为了有效地使用主存,DMA 控制器与 CPU 通常采用 3 种方式使用主存

停止 CPU 访问

当 I/O 设备有 DMA 请求时,由 DMA 控制器向 CPU 发送一个停止信号,使 CPU 脱离总线,停止访问主存,直到 DMA 传送一块数据结束。数据传送结束后,DMA 控制器通知 CPU 可以使用主存,并把总线控制权交还给 CPU。

周期挪用(周期窃取)

当 I/O 设备有 DMA 请求时,会遇到 3 种情况

  • 此时 CPU 不在访存(如正在执行运算指令),因此 I/O 的方寸请求与 CPU 未发生冲突
  • CPU 正在方寸,此时必须等待存取周期结束后,CPU 将总线占有权让出
  • I/O 和 CPU 同时方寸,出现访存冲突,此时 CPU 要暂时放弃总线占有权

I/O 访存优先级高于 CPU 访存,因为 I/O 不立即访存可能丢失数据,此时由 I/O 设备挪用一个或多个存取周期,传送完一个数据后理解释放总线,是一种单字传送方式

DMA 与 CPU 交替访存

适用于 CPU 工作周期比主存存取周期长的情况。如,CPU 工作周期为 1.2μs1.2 \mu s,主存存取周期小于 0.6μs0.6 \mu s,则可将一个 CPU 周期分为 C1\displaystyle{ C _{ 1 } }C2\displaystyle{ C _{ 2 } } 两个周期,其中 C1\displaystyle{ C _{ 1 } } 专供 DMA 访存,C2\displaystyle{ C _{ 2 } } 专供 CPU 访存。

这种方式不需要总线使用权的申请、建立和归还过程,是通过 C1\displaystyle{ C _{ 1 } }C2\displaystyle{ C _{ 2 } } 分时控制的。

4. DMA 的传送过程

预处理

由 CPU 完成一些必要的准备工作。

  • CPU 执行几条 I/O 指令,用以测试 I/O 设备状态,向 DMA 控制器的有关寄存器置初值、设置传送方向、启动该设备等
  • CPU 继续执行原来的程序,直到 I/O 设备准备好发送的数据(输入情况)或接收的数据(输出情况)时,I/O 设备向 DMA 控制器发送 DMA 请求,再由 DMA 控制器向 CPU 发送总线请求(有时将这两个过程统称为 DMA 请求),用以传输数据。
数据传送

DMA 的数据传送可以以字节或字为基本单位,也可以以数据块为基本单位。

  • 对于以数据块为单位的传送(如硬盘),DMA 占用总线后的数据输入和输出操作都是通过循环来实现的
  • 这一循环是由 DMA 控制器实现的,即数据传送阶段完全由 DMA 硬件控制
后处理

DMA 控制器向 CPU 发送中断请求,CPU 执行中断服务程序做 DMA 结束处理,包括校验送入主存的数据是否正确、测试传送过程中是否出错(错误则转诊断程序)及决定是否继续使用 DMA 传送其他数据等。

public/jz/jzdmaprocess.png

5. DMA 方式和中断方式的区别

  • 中断方式是程序的切换,需要保护和恢复现场;DMA 方式除了预处理和后处理,其他时候不占用 CPU 任何资源
  • 对中断请求的响应只能发生在每条指令执行完毕时(即指令的执行周期后);而对 DMA 请求的响应可以发生在每个机器周期结束时(取指、间址、执行后均可),只要 CPU 不占用总线就可被响应
  • 中断传送过程需要 CPU 干预
中断DMA
CPU 资源占用中断方式是程序的切换,需要保护和恢复现场除了预处理和后处理,其他时候不占用 CPU 任何资源
响应时机只能发生在每条指令执行完毕时(即指令的执行周期后)可以发生在每个机器周期结束时(取指、间址、执行后均可),只要 CPU 不占用总线就可被响应
传送过程 CPU 干预需要不需要,数据传输率非常高,适合高速外设成组传输
优先级比 DMA 低
异常处理具有对异常事件的处理能力局限于传送数据块的 I/O 操作
数据传送渠道依靠程序依靠硬件