这个系列的文章其实可以分成两个部分,计算机系统的其他硬件结构和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设备与主机之间的连接方式。
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直接与主存进行数据交互,不占用CPU的时钟周期,直接I/O设备之间建立通路,再次提升了效率。 我们来看一下DMA方式传送数据的过程:
如图所示,DMA传输数据的过程包括三个过程。 首先是预处理,找到I/O设备输入的数据要存放在主存中的地址,然后找到I/O设备的地址,接着设定数据传送的个数。 接着是数据传送,因为DMA方式并不占用CPU,所以可以在主程序执行的过程中,完成I/O设备的数据传送。 然后是后处理,即将DMA终结掉。
最后,我们来了解下起到了桥梁作用的I/O接口。
如上图所示,I/O接口由数据缓冲寄存器、设备选择电路、设备状态标记、命令寄存器和命令译码器组成。之所以说I/O接口起到了桥梁的作用,是指它一端连接了CPU,另一端则连接了I/O设备,能够有效的保证设备和CPU间 正确的数据交换。 接下来说一下各个模块的作用: 设备选择电路:这个电路是一种比较器,简单可以理解为CPU向接口发送了一个设备地址,而比较器就是拿着这个设备地址去判断究竟那个I/O设备的地址和这个地址相同,如果找到则建立连接。 命令寄存器和命令译码器:起到了传送命令的作用 数据缓冲寄存器:缓冲从I/O设备中读取到的信息,或者是把CPU中传给I/O设备的数据缓存。 设备状态标记:可以用于标记设备的工作状态、标记设备是否准备完成、标记是否可以向CPU发送中断请求等
本文介绍了I/O系统的组成,重点在介绍三种数据的传送方式。希望能够帮助到大家更好的理解I/O系统,感谢阅读! 喜欢我文章的同学,可以帮忙点个赞、关注一下我。 公众号:最高权限比特流