当前位置:  技术问答>linux和unix

关于DMA操作的问题

    来源: 互联网  发布时间:2015-11-19

    本文导语:  查了相关的资料,讲它是指一种高速的数据传输操作,允许在外部设备和存储器之间直接读写数据,即不通过CPU,也不需要CPU干预.整个数据传输操作在一个称为"DMA控制器"的控制下进行的.CPU除了在数据传输开始和结束时...

查了相关的资料,讲它是指一种高速的数据传输操作,允许在外部设备和存储器之间直接读写数据,即不通过CPU,也不需要CPU干预.整个数据传输操作在一个称为"DMA控制器"的控制下进行的.CPU除了在数据传输开始和结束时作一点处理外,在传输过程中CPU可以进行其它的工作.这样,在大部分时间里,CPU和输入输出都处在并行操作.因此,使整个计算机系统的效率大大提高.
   但是,还是并不清楚其工作机制。比如说,对DMA控制器的配置,是在程序中进行的吗?它怎么会知道要搬移的数据的起始地址和目的地址,是在程序中配置的吗?可是,我在看linux的驱动代码时,并没有找到这些.
   还有,程序是要CPU来执行的.CPU要执行的读写操作都是要对内存的操作,假设在DMA过程中,CPU继续并行工作的话,其读写内存,必然要影响DMA的进行,怎样还能并行操作呢?
   最后,我想问一下,在编写驱动程序时,程序中使用的全局变量也好,临时变量也罢,它们占用的是内存的空间吗?如果是的话,它们是算内存的核心空间呢,还是用户空间呢?还是都有呢?是怎样划分的呢?为什么,我看到代码中,有copy to usr和coppy from usr的变量拷贝呢?
   问题比较多,希望大家赐教.

|
在驱动里会设置DMA的源地址和目的地址, 并启动相应的DMA,

DMA虽然可以不用CPU来传输, 但是总线还是共享的,DMA访问内存时,CPU还是不能访问内存,但是可以做别的事情。
  编写驱动程序时,程序中使用的全局变量也好,临时变量也罢,它们占用的是内存空间,它们是算内存的核心空间

copy to usr和coppy from usr是在内核空间和用户空间之间拷贝数据

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • DMA多次传送如何设置~迷茫中
  • DM9000如何使用DMA
  • 请问如何让DMA方式读取硬盘啊?
  • linux kernel module中,怎样进行dma转送
  • 關於SPI下實現DMA傳輸
  • dma_map_single可以使用任意的地址吗?
  • 有人熟悉DMA吗?我要实现内存中的内存的“搬动”。(LINUX)
  • uClinux系统内核2.6,使用GFP_KERNEL | GFP_DMA分配内存失败!
  • 想法:内存中的数据通过DMA存储到USB-disk中
  • alsa driver ,dma_alloc_coherent問題
  • DMA中从内存传输到内存源和目的地址怎么设
  • 如何打开DMA通道?
  • 什么是DMA 啊?
  • 能不能用软件仿真dma的数据传输过程?
  • Linux内核中怎样给DMA分配没有进行Cache映射的内存?
  • s3c2440-sdi s3c2440-sdi: unable to get DMA channel
  • WEB前端 iis7站长之家
  • 内存-驱动-DMA
  • 2.6.18的内核,SATA硬盘,怎么开启DMA模式啊
  • 写了个DMA驱动,想测试一下,请大家给点建议!!


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3