DMA原理、传输过程及传输方式

2024-05-12 18:44

本文主要是介绍DMA原理、传输过程及传输方式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.DMA

        DMA(Direct Memory Access,直接存储器访问),是硬件实现存储器与存储器之间或存储器与I/O设备之间直接进行数据传输的内存技术,它允许不同速度的硬件设备(外设到内存、内存到外设、内存到内存、外设到外设)进行沟通,而不需要依靠中央处理器(CPU)的中断负载,从而节省CPU的资源,此外DMA具有一般CPU没有的高效操作,能够提高系统的吞吐率。

        如果不用DMA搬运数据,那么CPU就需要从来源把每一片段的数据复制到寄存器中,这一过程一直 占用CPU的资源。当使用DMA时,CPU向DMA控制器发出一个存储传输请求,当DMA控制器接收到请求就 会将数据从源地址搬运到目的地址。在数据搬运过程中不占用CPU资源,CPU可以执行其它操作,当传输完成时DMA以中断的方式通知CPU。

        为了发起传输事务,DMA控制器必须得到以下数据:

        源地址—数据被读出的地址;

        目的地址—数据被写入的地址;

        传输长度—被传输的字节数;

什么是传输事务?

事务是由DMA控制器内核发起的一系列一个或多个传输。

 

2.Scatter-Gather DMA

        DMA一次只能传输物理上连续的一个块的数据, 完成传输后发起中断。

        Scatter-Gather DMA允许在一次单个的DMA事务处理中传输数据到多个内存区域,相当于把多个简单的DMA要求串在一起,完成传输后只发起一次中断,从而减轻中央处理器的多次输出输入中断和数据复制任务。

        SGDMA允许应用程序在内存中定义事务列表,硬件将在应用程序没有进一步干预的情况下处理这些事务。在此期间,应用程序可以继续添加更多事务以保持硬件工作。用户可以通过轮询或中断来检查事务是否完成。SGDMA处理整个数据包时(被定义为表示消息的一系列数据字节) 允许将数据包分解为一个或多个事务。

 

3.DMA存储传输的过程

  1. 当IO设备需要进行数据传输时,通过DMA控制器向CPU提出DMA传输请求
  2. CPU相应请求,由DMA控制器接管总线进行数据传输,进入DMA操作周期
  3. 确定传送数据的主存单元地址及长度,并能自动修改主存地址计数和传送长度计数。
  4. 规定数据在主存和外设间的传送方向,发出读写等控制信号,执行数据传送操作。
  5. 数据传输完成后,DMA控制器向CPU发出一个中断,来通知处理器DMA传输完成。

520bf247eafa496cbd6f4c1d28223746.png

413c98c358834647aa942e82dc15bb20.png

4.DMA工作模式

直接模式:DMA 直接进行从源地址到目的地址的数据传输。

FIFO模式:FIFO模式下,可以将要传输的多个数据(或字节)累计存储在FIFO缓冲器中,然后在FIFO缓冲器中设置存储阈值,当到达阈值时,FIFO会自动把所有存储的数据一次性的发送到目标地址。

 

5.DMA数据传输方式

单字节传输模式:DMA 请求获得批准后,CPU 让出一个总线周期用于字或字节的传送。结束后, DMA 控制器归还总线控制权,CPU 再重新判断下一个总线周期的总线控制权是 CPU 保留,还是继续响应一次新的 DMA 请求。这种方式称为单字传送方式,又称为周期挪用或周期窃取。

块传输模式:DMA 控制器掌管总线控制权,连续占用若干个总线周期,连续传送多个字节,每传输一个字节,当前字节计数器减1,当前地址寄存器加1或减1,直到所要求的字节数传输完(当前字节计数器减至0),然后释放总线。

请求传输模式:DMA控制器要询问外设,当外设请求信号无效时暂停传输(不释放总线);当请求信号再次有效后,继续进行传输,

级联传输模式:多片DMA控制器级联,构成主从式DMA系统。

 

6.DMA访存方式

        主存(通常为计算机内存条)和DMA控制器之间有一条数据通路(总线,系统总线是指CPU、主存、I\O设备各大部件之间的信息传输线。),因此主存和IO设备之间进行数据交换时不通过CPU。但当IO设备和CPU同时访问主存时,就可能会产生冲突。

        为了有效地使用主存,DMA控制器和CPU有三种方式使用主存:

        (1)停止CPU访问主存

        当需要传输数据时,DMA控制系首先要求CPU控制对总线的控制权,然后开始进行输出传输。在数据传输完毕后,DMA控制器通知CPU可以使用内存,并把总线控制权交还给CPU。

