Linux内存从0到1学习笔记(8.6 DMA-BUF简介)

Posted 高桐@BILL

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux内存从0到1学习笔记(8.6 DMA-BUF简介)相关的知识,希望对你有一定的参考价值。

一,为什么需要DMA?

    CPU指令系统通常只支持CPU(寄存器)-存储器,以及CPU-外设之间的数据传送,那么如果外设需要和存储器进行数据交换就必须经过CPU寄存器进行中转。很显然,中转会大大降低CPU的工作效率,浪费时间。因此,需要在外设和存储器之间开辟一个直接数据传输通道。如果这个通道的数据传输有其他硬件来完成,既可以加快传输效率,又可以减轻CPU对I/O的负载。

1.1. DMA简介

    DMA全称Direct Memory Access(存储器直接访问),是一种高速地数据传输操作,它允许外设和存储器之间进行直接的数据读写操作,既不通过CPU也不需要CPU进行干预。简单来说就是把CPU从大量的数据传输操作中解放出来,交由DMA控制器来完成,让CPU腾出手来做计算、调度等事情。这样一来,CPU除了在数据传输开始和数据传输结尾进行处理外,在传输过程中可以去做其他的事情,大大提高了系统的工作效率。

1.2 DMA传输

    DMA的目的时实现数据的直接传输,而减少了传统数据传输时CPU的参与。DMA传输场景主要包括如下:外设到内存,内存到外设,内存到内存,外设到外设,其传输过程如下:

  1. 外设通过DMA向CPU发送DMA请求。
  2. CPU相应DMA请求,DMA获得总线的控制权。
  3. 由DMA发送存储器的地址,并决定发送数据的长度。
  4. 执行DMA传输。
  5. DMA操作结束后,把总线的控制权归还给CPU。

二,为什么需要DMA-BUF?

    以外设为例,将一种设备中的数据传

以上是关于Linux内存从0到1学习笔记(8.6 DMA-BUF简介)的主要内容,如果未能解决你的问题,请参考以下文章

Linux内存从0到1学习笔记(6.4,物理内存初始化之预留内存)

Linux内存从0到1学习笔记(一,内存简介)

Linux内存从0到1学习笔记(五,内存分类)

Linux内存从0到1学习笔记(8.5,CMA内存分配)

Linux内存从0到1学习笔记(七,用户空间虚拟内存之二 - 内存空间的建立)

Linux内存从0到1学习笔记(6.7,物理内存初始化之CMA初始化)