当前位置: 首页 > news >正文

[杂谈]-快速了解直接内存访问 (DMA)

快速了解直接内存访问 (DMA)

文章目录

  • 快速了解直接内存访问 (DMA)
    • 1、使用 DMA 需要什么?
    • 2、DMA介绍
    • 3、DMA 中的数据传输如何进行?
    • 4、DMA接口
    • 5、DMAC 控制器寄存器
    • 6、DMA 控制器编程模式
      • 6.1 突发模式(Burst Mode)
      • 6.2 循环窃取模式(Cycle Stealing Mode)
      • 6.3 透明模式(Transparent Mode)
    • 7、DMA 总线仲裁的概念
      • 7.1 总线仲裁
      • 7.2 集中仲裁
      • 7.3 分布式仲裁
    • 8、DMA的优点

在本文中,我们将介绍 DMA,它代表直接内存访问(Direct Memory Access,DMA)。 首先,我们将了解为什么需要使用 DMA 以及在现代计算机和微控制器中使用 DMA 的优点是什么。

1、使用 DMA 需要什么?

计算机的处理器执行许多功能,包括外部设备和主存储器之间的数据传输。 从初始化数据传输到将其存储在主存储器中的目的地,所有处理均由CPU控制。 当 CPU 启动时,处理器可能不知道外部 I/O 设备已准备好进行数据传输,这可能会导致数据丢失。

另一个问题是微处理器与外部 I/O 外设的同步。 在这种情况下,设备只要准备好就会向处理器发送中断,但处理器需要一些时间将其自身从主程序切换到子例程。 但如果异步 I/O 设备速度很快并且生成大量数据,它就无法等待延迟,这也会再次导致数据丢失。 因此,为了解决这个问题并保持系统的效率,引入了一种称为DMA的方法,该方法允许外围设备以最少的处理器干预直接访问存储器。 这是在称为 DMAC 的控制器的帮助下实现的,该控制器充当总线的主控器来控制特定时间的通信。

2、DMA介绍

直接内存地址通常称为 DMA,是一种数据传输技术,其中 I/O 设备直接与内存进行通信,而无需通过中央处理单元。 在该硬件机制中,DMA控制器代替CPU单元并负责访问输入输出设备和存储器以传输数据。 DMA 控制器是专用硬件,无需 CPU 参与即可直接执行读写操作,并节省了涉及操作码获取、解码、递增和源/目标测试地址的时间,而这些操作本来应该由中央处理单元完成。 这导致外设和存储器之间的数据传输速率较高,并且可以快速传输大数据块。

在这里插入图片描述

3、DMA 中的数据传输如何进行?

数据传输由起始地址、块中要传输的字数以及传输数据的方向发起。 DMA 控制器收到信息后立即执行请求的功能。 当整个数据块传输完后,控制器会发出中断信号,通知微处理器所请求的操作已完成。

对于包括 DMA 的 I/O 操作,请求数据传输的程序被操作系统置于挂起状态,并开始执行另一个程序。 完成后,DMA 会发出一个中断来通知处理器。 结果,操作系统将程序从阻塞状态释放回可运行状态,以便CPU可以返回到请求的程序并继续进一步执行。 在 DMA 传输期间,DMA 控制器是主控制器,必须与相关外设同步。

4、DMA接口

DMA 是外部设备和系统总线之间的协议。 它由 DMAC、磁盘控制器和内存组成。 DMAC 连接到快速系统总线,这是唯一的传输媒介。 磁盘控制器对磁盘进行授权并具有 DMA 潜力,并且可以执行像 DMAC 一样的独立功能。 它们也被称为可以根据其编程执行 DMA 数据传输的通道。

在这里插入图片描述

5、DMAC 控制器寄存器

它具有用于存储地址、字数和控制信号的寄存器。 处理器访问控制器寄存器以启动数据传输操作。 有两个寄存器,即地址寄存器和字计数寄存器,分别用于存储要存储数据的内存地址和字计数,以及一个控制寄存器,用于保存状态和控制标志。 除此之外,还有一个读/写位决定数据通信的方向。

