Architecture dma与中断驱动i/o

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没有做

我不太清楚DMA和中断I/O之间的区别(目前正在阅读操作系统概念,第7版)

具体地说,我不确定在这两种情况下中断发生的时间,以及在这两种情况下CPU可以自由地执行其他工作的时间点。我一直在读的东西,但不一定能调和:

中断驱动的

  • 控制器通过驱动程序初始化
  • 控制器检查由驱动程序加载的寄存器以决定操作
  • 随后,从/到外围设备和控制器缓冲区的数据传输
  • 当(在每个字节读取时?在每个字读取时?当缓冲区填满时?当传输完成时)控制器发出中断
  • 据我所知,当外围控制器I/O和控制器MM I/O同时发生时,CPU没有做任何事情
  • 当传输完成时,或当数据块填满时,CPU必须初始化从控制器缓冲区到MM的传输
  • DMA

  • 与上面相同,只是控制器能够将数据从其缓冲区直接传输到MM,而无需CPU干预
  • 这是否意味着CPU仅在整个传输完成时中断,还是在控制器缓冲区填满时仍然中断
  • 唯一的区别是CPU不再需要等待控制器MM I/O,但在控制器缓冲区填满时仍然需要中断?还是DMA也对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。有两种类型的中断

  • 软件中断
  • 硬件中断
  • 每个中断都有一个指定的特殊编号。每个中断都由一个中断例程(一个简单的函数)提供服务,该例程保存在RAM中的某个位置,并从一个包含中断编号的表中调用。我告诉您这些,以供您理解。 当你们移动鼠标或在键盘上打字时,实际上是一个正在发生的中断

    我不太清楚DMA和中断I/O之间的区别

    DMA和中断之间的区别是假的,因为它们不是对立的概念。
    DMA和中断是正交概念,两个概念通常一起使用

    DMA的替代方案是编程I/O,也称为PIO。
    中断的替代方法是轮询

    中断驱动

    您需要更具体地说明您所指的内容。
    如果系统不使用中断,则必须使用轮询来检测设备状态的变化

    PIO通常使用中断(来自设备)来启动每个字节/字的数据传输。这有助于减轻PIO的CPU密集性。否则轮询PIO传输将完全消耗CPU资源。
    但将“带中断的PIO”简单地称为“中断”或“中断驱动”是不准确和误导的

    DMA传输几乎总是使用
    完成中断
    (来自DMA控制器)来通知CPU缓冲区传输已完成。
    轮询DMA完成(而不是使用完成中断)给CPU带来了DMA应该减轻的负担。我见过一个引导加载程序,它初始化DMA传输,然后轮询完成。但这是一个单任务环境,可以承受繁忙等待,而操作系统需要最大限度地提高CPU可用性。这意味着在完成中断的情况下使用DMA

    讨论“中断”,但不提供具体的上下文,例如,产生这些中断的来源和原因,可能是造成混淆的原因

  • 控制器通过驱动程序初始化
  • 控制器检查由驱动程序加载的寄存器以决定操作
  • 从/到外围设备和co的数据传输