区分编程 I/O 和中断驱动 I/O。
编程(输入/输出)I/O和中断驱动I/O之间的区别如下-
编程输入/输出
这种I/O技术是在外部设备和处理器之间交换数据的最简单的方法。在这种技术中,处理器或中央处理单元(CPU)运行或执行程序,直接控制I/O操作。
处理器向I/O模块发出命令并等待操作完成。此外,处理器会不断检查I/O模块状态,直到发现操作完成。
处理器的时间被浪费了,以防处理器比I/O模块快。它的模块被认为是一个慢模块。
它的应用是在某些低端的微型计算机中。它具有单输出和单输入指令。
每条指令仅按编号选择一个I/O设备,并且仅按字节传输单个字符。该技术涉及四个寄存器,它们是输出状态和字符以及输入状态和字符。
它的缺点是忙等待,这意味着处理器通过等待I/O设备准备好使用而将大部分时间消耗在一个紧密循环中。程序检查或轮询I/O硬件组件、设备或项目。
例如-一个循环内的计算机鼠标。
这很容易理解。编程很容易。它缓慢且低效。
系统性能严重下降。它不需要初始化堆栈。
由于系统中连接的I/O设备数量增加,系统的吞吐量降低。最好的例子是使用编程I/O的PC设备高级技术附件(ATA)接口。
中断驱动的I/O
它类似于程序驱动的I/O技术。处理器不会等到I/O操作完成。处理器在执行I/O操作的同时执行其他任务。
当I/O操作完成时,I/O模块会中断处理器,让处理器知道操作已完成。它的模块比已编程的I/O模块更快。
处理器实际启动I/O设备,并指示它在操作完成时产生并发送中断信号。这是通过设置状态寄存器中的中断使能位来实现的。
这种技术需要对每个写入或读取的字符进行中断。中断正在运行的进程是一项昂贵的业务,因为它需要保存上下文。
它需要额外的硬件,例如直接内存访问(DMA)控制器芯片。它快速高效。
如果程序员使用低级编程语言,则编码变得困难。很难让各个部分很好地协同工作。这是由操作系统开发人员完成的,例如Microsoft或硬件制造商。
系统的性能得到增强。它需要初始化堆栈。
尽管系统中连接的I/O设备数量增加,但系统的吞吐量不受影响,因为吞吐量不依赖于数量。
例如-计算机鼠标触发并向程序发送信号以处理鼠标事件。
中断驱动的I/O更好,因为它快速、高效。系统的性能得到改进和增强。