c5afdf8d202442e5804bf40afb7c14e1.png

        在这种DMA传输过程中,CPU基本处于不工作状态或保持状态。

优点:控制简单,适用于数据传输率很高的设备进行成组传输。

缺点:未充分发挥CPU对主存的利用率

        (2)DMA与CPU交替访问主存

        CPU工作时间分为两部分,一部分由DMA访存,一部分由CPU访存

8ca276ca07d44d1a9599e84c044b0cd5.png

        如果CPU的工作周期比内存存储周期长很多,此时采用交替访存的方法可提高效率。

优点:不需要总线使用权的申请、建立和归还过程(分时进行的),效率高

缺点:相应的硬件逻辑更复杂

        (3)周期挪用(周期窃取)

        当没有DMA请求时,CPU按程序要求访问内存(不冲突);

        当有DMA请求,若此时CPU正在访存(冲突),则CPU访存结束让出总线;

        当CPU与DMA同时请求访存,则IO访存优先。

77c972662e7b4f51be12b13bfa211f96.png

        周期挪用方法适用于I/O设备读写周期大于内存存储周期的情况。

优点:既实现了IO传输,又较好的发挥了内存和CPU的效率,是一种广泛采用的方法

缺点:I/O设备每一次周期挪用都有申请、建立、归还总线控制权的过程,所以传送一个字对内存来说要占用一个周期,但对DMA控制器来说一般要2-5个内存周期

 

 

这篇关于DMA原理、传输过程及传输方式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/983437

相关文章

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

作业提交过程之HDFSMapReduce

作业提交全过程详解 (1)作业提交 第1步:Client调用job.waitForCompletion方法,向整个集群提交MapReduce作业。 第2步:Client向RM申请一个作业id。 第3步:RM给Client返回该job资源的提交路径和作业id。 第4步:Client提交jar包、切片信息和配置文件到指定的资源提交路径。 第5步:Client提交完资源后,向RM申请运行MrAp

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

hdu4407(容斥原理)

题意:给一串数字1,2,......n,两个操作:1、修改第k个数字,2、查询区间[l,r]中与n互质的数之和。 解题思路:咱一看,像线段树,但是如果用线段树做,那么每个区间一定要记录所有的素因子,这样会超内存。然后我就做不来了。后来看了题解,原来是用容斥原理来做的。还记得这道题目吗?求区间[1,r]中与p互质的数的个数,如果不会的话就先去做那题吧。现在这题是求区间[l,r]中与n互质的数的和

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

hdu4407容斥原理

题意: 有一个元素为 1~n 的数列{An},有2种操作(1000次): 1、求某段区间 [a,b] 中与 p 互质的数的和。 2、将数列中某个位置元素的值改变。 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.Inpu

hdu4059容斥原理

求1-n中与n互质的数的4次方之和 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWrit

Solr 使用Facet分组过程中与分词的矛盾解决办法

对于一般查询而言  ,  分词和存储都是必要的  .  比如  CPU  类型  ”Intel  酷睿  2  双核  P7570”,  拆分成  ”Intel”,”  酷睿  ”,”P7570”  这样一些关键字并分别索引  ,  可能提供更好的搜索体验  .  但是如果将  CPU  作为 Facet  字段  ,  最好不进行分词  .  这样就造成了矛盾  ,  解决方法

寻迹模块TCRT5000的应用原理和功能实现(基于STM32)

目录 概述 1 认识TCRT5000 1.1 模块介绍 1.2 电气特性 2 系统应用 2.1 系统架构 2.2 STM32Cube创建工程 3 功能实现 3.1 代码实现 3.2 源代码文件 4 功能测试 4.1 检测黑线状态 4.2 未检测黑线状态 概述 本文主要介绍TCRT5000模块的使用原理,包括该模块的硬件实现方式,电路实现原理,还使用STM32类

Python:豆瓣电影商业数据分析-爬取全数据【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】

**爬取豆瓣电影信息,分析近年电影行业的发展情况** 本文是完整的数据分析展现,代码有完整版,包含豆瓣电影爬取的具体方式【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】   最近MBA在学习《商业数据分析》,大实训作业给了数据要进行数据分析,所以先拿豆瓣电影练练手,网络上爬取豆瓣电影TOP250较多,但对于豆瓣电影全数据的爬取教程很少,所以我自己做一版。 目