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

1,606 阅读8分钟

本文讲什么?

这个系列的文章其实可以分成两个部分,计算机系统的其他硬件结构和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系统,感谢阅读! 喜欢我文章的同学,可以帮忙点个赞、关注一下我。 公众号:最高权限比特流