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传输场景主要包括如下:外设到内存,内存到外设,内存到内存,外设到外设,其传输过程如下:
- 外设通过DMA向CPU发送DMA请求。
- CPU相应DMA请求,DMA获得总线的控制权。
- 由DMA发送存储器的地址,并决定发送数据的长度。
- 执行DMA传输。
- DMA操作结束后,把总线的控制权归还给CPU。
二,为什么需要DMA-BUF?
以外设为例,将一种设备中的数据传
以上是关于Linux内存从0到1学习笔记(8.6 DMA-BUF简介)的主要内容,如果未能解决你的问题,请参考以下文章
Linux内存从0到1学习笔记(6.4,物理内存初始化之预留内存)