输入输出系统

1. 输入输出系统的发展状况

1. 早期

CPU和I/O设备以分散连接的方式进行连接。

分散连接:每个设备都有独立的控制电路。

特点:

  1. CPU和I/O设备紧耦合,增减外部设备苦难

  2. CPU和I/O设备以程序查询方式进行连接,串行工作

  3. I/O设备进行输入、输出时,CPU必须运行相应程序或处于停等状态

2. 接口模块和DMA阶段

出现原因:由于外设的增多,难于增减外部设备的分散连接模式被淘汰。

这一阶段,I/O接口和DMA控制器与CPU相互配合,完成输入、输出操作。I/O设备和CPU信息交换传输控制方式有两种:

  1. 中断方式

  2. DMA方式,DMA(Direct Memory Access,直接内存访问)是一种数据传输方式,它可以在不需要CPU参与的情况下实现对内存的直接读写,可以减轻CPU的负担,提高数据传输的效率。

特点:在信息传输过程中、信息传输完成后,CPU仍要参与部分信息传输的处理工作。

3. 具有通道结构阶段

出现原因:为了使CPU和I/O设备实行并行工作,使输入输出系统数据的管理控制从主机中脱离出来。

特点:

  1. 有自己的指令系统、控制器,部分通道还有自己的存储器

  2. 通过执行通道程序,可以控制连接在通道上的I/O设备直接和主机进行信息传输。

  • 通道实际上是一种小型的DMA处理机

  • 通道程序就是由通道指令组成的程序

4. 具有I/O处理机的阶段

出现原因和通道的出现原因一致。这一阶段可以使用专用的I/O处理机管理I/O设备,同时也可以将微处理器和与主机CPU一样的处理器当作I/O处理机来使用。当使用处理器作为I/O处理机来使用时,在I/O设备空闲时,该处理器可分担主机CPU的压力,帮助其执行运算任务。

2. 输入输出系统的组成

1. I/O软件

I/O指令就是CPU指令集中的一部分,I/O指令结构如下:

  • 操作码:I/O指令的操作码相当于I/O指令的标志,表明这个指令是I/O指令

  • 命令码:相当于CPU指令集中普通指令的操作码,指出要对I/O设备做出什么操作

  • 设备码:I/O设备或I/O端口的地址

I/O端口:I/O设备中的某个寄存器

通道指令就是通道自身拥有的指令集。

通道的工作流程

  1. 编程人员为了使应用程序能够调用外部设备工作,在应用程序中编写了广义I/O指令,广义I/O指令给出了如下信息

    1. 参数数据传输的I/O设备

    2. 数据传输主存的首地址

    3. 传输数据的长度

    4. 传输的方向:是向I/O设备传输数据还是向主存传输数据

  2. 操作系统根据广义I/O指令给出的参数以及要执行的操作,编写一个由通道指令构成的通道程序,并将其放在内存或者通道自身的存储器的指定位置,然后启动通道进行工作

  3. 通道拿到通道程序的首地址后,执行通道程序,控制I/O设备完成相应的操作

通道指令需要给出要传输数据(数组)的首地址、传输字数、操作命令、传输方向、设备地址等。通道指令一般比较长。

关于IBM/370

  1. 通道指令长度为64位

  2. 通道的下面可以带若干个子通道,子通道可以并行工作

  3. 每个子通道可以连接多个设备控制器

  4. 每个设备控制器可以连接多个设备

2. I/O硬件

  1. 采用接口模式的I/O硬件包括:设备、I/O接口

    • 设备通过接口连接在总线上,和主机完成信息交换

  2. 采用通道模式的I/O硬件包括:设备、设备控制器、通道

    • 设备连接设备控制器,设备控制器连接子通道,子通道连接通道

3. I/O设备与主机的联系方式

1. I/O设备的编址方式

I/O设备的编址方式有两种:统一编址、不统一编址。

1. 统一编址

核心思想:把I/O设备的地址看成是内存地址的一部分,在进行内存编址时统一进行编址。

