DMA控制器如何工作?


14

摘自Andrew S. Tanenbaum(第5.1.4节,现代操作系统中的直接内存访问),Herbert Bos,2014年

为了简化说明,我们假定CPU通过连接CPU,内存和I / O设备的单个系统总线访问所有设备和内存,如图5-4所示。

在此处输入图片说明

  1. 为了解释DMA的工作原理,让我们首先看一下不使用DMA时如何进行磁盘读取。

    • 首先,磁盘控制器逐位从驱动器逐位顺序读取该块(一个或多个扇区),直到整个块都在控制器的内部缓冲区中为止。
    • 接下来,它计算校验和以验证没有发生读取错误。然后,控制器引起中断。操作系统开始运行时,它可以通过执行循环从控制器缓冲区一次读取一个字节或一个字的磁盘块,每次迭代都从控制器设备寄存器中读取一个字节或一个字并将其存储在主存储器中。

    问:在第二步中

    • 数据不是从“控制器的缓冲区 ”传输到主存储器吗?为什么既说“ 来自控制器的缓冲区 ” 又说“ 来自控制器设备寄存器 ”?

    • 在第二步中,控制器可以将数据从其缓冲区传输到主存储器,而不会中断cpu,也无需再次涉及OS吗?

  2. 使用DMA时,过程不同。

    • 首先,CPU通过设置其寄存器来对DMA控制器进行编程,以使其知道在何处传输(图5-4中的步骤1)。
      它还向磁盘控制器发出命令,告诉它将数据从磁盘读入其内部缓冲区并验证校验和。
    • 当有效数据位于磁盘控制器的缓冲区中时,DMA可以开始。DMA控制器通过在总线上向磁盘控制器发出读取请求来启动传输(步骤2)。此读取请求看起来与其他任何读取请求一样,并且磁盘控制器不知道(或不在乎)它是来自CPU还是来自DMA控制器。通常,要写入的内存地址在总线的地址线上,因此,当磁盘控制器从其内部缓冲区中提取下一个字时,它便知道将其写入哪里。写入内存是另一个标准的总线周期(步骤3)。
    • 写入完成后,磁盘控制器也会通过总线将确认信号发送到DMA控制器(步骤4)。然后,DMA控制器增加要使用的存储器地址,并减少字节数。如果字节计数仍大于0,则重复步骤2至4,直到计数达到0。
    • 那时,DMA控制器中断CPU,以告知传输现在已完成。操作系统启动时,不必将磁盘块复制到内存;它已经在那里。

    问:在第二步中,DMA控制器请求磁盘控制器将数据从磁盘控制器的缓冲区传输到主内存。第一步,CPU向磁盘控制器发出命令,告诉它将数据从磁盘读入其内部缓冲区。同时,当磁盘控制器完成将数据从磁盘传输到磁盘控制器的缓冲区时,CPU是否还可以告知磁盘控制器将数据从磁盘控制器的缓冲区传输到主内存,因此不需要DMA控制器告诉磁盘控制器将数据从磁盘控制器的缓冲区传输到主存储器?(我不明白为什么我们需要一个DMA控制器在磁盘和主内存之间进行数据传输,所以我想我错过了理解报价的重要内容)。

  3. 设备的设备控制器控制该设备并在该设备上执行操作。DMA控制器在什么设备上控制和执行操作?

谢谢!


您的理解似乎基于总线掌握,我想它比该教科书中描述的DMA概念更现代。教科书中的DMA概念更为原始。
rwong 2015年

我为该书使用的简化模型添加了图表。
蒂姆(Tim)

图中的箭头3似乎与文字说明不匹配...恭喜。为了确定哪一个是正确的,将需要步骤3的总线时序图。更重要的是,在步骤3中,需要找出哪个设备负责保持数据信号。磁盘控制器是否首先将数据发送给DMA控制器,然后DMA控制器重复数据(将其自身的电压施加到总线上) )到内存?
rwong 2015年

步骤4中的“确认”也是可疑的。DMA是否不知道要复制的字节数?
rwong 2015年

不知道如何澄清。您学习了哪些有关OS和体系结构的书,或者您认为最好的书?
蒂姆(Tim)

Answers:


7

Q1

第一步,我们不使用DMA,因此磁盘控制器的内容由处理器逐段读取。处理器当然会(假设数据实际上将用于某种用途,而不仅仅是被丢弃)将其存储在系统的内存中。

在这种情况下,缓冲区是硬盘(控制器)本身上的一块内存,并且控制器设备注册了硬盘(控制器)本身的控制寄存器。

不涉及操作系统(或其他软件)将需要某种DMA操作,并且您在问题的这一部分中讨论的文本部分没有使用DMA。因此,不,在这种情况下不会发生这种情况。

Q2

