【SoC基础】DMA的工作原理

📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨
📢:不妨浏览一下我的博客主页【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.hqwc.cn/news/169017.html

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

相关文章

HTML跳转锚点

跳转锚点适用于本页面和其他页面的任意标签的跳转以及JavaScript的运行 使用方法即给标签加上独一无二的id属性&#xff0c;再使用a标签跳转 如果是其他页面的标签只需加上其他页面的路径&#xff0c;eg.href"其他页面的路径#zp1" id属性的最好不要使用数字开头 <…

体验前所未有的显示器管理体验:BetterDisplay Pro Mac

在现代的数字化时代&#xff0c;显示器是我们日常生活和工作中不可或缺的一部分。从笔记本电脑到台式机&#xff0c;从平板电脑到手机&#xff0c;几乎所有的电子设备都配备了显示器。然而&#xff0c;对于专业人士和从事设计行业的人来说&#xff0c;仅仅依靠系统自带的显示器…

SQL 聚合函数

前言 SQL中的聚合函数是对一组值执行计算&#xff0c;并返回单个值的函数。 常用的聚合函数有&#xff1a; 函数作用AVG&#xff08;&#xff09;求平均值MAX&#xff08;&#xff09;求最大值MIN&#xff08;&#xff09;求最小值SUM&#xff08;&#xff09;求和COUNT&…

MATLAB中plot函数用法

目录 语法 说明 向量和矩阵数据 表数据 其他选项 示例 创建线图 绘制多个线条 根据矩阵创建线图 指定线型 指定线型、颜色和标记 在特定的数据点显示标记 指定线宽、标记大小和标记颜色 添加标题和轴标签 绘制持续时间并指定刻度格式 基于表绘制坐标 在一个轴…

百度智能云正式上线Python SDK版本并全面开源!

文章目录 1. SDK的优势2. 千帆SDK&#xff1a;快速落地LLM应用3. 如何快速上手千帆SDK3.1 SDK快速启动3.2 SDK进阶指引3.3 通过Langchain接入千帆SDK 4. 开源社区 百度智能云千帆大模型平台再次升级&#xff01;在原有API基础上&#xff0c;百度智能云正式上线Python SDK&#…

Dubbo从入门到上天系列第五篇:Dubbo3与JDK17不兼容问题展示

文章目录 一&#xff1a;JDK 与 Dubbo版本对应问题说明 1&#xff1a;问题1 2&#xff1a;问题2 二&#xff1a;Spring与JDK版本对应关系 1&#xff1a;对应关系详图 2&#xff1a;JDK与Major对应关系图 大神链接&#xff1a;作者有幸结识技术大神孙哥为好友&#xff0c…

【算法】牛的旅行(图的直径,floyd算法求最短路)

题目 农民John的农场里有很多牧区&#xff0c;有的路径连接一些特定的牧区。 一片所有连通的牧区称为一个牧场。 但是就目前而言&#xff0c;你能看到至少有两个牧区不连通。 现在&#xff0c;John想在农场里添加一条路径&#xff08;注意&#xff0c;恰好一条&#xff09;。 一…

Git 进阶使用

一. Git图形化操作 1.1.什么是图形化管理工具 图形化管理工具是一种通过可视化界面来操作计算机系统或应用程序的软件工具。在软件开发中&#xff0c;它通常用于管理和操作版本控制系统&#xff08;如Git、SVN等&#xff09;以及代码开发环境&#xff08;如IDE&#xff09;。与…

【已解决】ModuleNotFoundError: No module named ‘sklearn‘

问题描述 Traceback (most recent call last): File "/home/visionx/nickle/temp/SimCLR/linear_evaluation.py", line 210, in <module> from sklearn.manifold import TSNE ModuleNotFoundError: No module named sklearn 解决办法 pip install numpy…

GEE:计算有效像素占比(统计有效像素数量、像素总数)

作者:CSDN @ _养乐多_ 在GEE中进行遥感数据处理的时候,经常会由于去云,导致影像出现空洞,只有部分像素可用,或者在进行特殊处理时,只对有效像素进行处理,但是我们不知道有效像素数量和占比,无法对结果做出准确的分析。这个时候就需要统计有效像素数量占比。 本文记录…

原型模式(创建型)

一、前言 原型模式是一种创建型设计模式&#xff0c;它允许在运行时通过克隆现有对象来创建新对象&#xff0c;而不是通过常规的构造函数创建。在原型模式中&#xff0c;一个原型对象可以克隆自身来创建新的对象&#xff0c;这个过程可以通过深度克隆或浅克隆来实现。简单说原型…

【PyQt】(自制类)处理鼠标点击逻辑

写了个自认为还算不错的类&#xff0c;用于简化mousePressEvent、mouseMoveEvent和mouseReleaseEvent中的鼠标信息。 功能有以下几点&#xff1a; 鼠标当前状态&#xff0c;包括鼠标左/中/右键和单击/双击/抬起鼠标防抖(仅超出一定程度时才判断鼠标发生了移动)&#xff0c;灵…