10.1 输入输出接口的基本功能

计算机组成

10 输入输出设备

10.1 输入输出接口的基本功能

Screen Shot 2018-09-30 at 10.06.14 am

计算机的核心能力就是运算,而快速的数学运算,甚至是早期设计计算机时的唯一目标。但是今天,计算机已经成为了我们日常生活中密不可分的一部分。我们平时感受更多的,可能是计算机与外界交互的能力。因此,想要了解计算机的组成,我们就必须要知道现代计算机当中,输入输出设备到底是怎么工作的。

Screen Shot 2018-09-30 at 10.06.24 am

我们先来一起回顾模型机的结构。这个模型机由一个CPU,一个存储器,和一个输入输出设备组成。在系统启动后,CPU就会从地址总线发出地址给存储器,然后从数据总线读回对应的指令编码,并通过指令译码部件,产生相应的控制信号,完成对应的操作,这些操作有可能是进行运算,也可能是读写存储器当中的某个单元,也有可能是要进行输入输出的动作。

那我们来看一看,CPU如果要完成一个简单的输入动作,会是怎么样的。

Screen Shot 2018-09-30 at 10.06.33 am

我们这里的输入设备是八个手动的开关,假设前三个开关都拨到高电平,后五个开关拨到低电平。这八个开关可能连接到了一个寄存器,那这个单元当中就保存了11100000这个数,而且事先在系统当中,也为这个单元分配了一个地址(1111)。那么事先就编写了一个用于输入的程序,在这个程序当中有一条指令就是读取1111这个地址单元。当CPU执行了这条指令的时候,就会在地址总线上发出这个地址,与此同时,在控制总线上发出表示当前是读操作的信号。输入输出设备收到1111地址和Read控制信号之后,就会从1111这个单元,取出对应的内容,然后把它送到数据总线上去。而CPU这时会采样数据总线上的信号,得到这个数值。然后这条指令应该是把这个数,保存到某个通用寄存器当中去,这样后续的程序也就可以对这个数进行操作了。这就完成了一个输入的动作。

Screen Shot 2018-09-30 at 10.06.41 am

那我们再来看一个输出的简单场景。我们现在的输出设备是8个小灯泡,它也和一个8位的寄存器相连,并有对应的地址。现在CPU执行到某一条指令,是想点亮这8个灯泡当中的某几个,这条指令就会在地址总线上送出1110,然后在控制总线上送出写(Write)的控制信号。与此同时,还需要在数据总线上,送出要写的数据11001100。这个输入输出设备,就会根据控制总线发现是一次写操作,就找到地址总线上的信号对应的单元,并将数据总线上对应的信号写进去。于是1110这个单元,就被写入了11001100这个数,然后这个单元的输出就直接通过物理的连线,连接到8个小灯泡上。数值为1代表高电平,就会点亮某个灯泡;数值为0代表低电平,对应的灯泡就是熄灭的状态。

这样我们就通过一条指令,完成了这几个小灯泡亮灭的控制,从而让计算机外部的人,可以观察到输出的信息。

Screen Shot 2018-09-30 at 10.06.49 am

因此,由CPU、存储器和输入输出设备,就构成了一个简单的计算机系统。用于输入输出的可以是拨码开关、LED管,这样的的简单的设备,也可能是比较复杂的设备,像打印机、硬盘。现在的计算机系统当中,输入输出设备变得越来越多,功能也非常的丰富。这些设备的差异非常大,有些设备要求很高的数据传输率,比如说显示器;有些设备的速度却很慢,比如键盘和鼠标。而且有一些接口是串行的,有一些是并行的;有数字电路的接口,也有模拟电路的接口。如此千差万别的设备,就没有办法直接和CPU这一个芯片进行连接。因此,我们就需要在CPU和这些设备之间,设置一个中转站。这就是输入输出接口,也被称为I/O接口。

Screen Shot 2018-09-30 at 10.06.57 am

I/O接口主要提供了这些功能。

  1. 数据缓冲,用于解决高速的CPU和低速的外设之间的差距;
  2. 提供联络信息,比如打印机什么时候能够接收数据。
  3. 提供格式上的转换,比如模拟信号和数字信号之间的转换,串行信号和并行信号之间的转换,不同电平之间的转换。
  4. 一个接口可能连接了多个设备,比如说有多个硬盘,那这个I/O接口还需要提供设备选择的功能。
  5. 其它还有一些功能,在用到的时候再做介绍。