因此,DMA控制器的全部目的是“执行将设备内部缓冲区中的内容存储到主存储器中的繁琐任务”。CPU将与DMA控制器和磁盘设备一起使用。如果磁盘本身可以执行此操作,则无需DMA控制器。

实际上,在现代系统中,从某种意义上说,DMA功能通常内置在硬盘控制器本身中,这意味着该控制器具有“总线主控”功能,这意味着该控制器本身就是该设备的DMA控制器。但是,将它们视为两个独立的设备,会使DMA的整个概念变得难以理解。

Q3(种类)

如果您将硬盘视为刚交付到建筑工地的一堆砖块,而处理器就是铺砌砖块以建造房屋的瓦工。DMA控制器是将砖块中的砖块运送到瓦工需要的地方的工人,这意味着瓦工可以专注于完成实际的砌砖工作(如果您尝试过,这是熟练的工作)您自己),而“获取和携带”的简单工作可以由技术水平较低的工人完成。

轶事证据:当我第一次了解DMA从磁盘到内存的传输大约是在1997年左右时,IDE控制器开始使用DMA,并且您需要获得一个“主板IDE控制器”驱动程序以允许IDE进行DMA,并且那时,从硬盘读取数据将占用大约6-10%的CPU时间,而在同一设置中的DMA将占用大约1%的CPU时间。在此之前,只有带有SCSI磁盘控制器的高级系统才会使用DMA。


5

这不是答案。要求澄清的时间太长,无法放入评论中。

在任何人都可以回答这个问题之前,必须先清楚地说明正在讨论的计算机系统体系结构。即:

  • 本说明中涉及的总线系统是什么?

    • 大多数计算机系统都有内存总线。
    • 大多数计算机还具有其他种类的总线系统。
  • 磁盘IO是否也通过内存总线?

    • 换句话说,磁盘是否将地址总线用于地址,将数据总线用于数据?
  • 磁盘控制器是否将内存总线视为...

    • 内存总线?也就是说,它认为它正在与存储芯片通信。即RAS(行访问频闪),CAS(列访问频闪),...
    • 极不可能-与存储芯片对话需要根据DRAM时序(延迟)发出命令的超高精度-太早或太晚几个时钟周期,都会发生数据丢失。
  • 那么...磁盘控制器认为总线“实际上是什么”?

  • 在大多数计算机系统中,都有一种称为“端口I / O”的IO。

    • 端口I / O可能搭载在内存总线上,或者可能具有另一条专用总线。
    • 端口I / O的独特之处在于,它可以在单个(或预定义的恒定数量)总线周期内完成任务-无需担心DRAM时序的危险。
  • 在更高级的系统中(自二十年前开始),就有较新的总线系统类型。例如ISA,PCI,AGP,PCMCIA ... SCSI,ATA,SAS,SATA,FC-AL ...


现在,关于“正在讨论的计算机系统”的不确定性很多,您可以理解为什么您对问题的答案不明确。

是的,我知道它来自一本教科书。你有副本。我不。(不在家,但是办公室里有一个。)因此,如果您需要答案,则需要显示一些图表并说明计算机总线系统的外观。


不过,在最底线是:

  • DMA是可编程设备。也就是说,CPU负有告知 DMA 的最终责任。当然,在DMA接管系统的时隙内,CPU将通过让DMA进行表演来配合。

  • 在CPU(和运行它的OS)的控制下,DMA可以接管一个或多个总线(多个)的控制权,以便于将数据从磁盘控制器传输到主存储器。

  • 在DMA接管总线(多个)的时间段内,DMA将通过该总线发出命令-即代替其通常的控制器,即DMA假装它正在执行CPU的工作。

  • 如果数据传输涉及两条不同的总线,则DMA可能必须这样做才能到达另一条总线。

  • 为了能够移动多个字节(字等),DMA包含一个循环计数器,用于跟踪要复制的剩余数据量。

  • 为了能够写入主存储器,DMA包含一个存储器地址寄存器,该存储器地址寄存器可以由CPU编程,以便CPU可以告诉DMA将数据写入何处。

  • 根据系统的总线设计,DMA可能会或可能不必处理DRAM定时周期的繁琐细节。

  • 曾几何时,发明了DMA之后的一段时间,一些外围设备开始将DMA预包装到其控制器中-这称为Bus Mastering。尽管如此,无论DMA是位于CPU封装,主板还是I / O卡上,它都必须最终处于CPU的控制(编程)之下,因为它们必须以某种方式协商对系统总线(复数)的访问,并且主内存。

  • 现代计算机系统具有专用的子系统,称为DRAM控制器。如果有一个,几乎可以肯定的是,该DRAM控制器还将实现DMA的功能,也就是说,它看起来像是一个可编程的“字节复制循环”,并且上述所有复杂性都隐藏在DRAM的芯片内部控制器。


如果您发现它非常令人困惑-我也感到困惑-您将需要图表。很多图。系统图。总线图。时序图。状态转换图。等等


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.