漫谈计算机组成原理(七)I/O系统

本文讲什么?

这个系列的文章其实可以分成两个部分,计算机系统的其他硬件结构和CPU。
而我们今天要讲述的内容,就是其他硬件结构中的最后一个部分——I/O(输入输出)系统。
这篇文章主要讲述的就是I/O系统的组成以及I/O系统的工作原理,下面就正式开始I/O系统之旅吧!

I/O设备的组成

说起输入输出系统,其实我们一点都不陌生。从我们开始接触计算机到现在,鼠标、键盘、显示器等可能是我们一直在使用的,但仅仅是这些设备并没有办法组成I/O系统,这只能算是I/O系统的一部分——外围设备(I/O硬件)。除了外围设备,I/O硬件还包括I/O接口。只有硬件没有软禁,这个系统只能是一堆废铁,所以,I/O软件和I/O硬件共同组成了计算机的I/O系统。

I/O软件

所谓I/O软件,简单讲就是用来控制I/O硬件的,分成I/O指令和通道指令两个部分。I/O系统的主要任务就是将用户输入的数据经过处理转换成人能够识别的数据再输出。就比如我现在正在努力的敲键盘,而通过键盘输入的字符经过输入法转换成汉字,最终显示在屏幕上,尽管有些不太准确,但大致上就这这样一个过程。

  • I/O指令
    I/O指令实际上是CPU指令的一部分,基本格式是这样的:【操作码|命令码|设备码】。操作码是一种控制指令,如访存、算数逻辑运算等,命令码是执行具体的指令,比如说算数逻辑运算中的加减乘除,而设备码就是外围设备在I/O系统中的编号。通过I/O指令,就能够实现对I/O设备的基本控制。

  • 通道指令
    说道通道指令,我们需要先了解一下I/O系统的发展史。
    早期的I/O系统,因为设备较少,所以采用I/O设备直接与CPU连接的方式,很明显,设备一旦多了,就会对CPU造成严重的负担,所以有了接口这种连接方式;接口连接在I/O总线和I/O设备之间,起到了桥梁的作用,接口不但能够对数据进行缓冲,还能对中断进行处理,最终采用正确的逻辑,设备们就能分时占用CPU,大大的提高了速率。后来出现的DMA,同样起到了提高效率的作用,DMA能够在主存和I/O设备之间直接交换数据,进一步解放了CPU;虽然DMA方式不错,但是在大型机上面,I/O设备太多,交互十分频繁,CPU不但需要对众多的DMA进行管理,而且控制起来十分复杂,直接影响了CPU的效率,又有了通道这种结构。通道可以理解为一种特殊的处理器,功能和CPU类似,但肯定不如CPU强大,它的作用仅仅是处理经过通道的数据,减轻CPU负担而已。最后就是I/O处理机,这玩意独立于系统而存在,功能更加强大,但不是重点,就不展开介绍了。
    继续说通道指令,通道指令是通道自身的指令,用来执行I/O指令,比如读写磁盘、控制I/O设备的工作状态等等。

I/O硬件

I/O硬件基本包括接口和I/O设备两个部分,上面说的其实已经十分全面了,就不再赘述。

I/O系统与主机的信息传输方式

我们之前讲的只是一个铺垫,这一章节最重要的还是主机和I/O系统之间的数据传输
在讲之前需要先了解一下I/O设备与主机之间的连接方式。

  • 分散连接(辐射式连接):就是I/O系统发展阶段中的第一个阶段,各种设备都直接连接在主机上。这种方式不便于维护,成本相对较高。

  • 总线连接:即用接口将总线和I/O设备连接起来,这样的便于增删设备。

I/O系统与主机的信息传输方式共有5种,这里我值介绍三种,即程序查询方式、程序中断方式、DMA方式。

程序查询方式

这种方式,一张图就很好说明了。