当程序指示读取时,即R/W为1时,数据从存储器传输到I/O设备,当它为0时,将数据从外设写入主存储器。 当数据块完全传输完毕后,DMA 就准备好接受进一步的命令。 这通过将 Done 标志设置为 1 来表示。之后 DMA 会升高 IE 标志,为处理器启用中断,并且当 DMA 请求中断时,IRQ 位也会变为 1。

在这里插入图片描述

6、DMA 控制器编程模式

通常,总线上连接有多个通用外部设备。 它们发出请求并且始终优先于 CPU 请求。 此外,在这些 DMA 外设中,速度较快的外设具有最高优先级。 因此,DMAC 的编程方式和满足这种情况的方式非常重要。 它决定了可以传输数据的次数、可以访问的内存分配数量以及 DMA 控制器使用的传输模式类型。 在此基础上,DMA控制器具有突发模式、周期窃取模式和透明模式三种编程模式。

6.1 突发模式(Burst Mode)

在此模式下,DMA从CPU获取系统总线来执行数据传输。 这是最快的模式,因为数据是连续通信的。 DMAC 的优先级高于 CPU,可以不间断地执行操作。 处理器必须等待 DMAC 完成其工作。 例如,如果有网络协议,则从主存储器中读取数据块并暂时存储在内部缓冲区中。 然后通过这种模式以适合内存和系统总线的速度在网络上传输。

6.2 循环窃取模式(Cycle Stealing Mode)

在循环窃取模式下,微处理器控制计算机总线,但 DMAC 倾向于窃取处理器的执行周期。 在此模式下,DMAC 请求处理器进行一个周期的总线控制并停止 CPU。 它传输一个字节,然后将控制权交还给处理器。 这样CPU就不需要长时间等待。

6.3 透明模式(Transparent Mode)

仅当处理器不执行总线相关功能时DMA控制器才工作并具有总线控制的模式称为透明模式。 这意味着DMA只有在系统总线空闲时才能传输数据,并且不会干扰处理器执行其他指令。 它也称为隐藏模式。 这被认为是一种缓慢但有效的直接内存访问模式。

7、DMA 总线仲裁的概念

我们知道只有一个主设备可以在特定时间戳获取总线,否则可能会导致问题。 但处理器和几个DMA设备可能需要同时使用总线来访问主存。 因此,为了解决此争议并组织频繁请求传输数据的 DMA 设备的活动,在计算机总线上执行了一个称为仲裁的过程。

7.1 总线仲裁

在总线仲裁过程中,DMA设备最初控制总线并成为当前的总线主控器。 然后它传输其数据块并最终将其控制权传递给另一个 DMA 设备。 就这样,主宰权就传递了,并选出了新的主宰。 考虑到外设的需求,它们轮流成为主设备并优先访问总线。

总线仲裁有两种配置,即集中仲裁,其中仲裁器决定哪个主机使用总线;分布式仲裁,允许所有外部设备参与并获取计算机总线的下一个主控权以传输其块。

在这里插入图片描述

7.2 集中仲裁

总线仲裁器可以是连接到总线的处理器或专用硬件。 通常,微处理器是总线主控,除非仲裁器将主控权授予 DMA 控制器。 每当 DMAC 想要访问总线时,它都会向仲裁器发送请求信号,一旦授予 DMAC 访问权限,它就成为主设备并开始使用总线。 DMAC 通过激活总线请求线来发送请求,总线请求线又激活总线授权信号。 如果多个 DMA 控制器串行连接到一条总线,则总线请求线的信号是它们的请求的逻辑或。

在这里插入图片描述

以同样的方式,授权信号穿过所有连接的 DMAC,直到到达发出第一个请求的控制器。 当接近相关的 DMAC 时,它会阻止总线授权信号的进一步传播并激活总线忙线。 活动的总线忙线指示在该时间点它被占用的其他设备。 现在,这些其他设备将等待总线忙线变为非活动状态,并且下一个首选主设备将获得总线的主控权。

7.3 分布式仲裁

在此配置中,没有中央仲裁器。 所有外设都有平等的权利执行仲裁过程。 为此,所有 DMA 设备都分配有一个 4 位长的标识号。 当这些设备向总线发送请求时,它们发出“开始仲裁”信号,将 ID 号放置到仲裁线上并比较这些位。 通过任意线路生成的ID号决定了当时的主机。 选择具有最高ID号的设备并允许访问总线进行数据传输。

