共享内存原理及实现通信过程

共享内存的概念及创建过程

一. 共享内存的概念
共享内存区是最快的IPC形式。一旦这样的内存映射到共享它的进程的地址空间,这些进程间数据传递不再涉及到内核,换句话说是进程不再通过执行进入内核的系统调用来传递彼此的数据。
进程通信的本质就是让两个进程看到同一个空间,所以共享内存就是在物理内存中申请一块空间,然后让通信的每个进程通过进程地址空间与页表完成从物理地址到进程地址空间的映射,然后就可以对该块空间进行修改与读取了。

二. 共享内存的创建过程

  1. 首先要申请共享内存,也就是在物理地址中开辟好共享内存空间,供进程间通信使用。而且我们知道物理地址中的共享内存可能会有很多个,那么肯定就要管理这些内存,所以要管理我们就要先描述再组织,所以出了创建共享内存之外,还要为共享内存创建描述共享内存的内核数据结构。
  2. 将共享内存挂接到地址空间,本质上就是给两个进程之间的共享内存和虚拟地址空间之间建立映射,之后就可以开始进程间的数据传输与修改了。
  3. 用完之后要去掉共享内存和进程地址空间之间的联系,本质上就是修改页表,取消共享内存和虚拟内存的映射关系。
  4. 释放共享内存,将内存归还给系统。

共享内存的使用函数

一. 创建共享内存函数shmget
首先我们来看该函数的参数分别为:
int shmget(key_t key , size_t size , int shmflag);
第一个参数key是用来标识共享内存的,可以保证共享内存本身的唯一性。那么我们就要得到这个key,这里就可以通过系统调用接口:key_t ftok(pathname , PROJ_ID);通过此函数就可以创建key值。如下图:

  • 15
    点赞
  • 89
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值