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

news2024/11/28 22:42:58

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个内存周期

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1668294.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL相关文件的介绍

其中的pid-file/var/run/mysqld/mysqld.pid是用来定义MySQL的进程ID的信息的, 这个ID是操作系统分配给MySQL服务进程的唯一标识,使得系统管理员可以轻松识别和管理该进程。 其中的log-error/var/log/mysqld.log是MySQL的错误日志文件,如果有…

C++string 类的常用方法

string (构造函数) (1) default 构造长度为零字符的空字符串。 (2) copy 构造 str 的副本。 (3) substring 复制从字符位置 pos 开始并跨越 len 字符的 str 部分(如果任一 str 太短或 len 为 string::npos,则复制 str 的末尾…

Ardupilot开源代码之Rover上路 - 后续1

Ardupilot开源代码之Rover上路 - 后续1 1. 源由2. 问题汇总2.1 问题1:飞控选择2.2 问题2:飞控安装位置和固定2.3 问题3:各种插头、插座配套2.4 问题4:分电板缺陷2.5 问题5:电机编码器接线及正反向问题2.6 问题6&#x…

docker-compose集成elk(基于logstash+filebeat)采集java和nginx日志

1.准备compose.yml编排式文件 services: #日志信息同步logstash:container_name: logstashimage: docker.elastic.co/logstash/logstash:7.17.14 #logstash:command: logstash -f /usr/share/logstash/pipeline/logstash.confdepends_on:- elasticsearchrestart: on-failurepo…

车机HMI:驾驶员小命握在UI设计师手,九大法则必须遵循。

本文给大家列举了九大法则,欢迎评论点赞交流。 在车机HMI设计中,为了降低驾驶员的反应时间并增加驾驶安全性,可以遵循以下UI设计法则: 易读性和可识别性 确保界面上的文本和图标清晰易读,避免使用过小、过于复杂或模…

Crossplane 实战:构建统一的云原生控制平面

1 什么是 Crossplane Crossplane 是一个开源的 Kubernetes 扩展,其核心目标是将 Kubernetes 转化为一个通用的控制平面,使其能够管理和编排分布于 Kubernetes 集群内外的各种资源。通过扩展 Kubernetes 的功能,Crossplane 对 Kubernetes 集群…

GoF之代理模式(静态代理+动态代理(JDK动态代理+CGLIB动态代理带有一步一步详细步骤))

1. GoF之代理模式(静态代理动态代理(JDK动态代理CGLIB动态代理带有一步一步详细步骤)) 文章目录 1. GoF之代理模式(静态代理动态代理(JDK动态代理CGLIB动态代理带有一步一步详细步骤))每博一文案2. 代理模式的理解3. 静态代理4. 动…

[AIGC] 跳跃表是如何实现的?原理?

文章目录 什么是跳跃表查找流程:为什么使用跳跃表?跳跃表是怎么实现的? PS:跳跃表是比较常问的一种结构。 什么是跳跃表 Skip Lists: A Probabilistic Alternative to Balanced Trees 跳跃表是一种可以用来代替平衡树的数据结构。跳跃表使用概率平衡…

类和对象一(从封装开始讲述)

目录: 一.封装 二.封装扩展之包,自定义包 三.访问限定符 四.static成员 一.封装:封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行 交互。面向对象…

插件:Best HTTP

一、简介 WebSocket WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。…

MATLAB 多项式

MATLAB 多项式 MATLAB将多项式表示为行向量,其中包含按幂次降序排列的系数。例如,方程P(x) X 4 7 3 - 5 9可以表示为 p [1 7 0 -5 9]; 求值多项式 polyval函数用于求一个特定值的多项式。例如,在 x 4 时,计算我们之前的多项式…

图论专题训练

leecode 547 并查集 class Solution { public:int findCircleNum(vector<vector<int>>& isConnected) {ini();int len isConnected.size();for(int i0;i<len;i){for(int j0;j<len;j)if(isConnected[i][j]){unio(i,j);}}int ans 0;for(int i0;i<len;…

【一键录音,轻松转换:用Python打造个性化音频记录工具】

在数字化时代,音频记录已成为日常学习、工作和娱乐不可或缺的一部分。想象一下,只需简单按下几个键,即可随时随地捕捉灵感,记录会议要点,或是珍藏孩子的童言稚语。本文将引领您步入Python编程的奇妙世界,展示如何借助几个强大的库,构建一个既简单又实用的音频录制及转换…

58. 【Android教程】音频录制:MediaRecord

在第 57 节我们使用 MediaPlayer 实现了一个 mp3 播放器&#xff0c;除了播放 Android 还提供了 MediaRecorder 用于录音。Android 设备基本都会有一个麦克风&#xff0c;通过 MediaRecorder 可以打开麦克风进行语音采集&#xff0c;这一节我们就来学习如何在 Android 系统上实…

Python3 笔记:二进制的转换

十进制是逢十进一&#xff0c;二进制就是逢二进一。 十进制里最大的数字是9&#xff0c;二进制里最大的数字是1。 11010010001000010000010000001000000010^0110^11010^210010^3100010^41000010^510000010^6100000010^7100000002^012^122^242^382^4162^5322^6642^7128 1、十进…

Linux中创建共享文件夹

前言 从0开始记录我的学习历程&#xff0c;我会尽我所能&#xff0c;写出最最大白话的文章&#xff0c;希望能够帮到你&#xff0c;谢谢。 提示&#xff1a;文章作者为初学者&#xff0c;有问题请评论指正&#xff0c;感谢。 当我们再用虚拟机的Linux的时候经常会遇到Windows…

增强客户黏性:服装实体店扫码连锁收银软件提供多样的会员营销策略

随着消费者对购物体验的需求不断提升&#xff0c;服装实体店面临着更大的挑战和机遇。为了增强客户黏性&#xff0c;提升销售业绩&#xff0c;越来越多的服装实体店开始引入扫码连锁收银软件&#xff0c;并提供多样化的会员营销策略。这一举措不仅为店铺提供了更加智能化的经营…

python选修课期末考试复习

目录 记住输出小数的格式文件条件判断随想循环小星星计算金额猜数字折纸 函数找最大值 基础知识总结 记住输出小数的格式 输出a&#xff0c;保留两位小数 %.2f%a打开文件有点儿难&#xff0c;多记几遍格式吧 文件的格式后面有冒号&#xff0c;谨慎一点&#xff0c;都用双引号…

springfox.documentation.spi.DocumentationType没有OAS_30(从swagger2转到swagger3出现的问题)

直接开讲&#xff1a; 查看源码根本没有OAS_30的类型选择 右键package的springfox找到maven下载的包&#xff0c;打开到资源管理器 可以看到项目优先使用2版本的jar包&#xff0c;但是OAS_30只在3版本中才有&#xff0c;意思就是让项目优先使用以下图片中的3.0.0jar包 解决办法…

免费PDF批量加密工具

最近在找PDF批量加密的软件来着&#xff0c;发现很多都是需要收费的&#xff0c;当然如果平时工作需要用的比较多&#xff0c;支持一下还是ok的&#xff0c;但是多数人还是偶尔用一下所以没有必要买。 工作用的话&#xff0c;一般企业文件、个人隐私资料、重要合同...所有重要文…