DMA技术如何实现数据直接传输?

01. 转移数据,可以不用cpu吗?
在计算机中,各个部件之间传递信息,是通过总线(公共通信干线,类似于高速公路)进行传输的。根据传递信息的类型可分为数据总线(db)、地址总线(ab)、控制总线(cb);根据连接设备的类型,又可以分为主存总线、i/o总线。
cpu是计算机系统运作的核心部件,通过主存总线跟主存储器(内存)进行通信,通过i/o总线与多个外部设备(如硬盘、网卡等)进行通信,具有转移数据、计算、控制程序转移等很多功能。cpu无时不刻的在处理着大量的事务,但有些时候数据的复制和存储相比于其它事务并没有那么重要。
假如您正在电脑面前刷剧,cpu此时忙碌着处理视频播放事务的计算任务;突然,您想把一个带有u盘(外设a)文件数据拷贝到您的电脑的某个磁盘(外设b)上,这就给cpu触发了一次中断,需要cpu优先处理文件数据拷贝(复制),从而影响了cpu处理播放视频事务。
那有没有可能让数据从外设a拷贝到外设b时,让cpu减少或甚至不参与消耗算力资源呢?
答案是肯定的!
解决思路就是:只要给外设a和外设b提供一条数据通路,直接让数据由a拷贝到b 不经过cpu的处理。
这就是大佬们设计的 dma技术 ,用于解决数据转移过度消耗cpu资源的问题。有了dma使cpu更专注于更加实用的操作–计算、控制等。
02. dma技术,如何实现数据直接传输?
dma,全称direct memory access,即直接存储器访问。
dma定义:用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须cpu的干预,通过dma数据可以快速地移动。这就节省了cpu的资源来做其他操作。
整个数据传输操作在一个 dma 控制器(dmac)的控制下进行的,cpu 除了在数据传输开始和结束时做一点处理外(开始和结束时候要做中断处理),在传输过程中 cpu 可以继续进行其他的工作。这样在大部分时间里,cpu 计算和 i/o 操作都处于并行操作,使整个计算机系统的效率大大提高。
因此,dma的作用就是实现数据的直接传输,而去掉了传统数据传输需要cpu寄存器参与的环节。主要涉及四种情况(外设到内存,内存到外设,内存到内存,外设到外设)的数据传输,但本质上是一样的,都是从内存的某一区域传输到内存的另一区域(外设的数据寄存器本质上就是内存的一个存储单元)。
dma传输将数据从一个地址空间复制到另一个地址空间,提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。
03. dma技术,在linux os如何应用?
而linux os提供了轮询、i/o 中断以及 dma 传输这 3 种磁盘与主存之间的数据传输机制。
1)轮询方式是基于死循环对 i/o 端口进行不断检测。
2)i/o 中断方式是指当数据到达时,磁盘主动向 cpu 发起中断请求,由 cpu 自身负责数据的传输过程。
3)dma 传输则在 i/o 中断的基础上引入了 dma 磁盘控制器,由 dma 磁盘控制器负责数据的传输,降低了 i/o 中断操作对 cpu 资源的大量消耗。
i/o 中断方式
在 dma 技术出现之前,应用程序与磁盘之间的 i/o 操作都是通过 cpu 的中断完成的。每次用户进程读取磁盘数据时,都需要 cpu 中断,然后发起 i/o 请求等待数据读取和拷贝完成,每次的 i/o 中断都导致 cpu 的上下文切换:
1)用户进程向 cpu 发起 read 系统调用读取数据,由用户态切换为内核态,然后一直阻塞等待数据的返回。
2)cpu 在接收到指令以后对磁盘发起 i/o 请求,将磁盘数据先放入磁盘控制器缓冲区。
3)数据准备完成以后,磁盘向 cpu 发起 i/o 中断。
4)cpu 收到 i/o 中断以后将磁盘缓冲区中的数据拷贝到内核缓冲区,然后再从内核缓冲区拷贝到用户缓冲区。
5)用户进程由内核态切换回用户态,解除阻塞状态,然后等待 cpu 的下一个执行时间钟。
dma传输方式
有了 dma 磁盘控制器接管数据读写请求以后,cpu 从繁重的 i/o 操作中解脱,数据读取操作的流程如下:
image
1)用户进程向 cpu 发起 read 系统调用读取数据,由用户态切换为内核态,然后一直阻塞等待数据的返回。
2)cpu 在接收到指令以后对 dma 磁盘控制器发起调度指令。
3)dma 磁盘控制器对磁盘发起 i/o 请求,将磁盘数据先放入磁盘控制器缓冲区,cpu 全程不参与此过程。
4)数据读取完成后,dma 磁盘控制器会接受到磁盘的通知,将数据从磁盘控制器缓冲区拷贝到内核缓冲区。
5)dma 磁盘控制器向 cpu 发出数据读完的信号,由 cpu 负责将数据从内核缓冲区拷贝到用户缓冲区。
6)用户进程由内核态切换回用户态,解除阻塞状态,然后等待 cpu 的下一个执行时间钟。
04. 总结
目前大多数的硬件设备,包括磁盘控制器、网卡、显卡以及声卡等都支持 dma 技术。通过 dma 和虚拟内存技术,实现io 设备跟用户程序空间传输数据的过程中,减少数据拷贝次数,减少系统调用,实现 cpu 的零参与,彻底消除 cpu 在这方面的负载。


面向生产制造企业的设备远程运维平台如何实现设备智能管理
全球首款基于Quspin传感器的50通道脑磁图记录仪阵列
非洲猪瘟检测设备的仪器特点是什么
MAX13051 ±80V故障保护的CAN收发器
基于单片机的wifi模块原理图分析
DMA技术如何实现数据直接传输?
数据中心转型之路:由共享思维转变为生态思维
将LoRaWAN网关设置为NS模式的操作方法
高频机的结构原理与应力状态
使用Virtual Eval工具了解AD7124-4/8的时序性能
碳化硅量子点的制备及应用研究
采用FLUKE 1508绝缘测试仪进行绝缘电阻测试
什么是电子封装?电子封装技术有什么应用和优点?
电源芯片5V-80V转5V0.3A降压芯片AH7550
华为Nova2Plus魔镜版和小米6亮银版有什么区别?凭什么一样的外观却差价如此巨大?
气象环境监测系统的简介以及相关设备的介绍
智能电网配电系统的发展现状和未来趋势
丝网印刷工艺对晶硅太阳能电池表面形貌与电学性能的影响
Opera推出名为Dify的金融科技服务 可和Google Pay一起使用
镀锡铜线0.3 0.4 0.5市场价格怎么样?