DMA(Direct Memory Access)简介
什么是DMA(Direct Memory Access)
- DMA绕过CPU,在内存和外设之间开辟了一条 “隧道” ,直接控制内存与外设之间的操作,并完全由硬件控制。
- 这样数据传送不经过cpu,不需要保护、恢复CPU现场等一系列操作,减少开销。
如何运行
- 向cpu索要系统总线:接受外设发出的DMA请求,并向CPU发出总线请求。CPU响应总线请求,发出总线响应信号,接管总线控制权,进入DMA操作周期。
- 在系统总线上,进行内存和外设之间的数据传输:确定传送数据的主存单元地址及长度,并能自动修改主存地址计数和传送长度计数。规定数据在主存和外设间的传送方向,发出读写等控制信号,执行数据传送操作。
- 归还总线:向CPU发送DMA操作的结束。
如何传输
- 主存和DMA控制器之间有一条数据通路,当二者同时访问数据通路时,可能会发生冲突,有以下解决方法:
停止CPU访问主存(CPU基本不工作,DMA说了算)
- 简析:DMA要求使用总线,CPU就让给DMA使用。
- DMA接口向CPU发送一个信号,要求CPU放弃相关线路的控制权(地址线、数据线和有关控制线)。
- DMA接口获得总线控制权后,开始进行数据传送。
- 在数据传送结束后,DMA接口通知CPU可以使用主存,并把总线控制权交还给CPU。
- 这种传送过程中,CPU基本处于不工作状态和保持原状态。
DMA与CPU交替访存(CPU工作分时,CPU说了算)
简析:CPU工作分成两个周期:访问主存和不访问主存的周期,前者CPU访问主存,后者DMA访问主存。
- 这种方式适用于CPU的工作周期比主存存取周期长的情况。例如,CPU的工作周期是1.2us,主存的存取周期小于0.6us,那么可将一个CPU周期分为C1和C2两个周期。其中C1专供DMA访存,C2专供CPU访存。
这种方式不需要总线使用权的申请、建立和归还过程,总线使用权是通过C1和C2分时控制的。
周期挪用(相互商量,不允许打断)
- 简析:CPU和DMA相互商量,CPU不用访存时DMA使用;CPU访存时DMA不可打断;二者同时访存时,DMA访存。
- 这种方式是前两种方式的折中,当I/O设备没有DMA请求时,CPU按程序的要求访问主存,一旦I/O设备有了DMA请求,会遇到3种情况。
- 第一种是此时CPU不在访存(如CPU正在执行乘法指令),故I/O的访存请求与CPU未发生冲突;
- 第2种是CPU正在访存,则必须等待存取周期结束后,CPU再将总线占有权让出。
- 第3种是I/O和CPU同时请求访存,出现了访存冲突,此时CPU要暂时放弃总线占用权,由I/O设备挪用一个或几个存取周期。
参考自,更多细节请见:博客https://blog.csdn.net/jxq0816/article/details/52634702
DMA(Direct Memory Access)简介的更多相关文章
- (转)DMA(Direct Memory Access)
DMA(Direct Memory Access) DMA(Direct Memory Access)即直接存储器存取,是一种快速传送数据的机制. 工作原理 DMA是指外部设备不通过CPU而直接与系统 ...
- DMA(direct memory access)直接内存访问
DMA(Direct Memory Access),这里的 memory,指的是计算机的内存,自然与外存(storage)相对.这里的关键词在 Direct (直接),与传统的相对低效的,需要通过 C ...
- [中英对照]Introduction to Remote Direct Memory Access (RDMA) | RDMA概述
前言: 什么是RDMA? 简单来说,RDMA就是指不通过操作系统(OS)内核以及TCP/IP协议栈在网络上传输数据,因此延迟(latency)非常低,CPU消耗非常少. 下面给出一篇简单介绍RDMA的 ...
- 直接存储器存取(Direct Memory Access,DMA)详细讲解
一.理论理解部分. 1.直接存储器存取(DMA)用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输. 2.无须CPU干预,数据可以通过DMA快速移动,这就节省了CPU的资源来做其他操作. ...
- DMA(Direct Memory Access直接存储器访问)总结
转载于http://blog.csdn.net/peasant_lee/article/details/5594753 DMA一种高速的数据传输操作,允许在外部设备和存储器之间直接读写数据,不需要CP ...
- Remote Direct Memory Access (RDMA)
RDMA有三类实现方式,包括RoCE,iWARP和InfiniBand.RDMA的基础是Virtual Interface Architechure (VIA). 参考文档: https://en.w ...
- NONUNIFORM MEMORY ACCESS
COMPUTER ORGANIZATION AND ARCHITECTURE DESIGNING FOR PERFORMANCE NINTH EDITION In terms of commercia ...
- ARM: STM32F7: hardfault caused by unaligned memory access
ARM: STM32F7: hardfault caused by unaligned memory access ARM: STM32F7: 由未对齐的内存访问引起的hardfault异常 Info ...
- k64 datasheet学习笔记22---Direct Memory Access Controller (eDMA)
0.前言 本文主要介绍DMA相关内容 1.简介 DMA模块包含: 1.一个DMA引擎 源和目的地址的计算 数据搬移 2.本地存储的传输控制描述TCD,对于16个传输通道中的每一个各对应一个TCD 1. ...
随机推荐
- BZOJ5372: PKUSC2018神仙的游戏
传送门 Sol 自己还是太 \(naive\) 了,上来就构造多项式和通配符直接匹配,然后遇到 \(border\) 相交的时候就 \(gg\) 了 神仙的游戏蒟蒻还是玩不来 一个小小的性质: 存在长 ...
- Vijos / 题库 / 输油管道问题
背景 想念car的GF,car就出了道水题! 描述 某石油公司计划建造一条由东向西的主输油管道.该管道要穿过一个有n 口油井的油田.从每口油井都要有一条输油管道沿最短路经(或南或北)与主管道相连.如果 ...
- 【数据库】java链接jdbc 释放资源
/* * 编写快速 入门的jdbc 程序 : * * 1. 先导入 具体的驱动jar包 * 2. 编写一个类 , 写jdbc 的程序 * * 具体的编写 java类的 代码的 ...
- 将本地项目放到GitHub上托管并展示
忽然知道自己写的项目效果可以放到网上让别人看到之后,就已经迫不及待了.不墨迹,先去了解GitHub得知,它很强(牛逼),我理解的是这是一个托管平台,可以把自己本地的项目通过git放到上面,你需要新建一 ...
- Swiper测试
在页面body中插入 <div class="swiper-container temp"> <div class="swiper-wrapper&qu ...
- 单选按钮(RadioButton)
一:RadioButton的相关属性: 1.Activity //单选按钮 public class RadioButtonActivity extends Activity { private Co ...
- 浅谈搜索引擎SEO(HTML/CSS)
SEO:搜索引擎优化(免费): SEM:搜索引擎营销(付费). 它们两者的区别是: 1.SEM高投入,SEO低投入: 2.SEM短.效益块,SEO长期投入.增长慢: 3.新广告法颁布之后SEM广告位减 ...
- 第一个JavaScript代码
既然我们的CSS就必须要要放再专门的style标签内 那么javascript也需要放在子级的标签内,那就是script标签内 在页面中,我们可以在body标签中放入<script type= ...
- C#:安装Windows服务,动态指定服务名及描述(转载)
来源:http://www.cnblogs.com/Fooo/p/3476675.html Installer.cs public Installer() { InitializeComponent( ...
- Python学习---Django重点之静态资源配置
[官网静态文件介绍] https://docs.djangoproject.com/en/1.10/howto/static-files/ # settings.py 配置静态资源文件 # STATI ...