程序查询方式就是利用CPU向I/O设备发送读取指令,然后再检查I/O设备的状态,如果I/O设备已经准备就绪,则一个一个字节的将数据传输到CPU中;如果I/O设备没有准备就绪,则CPU将会不断的向I/O设备发送查询请求,直到I/O设备准备好了。
注意,在CPU不断查询的过程中,原有的程序是被打断了的,如果I/O设备没有准备好,那么原来执行的程序就不会执行,直到I/O设备就绪,且数据读取完毕,程序才会恢复。
上面说的是只有一个设备的情况,CPU会采取踏步查询的方式查询I/O设备是否准备好了。那么如果一个接口连接着多个I/O设备又当如何呢?如下图,当一个设备没有准备好的时候,就向下查询,然后如果还是没有准备好,则循环这个过程。

可以看到,这种方式存在非常鲜明的优先级问题,极端一些,如果第一个设备请求完成一次,接着就进行下一次请求,那么后面的设备可能永远也没有办法得到CPU的“临幸”。

程序中断方式

这种方式就要比第一种方式聪明了,上一种方式是由CPU占据主导地位,而这种方式是由I/O设备占据主导。
只有当I/O设备准备好了以后,才会向CPU发送一个中断请求,表示我已经准备好了,然后CPU执行中断,与I/O设备进行数据交互。
图示如下:

这种方式没有CPU的“原地踏步”式的查询,即CPU不会去等待设备准备好,而是设备准备好了,你直接通知CPU就好了,这无疑大大提高了效率。
注:中断程序的流程如下:保护现场–>中断服务–>恢复现场–>中断返回
这里额外讲述一下中断,实际上有两种中断方式,一种是单重中断,另外一种就是多重中断。

单重中断很好理解,就是中断现行的程序,转而去执行另外一个服务,而多重中断则是在单重中断的基础上建立的。一般来讲,I/O接口中的是否允许中断标记,在一个I/O设备发起中断后就关闭了,也就是不再允许设备中断现在的中断程序,如果遇到特殊情况,如遇到紧急事件需要处理,那么就会中断现在的中断。就叫做你多重中断。

DMA方式

DMA方式就如同一开始讲的那样,DMA直接与主存进行数据交互,不占用CPU的时钟周期,直接I/O设备之间建立通路,再次提升了效率。
我们来看一下DMA方式传送数据的过程:

如图所示,DMA传输数据的过程包括三个过程。
首先是预处理,找到I/O设备输入的数据要存放在主存中的地址,然后找到I/O设备的地址,接着设定数据传送的个数。
接着是数据传送,因为DMA方式并不占用CPU,所以可以在主程序执行的过程中,完成I/O设备的数据传送。
然后是后处理,即将DMA终结掉。

I/O接口

最后,我们来了解下起到了桥梁作用的I/O接口。

如上图所示,I/O接口由数据缓冲寄存器、设备选择电路、设备状态标记、命令寄存器和命令译码器组成。之所以说I/O接口起到了桥梁的作用,是指它一端连接了CPU,另一端则连接了I/O设备,能够有效的保证设备和CPU间 正确的数据交换。
接下来说一下各个模块的作用:
设备选择电路:这个电路是一种比较器,简单可以理解为CPU向接口发送了一个设备地址,而比较器就是拿着这个设备地址去判断究竟那个I/O设备的地址和这个地址相同,如果找到则建立连接。
命令寄存器和命令译码器:起到了传送命令的作用
数据缓冲寄存器:缓冲从I/O设备中读取到的信息,或者是把CPU中传给I/O设备的数据缓存。
设备状态标记:可以用于标记设备的工作状态、标记设备是否准备完成、标记是否可以向CPU发送中断请求等

总结

本文介绍了I/O系统的组成,重点在介绍三种数据的传送方式。希望能够帮助到大家更好的理解I/O系统,感谢阅读!
喜欢我文章的同学,可以帮忙点个赞、关注一下我。
公众号:最高权限比特流

发表评论

电子邮件地址不会被公开。 必填项已用*标注