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

news2024/11/15 17:47:38

快速了解直接内存访问 (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设备和外设直接与内存通信

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

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

相关文章

h5微传单制作教程:快速轻松制作

在当今社交媒体充斥的时代,微传单作为一种新型的宣传推广方式,成为了企业和个人在传播信息时的重要工具。h5微传单相比传统的纸质传单更加灵活多样,并且能够通过手机、平板等设备随时随地进行浏览和分享,具有很高的传播效果。下面…

20个经典巧妙电路合集

1、防反接保护(二极管) 在实际电子设计中,防反接保护电路非常重要,不要觉得自己肯定不会接错,实际上无论多么小心,还是会犯错误...... 最简单的就是利用二极管了,利用二极管的单向导电性&#…

荔枝集团:如何提升项目管理效能,让需求交付快进50%

导语: 随着市场竞争日益激烈,企业面临的压力越来越大,需要不断优化自身的效率和质量,以更好地应对市场变化和竞争压力。因此,效能改进已成为企业实现长期发展的关键要素。 研发浓度作为一种能够准确反映研发效率的指…

ubuntu上ffmpeg使用framebuffer显示video

这个主题是想验证使用fbdev(Linux framebuffer device),将video直接显示到Linux framebuffer上,在FFmpeg中对应的FFOutputFormat 就是ff_fbdev_muxer。 const FFOutputFormat ff_fbdev_muxer {.p.name "fbdev",.p.long_…

大数据技术之Hadoop:HDFS存储原理篇(五)

目录 一、原理介绍 1.1 Block块 1.2 副本机制 二、fsck命令 2.1 设置默认副本数量 2.2 临时设置文件副本大小 2.3 fsck命令检查文件的副本数 2.4 block块大小的配置 三、NameNode元数据 3.1 NameNode作用 3.2 edits文件 3.3 FSImage文件 3.4 元素据合并控制参数 …

你知道聊天机器人在医疗保健行业发挥了什么作用吗?

在医疗保健行业,时间限制、数据泄露、误诊、治疗延误和人为错误等各种挑战构成了重大问题。然而,人工智能(AI)的快速发展已成为解决这些问题的解决方案。一个特别值得注意的应用是医疗保健中的聊天机器人,它提供了一系…

Linux---应用层获取usb设备描述信息通过endpoint地址数据通讯

文章目录 🌈应用层获取USB设备信息总体思路🌈应用层代码实例🌈实例测试🌈应用层通过endpoint进行数据读写 🌈应用层获取USB设备信息总体思路 应用层可以打开USB设备的节点,读取包括USB设备的配置&#xff…

核心实验12合集_vlan高级配置:基于子网划分vlan超级vlan相同vlan 端口隔离 _ENSP

项目场景一: 核心实验12合集-1_vlan高级配置_ENSP 基于子网划分vlan 1 当检测ip在192.168.10.0/24时候,PC接入交换机时,将其划为vlan10, 且可以和vlan 10 的服务器通信。 2 当检测ip在192.168.20.0/24时候,…

配电室数字电力智慧平台

配电室数字电力智慧平台依托电易云-智慧电力物联网,采用先进的人工智能、物联网、大数据技术,对配电室进行全面监控和管理,实现电力运行的自动化和智能化,有效降低运维成本,提高电力运行安全和可靠性。 该平台可以实时…

CTFHUB ICS(2)

1.modbus 还是通过strings输出文件 发现这次只找到了flag的字符666c61677b就是flag的16进制 通过strings和grep配合输出为10个数量的数据 strings 6.pcap | grep -E "^.{10}$" grep 搜索文本的工具 -E 使用扩展正则表达式 ^ 表示行的开始 . 匹配任意单…

内网渗透之凭据收集的各种方式

凭据收集是什么? 凭据收集是获取用户和系统凭据访问权限的术语。 这是一种查找或窃取存储的凭据的技术,包括网络嗅探,攻击者可以在网络嗅探中捕获传输的凭据。 凭证可以有多种不同的形式,例如: 帐户详细信息&#xf…

用上这个建筑管理技巧,我才知道有多省事!

在过去的几十年里,建筑和施工行业取得了巨大的进步。然而,这个行业也一直在不断面临挑战,如高成本、时间压力、安全隐患和资源浪费。 随着科技的飞速发展,我们进入了一个新的时代,一个改变着建筑和施工方式的时代 - 智…

TSINGSEE青犀视频AI分析/边缘计算/AI算法·安全帽检测功能——多场景高效运用

安全帽检测算法主要是对人员安全和事故预防的需要。在许多工业领域和施工现场,佩戴安全帽是一种重要的安全措施,可以减少头部受伤的风险。然而,由于工地人员数量众多且繁忙,人工监控难以有效覆盖所有区域,因此旭帆科技…

vue-别名路径联想提示的配置

在根路径下,新建 jsconfig.json 文件,即可 在输入 自动联想到src目录。 代码如下: // 别名路径联想提示:输入自动联想 {"compilerOptions":{"baseUrl":"./","paths": {"/*":[…

算法训练day43|动态规划 part05:0-1背包 (LeetCode 1049. 最后一块石头的重量 II、494. 目标和、474.一和零)

文章目录 1049. 最后一块石头的重量 II思路分析代码实现 494. 目标和思路分析动规方法代码实现总结思考 474.一和零思路分析代码实现思考总结 var code "57a5e730-4e5e-43ad-b567-720d69f0371a"1049. 最后一块石头的重量 II 题目链接🔥🔥 有…

泽众TestOne自动化测试平台,挡板测试(Mock测试)上线了!!

什么是挡板测试(Mock测试)? 主要应对与某些不容易构造或者不容易获取的对象以及暂时没有开发完成的对象,设计一个虚拟的对象,配置测试需求的业务数据,完成测试业务。 TestOne是泽众软件自主研发的一体化测…

静态函数(static)-> static 与 const

一.静态函数 静态函数(Static Function)是指在C中使用static关键字声明的函数。它们与普通成员函数和全局函数不同,具有以下特点: 作用域限制:静态函数在类的作用域内,但它们不依赖于类的实例,…

GIF动态表情如何制作?教你一招超简单的gif制作方法

动态gif表情包是如何制作的?gif格式动图作为网络上流行的一种图片格式,可以将多张静态图片变成一张gif动图,能够以生动有趣的方式传递信息。而且制作这种gif动图的方法也非常的简单,只需要使用gif在线制作(https://www…

不就是G2O嘛

从零开始一起学习SLAM | 理解图优化,一步步带你看懂g2o代码 SLAM的后端一般分为两种处理方法,一种是以扩展卡尔曼滤波(EKF)为代表的滤波方法,一种是以图优化为代表的非线性优化方法。不过,目前SLAM研究的主…

Oracle数据库开发者工具

和开发者相关的数据库特性,功能与工具列举如下,但不限于以下。因为Oracle数据库中的许多功能其实都间接的和开发者发生关系,如Oracle高级安全选件中的透明数据加密,数据编辑。Oracle Spatial and Graph(地理空间与图&a…