概念:DMA(直接内存访问)是一种避开CPU,可以直接访问外设和内存的技术。它可以在外设和存储器之间、存储器之间以及外设之间访问和移动数据。
目的:不需要CPU干预,直接为外设服务,使CPU可以处理其他事务,提高系统效率。(附录有例子补充)
成分:
一般来说,直接存储器存取控制器将包括地址总线、数据总线和控制寄存器。
DMA属于外设,因为它是在处理器的编程控制下进行传输的。
一个处理器可以包含多个直接存储器存取控制器。每个控制器都有多个直接存储器存取通道。
处理器DMA有两种,系统DMA(可以访问任何资源)和内存DMA(专门用于内部存储器之间的数据访问,速度更快)。
每个直接存储器存取控制器都有一组先进先出,作为直接存储器存取子系统和外围设备或存储器之间的缓冲区
设置:
目前主要有两种DMA传输结构:寄存器模式和描述符模式。
注册模式
在基于寄存器的直接存储器存取中,处理器直接对直接存储器存取控制寄存器进行编程,以开始传输。
基于寄存器的DMA由两个子模式组成:自动缓冲模式和停止模式。在自动缓冲区DMA中,当一个传输块完成时,控制寄存器自动重新加载其原始设置值,相同的DMA进程以零开销重新启动。自动缓冲区DMA特别适合具有持久数据流的性能敏感型应用。直接存储器存取控制器可以独立于其他处理器活动读取数据流,然后在每次传输结束时向内核发出中断。
停止模式的工作原理类似于自动缓冲区DMA,只是DMA完成后不会重新加载每个寄存器,所以整个DMA传输只发生一次。停止模式对于基于某些事件的一次性传输非常有用。例如,数据块不定期地从一个位置传输到另一个位置。
描述符模式
基于描述符的直接存储器存取(deor)需要一组参数存储在内存中,以启动一系列直接存储器存取操作。该描述符中包含的参数与通常编程到直接存储器存取控制寄存器集中的所有参数相同。然而,描述符也可以允许多个直接存储器存取操作序列串在一起。在基于描述符的直接存储器存取操作中,我们可以对一个直接存储器存取通道进行编程,并在当前操作序列完成后自动设置和启动另一个直接存储器存取传输。
描述符管理
一个是软件链管理,需要设置多种描述符,串联在一起。一个描述符指向下一个描述符,描述符的加载是自动的。
一种是硬件队列管理DMA,只在一些高级处理器中使用。
最后,使用DMA时需要注意的问题:
DMA使用物理地址,而程序使用虚拟地址,因此配置DMA时必须将虚拟地址转换为物理地址。
由于程序使用虚拟地址,一般使用cache地址,cache的内容不一定和其物理地址(内存)的内容一致,所以在开始DMA传输之前,必须刷新这个地址的Cache,也就是写入内存。
Os不能保证每个分配的内存空在物理上是连续的。尤其是当系统已经使用了一段时间并且分配了大量内存时。所以每次都要判断地址是否连续。如果不是连续的,就要把这个内存分成几个段,让DMA完成传输
1.《dma 关于DMA的基础知识,你需要知道这些...》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《dma 关于DMA的基础知识,你需要知道这些...》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/junshi/1639319.html