Screen Shot 2018-09-30 at 10.07.05 am

因此,在现代的计算机系统当中,往往把跟输入输出相关的设备分解成两个类型(I/O接口和外设)。一部分是I/O接口,这可能是插在计算机主板上的一块插卡,也有可能是主板上的一个芯片。它内部会有一些寄存器,CPU可以通过系统总线,去访问I/O接口当中的这些寄存器。而这个I/O接口芯片,还会有一些管角,与外部的设备相连。这种划分的典型代表,就是显卡和显示器。显卡是一个I/O接口,显示器则被称为外设。

我们要注意的是,这样的划分和冯诺依曼结构当中所定义的输入输出设备,是不能完全一一对应的。在这里,我们描述的是现代计算机发展过程中的,一种具体的实现。

I/O接口究竟是如何与外设相连的,我们来看一个例子。

Screen Shot 2018-09-30 at 10.07.15 am

这是一种最简单的I/O接口,叫做并行接口。它一边通过系统总线和CPU相连,另一边可以连接数码管、拨码开关,这样简单的设备,也可以连接打印机这样比较复杂的设备。

这样的并行接口,一般有两种常见的实现形式。一种是采用独立的芯片,比如这个8255A就是一个并行接口芯片。那么早期的I/O接口,大多会采用这样独立芯片的形式;而现在可以在一个芯片当中,实现多个I/O接口的功能。所以,这个并行接口,也可能被实现在一个多功能的芯片当中。但不管是哪种实现形式,它总是要与这些外设进行连接。

Screen Shot 2018-09-30 at 10.07.24 am

我们先来看看它和那些简单的外设是怎么连接的。比如说和一个简单的输出设备,就是这个数码管。这个并行接口的芯片,对外会有8根引角,通过主板上的连线,就可以连接到这个数码管。每根信号线,正好连接到其中一个可以发亮的部分,加上旁边的这个小数点,一共有8个。因此,这和我们刚才用模型机演示的例子一样,CPU只要将对应的数据写到这个数据输出寄存器上,并行接口芯片就会直接将这个寄存器的内容,输出到这八根信号线上,这个数码管上对应的部分就会亮起,从而展现出我们编程想要输出的数字。

类似的,这个并行接口芯片,还可以有8个引角,连接到拨码开关。那拨码开关的状态,就会被保存在数据输入寄存器当中,等待CPU来读取。

这些都是非常简单的设备。

Screen Shot 2018-09-30 at 10.07.33 am

那我们再看一些稍微复杂一点的设备,比如说打印机。那么就不能像刚才那样简单的传入数据了,除了连接刚才那8根输出的信号之外,还需要有一根信号,告诉打印机,此时输出的数据,是希望打印机接收的数据。而打印机在接收了这个数据之后,还要给出一个回答的信号,以表示它已经完成了这个数据的接收工作。这样才能保证,这个并行接口和打印机进行数据传输时,既不丢失数据,也不会传输重复的数据。

那么对于扫描仪这样的输入设备,也是类似的情况。扫描仪在将扫描了的数据进行输入时,也需要给出一个输入准备好的信号,并行接口电路在采样了数据输入之后,也需要给出输入的回答信号。因此,并行接口芯片,在连接这些比较复杂的设备时,除了那8根数据信号之外,还需要有两根用于通讯联络的信号,而这两根信号,又被称为握手信号,在数据传输中,起着协调和联络的作用。对于稍微复杂一些的外设,都得采用带握手信号的数据传输的方式。

Screen Shot 2018-09-30 at 10.07.41 am

在现代的计算机当中,这种并行接口电路,算是最简单的I/O接口了。它和许多其它更为复杂的I/O接口,都会在集成在南桥芯片当中。而还有少数对性能要求比较高的接口,则会采用独立的芯片或者板卡的形式。而在一些紧凑型的设备中,比如说平板电脑和智能手机,这些I/O接口甚至会和CPU一起,集成在一个芯片当中。

不管是哪种形式,这些I/O接口的功能都是独立存在的,而且它们也需要各自的管角、连线,与对应的外设相连,从而让CPU可以与外部进行交互。

Screen Shot 2018-09-30 at 10.07.49 am

外面的世界很精彩,但也很复杂。我们的CPU虽然有超群的计算能力,然而它的交往技巧却是很贫乏。所以,我们为它找到了I/O接口这个好帮手。

posted @ 2018-10-05 09:04  houhaibushihai  阅读(1967)  评论(0编辑  收藏  举报