Linux进程间通信(IPC) - 共享内存

一、背景

        在Linux应用开发中经常会采用多进程+多线程的模式来进行开发,那么进程之间的通信就非常重要,接下来要介绍的就是进程间通信方式之一的共享内存。共享内存相比较其他的IPC方式最明显的优点就是速度快。各个进程间共享一块的内存空间,数据交互只需要一次拷贝即可,效率非常高。但是由于Linux提供的的共享内存机制没有提供同步互斥的机制,所以在使用的共享内存的时候需要用户自己来实现消息的同步互斥机制,保证共享内存间的数据不会错乱。最常用的就是“信号量+共享内存” 的机制用来保证通讯数据的正确定。

二、基本实现原理

        共享内存顾名思义就是所有需要通信的进程都公用一段公共内存空间。但是我们都知道Linux系统为保证内存安全,为每一个进程都分配的一段虚拟地址来使用,每个进程映射出来的虚拟地址都不一样,应用程序是无法直接操作物理内存的,既然无法访问那应该怎么让不同进程共享一段内存空间呢?答案是通过key值映射的方式,来保证每个进程都能映射到同一段物理空间,虽然虚拟地址空间是不固定的,但是这段虚拟地址空间映射到的物理内存是固定的。这样每个进程只要通过同一个key值去申请共享内存,然后将这段物理内存映射到进程的虚拟地址空间,就能实现不同进程访问同一段物理内存空间了。基本原理如下图所示:

        

三、API接口解析

  1.  key_t ftok(const char *pathname, int proj_id);  该接口是生成key值的接口,pathname是一个已经存在的路径,p
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深耕嵌入式

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值