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的内容
使用起来非常方便,在某些情况下效率很高。
当我尝试研究一些处理 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的内容
使用起来非常方便,在某些情况下效率很高。