实现原理:

  1. 取内存地址中的部分地址作为I/O设备或I/O端口的地址

  2. 如果输入、输出指令或者访存指令的地址码在I/O地址范围内,那么这次的操作实际上是针对I/O设备进行的

特点:

  1. CPU可以用取数、存数指令对I/O设备进行管理、控制,不需要特定的I/O指令

  2. CPU的指令集相对简单

适用情况:当内存系统编制空间较大时,可以采用这种方式

2. 不统一编址(单独编址)

核心思想:在内存地址空间之外,专门设置一个I/O设备的地址空间

虽然两个地址空间是独立的,但他们对应的二进制代码范围,是存在重合的

比如:一个20位的内存,寻址空间为1M,在对I/O设备进行编址时,地址范围为 16个0到16个1(即64K)。此时两个地址空间的二进制代码是存在重合的。

问题:对于相同的二进制地址,如何区分一个指令到底是对内存进行操作的还是对I/O设备进行操作的?

解决方案:采用专门的I/O指令对I/O设备进行操作。

因此这种编址方案的特点就是:有专门的I/O指令对I/O设备进行控制。

2. 设备选址

用设备选择电路识别是否被选中

用CPU给出的地址和设备保存的自己的地址进行比较

3. 传送方式

  1. 串行:数据一位一位的进行传输

  2. 并行:同时有多位数据在多条数据线上进行传输,通常情况下数据线的条数是8的倍数

4. 联络方式

外部设备在接收、发送数据的响应情况。

1. 立即响应

接收到数据后立即显示,比如LED灯,在接收到数据后立即以亮/不亮的方式显示接收到的数据。

适用于一些结构简单,状态、数量比较少的设备。

2. 异步工作采用应答信号

异步工作分为两种,可以并行传输,也可以串行传输。

并行传输

CPU和接口之间一般都是并行传输,所以现在讲的异步工作应答信号主要是I/O接口和I/O设备之间采用的。

  1. I/O接口和I/O设备之间有多条数据线组成了一条类似数据总线的数据线(完成并行工作)

  2. I/O接口和I/O设备采用应答信号,比如,当I/O设备要接收数据时

    1. I/O端口将数据准备好后,通过一个== R e a d y Ready Ready==信号告诉I/O设备:端口中的数据已经准备好了

    2. I/O设备对端口中的数据进行读取,并给出应答信号

  3. 如果是I/O设备要输入数据到CPU或主机:

    1. 当I/O接口中的数据缓冲器空了后,就会向I/O设备发送== R e a d y Ready Ready==信号,告诉I/O设备,可以向I/O接口发送数据了

    2. I/O设备向I/O接口发送数据,并给出应答信号

串行传输

  1. 传输要有起始位和终止位,如图

    • 占1位的起始位,共 9.09ms

    • 占2位的起始位,共 2×9.09ms

  2. 在起始位和终止位之间,是若干位的数据位

3. 同步工作采用同步时标

5. I/O设备与主机的连接方式

有两种连接方式:辐射式连接、总线连接。

1. 辐射式连接

就是我们前面介绍过的分散连接。

如图

2. 总线连接

外部设备通过接口和主机进行连接。

接口的作用:

  1. 向外部设备传送主机的命令

  2. 向主机传送外部设备状态信息

  3. 完成数据缓存、数据格式变化等

优点:便于增删设备

4. I/O设备与主机信息传送的控制方式

1. 程序查询方式

CPU从I/O设备读数据流程图

I/O设备和I/O接口的工作流程

  1. I/O设备接到CPU指令后,开始数据准备

  2. 经过较长时间的准备后,I/O设备将准备好的数据送入I/O接口的数据缓冲区,然后I/O接口将工作状态标志转为”已准备就绪“。I/O状态保存在I/O接口的触发器中

注意:在I/O设备准备数据过程中,CPU一直在检查I/O状态,无法执行其他指令。

特点:

  1. 外部设备和内存的信息交换必须通过CPU

  2. CPU在I/O设备准备数据的过程中处于停等状态,效率低下

  3. I/O设备和CPU的工作是串行的