在这里插入图片描述

8、DMA的优点

  • 内存和 I/O 设备之间的快速数据传输
  • CPU和DMA可以同时运行并提供更好的性能
  • 更有效地使用外部中断
  • 更高的数据吞吐量
  • I/O设备和外设直接与内存通信

相关文章:

[杂谈]-快速了解直接内存访问 (DMA)

快速了解直接内存访问 (DMA) 文章目录 快速了解直接内存访问 (DMA)1、使用 DMA 需要什么?2、DMA介绍3、DMA 中的数据传输如何进行?4、DMA接口5、DMAC 控制器寄存器6、DMA 控制器编程模式6.1 突发模式(Burst Mode)6.2 循环窃取模式…...

java八股文面试[设计模式]——23种设计模式

设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结 在GOF编写的设计模式(可复用面向对象软件的基础)一书中说道: 本书涉及的设计模式并不描述新的或未经证实的设计,我们只收录那些在不同系统中…...

mysql(十)mysql主从复制--主库切换

概述 可能为了更迭升级服务器,或者主库出现问题,又或者只是希望重新分配容量,此时需要切换主库。 如果这是计划内的切换,会相对容易点。只需要在从库上使用CHANGE MASTER TO命令,并设置合适的值。大多数的值都是可选…...

vue3项目的src下的各个文件夹介绍

在Vue 3项目中,通常的目录结构如下所示: src/|- assets/ # 存放静态资源文件,如图片、字体等|- components/ # 存放可复用的Vue组件|- views/ # 存放页面级别的Vue组件|- router/ # 存放路由相关的配置文件|- store…...

五、编译预处理

源程序编译预处理命令一律以‘#’开头 5.1宏定义 不带参数的宏定义 # define 宏名 字符串 宏命令之后,出现宏名的地方均用其对应的字符串来替换。 宏替换是一种”机械替换“,宏定义语句后一般不加分号,因为它仅具有替换功能,…...

应用出海,Google 分享如何让数字营销素材再上层楼

数字营销广告要想取得理想的效果,广告素材是最关键的决定因素之一。 事实上米贸搜谷歌推广发现,在广告给品牌带来的销售额增量中,有 47% 都归功于广告素材。在当今自动化时代,广告素材的作用尤其重要:固然机器可以完成…...

酱香咖啡喝了没?用数据分析揭秘瑞幸咖啡的7500万用户增长策略

瑞幸 X 茅台 这波联名赢麻了,不仅狂卖 542 万杯,甚至带动茅台市值飙升200亿。 瑞幸这几年联名搞了不少,又是线条小狗的爱情故事,又是椰树、维密、周大福、足球的,下面老李就从数据分析角度,带大家来看一下…...

Grafana之魔法:揭秘数据可视化的艺术

在数据驱动的时代,如何有效地呈现和理解数据成为了每个组织和个人的核心任务。Grafana作为一个领先的开源数据可视化工具,为我们提供了强大的功能和灵活性。本文将深入探讨Grafana的魔法,以及它如何帮助我们更好地理解数据。 Grafana简介 G…...

c高级day2作业

写一个1.sh脚本,将以下内容放到脚本中: 在家目录下创建目录文件,dir 在dir下创建dir1和dir2 把当前目录下的所有文件拷贝到dir1中, 把当前目录下的所有脚本文件拷贝到dir2中 把dir2打包并压缩为dir2.tar.xz 再把dir2.tar.xz…...

第3章 【MySQL】字符集和比较规则

3.1 字符集和比较规则简介 3.1.1 字符集简介 如何存储字符串?需要建立字符与二进制数据的映射关系。建立这个关系需要: 1.把哪些字符映射成二进制数据? 2.怎么映射? 将一个字符映射成一个二进制数据的过程也叫做 编码 &#…...

2023 年全国大学生数学建模D题目-圈养湖羊的空间利用率

