用户空间缓冲区和内存映射文件之间的DMA

时间:2014-04-07 11:14:00

标签: c++ linux memcpy dma

通过用户空间DMA的memcpy:是否可以通过linux中的用户空间DMA实现memcpy?我知道有办法通过DMA将内核缓冲区复制到用户空间缓冲区,但是想在用户空间中通过DMA扩展memcpy吗?有什么想法吗 ?

1 个答案:

答案 0 :(得分:1)

DMA在物理内存和内存映射设备上运行,而大多数用户空间应用程序在虚拟内存上运行。这提出了两个问题:

  • 将虚拟内存映射到物理内存:您必须确保其缓存已刷新,已分页,已锁定,因此无法再次进行分页,并且不太可能是连续的 - 它将分散在小块的物理内存中
  • 物理内存访问的安全性:这使用户空间应用程序可以访问整个物理内存,非常适合嗅探密码和加密密钥

在现代处理器上,memcpy()可能在软件和硬件方面都非常高效,直到您一次复制10兆字节为止,之后您还需要仔细考虑缓存和虚拟内存。简而言之,我不会打扰。