Architecture dma与中断驱动i/o
我不太清楚DMA和中断I/O之间的区别(目前正在阅读操作系统概念,第7版) 具体地说,我不确定在这两种情况下中断发生的时间,以及在这两种情况下CPU可以自由地执行其他工作的时间点。我一直在读的东西,但不一定能调和: 中断驱动的Architecture dma与中断驱动i/o,architecture,operating-system,driver,interrupt,dma,Architecture,Operating System,Driver,Interrupt,Dma,我不太清楚DMA和中断I/O之间的区别(目前正在阅读操作系统概念,第7版) 具体地说,我不确定在这两种情况下中断发生的时间,以及在这两种情况下CPU可以自由地执行其他工作的时间点。我一直在读的东西,但不一定能调和: 中断驱动的 控制器通过驱动程序初始化 控制器检查由驱动程序加载的寄存器以决定操作 随后,从/到外围设备和控制器缓冲区的数据传输 当(在每个字节读取时?在每个字读取时?当缓冲区填满时?当传输完成时)控制器发出中断 据我所知,当外围控制器I/O和控制器MM I/O同时发生时,CPU没有做
在中断驱动IO的情况下,MCU在每个字节或字上获得中断取决于微控制器的便利。MCU移动到中断模式,为每个字节/字的接收留下正常的操作模式。在这里,MCU除了从IO读取数据并复制到内存外,什么都不能做 在DMA的情况下,DMA做的事情与MCU在中断情况下做的事情相同。因此,这里MCU可以自由做任何其他事情。您可以根据需要中断的字节数配置DMA。因此,这里它不同于IO中断,因为MCU不会对每个字节或字进行中断;相反,只有在收到amo时,才会从DMA获得中断您已配置的数据的数量。 而且DMA已经将数据从IO复制到RAM,所以MCU也不需要为复制付出努力,这节省了大量时间 因此,如果您已将DMA配置为以1KB的数据中断,则MCU将以1KB的字节获得1个中断,否则,如果使用中断驱动IO,它将获得1K个中断。 因此,与中断驱动IO相比,DMA的使用减少了中断数量并提高了性能
这就是为什么在需要频繁传输大量数据时,DMA通常被使用的原因。让我用简单的话来解释一下,以供您理解 DMA代表直接内存访问,是一种计算机硬件组件访问内存总线并控制传输的系统。例如,CD/DVD驱动器通常使用DMA工作。但请记住,CPU始终是一切的主控器,这意味着即使CPU已赋予DMA控制器主控权,它仍然可以具有检查DMA的能力。它可以随时重新调用总线控制,甚至可以执行DMA任务。 有一些寄存器用于设置从CPU到DMA和DMA到CPU的总线控制。 一旦DMA控制器完成,它可能会中断或向CPU发出信号,表明它已经完成了它的工作。这就是DMA 现在开始中断I/O。中断I/O比DMA更频繁。一个进程通常会经历很多次I/O。请求用户输入将是中断I/O。而不是DMA。有两种类型的中断
DMA和中断是正交概念,两个概念通常一起使用 DMA的替代方案是编程I/O,也称为PIO。
中断的替代方法是轮询 中断驱动 您需要更具体地说明您所指的内容。
如果系统不使用中断,则必须使用轮询来检测设备状态的变化 PIO通常使用中断(来自设备)来启动每个字节/字的数据传输。这有助于减轻PIO的CPU密集性。否则轮询PIO传输将完全消耗CPU资源。
但将“带中断的PIO”简单地称为“中断”或“中断驱动”是不准确和误导的 DMA传输几乎总是使用
完成中断
(来自DMA控制器)来通知CPU缓冲区传输已完成。轮询DMA完成(而不是使用完成中断)给CPU带来了DMA应该减轻的负担。我见过一个引导加载程序,它初始化DMA传输,然后轮询完成。但这是一个单任务环境,可以承受繁忙等待,而操作系统需要最大限度地提高CPU可用性。这意味着在完成中断的情况下使用DMA 讨论“中断”,但不提供具体的上下文,例如,产生这些中断的来源和原因,可能是造成混淆的原因