2. 程序中断方式

I/O设备的工作过程可以分为两个阶段,在程序查询方式中,CPU在I/O设备工作的两个阶段都要参与。程序中断方式对程序查询方式进行了优化:

  1. 自身准备(包括数据准备)在I/O设备的"自身准备阶段",CPU不参与I/O工作,可以执行其他程序

  2. 与主机交换信息,CPU暂停现行程序,参与I/O工作

实例

  1. CPU在执行现行程序时遇到了I/O指令

  2. CPU首先启动I/O设备,然后继续执行现行程序

  3. 当I/O设备完成自身准备向CPU发出"中断请求"后,CPU暂停执行现行程序,参与执行I/O设备的数据输入、输出工作

  4. 执行完I/O操作后,CPU继续执行现行程序

在这个过程中,CPU没有因I/O设备准备数据而出现"停等"现象。

优点:CPU一定程度上从I/O设备的数据输入、输出操作出解脱出来,执行效率更高了

缺点:

  1. I/O设备和内存的数据传输仍然需要CPU的参与

  2. CPU保存程序执行断点及恢复断点所耗费的指令和时间也浪费了CPU的处理效率

程序中断方式流程

3. DMA方式

主存和I/O之间有一条直接数据通道,主存和I/O在DAM控制器控制下可以直接进行数据交换。采用的方式叫做周期挪用(周期窃取)。

DMA方式工作流程(CPU在执行现行程序时,遇到I/O操作)

  1. CPU首先启动I/O,然后继续执行现有程序

  2. I/O设备进行自身准备,准备完成后由DMA控制器发出DMA请求

  3. CPU接到DMA请求后,让出总线的使用权一个存取周期,在这个存取周期内

    1. CPU不能使用主线访问主存

    2. CPU虽然不能使用主线,但仍可继续执行现行程序(现代计算机一般是预读指令)

  4. DMA占用总线使用权,控制主存和I/O设备进行数据交换。完成后让出总线使用权给CPU

在这个过程中:

  1. CPU不需要中断现行程序的执行

  2. CPU从I/O设备的数据输入、输出中彻底解脱出来,CPU和I/O实现了并行工作

  3. 因为数据输入、输出占用了一个存取周期的总线使用权,因此称作周期挪用方式

4. 三种方式的CPU工作效率比较

发展趋势

5. 外部设备

外部设备大致分为三类:

  1. 人机交互设备 键盘、鼠标、打印机、显示器

  2. 计算机信息存储设备 键盘、光盘、磁带

  3. 机——机通信设备 调制解调器等

6. I/O接口

1. 接口的功能和组成

1. 总线连接方式的I/O接口电路

如图

  1. 设备选择线:参与信息传输设备的设备地址或端口地址。单向线

  2. 数据线:完成数据的输入、输出。条数和接口的类型有关。双向线

  3. 命令线:来自主机的命令通过命令线来到I/O接口,命令经缓冲、译码后可以控制设备做相应的操作。单向线

  4. 状态线:将状态信息送给主机,使主机了解外部设备的状态信息。单向线

2. 接口的功能和组成

下图展示了接口的组成和其实现的功能的对应关系:

功能组成

选址功能

设备选择电路

传送命令的功能

命令寄存器、命令译码器

传送数据的功能

数据缓冲寄存器

反应设备状态的功能

设备状态标记

设备状态标记是利用一系列的触发器来实现的,下表展示了各触发器及其标记的状态

各触发器及其标记状态

触发器取值标记状态

完成触发器D

0

准备工作尚未完成(准备发送数据或准备接收数据)

完成触发器D

1

准备工作已经完成

工作触发器B

0

外部设备处于“空闲状态”

工作触发器B

1

外部设备“忙”

中断请求触发器INTR

0

未发出中断请求

中断请求触发器INTR

1

发出中断请求

屏蔽触发器MASK

0

可以发出中断请求

屏蔽触发器MASK

1

主机此时处理程序的优先级高于此次I/O操作,不能发出中断请求

