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

存储技术

606人已加入

描述

01. 转移数据,可以不用CPU吗?

在计算机中,各个部件之间传递信息,是通过总线(公共通信干线,类似于高速公路)进行传输的。根据传递信息的类型可分为数据总线(DB)、地址总线(AB)、控制总线(CB);根据连接设备的类型,又可以分为主存总线、I/O总线。

Linux

CPU是计算机系统运作的核心部件,通过主存总线跟主存储器(内存)进行通信,通过I/O总线与多个外部设备(如硬盘、网卡等)进行通信,具有转移数据、计算、控制程序转移等很多功能。CPU无时不刻的在处理着大量的事务,但有些时候数据的复制和存储相比于其它事务并没有那么重要。

假如您正在电脑面前刷剧,CPU此时忙碌着处理视频播放事务的计算任务;突然,您想把一个带有U盘(外设A)文件数据拷贝到您的电脑的某个磁盘(外设B)上,这就给CPU触发了一次中断,需要CPU优先处理文件数据拷贝(复制),从而影响了CPU处理播放视频事务。

那有没有可能让数据从外设A拷贝到外设B时,让CPU减少或甚至不参与消耗算力资源呢?

答案是肯定的!

解决思路就是:只要给外设A和外设B提供一条数据通路,直接让数据由A拷贝到B 不经过CPU的处理。

Linux

这就是大佬们设计的 DMA技术 ,用于解决数据转移过度消耗CPU资源的问题。有了DMA使CPU更专注于更加实用的操作–计算、控制等。

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

DMA,全称Direct Memory Access,即直接存储器访问。

DMA定义:用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须CPU的干预,通过DMA数据可以快速地移动。这就节省了CPU的资源来做其他操作。

Linux

整个数据传输操作在一个 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 的上下文切换:

Linux

1)用户进程向 CPU 发起 read 系统调用读取数据,由用户态切换为内核态,然后一直阻塞等待数据的返回。

2)CPU 在接收到指令以后对磁盘发起 I/O 请求,将磁盘数据先放入磁盘控制器缓冲区。

3)数据准备完成以后,磁盘向 CPU 发起 I/O 中断。

4)CPU 收到 I/O 中断以后将磁盘缓冲区中的数据拷贝到内核缓冲区,然后再从内核缓冲区拷贝到用户缓冲区。

5)用户进程由内核态切换回用户态,解除阻塞状态,然后等待 CPU 的下一个执行时间钟。

DMA传输方式

有了 DMA 磁盘控制器接管数据读写请求以后,CPU 从繁重的 I/O 操作中解脱,数据读取操作的流程如下:

Linux

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 在这方面的负载。

编辑:黄飞

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分