DMA全称Direct Memory Access(直接访问存储器)
。这是指一种高速的数据传输操作,允许在外部设备和存储器之间直接读写数据。
2、为什么需要DMA?
整个数据传输操作在一个称为DMA控制器
的控制下进行,CPU除了在数据传输开始和结束时做一点处理外(开始和结束时候要做中断处理),在外部设备和存储器进行数据传输的过程中,CPU可也进行其他的工作(前提是未设置停止CPU访问),这样,在大部分时间里,CPU和输入输出都处于并行操作,因此,计算机系统的效率将会大大提高。
3、什么时候需要DMA?
DMA方式主要适用于一些高速的I/O设备。这些外部设备传输字节或字的速度非常快,对于这些设备,如果用输入输出指令或者采用中断的方式来传输字节信息,会大量占用CPU的时间,同时也容易造成数据的丢失。而使用DMA方式能让外部I/O设备直接和存储器进行成批数据的快速传送。
DMA主要用于需要高速、大批量数据传送的系统中,目的是提高数据的吞吐量,如磁盘存取、图像处理、高速数据采集系统方面应用甚广。通常只有数据量较大的外设才需要支持DMA能力,比如视频、音频和网络接口。
4、谁来控制和管理DMA?
上面说到,DMA和外部设备在数据传输的过程中,并不需要CPU的参与,也就是DMA可以在脱离CPU的情况下工作,但是,这并不是说DMA不需要进行控制和管理。通常是采用DMA控制器(DMAC)
来取代CPU,负责DMA数据传输的全过程控制
5、什么是DMA控制器?
目前DMA控制器
都是可编程的大规模集成芯片,是内存储器和外部设备之间进行高速数据传输时的硬件控制电路
,是一种实现直接数据传送的专用处理器。
一个DMA控制器,实际闪是采用DMA方式的外围设备和系统总线之间的接口电路,这个接口电路是在中断接口的基础上再加上DMA机构组成。习惯上将DMA方式的接口电路称为DMA控制器
(也就是DMA控制器其实就一个硬件接口电路)。DMAC控制器包含下面几个部分:
- 内存地址计数器:用于存放内存中要交换的数据的地址
- 字计数器:用于记录传送数据块的长度
- 数据缓冲寄存器:用于暂存每次传送的数据
- DMA请求标志:每当外部设备准备好一个数据后给出一个控制信号,使这个标志位置1,当DMAC控制器中的“控制/状态”逻辑接收到CPU发回的响应信号HLDA后,会发出DMA响应信号,并把DMA请求标志复位,为交换下一个字做准备。
- “控制/状态”逻辑:由控制和时序电路以及状态标志等组成,用于修改内存地址计数器和字计数器,指定传送类型(输入或输出),并对"DMA请求"信号和CPU响应信号进行协调和同步。
- 中断机构:当字计数器溢出时,意味着一组数据交换完毕,由溢出信号触发中断机构,向CPU提出中断报告。
6、DMA的传输过程是怎么样的?
如上图所示,DMA的数据传输过程分为几个部分:
最后的话
最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!
资料预览
给大家整理的视频资料:
给大家整理的电子书资料:
如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**