3. I/O接口的基本组成

2. 接口类型

按数据 传送方式 分类

  1. 串行接口 如 Intel 8255

  2. 并行接口 如 Intel 8251

按功能 选择的灵活性 分类

  1. 可编程接口 如 Intel 8255、Intel 8251

  2. 不可编程接口 如 Intel 8212

按 通用性 分类

  1. 通用接口 如 Intel 8255、Intel 8251

  2. 专用接口 如 Intel 8279、Intel 8275

按数据传送的 控制方式 分类

  1. 中断接口 如 Intel 8259

  2. DMA接口 如 Intel 8257

7. 程序查询方式

单个设备

多个设备

注意:多个设备之间存在查询的优先级次序。

程序流程

首先,保存寄存器的内容。原因:程序查询方式要完成内存和外部设备之间数据的输入输出,需要借助CPU中的某一个寄存器,对数据进行暂存。如果寄存器原先的数据是有用的,就需要对这些数据进行保存。保存寄存器数据后,执行如下流程:

程序流程图

关于计数值

  • 设置计数值的目的:控制传输的数据量

  • 计数值的取值方案有两种:假如现在要传输N个字

    1. 计数器的值就设置为N。每完成一个字的传输,计数器的值-1,直到计数器值=0,说明此次传输完成,传输结束

    2. 计数器的值设置为 -N,并用补码来表示这个复数,每完成一个字的传输,计数器的值+1,当计数器值=0,传输结束

程序查询方式的接口电路(以输入为例进行介绍)

  1. CPU通过地址线给出外部设备的地址

  2. 设备选择电路将自己的设备地址(或端口号)和地址线上的地址进行比较,如果相同,说明这次启动的设备就是连接在这个接口电路上的外部设备。== S E L SEL SEL==信号有效

  3. 在启动命令和SEL信号都有效的前提下,对两个状态标记进行置位:(图中的Q模块)请回忆各触发器及其标记的状态

    • 完成触发器D=0,表明数据还未准备好

    • 工作触发器B=1,表明设备开始工作,处于“忙”状态。同时触发器B启动设备,图中的②

  4. 设备开始工作后,准备数据并将数据通过输入数据线保存到数据缓冲DBR中。图中的③

  5. 数据保存到DBR后,设备的工作结束,设备通过设备的状态线向接口电路送入设备工作结束信号。图中的④。设备工作结束信号会修改接口电路中的两个状态信号:

    • 完成触发器D=1,表明数据准备好。同时这个信号会被送出,图中的⑤。在这一步之前,CPU始终处于空等状态

    • 工作触发器B=0,表明设备工作完成,处于空闲状态

  6. DBR中的数据通过数据线被送出

8. 程序中断

中断:CPU在执行程序过程中,如果发生特殊事件,CPU要中断当前程序的处理,去处理特殊事件,通过执行中断服务程序的方式来进行处理。处理结束后,CPU要返回到中断程序的断点,继续执行该程序。

这里的中断服务程序应该是指发出中断请求的程序

CPU中断当前程序执行时,会保存程序断点信息,继续执行该程序时会恢复断点信息。

例子:打印机引起的I/O中断

1. 中断请求器和中断屏蔽触发器

如图 重点提醒:请结合 程序查询方式的接口电路的电路图以及 各触发器及其标记的状态一起观看

并尝试将两张图结合在一起。同时需要注意:虽然将两张图放在一起理解,但实际上两种方式的原理是有差别的:

  1. 程序查询方式在完成触发器发出完成信号之前,CPU始终处于停等状态

  2. 程序中断方式在完成触发器发出完成信号之前,CPU一直在执行自己的工作

  • 当 D=1,MASK=1,两个信号经与非运算后变为0,再经非运算变为1,INTR变为1(这里方框中的1代表输出为1)

  • 当收到来自CPU的中断查询信号后,INTR值被送入CPU,产生中断请求

2. 排队器

排队器的实现有两种方式:

  • 硬件 在CPU内或在接口电路内(链式排队器)

  • 软件 见第八章

