【SoC基础】DMA的工作原理

news2025/5/22 9:00:29

📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨
📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】
📢:文章若有幸对你有帮助,可点赞 👍 收藏 ⭐不迷路🙉
📢:内容若有错误,敬请留言 📝指正!原创文,转载请注明出处

文章目录

  • DMA的诞生背景
  • DMA最早是哪家公司发明的?
  • DMA工作过程


DMA的诞生背景

DMA(Direct Memory Access,直接内存访问)的概念和技术是在计算机发展的早期阶段产生的。它的发明可以追溯到上世纪70年代。
在早期的计算机系统中,数据的传输通常是通过CPU介入进行的。当外部设备(如硬盘、网络接口等)需要将数据传输到内存或从内存读取数据时,CPU需要花费大量的时间和资源来处理这些操作。这导致了系统性能的瓶颈,尤其是对于需要高速数据传输的应用。
为了解决这个问题,研究人员开始尝试设计一种机制,使外部设备能够直接和内存进行数据传输,而不需要CPU的干预。这就是DMA技术的核心思想。
🙉 IBM是最早引入DMA的计算机制造商之一。1970年,IBM发布了IBM System/370系列计算机,其中一些机型引入了DMA技术,实现了高速数据传输。随着时间的推移,DMA技术逐渐在其他计算机系统中得到广泛采用。
🙉DMA的发明和发展使得数据传输可以在CPU的控制下进行,从而显著提高了系统的性能和效率。它为高速数据传输提供了重要的基础,使得计算机能够更好地处理需要大量数据处理的任务。在今天的计算机系统中,DMA技术仍然扮演着重要的角色。

在这里插入图片描述
在这里插入图片描述

DMA最早是哪家公司发明的?

DMA(Direct Memory Access,直接内存访问)的概念和技术最早由英特尔(Intel)公司在上世纪70年代初发明和推广。
在1970年代初,英特尔开发了一系列微处理器,其中包括8080和8086等型号。随着计算机系统的发展,数据传输的效率成为一个重要问题。为了解决这个问题,英特尔的工程师们引入了DMA技术,以实现外设设备和内存之间的直接数据传输,减轻了CPU的负担。
1975年,英特尔推出了一款名为8257的芯片,即DMA Controller(DMA控制器),用于实现DMA功能。这是英特尔在商业市场上首次推出的DMA解决方案。随后,英特尔继续在后续的处理器和芯片组中加入了对DMA技术的支持,使其成为计算机系统中的标准功能。
英特尔的DMA技术对于计算机系统的发展具有重要意义,它提高了数据传输效率,降低了CPU的负担,使系统能够更好地处理需要高速数据传输的任务。到今天,DMA技术仍然是现代计算机体系结构的重要组成部分,并被广泛应用于各种计算设备和领域。

DMA工作过程

DMA(Direct Memory Access,直接内存访问)是一种数据传输技术,其工作过程如下:
1. 配置DMA:首先,CPU通过访问DMA控制器的配置寄存器来设置DMA传输的相关参数,包括传输方向(读取或写入)、数据长度、源设备地址和目标内存地址等。
2. 外设设备请求:当外设设备需要进行数据传输时,它发送一个DMA请求信号给DMA控制器。DMA请求信号可以是硬件触发的,例如外设完成一次数据读取或写入操作后触发;也可以通过软件控制,通过编程触发DMA请求信号。
3. DMA控制权转移:DMA控制器接收到DMA请求信号后,它会获取对总线的控制权,暂时剥夺CPU对总线的访问权限。DMA控制器会代表外设设备和内存进行数据传输,并控制总线的访问。
4. 内存地址传输:DMA控制器通过源设备地址寄存器和目标内存地址寄存器来确定数据传输的起始位置和目标位置。它会使用内存地址来读取或写入数据。
5. 数据传输:DMA控制器根据配置的参数进行数据传输。它可以按字节、字、块等单位进行数据传输。数据可以从外设设备读取到内存,或者从内存写入到外设设备。DMA控制器可以通过主存储器和外设设备之间的直接内存访问来传输数据,而无需CPU的干预。
6. DMA传输完成中断:当DMA传输完成后,DMA控制器可以生成一个中断信号,通知CPU传输已经完成。CPU可以通过处理该中断信号来进行后续操作,例如处理数据或更新状态。
通过使用DMA技术,外设设备能够直接与内存进行数据交换,大大减轻了CPU的负担,并提高了数据传输的速度和效率。DMA在各种应用中被广泛使用,特别适用于高速数据传输、大量数据处理和实时数据流等场景。

在这里插入图片描述

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

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

相关文章

19.删除链表的倒数第N个结点(LeetCode)

想法一 先用tail指针找尾,计算出节点个数,再根据倒数第N个指定删除 想法二 根据进阶的要求,只能遍历一遍链表,那刚刚想法一就做不到 首先,我们要在一遍内找到倒数第N个节点,所以我们设置slow和fast两个指…

02. Python基础数据类型

1、前言 前面我们介绍了认识了Python以及Python的基础环境搭建,今天我们介绍下Python的一些基础语法。 2、Python基础 2.1、输入输出 2.1.1、输出 print() 用于输出指定的文字,括号中的为输出的字符串。print()也可以同时接收多个字符串,…

ESP32网络开发实例-将数据保存到InfluxDB时序数据库

将数据保存到InfluxDB时序数据库 文章目录 将数据保存到InfluxDB时序数据库1、InfluxDB介绍与安装3、软件准备4、硬件准备5、代码实现6、InfluxDB数据可视化在本文中,将介绍 InfluxDB 以及如何将其与 ESP32 开发板一起使用。 我们将向展示如何创建数据库桶并将 ESP32 数据发送…

