共享内存(shared memored),指的是指定某一特定的存储区域,使多个不同的进程都能在自己的进程地址空间访问到它。如果有一个进程改变了共享内存存储的数据,其他能访问到该共享内存的进程可以感知到数据的变化。

原理介绍

简单来说,共享内存是通过将不同进程的虚拟内存地址映射为相同的物理内存地址,来实现内存的共享。 首先操作系统会通过系统调用在物理内存中开辟一块内存,然后再将创建好的内存通过页表,映射到进程的虚拟地址空间中。当通信结束以后,进程就会取消掉物理内存和虚拟内存之间的映射关系,释放掉这块内存空间。

 

共享内存的应用场景

1.进程间通信

 

共享内存的实现方式 

Linux环境下,最常见的实现共享内存的方法的方式有两种

  • 基于System V的共享内存
  • 基于POSIX mmap实现共享内存

 

基于System V的共享内存

API介绍

 

实现示例

 

 

POSIX mmap实现共享内存

API介绍

 

实现示例