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. ...
随机推荐
- UNIX IPC: POSIX 消息队列
首先在我的MAC OSX上试了一下虽然有_POSIX_MESSAGE_PASSING的宏定义,但是用gcc编译会提示没有mqueue.h头文件,先放一边.在Ubuntu上使用正常,不过POSIX消息队 ...
- 关于 Table 表格那些三两事儿
引言 实现下列表格样式,嵌套与form表单中提交信息,为了让自己的表格可以“ 随心所欲 ” 变换自己的形式,需要两个重要的td 属性colspan 列合并 以及 rowspan 行合并 来实现,表格宽 ...
- apk 反编译 - 最新版图文教程
apk 反编译 - 最新版图文教程 结合网上众多教程,整理一篇自己操作的,工具都是目前最新版 apk 反编译也就是将打包后的 apk 反编译为资源文件(图片).layout.样式.相关的实现代码等.( ...
- 基于Vue的WebApp项目开发(六)
实现商品购买列表页面 步骤一:新建goodslist.vue文件 <template> <div id="tml"> <!--利用mui中的图文表格组 ...
- 记录一次json转换的经历
需求:数据库里面的一个字段,存的是json数据,类似{‘name’:“name1”,'items':“[{code:0,name:'name2'}]”},{‘name’:“name3”,'items' ...
- 剑指offer相关问题
1. 变态跳台阶 Fib(n) = Fib(n-1)+Fib(n-2)+Fib(n-3)+..........+Fib(n-n) =Fib(0)+Fib(1)+Fib(2)+..... ...
- 模型层(template)
错误之forbbiddon csrf_token:这个标签用于跨站请求伪造保护 提交数据的时候就会做安全机制,当你点击提交的时候会出现一个forbbiddon 的错误,就是用setting配置里的sc ...
- 沉淀再出发:关于IntelliJ IDEA使用的一些总结
沉淀再出发:关于IntelliJ IDEA使用的一些总结 一.前言 在使用IDEA的时候我们会发现,如果我们先写了一个类的名字,而没有导入这个类的出处,就会提示出错,但是不能自动加入,非常的苦恼,并且 ...
- Mysql进阶-day2
Mysql cmake方式安装 1.卸载原有mysql下载MySQL安装包 [root@localhost ~]# yum remove mysql* -y [root@localhost ~]# m ...
- 51nod 1349 最大值
题目看这里 找到每个元素g[i]作为最大值的区间[L,R],那么以他为最大值的区间数有(i-L+1)*(R-i+1)个. 为了加速,以k为最大值的区间数放入H[k],再以此统计一个前缀和,更新入H.那 ...