链式排队器电路图,每一个INTP包含了左侧的一个非门和右侧一个与非门(虚线内)。

总结

  1. 对于 INTP‘

    • 初始状态下,所有的INTP‘ 均表现为 高电平

    • 当某一个设备发出中断请求时,其前的INTP‘均表现为高电平(包括它自己),其后的均表现为低电平

  2. 对于 INTP

    • 初始状态下,所有 INTP 均表现为低电平

    • 当某一个设备发出中断请求时,其对应的INTP 表现为高电平,其他的均表现为低电平

3. 中断向量地址形成部件

解决问题:找到中断程序的入口地址

入口地址的产生有两种方法:

  • 由软件产生 见第八章

  • 硬件向量法 由硬件产生向量地址,再由向量地址产生入口地址

工作流程分析

  1. 外部设备数 = 排队电路INTP数 = 排队器输出信号数 = 中断向量地址形成部件信号输入数

  2. 排队器每次输出的信号仅包含一个1,其他均为0,中断向量地址形成部件相当于一个设备编码器,针对每一个输出给出向量地址

  3. 向量地址指向主存中的一个存储单元,生成后经数据线送往CPU

  4. CPU根据向量地址找到对应存储单元,根据存储信息找到中断服务程序的入口地址

  5. JMP代表跳转指令

4. 程序中断方式接口电路的基本组成

如图

5. I/O中断处理过程

1. CPU响应中断的条件

  • 允许中断触发器 EINT = 1 该触发器值修改方案如下:

    1. 用 开中断 指令将EINT置为 1

    2. 用 关中断 指令将EINT置为 0 或硬件 自动复位

2. CPU响应中断的时间

  • 当 D=1 且 MASK=0 时

外部设备完成准备后,就着手发出中断请求,但CPU不是时刻可以处理中断请求的。因此,在CPU无法处理中断请求之时,就设置 M A S K = 1 MASK = 1 MASK=1,使外部设备无法发出中断请求。

计算机的一般设计中,CPU会在每条指令的执行阶段结束后,发出中断查询信号,判断是否有中断请求

工作流程分析

需要注意:这里 非门 框中标记的 1代表非门的输出信号为1

这里仅对⑦⑧进行介绍,其他自行分析。

  1. 排队器电路产生输出信号(输出信号为 一个1和多个0的组合)

  2. CPU发出中断响应信号,然后设备编码器产生向量地址,通过数据线传递给CPU

  3. CPU利用向量地址取出中断服务程序入口地址或跳转指令

中断服务程序的流程包括以下四个部分:

  1. 保护现场

    1. 程序断点的保护 中断隐指令完成

    2. 寄存器内容的保护 进栈指令完成

  2. 中断服务:对不同的 I/O 设备具有不同内容的设备服务

  3. 恢复现场:出栈指令完成

  4. 中断返回:中断返回指令

单重中断和多重中断

  1. 单重中断:不允许中断 现行的 中断服务程序

  2. 多重中断:允许级别更高 的中断源 中断 现行的 中断服务程序

单重中断和多重中断服务程序流程对比:

  1. 单重中断:在中断服务程序执行完成并恢复断点后,才执行开中断,因此在中断服务程序执行过程中,不会出现嵌套中断

  2. 多重中断:在断点保护后就执行了开中断,此时若有更高优先级的中断服务程序出现,就会中断当前正在执行的中断服务程序

9. DMA方式

DMA和程序中断两种方式的数据通路图示

区别:程序中断方式中主存和外部设备交换信息需要CPU的参与(虽然不是全程参与),而DMA方式不需要CPU的参与

1. DMA 与主存交换数据的三种方式

1. 停置CPU访问主存

CPU让出总线使用权和主存访问权,交给DMA。DMA控制外部设备和主存进行信息传输,此时CPU的工作状态可能是:

  1. CPU缓存中有预读指令,CPU继续工作

  2. CPU缓存中无预读指令,CPU处于不工作状态或保持状态

