System V 与 POSIX 初步认识(2)

POSIX 共享内存:

APIAPI 作用
int shm_open(const char *name, int oflag, mode_t mode)   创建共享内存  
int shm_unlink(const char *name)   结束到共享内存的连接,并在最后一个进程关闭它时将其删除  
void mmap(void addr, size_t length, int prot, int flags, int fd, off_t offset)   映射内存  

内存映射机制mmap是POSIX标准的系统调用,有匿名映射和文件映射两种:

1.匿名映射使用进程的虚拟内存空间,它和malloc()类似,实际上有些malloc实现会使用mmap匿名映射分配内存,不过匿名映射不是POSIX标准中规定的。 2.文件映射有MAP_PRIVATE和MAP_SHARED两种。前者使用COW的方式,把文件映射到当前的进程空间,修改操作不会改动源文件。后者直接把文件映射到当前的进程空间,所有的修改会直接反应到文件的page cache,然后由内核自动同步到映射文件上。

相比于IO函数调用,基于文件的mmap的一大优点是把文件映射到进程的地址空间,避免了数据从用户缓冲区到内核page cache缓冲区的复制过程;当然还有一个优点就是不需要频繁的read/write系统调用。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/9a738223ca64685d4c80b95f0c06f7d1.html