D题目应该是专科题目???不确定了 感觉类似一个细胞分裂问题一样,1,2,4,8, 题目1中规中矩 按照前面说的分配方法,一步一步计算进行 缺口的问题考虑反推回去&#xff0c…...

攻防世界-WEB-ics-05

打开靶机 只有设备维护中心可以点开 点标签得到新的url pageindex 想到文件包含漏洞(URL中出现path、dir、file、pag、page、archive、p、eng、语言文件等相关关键字眼 利用php伪协议查看源码 出现一段base64源码,进行转码得出源码 ?pagephp://filter…...

typedef的四种用法

目录 前言 1)为基本数据类型定义类型名 2)为自定义数据类型(结构体、枚举、共用体)定义别名 3)为数组定义简易的别名 4)为指针定义简洁的名称 前言 在看工程的过程中发现typedef的如下用法&#xff0c…...

Rstudio开不开了怎么办?R is taking longer to start than usual

Rstudio Server 启动时卡死 在使用 linux 服务器版 RstudioServer 的过程中,发现出现了一个问题,导致没有办法正常载入工作页面,网页提示信息是“R is taking longer to start than usual”,直接翻译过来就是“这次启动 R 会比平…...

kubernetes 集群安装加载 br_netfilter 模块

kubernetes 集群安装加载 br_netfilter 模块 Linux 系统默认是禁止数据包转发功能。 加载系统参数: # sysctl -p /etc/sysctl.d/k8s.conf 错误提示: sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-ip6tables: No such file or director…...

CATIA Composer软件安装包分享(附安装教程)

目录 一、软件简介 二、软件下载 一、软件简介 CATIA(Computer-Aided Three-dimensional Interactive Application)是一款由法国达索系统公司开发的三维计算机辅助设计(CAD)软件。它是一种全面的产品开发解决方案,广泛…...

入行测试一年半的心得体会

成为xx一员测试已经有1年半了,一直没有真正坐下来花些时间将自己的思路理清一下。刚好近期公司落地了OKR,给自己制定了OKR之后思路终于开始清晰起来,朦朦胧胧地开始看清了远方的路,麻着胆子分析一下自己,毕竟摸黑走路的…...

Vue的props配置项

简介:Vue中的组件模板是可以复用的,但是模板中的数据是可以改变的。props配置项用于解决组件迁移复用时接受和保存传递给组件的数据的问题。 1.如何给组件传递数据? 答:按照key:value的形式进行传递。 2.如何保存传递给组件的数…...

Python开源项目周排行 2023年第32周

#2023年第32周2023年9月2日1htmx一款在Django技术栈最近比较热门的前端框架。 他的理念是—— 「让网页回归HTML的本质,不再受JS束缚」mx 出现在 2020 年,创建者Carson Gross 说 htmx 来源自他于 2013 年研究的一个项目intercooler.js。2020 年&#xff…...

Python实现猎人猎物优化算法(HPO)优化卷积神经网络回归模型(CNN回归算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 猎人猎物优化搜索算法(Hunter–prey optimizer, HPO)是由Naruei& Keynia于2022年提出的一种最新的…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...

抽象类和接口(全)

一、抽象类 1.概念:如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象,这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法,包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中,⼀个类如果被 abs…...

十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建

【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...

论文阅读:Matting by Generation

今天介绍一篇关于 matting 抠图的文章,抠图也算是计算机视觉里面非常经典的一个任务了。从早期的经典算法到如今的深度学习算法,已经有很多的工作和这个任务相关。这两年 diffusion 模型很火,大家又开始用 diffusion 模型做各种 CV 任务了&am…...

【深尚想】TPS54618CQRTERQ1汽车级同步降压转换器电源芯片全面解析

1. 元器件定义与技术特点 TPS54618CQRTERQ1 是德州仪器(TI)推出的一款 汽车级同步降压转换器(DC-DC开关稳压器),属于高性能电源管理芯片。核心特性包括: 输入电压范围:2.95V–6V,输…...

js 设置3秒后执行

如何在JavaScript中延迟3秒执行操作 在JavaScript中,要设置一个操作在指定延迟后(例如3秒)执行,可以使用 setTimeout 函数。setTimeout 是JavaScript的核心计时器方法,它接受两个参数: 要执行的函数&…...