编程(轮询)的I / O,中断驱动的I / O和直接内存访问之间有什么区别。这些形式的I / O OS是否相关?

The*_*ter 4 io operating-system

如果有人可以对这三种类型的I / O之间的区别做出清晰的解释,我将不胜感激。另外,我想知道这些形式的I / O是否依赖于操作系统?

我已经阅读了dma vs中断驱动的i / o问题,但是答案既不清楚又矛盾。至少对我(一个对概念不清楚的人)来说,这个问题似乎没有明确的答案。

谢谢。

BiN*_*4RY 5

轮询(或编程)的I / O:CPU手动检查是否有周期性的I / O请求可用。如果没有,它将继续执行其正常的工作流程。如果存在,它将处理IO请求。

中断驱动的I / O:CPU不需要手动检查IO请求。当有可用的I / O请求时,立即使用中断通知CPU,并使用中断服务程序立即处理该请求。

DMA:DMA的使用允许使用中断驱动的IO。否则,如果DMA不可用,则系统必须使用已编程的I / O。

DMA是一种允许设备(通常具有非常低的I / O速度)访问主内存而无需CPU显式处理请求的方法。当CPU启动从IO设备到主存储器的数据传输时,CPU指示DMA控制器处理此任务。然后,CPU将“忘记”该操作,并继续执行其他任务。DMA控制器完成传输后,它将使用中断向CPU发出信号。然后,CPU将“结束”与其启动的数据传输相关的所需任务。

DMA和中断驱动的IO的可用性取决于物理CPU。如果存在DMA和中断硬件,则OS(和您的程序)可以使用中断驱动器IO请求。否则,必须定期通过轮询手动检查I / O请求。