I/O 设备一般是由执行 I/O 操作的机械部分和执行控制 I/O 的电子部件组成。通常将这两部分分开,执行 I/O 操作的机械部分就是一般的 I/O 设备,而执行控制 I/O 的电子部件则称为设备控制器或适配器( adapter )。在微型机和小型机中的控制器常做成印刷电路卡形式因而也常称为控制卡、接口卡或网卡,可将它插入计算机的扩展槽中。在有的大、中型计算机系统中,还配置了 I/O 通道或 I/O 处理机。
I/O设备
I/O设备的类型
IO 设备的类型繁多,除了能将它们分为块设备和字符设备、独占设备和共享设备外,还可从设备使用特性上分为存储设备和I/O设备;从设备的传输速率上又分为高速设备、中速共享设备和高速共享设备。下面对这两种分类进行介绍。
1)按使用特性分类
第一类是存储设备,也称外存、辅存,是用以存储信息的主要设备。该类设备存取速度较内存慢,但容量却大得多,价格也便宜。第二类就是 I / O 设备,它又可分为输入设备、输出设备和交互式设备。输入设备用来接收外部信息,如键盘、鼠标、扫描仪、视频摄像等。输出设备用于将计算机处理后的信息送向处理机外部的设备,如打印机、绘图仪等。交互式设备则是指集成的上述两类设备,主要是显示器,用于同步显示用户命令以及命令执行的结果。
2)按传输速率分类
按传输速度的高低,可将I/O设备分为三类。第一类是低速设备,其传输速率仅为每秒钟几个字节至数百个字节。典型的低速设备有键盘、鼠标器。第二类是中速设备,其传输速率在每秒钟数千个字节至数十万个字节。典型的中速设备有行式打印机、激光打印机等。第三类是高速设备,其传输速率在数十万字节至千兆字节。典型的高速设备有磁带机、磁盘机、光盘机等。
设备与控制器之间的接口
通常,设备并不是直接与 CPU 进行通信,而是与设备控制器通信,因此,在 I/O 设备中应含有与设备控制器间的接口,在该接口中有三种类型的信号(见图6-3所示),各对应一条信号线。
(1)数据信号线
这类信号线用于在设备和设备控制器之间传送数据信号。对输入设备而言,由外界输入的信号经转换器转换后,所形成的数据通常先送入缓冲器中,当数据量达到一定的比特(字符)数后,再从缓冲器通过一组数据信号线传送给设备控制器,如图6-3所示。对输出设备而言,则是将从设备控制器经过数据信号线传送来的一批数据先暂存干缓冲器中,经转换器作适当转换后,再逐个字符地输出。
(2)控制信号线
这是作为由设备控制器向 I / O 设备发送控制信号时的通路。该信号规定了设备将要执行的操作,如读操作(指由设备向控制器传送数据)或写操作(从控制器接收数据),或执行磁头移动等操作。
(3)状态信号线
该信号线用于传送指示设备当前状态的信号。设备的当前状态有正在读(或写);设备已读(写)完成,并准备好新的数据传送。
设备控制器
设备控制器的主要功能是,控制一个或多个 I / O 设备,以实现 I / O 设备和计算机之间的数据交换。它是 CPU 与 I / O 设备之间的接口,接收从 CPU 发来的命令,去控制I / O设备工作,使处理机能够从繁杂的设备控制事务中解脱出来。设备控制器是一个可编址的设备,当它仅控制一个设备时,它只有一个唯一的设备地址;若控制器可连接多个设备,则应含有多个设备地址,每一个设备地址对应一个设备。可把设备控制器分成两类:一类是用于控制字符设备的控制器,另一类是用于控制块设备的控制器。
1.设备控制器的基本功能
(1)接收和识别命令
设备控制器能接收并识别处理机发来的多种命令。在控制器中具有相应的控制寄存器,用来存放接收的命令和参数,并对所接收的命令进行译码。例如,磁盘控制器可以接收 CPU 发来的 read 、 write 、 format 等15条不同的命令,而且有些命令还带有参数。相应地,在磁盘控制器中有多个寄存器和命令译码器等。
(2)数据交换
设备控制器可实现 CPU 与控制器之间、控制器与设备之间的数据交换。对于前者,是通过数据总线,由 CPU 并行地把数据写入控制器,或从控制器中并行地读出数据。对于后者,是设备将数据输入到控制器,或从控制器传送给设备。为此,在控制器中须设置数据寄存器。
(3)标识和报告设备的状态
控制器应记下设备的状态供 CPU 了解。例如,仅当该设备处于发送就绪状态时, CPU 才能启动控制器从设备中读出数据。为此,在控制器中置一状态寄存器,用其中的每一位反映设备的某一种状态。当 CPU 将该寄存器的内容读入后,便可了解该设备的状态。
(4)地址识别
就像内存中的每一个单元都有一个地址一样,系统中的每一个设备也都有一个地址。设备控制器必须能够识别其所控制每个设备的地址。此外,为使 CPU 能向(或从)寄存器中写入(或读出)数据,这些寄存器都应具有唯一的地址。控制器应能正确识别这些地址。为此,在控制器中应配置地址译码器。
(5)数据缓冲区
由于 I / O 设备的速率较低,而 CPU 和内存的速率却很高,故在控制器中必须设置一缓冲区。在输出时,用此缓冲区暂存由主机高速传来的数据,然后才以与 I / O 设备所匹配的速率将缓冲器中的数据传送给 I / O 设备。在输入时,缓冲区则用于暂存从 I / O 设备送来的数据,待接收到一批数据后,再将缓冲区中的数据高速地传送给主机。
(6)差错控制
对于由 I / O 设备传送来的数据,设备控制器还兼管进行差错检测。若发现传送中出现了错误,通常是将差错检测码置位,并向 CPU 报告,于是 CPU 将本次传送来的数据作废,并重新进行一次传送。这样便可保证数据输入的正确性。
设备控制器的组成
由于设备控制器位于 CPU 与设备之间,它既要与 CPU 通信,又要与设备通信,还应具有按照 CPU 所发来的命令去控制设备工作的功能,因此,现有的大多数控制器都是由以下三部分组成:
(1)设备控制器与处理机的接口
该接口用于实现 CPU 与设备控制器之间的通信,在该接口中共有三类信号线:数据线、地址线和控制线。 数据线通常与两类寄存器相连接:
- ①第一类是数据寄存器,在控制器中可以有一个或多个数据寄存器,用于存放从设备送来的数据(输入),或从 CPU 送来的数据(输出)。
- ②第二类是控制/状态寄存器,在控制器中可以有一个或多个这类寄存器,用于存放从 CPU 送来的控制信息或设备的状态信息。
(2)设备控制器与设备的接口
在一个设备控制器上,可以连接一个或多个设备。相应的,在控制器中便有一个或多个设备接口。在每个接口中都存在数据、控制和状态三种类型的信号。控制器中的 I / O 逻辑根据处理机发来的地址信号去选择一个设备口。
(3) I / O 逻辑
I / O 逻辑用于实现对设备的控制。它通过一组控制线与处理机交互,处理机利用该逻辑向控制器发送 I / O 命令。每当 CPU 要启动一个设备时,一方面将启动命令发送给控制器,另一方面又同时通过地址线把地址发送给控制器,由控制器的 I / O 逻辑对收到的地址进行译码,再根据所译出的命令对所选设备进行控制。 设备控制器的组成示于图6-4中。
内存映像 I / O
驱动程序将抽象 I / O 命令转换出的一系列具体的命令、参数等数据装入设备控制器的相应寄存器,由控制器来执行这些命令,具体实施对 I / O 设备的控制。这一工作可用如下两种方法完成:
1.利用特定的 I / O 指令
在早期的计算机中,包括大型计算机,为实现 CPU 和设备控制器之间的通信,为每个控制寄存器分配一个 I / O 端口,这是一个8位或16位的整数,如图6-5( a )所示。另外还设置了一些特定的 I / O 指令。例如,为了将 CPU 寄存器中的内容复制到控制器寄存器中,所需使用的特定 I/O 指令可表示如下:
io-store cpu-reg,dev-no,dev-reg
其中, cpu-reg 是 CPU 的某个寄存器;dev-no 是指定的设备,即控制器地址; dev-reg 指定控制器中的寄存器。 如果是将 CPU 寄存器中的内容存入内存的某个单元(k)中,将使用下面的指令:
Store cpu-reg,k
该方法的主要缺点是,访问内存和访问设备需要两种不同的指令。
2.内存映像 I / O
在这种方式中,在编址上不再区分内存单元地址和设备控制器中的寄存器地址,都采用 k 。当 k 值处于0~ n -1范围时,被认为是内存地址,若 k 大于等于 n 时,被认为是某个控制器的寄存器地址。由图6-5( b )可以看出,当 k = n 时,表示设备控制器0的第1个寄存器 opcode 的地址。因此,如果要想将 CPU 寄存器中的内容传送到控制器0的第1个寄存器 opcode ,只需要用下面的一般存储指令:
Store cpu-reg,n
内存映像 I / O 方式统一了对内存和对控制器的访问方法,这无疑将简化 I / O 的编程。
I / O 通道
1. l / O 通道设备的引入
虽然在 CPU 与 I / O 设备之间增加了设备控制器后,已能大大减少 CPU 对I / O的干预,但当主机所配置的外设很多时, CPU 的负担仍然很重。为此,在 CPU 和设备控制器之间又增设了 I / O 通道( I / O Channel )。其主要目的是为了建立独立的 I / O 操作,不仅使数据的传送能独立于 CPU ,而且也希望有关对 I / O 操作的组织、管理及其结束处理尽量独立,以保证 CPU 有更多的时间去进行数据处理;或者说,其目的是使一些原来由 CPU 处理的 I / O任务转由通道来承担,从而把 CPU 从繁杂的 I / O 任务中解脱出来。在设置了通道后, CPU 只需向通道发送一条 I / O 指令。通道在收到该指令后,便从内存中取出本次要执行的通道程序,然后执行该通道程序,仅当通道完成了规定的 I / O 任务后,才向 CPU 发中断信号。 实际上, I/O 通道是一种特殊的处理机。它具有执行 I / O 指令的能力,并通过执行通道程序来控制 I / O 操作。但 I / O 通道又与一般的处理机不同,主要表现在以下两个方面:一是其指令类型单一,这是由于通道硬件比较简单,其所能执行的命令,主要局限于与 I/O 操作有关的指令;二是通道没有自己的内存,通道所执行的通道程序是放在主机的内存中的,换言之,是通道与 CPU 共享内存。
2.通道类型
前已述及,通道是用于控制外围设备(包括字符设备和块设备)的。由于外围设备的类型较多,且其传输速率相差甚大,因而使通道具有多种类型。这里,根据信息交换方式不同,可把通道分成以下三种类型。
1)字节多路通道( Byte Multiplexor Channel )
这是一种按字节交叉方式工作的通道。它通常都含有许多非分配型子通道,其数量可从几十到数百个,每一个子通道连接一台 I / O 设备,并控制该设备的 I / O 操作。这些子通道按时间片轮转方式共享主通道。当第一个子通道控制其 I / O 设备完成一个字节的交换后,便立即腾出主通道,让给第二个子通道使用;当第二个子通道也完成一个字节的交换后,同样也把主通道让给第三个子通道;依此类推。当所有子通道轮转一周后,重又返回来由第一个子通道去使用字节多路主通道。这样,只要字节多路通道扫描每个子通道的速率足够快,而连接到子通道上的设备的速率又不是太高,便不致丢失信息。 图6-6示出了字节多路通道的工作原理。它所含有的多个子通道为 A , B , C , D , E ,…, N …,分别通过控制器各与一台设备相连。假定这些设备的速率相近,且都同时向主机传送数据。设备 A 所传送的数据流为 A1, A2, A3,…;设备 B 所传送的数据流为 B1, B2, B3,…;……把这些数据流合成后(通过主通道)送往主机的数据流为 A1, B1, C1, D1 ,… A2 , B2 , C2 , D2 ,…, A3 , B3 , C3 , D3 ,…
2)数组选择通道( Block Selector Channel )
字节多路通道不适于连接高速设备,这推动了按数组方式进行数据传送的数组选择通道的形成。这种通道虽然可以连接多台高速设备,但由于它只含有一个分配型子通道,在一段时间内只能执行一道通道程序,控制一台设备进行数据传送,致使当某台设备占用了该通道后,便一直由它独占,即使是它无数据传送,通道被闲置,也不允许其它设备使用该通道,直至该设备传送完毕释放该通道。可见,这种通道的利用率很低。
3)数组多路通道( Block Multiplexor Channel )
数组选择通道虽有很高的传输速率,但它却每次只允许一个设备传输数据。数组多路通道是将数组选择通道传输速率高和字节多路通道能使各子通道(设备)分时并行操作的优点相结合而形成的一种新通道。它含有多个非分配型子通道,因而这种通道既具有很高的数据传输速率,又能获得令人满意的通道利用率。也正因此,才使该通道能被广泛地用于连接多台高、中速的外围设备,其数据传送是按数组方式进行的。
3.“瓶颈”问题
由于通道价格昂贵,致使机器中所设置的通道数量势必较少,这往往又使它成了 I/O的瓶颈,进而造成整个系统吞吐量的下降。例如,在图6-7中,假设设备1至设备4是四个磁盘,为了启动磁盘4,必须用通道1和控制器2;但若这两者已被其它设备占用,必然无法启动磁盘4。类似地,若要启动盘1和盘2,由于它们都要用到通道1,因而也不可能启动。这些就是由于通道不足所造成的“瓶颈”现象。 解决“瓶颈”问题的最有效的方法,便是增加设备到主机间的通路而不增加通道,如图6-8所示。换言之,就是把一个设备连接到多个控制器上,而一个控制器又连接到多个通道上。图中的设备1、2、3和4,都有4条通往存储器的通路。例如,通过控制器1和通道1到存储器;也可通过控制器2和通道1到存储器。多通路方式不仅解决了“瓶颈”问题,而且提高了系统的可靠性,因为个别通道或控制器的故障不会使设备和存储器之间没有通路。
|