使用文件或管道进行进程间通信会有很多局限性,比如效率问题以及数据处理使用文件描述符而不如内存地址访问方便,于是多个进程以共享内存的方式进行通信就成了很自然要实现的 IPC 方案。Linux 系统在编程上为我们准备了多种手段的共享内存方案。
mmap 内存共享映射
mmap 系统调用本来是存储映射功能。它可以将一个文件映射到内存中,在程序里就可以直接使用内存地址对文件内容进行访问,这可以让程序对文件访问更方便.
Linux 产生子进程的系统调用是 fork,根据 fork 的语义以及其实现,我们知道新产生的进程在内存地址空间上跟父进程是完全一致的。所以 Linux 的 mmap 实现了一种可以在父子进程之间共享内存地址的方式
mmap 方式的共享内存只能在通过 fork 产生的父子进程间通信,因为除此之外的其它进程无法得到共享内存段的地址
XSI 共享内存
满足多个无关进程共享内存的需求
POSIX 共享内存
Linux 提供的 POSIX 共享内存,实际上就是在 /dev/shm 下创建一个文件,并将其 mmap 之后映射其内存地址即可。