共享内存:共享内存是通过内核对象,将多个进程中的一个虚拟地址映射到内核对象所申请的一块物理内存上,从而实现进程间数据的通讯。
特点:
- 因为多个进程操作同一块物理内存,所以进程必须同步执行
- 因为进程直接通过虚拟地址操作物理内存,所以不需要拷贝数据,共享内存是最快的一种进程间通讯方
- 需要拷贝数据,共享内存是最快的一种进程间通讯方式
两个进程的虚拟地址相等或不等,对于共享内存无影响。
虚拟地址需要通过进程页表,进行页面映射才能找到物理内存空间
共享内存共享物理内存
共享内存是最快的IPC(进程间通讯)原因:
1、在通讯之前,访问内核对象,需要用户态切换内核态,但是真正发送数据时,直接通过指针操作空间,不需要用户态切换内核态
2、共享内存可以直接通过指针将数据写到共享内存区域,接收方直接通过指针操作共享内存区域的数据。相比于管道、消息队列少了两次数据拷贝