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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MATLAB 动态图GIF

MATLAB 动态图GIF 前言一、创建动态图(动态曲线、动态曲面)1. 创建动画曲线(MATLAB animatedline函数)2. 创建动画曲面 二. 保存动态图三、完整示例1. 动态曲线( y s i n ( x ) ysin(x) ysin(x))2. 动态曲…

Linux之权限

目录 一、shell运行原理 二、权限 1、对人操作 2、对角色和文件操作 修改权限(改属性): ①ugo- ②二进制数的表示 修改权限(改人): 三、权限的相关问题 1、目录的权限 2、umask 3、粘滞位 一、s…

LeetCode 202 快乐数

题目链接 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 法一:哈希 使用哈希表循环判断每次经过平方和的数,如果为1则直接返回true,若之前存在过但不为1则直接返回false 代码 class Solution { public:// 计算…

基于文本提示的图像目标检测与分割实践

近年来,计算机视觉取得了显着的进步,特别是在图像分割和目标检测任务方面。 最近值得注意的突破之一是分段任意模型(SAM),这是一种多功能深度学习模型,旨在有效地从图像和输入提示中预测对象掩模。 通过利用…

【业务功能篇92】微服务-springcloud-多线程-异步处理-异步编排-CompletableFutrue

三、CompletableFutrue 一个商品详情页 展示SKU的基本信息 0.5s展示SKU的图片信息 0.6s展示SKU的销售信息 1sspu的销售属性 1s展示规格参数 1.5sspu详情信息 1s 1.ComplatableFuture介绍 Future是Java 5添加的类,用来描述一个异步计算的结果。你可以使用 isDone方…

Ansible自动化运维之playbooks剧本

文章目录 一.playbooks介绍1.playbooks简述2.playbooks剧本格式3.playbooks组成部分4.运行playbooks及检测文件配置 二.模块实战实例1.playbooks模块实战实例2.vars模块实战实例3.指定远程主机sudo切换用户4.when模块实战实例5.with_items迭代模块实战实例6.Templates 模块实战…

Delft3D模型教程

详情点击公众号链接:基于Delft3D模型水体流动、污染物对流扩散、质点运移、溢油漂移及地表水环境报告编制教程 Delft3D计算网格构建 Delft3D水动力数值模拟 Delft3D污染物对流扩散数值模拟 一,Delft3D软件及建模原理和步骤 1.1地表水数值模拟常用软件、…

认识SQL sever

目录 一、数据库的概念 1.1数据库的基本概念 1.2对数据库的了解 二、数据库的分类 2.1关系型数据库(RDBMS): 2.2非关系型数据库(NoSQL): 2.3混合数据库: 2.4数据仓库: 2.5嵌…

报错:为什么数组明明有内容但打印的length是0

文章目录 一、问题二、分析三、解决1.将异步改为同步2.设置延迟 一、问题 在日常开发中,for 循环遍历调用接口,并将接口返回的值进行拼接,即push到一个新的数组中,但是在for循环内部是可以拿到这个新的数组,而for循环…

docker笔记9:Docker-compose容器编排

目录 1.是什么? 2. 能干嘛? 3.去哪下? 4.安装步骤 ​编辑 5.卸载步骤 6.Compose核心概念 6.1概念 6.2 Compose常用命令 7.Compose编排微服务 7.1改造升级微服务工程docker_boot 7.2不用Compose 7.2.1 单独的mysql容器实例 7.3 …

自动化测试基础知识详解

前言 有颜色的标注主要是方便记忆,勾选出个人感觉的重点 块引用:大部分是便于理解的话,稍微看看就行,主要是和正常的文字进行区分的 1、什么是自动化测试 自动化测试是软件测试活动中一个重要分支和组成部分,随着软…

C#事件event

事件模型的5个组成部分 事件拥有者(event source)(类对象)(有些书将其称为事件发布者) 事件成员(event)(事件拥有者的成员)(事件成员就是事件本身…

拿下嵌入式软件工程师面试题(day1)

前言 (1)如果你在读大学,不管你本科毕业是读研还是就业,你都可以早点准备嵌入式面试题,本系列教程的面试题均基于C语言。 (2)像嵌入式学得好,且学历不错的本科生和研究生&#xff0c…

mysql8 Found option without preceding group错误

这个错误说起来是真的坑,今晚帮同学在window操作系统上安装mysql8当自定义my.ini文件的时候 就出现一下错误,死活启动不起来 一直报错。当删掉这个my.ini文件的时候却能启动,刚开始以为是my.ini里的配置选项不对,一个一个筛查后依…

抖音小店爆款制造指南:打造抖音爆款商品的八大技巧

抖音小店作为一种电商模式,通过短视频形式展示商品,吸引用户购买。在抖音平台上,打造爆款商品是每个抖音小店主的梦想。以下是四川不若与众整理的一些抖音小店如何打造爆款商品的技巧。 1. 产品选择:选择适合抖音平台的产品非常重…

鲁棒优化入门(6)—Matlab+Yalmip两阶段鲁棒优化通用编程指南(上)

0.引言 上一篇博客介绍了使用Yalmip工具箱求解单阶段鲁棒优化的方法。这篇文章将和大家一起继续研究如何使用Yalmip工具箱求解两阶段鲁棒优化(默认看到这篇博客时已经有一定的基础了,如果没有可以看看我专栏里的其他文章)。关于两阶段鲁棒优化与列与约束生成算法的原…

Window安装虚拟机+给虚拟机安装Linux

一、虚拟机下载 这里使用Virtualbox虚拟机。可以直接从官网下载:Downloads – Oracle VM VirtualBox 点击进行下载,选择window版本的。直接双击,一直下一步 进行安装 PS:安装需要开启CPU虚拟化,一般电脑都已经开启了…

c语言实训心得3篇集合

c语言实训心得体会一: 在这个星期里,我们专业的学生在专业老师的带领下进行了c语言程序实践学习。在这之前,我们已经对c语言这门课程学习了一个学期,对其有了一定的了解,但是也仅仅是停留在了解的范围,对里…

Qt6_贪吃蛇Greedy Snake

贪吃蛇Greedy Snake 1分析 首先这是一个贪吃蛇界面,由一个长方形边框和一只贪吃蛇组成 默认开局时,贪吃蛇身体只有3个小方块,使用画笔画出 1.1如何移动 对于蛇的移动,有2种方法 在一定时间范围内(定时器),未对游戏…

知识大杂烩(uniapp)

首先声明:不敢保证都管用,这是我自己实践得来的。 box-shadow: 这段 CSS 样式代码用于创建一个阴影效果,它是通过 box-shadow 属性来实现的。让我解释一下这段代码的含义: - box-shadow: 这是 CSS 的属性,用于添加阴影…