一、概述
- 随着技术的发展,CPU对设备的IO控制方式有好几种方式,后一种方式往往是在弥补前一种方式的缺点。
- 分别有以下几种IO控制方式
- 程序直接控制方式
- 中断驱动方式
- DMA方式(Direct Memory Access)
- 通道控制方式
二、程序直接控制方式
1. 基本流程
以读操作为例,操作流程如下:
- CPU向控制器发出读指令,并将状态寄存器设置为1(未就绪)
- 轮询检查状态寄存器。检查状态标志位是否变成0,表示已就绪。
- 输入设备准备好数据后将数据传给控制器,并且报告自身状态。
- 控制器将数据放入数据寄存器,并且将状态寄存器设置为0,表示已就绪。
- CPU发现设备已就绪,即可将数据寄存器中的内容读入CPU的寄存器中,再把CPU寄存器中的内容放入内存。(也就是说,这个数据辗转了几次)
程序流程图如下:
2. 优缺点
2.1 优点
- 实现简单。在读写指令之后,加上实现循环检查的一系列指令即可。
2.2 缺点
- CPU干预的频率很频繁。IO操作之前、完成之后需要CPU介入。并且在等待IO完成的过程中CPU需要不断地轮询检查。
- 数据传送单位小。每次读写一个字。且每一个字读写都需要CPU的帮助。
- 数据流向比较复杂。 读操作:IO设备->cpu->内存; 写操作:内存->cpu->IO设备。 中间需要经过IO控制器的数据寄存器、CPU寄存器才能最终进入内存。
三、中断驱动方式
1. 基本流程
流程如下:
- CPU发出读写命令,将等待IO进程阻塞。切换其他进程执行。
- 当IO完成后,控制器向CPU发出一个中断信号,CPU检测到中断信号后,会切换进程,处理中断。
- CPU将一个字的数据传送到CPU寄存器,再写入主存。
- CPU恢复等待IO的进程(或其他进程)的运行环境,然后继续执行。
2. 优缺点
2.1 优点
- IO控制器通过中断信号主动报告IO已完成,不需要CPU不停地轮询。
- CPU和IO设备可并行工作,CPU利用率得到明显提高。
2.2 缺点
- 进程切换如果太频繁,会降低系统性能。
- 轮询方式的第2、3个缺点依旧没有解决。
四、DMA方式
1. 概述
- 即Direct Memeoy Access,直接存储器存取
- 主要用于块设备的IO控制
- 数据的传送单位是块,不再是一个字、一个字的传送
- 数据的流向是设备->内存,或者内存->设备,不再需要CPU作为中间媒介。
- 仅在传送一个或多个数据块的开始和结束时,才需要CPU干预。
2. DMA控制器
3. 基本流程
- CPU给IO模块发送读块命令
- DMA处理读命令,CPU做其他事情
- DMA处理结束之后,通过中断通知CPU
4. 优缺点
4.1 优点
- 仅在传送一个或多个数据块的开始和结束时,才需要CPU干预。
- 每次读写一个或多个块(注:每次读写的只能是连续的多个块,且这些块读入内存后在内存中也必须是连续的)
- 数据流向不在经过CPU。读操作:IO设备->内存;写操作:内存->IO设备。
- 数据传输以块为单位,CPU介入频率进一步降低。
- CPU和IO设备的并行性得到提升。
4.2 缺点
- CPU每发出一条IO指令,只能读写一个或多个连续的数据块。
五、通道控制方式
1. 概述
- 相较于DMA,通道控制方式更加灵活。通道控制方式,就是用另一个更加弱的CPU去处理CPU该处理的事情。
1. 基本流程
- CPU向通道发出IO指令,指明通道程序在内存中的位置,并指明要操作哪个IO设备,之后CPU就切换到其他进程执行了。
- 通道执行内存中的通道程序。比如指明要读入、写出多少数据,读写数据应放在内存的什么位置等信息。
- 通道执行完规定的任务后,向CPU发出中断信号,之后CPU对中断进行处理。
2. 优缺点
2.1 优点
- CPU干预频率极低。通道可以自己执行CPU的指令,只有完成一组数据块的读写后才需要发出中断信号,请求CPU干预。
- 一次性可以读写一组数据块。
- 数据流向不在经过CPU。读操作:IO设备->内存;写操作:内存->IO设备。
- CPU、通道、IO设备并行工作,资源利用率很高。
2.2 缺点
- 实现复杂,需要专门的通道硬件支持。