【问题标题】:What is the functionality of munmap, mmapmunmap、mmap的功能是什么
【发布时间】:2017-05-19 17:02:26
【问题描述】:

当我尝试研究一些处理 FPGA 的代码时,我遇到了 munmap、mmap。

我浏览了here 提供的手册。我仍然不明白这个功能的目的。这到底是做什么的?

【问题讨论】:

标签: c++ c linux system-calls


【解决方案1】:

它将一块磁盘缓存映射到进程空间,以便可以在字节级别操作映射的文件,而不是要求应用程序通过 read()write() 等的 VFS。

【讨论】:

  • 除非是MAP_ANONYMOUS,在这种情况下没有文件:)
【解决方案2】:

mmap() 是一个系统调用,它有助于内存映射 I/O 操作。它分配一个内存区域并将其映射到调用进程的虚拟地址空间,以使应用程序能够访问内存。

mmap() 返回一个指向映射区域的指针,该映射区域可用于访问内存。

同样,munmap() 删除了映射,因此对已分配内存的进一步访问仍然合法。

这些是较低级别的调用,在行为上类似于更高级别的内存分配器函数(如 malloc() / free())提供的调用。但是,此系统调用允许对分配的区域行为进行细粒度控制,例如,

  • 映射的内存保护(读、写、执行权限)
  • 近似)映射的位置(参见MAP_FIXED 标志)
  • 映射区域的初始内容(见MAP_UNINITIALIZED标志)

等等

如果您认为其他措辞可以帮助您,也可以参考wikipedia article

【讨论】:

    【解决方案3】:

    说明书很清楚:

    mmap() 在调用进程的虚拟地址空间中创建一个新的映射

    简而言之,它将一块文件/设备内存/任何东西映射到进程的空间中,这样它就可以通过访问内存来直接访问内容。

    例如:

    fd = open("xxx", O_RDONLY);
    mem = mmap(NULL, size, PROT_READ, MAP_SHARED, fd, 0);
    

    将文件内容映射到mem,读取mem就像读取文件内容xxx一样。

    如果fd是某个FPGA的设备内存,那么mem就变成了FPGA的内容。

    在某些情况下使用起来非常方便高效。

    【讨论】:

      猜你喜欢
      • 2017-10-11
      • 1970-01-01
      • 2014-11-23
      • 2011-03-02
      • 2018-07-11
      • 2014-12-21
      • 2012-01-18
      • 2017-12-14
      • 2014-08-30
      相关资源
      最近更新 更多