首页 > 代码库 > system v和posix的共享内存对比

system v和posix的共享内存对比

参考 http://www.startos.com/linux/tips/2011012822078.html

 

1)Linux和所有的UNIX操作系统都允许通过共享内存在应用程序之间共享存储空间.

2)有两类基本的API函数用于在进程间共享内存:System v和POSIX.  (当然,还有mmap,属于POSIX的)

3)这两类函数上使用相同的原则,核心思想就是任何要被共享的内存都必须经过显示的分配.

4)因为所有进程共享同一块内存,共享内存在各种进程间通信方式中具有最高的效率.

5)内核没有对访问共享内存进行同步,所以必须提供自己的同步措施,比如数据在写入之前,不允许其它进程对其进行读写.可以用wait来解决这个问题.

 

二)POSIX共享内存API

1)函数shm_open和shm_unlink非常类似于为普通文件所提供的open和unlink系统调用.

  2)如果要编写一个可移植的程序,那么shm_open和shm_unlink是最好的选择.

  3)shm_open:创建一个新的共享区域或者附加在已有的共享区域上.区域被其名字标识,函数返回各文件的描述符.

  4)shm_unlink:类似于unlink系统调用对文件进行操作,直到所有的进程不再引用该内存区后才对其进行释放.

  5)mmap:用于将一个文件映射到某一内存区中,其中也使用了shm_open函数返回的文件描述符.

  6)munmap:用于释放mmap所映射的内存区域.

  7)msync:同步存取一个映射区域并将高速缓存的数据回写到物理内存中,以便其他进程可以监听这些改变.

 

system v和posix的共享内存对比