首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DMA控制器是如何工作的?

DMA控制器是如何工作的?
EN

Software Engineering用户
提问于 2015-02-08 04:49:12
回答 1查看 44.2K关注 0票数 15

“现代操作系统中的直接内存访问”,Andrew S. Tanenbaum,Herbert Bos,2014,

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

  1. 为了解释DMA是如何工作的,让我们首先看看不使用DMA时磁盘读取是如何发生的。
    • 首先,磁盘控制器逐个从驱动器中读取块(一个或多个扇区),直到整个块位于控制器的内部缓冲区中。
    • 接下来,计算校验和,以验证是否发生读取错误。然后控制器造成中断。当操作系统开始运行时,它可以通过执行一个循环,一次从控制器的缓冲区读取一个字节或一个单词,每次迭代从控制器设备寄存器读取一个字节或一个单词,并将其存储在主内存中。

问:在第二步,

代码语言:javascript
复制
- isn't the data transferred "**from the controller's buffer**" to the main memory? Why does it say both "**from the controller’s buffer**" and "**from a controller device register**"?
- in the second step, can the controller transfer data from its buffer to the main memory, without interrupting to the cpu, and without involving OS again?
  1. 当使用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控制器来在磁盘和主内存之间进行数据传输,所以我猜我错过了一些重要的东西来理解引号)。

  1. 设备的设备控制器控制设备并对设备执行操作。DMA控制器控制和执行操作的设备是什么?

谢谢!

EN

回答 1

Software Engineering用户

发布于 2015-02-08 14:50:44

Q1

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

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

不涉及操作系统(或其他一些软件)将需要某种DMA操作,您在这部分问题中讨论的文本部分不使用DMA。所以,不,在这种情况下是不可能发生的。

Q2

因此,DMA控制器的全部目的是“执行将设备内部缓冲区中的东西存储到主存中的繁琐任务”。CPU将与DMA控制器和磁盘设备一起工作。如果磁盘可以自己执行此操作,则不需要DMA控制器。

事实上,在现代系统中,DMA能力通常内置于硬盘控制器本身,也就是说控制器具有“总线控制”功能,这意味着控制器本身就是设备的DMA控制器。然而,把它们看作是两个独立的设备,整个DMA的概念就不那么容易理解了。

Q3 (某种)

如果你把硬盘看作是刚送到建筑工地的砖块,而处理器就是铺砖盖房子的砖头工。DMA控制器是将砖块从一叠砖运到砖工需要的地方的劳动者,这意味着砖头工可以集中精力做砌砖的实际工作(如果你自己尝试过,这是一项技术熟练的工作),而“取砖和搬运”的简单工作可以由技能较低的工人来完成。

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

票数 7
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/272470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档