Memory-Mapped I/O
2012-07-01 13:47
176 查看
Memory mapped I/O就是把磁盘上的file映射到内存上,当我们从内存上fetch byte时,对应的file就被读取。同样的,当我们在内存上存储字节的时候,对应的file就被写入。这就让我们不需通过read和write系统调用而去操作I/O。
mmap内存映射建立一段可以被多个进程读写的内存段。共享内存。
mmap函数作用是告诉内核把给定的文件file映射到内存的一块空间,mmap函数原型如下:
函数返回值就是the starting address of the mapped area。
参数addr代表被映射到内存的地址。一般把addr设置成为0,让操作系统自己去选择该映射到内存的那个地址上。
参数fields就是要被映射的文件的文件描述符。在把这个文件映射到内存空间之前,我们必须先open这个文件描述符。
参数len代表the number of bytes to map。
参数off is the starting offset in the file of the bytes to map。
参数prot的值和代表的含义如下表格,prot用于设置内存段的访问权限
参数flag代表内存映射区的属性:
MAP_FIXED 内存段必须位于addr指定的位置
MAP_SHARED 内存段是共享的,对内存段的修改保存到磁盘文件中
MAP_PRIVATE 内存段是私有的,对内存段的修改只对本进程内部有效
msync函数的作用:把在内存段的某个部分或整段中的修改写回到映射的文件中。
int msync(void * addr, size_t len, int flag);
flag控制执行修改的具体方式:
MS_ASYNC 采用异步写方式
MS_SYNC 采用同步写方式
MS_INVALIDATE 从文件中读回数据
mmap内存映射建立一段可以被多个进程读写的内存段。共享内存。
mmap函数作用是告诉内核把给定的文件file映射到内存的一块空间,mmap函数原型如下:
#include <sys/mmam.h> void *mmap(void *addr, size_t len, int prot, int flag, int fields, off_t off);
函数返回值就是the starting address of the mapped area。
参数addr代表被映射到内存的地址。一般把addr设置成为0,让操作系统自己去选择该映射到内存的那个地址上。
参数fields就是要被映射的文件的文件描述符。在把这个文件映射到内存空间之前,我们必须先open这个文件描述符。
参数len代表the number of bytes to map。
参数off is the starting offset in the file of the bytes to map。
参数prot的值和代表的含义如下表格,prot用于设置内存段的访问权限
PROT_READ | Region can be read |
PROT_WRITE | Region can be write |
PROT_EXEC | Region can be execute |
PROT_NONE | Region cannot be accessed |
MAP_FIXED 内存段必须位于addr指定的位置
MAP_SHARED 内存段是共享的,对内存段的修改保存到磁盘文件中
MAP_PRIVATE 内存段是私有的,对内存段的修改只对本进程内部有效
msync函数的作用:把在内存段的某个部分或整段中的修改写回到映射的文件中。
int msync(void * addr, size_t len, int flag);
flag控制执行修改的具体方式:
MS_ASYNC 采用异步写方式
MS_SYNC 采用同步写方式
MS_INVALIDATE 从文件中读回数据
相关文章推荐
- Memory-Mapped I/O
- MemoryMappedFile 在 Mono in Linux 的开发笔记
- Memory-mapped I/O and port-mapped I/O
- (筆記) Quartus II 7.x版的Avalon Memory-Mapped Interface Specification分享 (SOC) (SOPC Builder)
- 整理一下 PCI的Memory Mapped IO vs Port IO
- MemoryMappedFile使用小结
- IO的端口映射和内存映射 (Port mapped I/O 和 Memory mapped I/O说明)
- MemoryMappedFile 在 Mono in Linux 的开发笔记
- 虚拟内存(VirtualAlloc),堆(HeapAlloc/malloc/new)和Memory Mapped File
- Memory-mapped I/O vs port-mapped I/O
- Virtual Memory$$memory-mapped-files
- 封装:内存镜像文件(MemoryMappedFile)封装,一维二维三维定点访问
- Memory-mapped I/O
- 为何要在Java中使用内存映射文件(Memory Mapped File)或者MappedByteBuffer
- 虚拟内存(VirtualAlloc),堆(HeapAlloc/malloc/new)和Memory Mapped File
- Working with memory mapped files in .NET 4
- 内存映射文件(memory-mapped file)能让你创建和修改那些大到无法读入内存的文件。
- 虚拟内存(VirtualAlloc),堆(HeapAlloc/malloc/new)和Memory Mapped File
- MemoryMappedFile 内存映射+ Parallel 并行分块 读写大文件
- Java NIO 2.0 : Memory-Mapped Files | MappedByteBuffer Tutorial