munmap、mmap的作用是什么

What is the functionality of munmap, mmap

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

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

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

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

mmap() returns 指向可用于访问内存的映射区域的指针。

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

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

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

等等

如果您认为替代措辞对您有帮助,您也可以参考wikipedia article

手册清晰:

mmap() creates a new mapping in the virtual address space of the calling process

简单来说就是将file/devicememory/whatever的一个chunk映射到进程'space中,这样只要访问内存就可以直接访问内容了。

例如:

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

会将文件内容映射到mem,读取mem就像读取文件xxx.

的内容一样

如果fd是一些FPGA的设备内存,那么mem就变成了FPGA的内容

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