unix共享内存的知识点
共享内存优势:1。不要在进程之间通过内核传递数据,即通过系统调用不复制数据,以实现快速高效的数据传输。2。with the kernel
* nix共享内存有两套API:POSIX系统V
两者之间的主要区别是共享内存的大小。
1。POSIX共享的内存大小可以随时修改通过功能函数
2。系统v共享内存大小是在创建时确定的,最大值根据系统而异。
POSIX共享的内存
#包括(mmap,munmap,msync,shm_open,shm_unlink)
最重要的功能——mmap
void * mmap(void * addr,size_t Len,int prot,int的旗帜,int fd)
功能图处理成记忆,它可以是一个shm_open开放或共享内存对象的文件句柄。
* nix中一切都是文件,和shm_open还创建一个文件对象的/ dev / SHM目录并返回对象的描述符。
mmap作为共享内存的底层支持对象处理的处理,映射到内存,使内存可以在进程间共享不读或写的。因此,它是更原始的方式来*nix进程间的数据传递是读写进程之间的一个文件。但频繁的打开、读,写,和lseek系统调用会消耗太多的系统资源。所以这个文件句柄映射到内存中,从而提高了进程间的数据传递效率。
一个功能的关注,msync
当内存映射区的内存被修改,内核更新文件的内容在一定的时间,以确保文件更新时,调用的函数msync更新。文件可以是同步的(ms_sync)或异步(ms_async)。(据估计,写更新文件调用的函数)
系统共享内存
#包括(shmget,shmat,shmdt、shmctl)
由于系统V的共享内存有大小限制,可以考虑使用共享内存数组来解决这个问题,虽然数组的大小,即通过进程获得共享内存的数量也是有限的,它可以缓解系统V单共享内存太小的问题。