示意图

  • 优点:控制简单

  • 缺点:未充分发挥CPU对主存的利用率

2. 周期挪用(周期窃取)

DMA访问主存有三种可能:

  • CPU没有访问主存:DMA直接获取主存访问权

  • CPU正在访问主存:DMA等待CPU访问完成

  • CPU和DMA同时请求访存:此时 CPU 将总线控制权、主存访问权让给 DMA

示意图

3. DMA与CPU交替访问

将CPU工作周期拆分成两个部分:

  • C1 专供DMA访存

  • C2 专供CPU访存

示意图

优点:不需要申请建立和归还总线的使用权

2. DMA接口的功能和组成

接口的功能决定了接口的组成

1. DMA接口的功能

  1. 向CPU申请DMA传送

  2. 处理总线控制权的转交

  3. 管理系统总线、控制数据传送

  4. 确定数据传送的首地址和长度。

    • 修正传送过程中的数据地址和长度

  5. DMA传送结束时,给出操作完成信号

2. DMA接口的组成

3. DMA的工作过程

1. 预处理

通过几条输入输出指令预置如下信息:

  • 通知DMA控制逻辑传送方向(入/出)

  • 设备地址——> DMA的DAR

  • 主存地址——> DMA的AR

  • 传送字数——> MA的WC

2. DMA传送过程示意

3. 数据传送过程(输入)

过程分析

  • ①:设备将数据送入数据缓冲寄存器BR

  • ②:设备向DMA控制逻辑发出申请信号DREQ

  • ③:DMA控制逻辑向CPU请求DMA服务,发出总线使用权的请求信号HRQ

  • ④:CPU在允许的情况下给出应答信号HLDA,放弃总线使用权和主存的访问权

  • ⑤:主存地址寄存器AR将数据在主存中的首地址送到主存地址寄存器

  • ⑥:DMA控制逻辑给出设备应答信号DACK,通知设备已经被授予一个DMA周期

  • ⑦:BR中的数据经数据线传输给主存,在这个过程中,每传输一个字: AR+1,WC+1,同时判断是否传输完成,未完成就继续。从步骤 1 开始

  • ⑧:计数器溢出时(全0),表示一批数据交换完毕,WC向中断机构发出溢出信号,(INTR被置为1)中断机构向CPU发出中断请求信号。CPU响应中断请求后,通过执行中断服务程序来进行后处理

4. 数据传送过程(输出)

和输出的区别在于①、⑦

  • ①:BR中的数据写入外部设备。此时BR已经空了,外部设备会在第②步发出DREQ信号

  • ⑦:主存中的数据,在DMA控制下经数据线写入BR

5. 后处理

后处理处理的工作有:

  1. 校验送入主存的数据是否正确

  2. 判断是否继续用DMA

  3. 测试传送过程是否正确,错则转诊断程序

这些工作由CPU执行中断服务程序来完成

4. DMA接口与系统的连接方式

1. 具有公共请求线的DMA请求

如图

特点如下:

  1. 共享一条DMA请求线

  2. 越靠近CPU的DMA接口,优先级越高

  3. CPU通过DMA响应线进行链式的查询

2. 独立的DMA请求

特点:

  1. 每个DMA接口有自己独立的请求线和响应线

  2. DMA请求的优先级排序在CPU中实现

3. DMA方式与程序中断方式的比较

比较项目中断方式DMA方式

数据传送

程序,需CPU参与

硬件,不需要CPU参与

响应时间

指令执行结束

存取周期结束

处理异常情况

不能

中断请求目的

传送数据

后处理

优先级

5. DMA接口的类型

1. 选择型

如图

特点:

  • 物理上:DMA接口连接了多个外部设备

  • 逻辑上:只允许连接一个设备,不支持连接多个设备同时工作。(只有当一个设备传输完成后,才能连接另一个设备)

2. 多路型

如图 每个子通道就是一个小型的DMA处理器

特点:

  • 物理上:连接多个设备

  • 逻辑上:允许连接多个设备同时工作

3. 多路型 DMA 接口的工作原理

如图

最后更新于