进程间通信系列(12)共享内存的基本概念
2017-07-06 11:44
375 查看
共享内存区域是被多个进程共享的一部分物理内存。多个进程都可以把该共享内存映射到自己的虚拟内存空间。所有用户空间的进程若要操作共享内存,都要将其映射到自己的虚拟内存空间中,通过映射的虚拟内存空间地址去操作共享内存,从而达到进程间的数据通信。
一个C程序的内存分为代码段、数据段、堆、栈,那么共享内存区域被安排在C程序内存的哪个区域呢?在堆和栈之间有一个共享内存映射区,这个区域就是共享内存在C程序内存空间的分布区域。
共享内存是进程间共享数据的一种最快的方法,提升数据处理效率,是一种效率最高的IPC机制。一个进程向共享内存写入数据,共享这个内存的所有进程都可以立刻看到其中的内容。但是共享内存本身不提供同步与互斥机制,因此需要通过进程信号量进行同步与互斥。
共享内存的属性:
注意:
1) 子进程不继承父进程创建的共享内存,但是父子进程是共享的;
2) 子进程继承父进程根据共享内存映射的地址。
使用共享内存的步骤:
1.使用shmget函数创建共享内存;
2.使用shmat函数映射共享内存,将这段创建的共享内存映射到具体的进程虚拟内存空间中。
一个C程序的内存分为代码段、数据段、堆、栈,那么共享内存区域被安排在C程序内存的哪个区域呢?在堆和栈之间有一个共享内存映射区,这个区域就是共享内存在C程序内存空间的分布区域。
共享内存是进程间共享数据的一种最快的方法,提升数据处理效率,是一种效率最高的IPC机制。一个进程向共享内存写入数据,共享这个内存的所有进程都可以立刻看到其中的内容。但是共享内存本身不提供同步与互斥机制,因此需要通过进程信号量进行同步与互斥。
共享内存的属性:
struct shmid_ds { struct ipc_perm shm_perm; /* 共享内存区域的操作权限,ipc_perm结构 */ size_t shm_segsz; /* 大小 */ time_t shm_atime; /* 映射时间,调用shmat时会更改的 */ time_t shm_dtime; /* 取消映射时间,shmdt时会更改 */ time_t shm_ctime; /* 更改时间 */ unsigned short shm_cpid; /* 创建此共享内存的进程PID */ unsigned short shm_lpid; /* 最后操作这个共享内存的进程PID */ short shm_nattach; /* 至今映射到的进程数量? */ ... }
注意:
1) 子进程不继承父进程创建的共享内存,但是父子进程是共享的;
2) 子进程继承父进程根据共享内存映射的地址。
使用共享内存的步骤:
1.使用shmget函数创建共享内存;
2.使用shmat函数映射共享内存,将这段创建的共享内存映射到具体的进程虚拟内存空间中。
相关文章推荐
- Linux环境进程间通信系列(五):共享内存
- linux高级编程基础系列:System V进程间通信(信号量、共享内存)
- 进程间通信系列 之 共享内存简单实例
- (转)Linux环境进程间通信系列(五):共享内存
- 进程间通信系列 之 共享内存及其实例
- Spring整理系列(12)——spring中AOP基本概念
- Linux环境进程间通信系列(五):共享内存
- linux嵌入式编程高手历程系列12-共享内存
- 进程间通信系列 之 共享内存及其实例
- 进程间通信系列 之 共享内存简单实例
- Linux环境进程间通信: 共享内存
- Linux环境进程间通信 共享内存
- Linux环境进程间通信(五): 共享内存(下)
- 活动目录系列之一:基本概念
- Linux环境进程间通信(五): 共享内存(下)
- linux进程间通信方式 -- 共享内存
- Linux环境进程间通信(五): 共享内存(下)
- Linux环境进程间通信(五): 共享内存(下)
- Linux环境进程间通信(五): 共享内存(上)
- 利用共享内存实现进程间通信