Jupyter notebook 无法链接内核、运行代码

问题来源 今天想在 vscode 上使用 Jupyter notebook 跑 Python 代码,但无法使用,提示要升级内核。 Running cells with base requires the ipykernel package to be installed or requires an update. 其实这个问题存在好一段时间了,不过之前…

【教3妹学编程-算法题】Range 模块

3妹:哈哈哈哈哈哈哈哈 2哥 : 3妹看什么呢,笑的这么开森 3妹:2哥你快来看啊,成都欢乐谷的NPC模仿“唐僧”, 太搞笑了。 2哥 : 哦这个我也看到了,真的是唯妙唯肖,不能说像,只能说一模一…

webpack提升构建速度

目录 配置优化减少 resolve 的解析把 loader 应用的文件范围缩小减少 plugin 的消耗选择合适的 devtool 使用工具thread-loaderDLLPlugin 流程优化拆分构建步骤拆分项目代码 版本更新总结 前端项目随着时间推移和业务发展,页面可能会越来越多,或者功能和…

MYSQL索引+常见的锁

一)联合索引: 1)定义:是给一张表上面的多个列增加索引,也就是说给表上面的多个列增加索引,供快速查询使用,当两个列的组合是唯一值时,联合索引是个不错的选择 联合索引和单个索引对比来讲,联合索引的所有索引项都会出现…

左值右值笔记

左值右值 左值 左值是表示数据的表达式(如变量名或解引用的指针) 特点:可以获取地址,可以对他赋值。 位置:左值可以出现在赋值符号左边,也可以出现在赋值符号右边 右值 右值有:字面常量, 表达式返回值 …

用excel计算行列式的值

例如,我们要计算下面这个3*3矩阵的行列式的值: 127348569 鼠标点到其它空白的地方,用来存放计算后的结果: 插入-》函数: 选择MDETERM函数,这个就是计算行列式的函数: 点击“继续”&#xff1a…

函数极限求解方法归纳

1、连续函数直接代入值(加减不可以部分代入值) 例题1 配凑构造等价无穷小 等价无穷小 注意:不要在加减中部分使用等价无穷小,可以利用拆极限的方式求,拆出来的每一部分都要有极限,如果有一部分没有极限就是…

用excel计算矩阵的乘积

例如,我们要计算两个矩阵的乘积, 第一个矩阵是2*2的: 1234 第2个矩阵是2*3的: 5697810 在excel中鼠标点到其它空白的地方,用来存放矩阵相乘的结果: 选择插入-》函数: 选中MMULT,…

企业级信息化系统 ERP、OA、CRM、EAM、WMS、MES、PM

微服务架构,前端采用微应用架构,可做到不同服务使用不同数据库独立运行。全平台采用基于模型驱动的设计模式,并在前后端留有大量的代码植入入口,方便开发者对平台进行改造扩充。企业信息中心开发ERP、OA、CRM、EAM、WMS、MES、PM等…

PHP生成pdf格式准考证带照片完整示范

PDF效果图 PHP生成pdf格式准考证带照片完整示范以某省公务员考试下载的准考证模板为模板参考,故很有参考意义。 环境支持:linux PHP(5.5-7.3)环境,推荐宝塔环境。 基于fpdf.php插件开发,现有模板适合准考证生成并用于查询下载。 现有排版简单:替换data文…

MATLAB中Arrow 属性说明

目录 颜色和样式 位置 Arrow 属性是箭头的外观和行为。 Arrow 属性控制 Arrow 对象的外观和行为。通过更改属性值,可以修改箭头的特定方面。使用圆点表示法查询和设置属性。 ar annotation("arrow"); c ar.Color; ar.Color "red"; 颜色和…

LeetCode(7)买卖股票的最佳时机【数组/字符串】【简单】

目录 1.题目2.答案3.提交结果截图 链接: 121. 买卖股票的最佳时机 1.题目 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票…

PHP开源自动化平台CRUD代码生成器

生成CRUD(创建、读取、更新、删除)代码的实现方式有很多种, 一、实现方式 1. 定义数据模型:首先需要定义数据模型,包括表结构、字段以及数据类型等。 2. 自动生成数据库表:根据数据模型,使用数…

Java编程--单例模式(饿汉模式/懒汉模式)/阻塞队列

前言 逆水行舟,不进则退!!! 目录 单例模式 饿汉模式: 懒汉模式: 什么是阻塞队列 什么是高内聚 低耦合 阻塞队列的实现 单例模式 单例模式(Singleton Pattern)是一种常见…

vue,react虚拟dom

Virtual DOM 前言 在传统的Web开发中,直接操作真实的DOM通常是一个昂贵且低效的操作。为了解决这个问题,Virtual DOM(虚拟DOM)被引入为一个中间层,允许开发者在内存中进行操作,从而避免频繁且不必要的真实D…

【LeetCode刷题-二分查找】--69.x的平方根

69.x的平方根 class Solution {public int mySqrt(int x) {int l 0,r x ,ans -1;while(l < r){int mid (r - l)/2 l;if((long)mid * mid <x){ans mid;l mid 1;}else{r mid - 1;}}return ans;} }

(SpringBoot)第五章:SpringBoot创建和使用

文章目录 一&#xff1a;Spring和SpringBoot&#xff08;1&#xff09;Spring已解决和未解决的问题&#xff08;2&#xff09;SpringBoot 二&#xff1a;Spring项目的创建&#xff08;1&#xff09;IDEA创建&#xff08;2&#xff09;网页端创建 三&#xff1a;项目目录介绍及运…