Linux 进程通信(System V)共享内存区
来源:互联网 发布:淘宝客服没经验能干吗 编辑:程序博客网 时间:2024/05/17 10:53
一:简介
前面已经学过:pipe,FIFO,msg queue, 今天要学的是“共享内存区”
1.共享内存区是进程通信中最快的方式,而且传递的信息量是很大的!
2.是通过内存区间映射到进程空间来实现的!因此这种进程间的通信不再涉及到内核!
(即进程不是通过执行任何的进入内核的系统调用来传递数据的。这样内核就必须建立允许各个进程之间的共享内存区的映射关系,然后一直管理该内存区!同时也要保证所谓的同步,有序,而且没有死锁!)
3.简单的实现过程:
<1>.server获得访问共享内存区的权限
<2>.server从输入文件中读取数据到共享内存区( 需要一次copy内容 )
<3>.server输入数据OK后,通知用户进程
<4>.最后用户进程从共享内存区中取出data( 需要一次copy内容 )
但是与pipe,FIFO以及msg queue的区别是:
此三者需要进程的操作是:server和client的发送和接受data都是需要进行一次copy,所以一共有4次数据拷贝,所以效率不如“共享内存区”
4.数据结构:
#include
struct shmid_ds
{
struct ipc_perm shm_perm; //!> 权限设置结构体
size_t
前面已经学过:pipe,FIFO,msg queue, 今天要学的是“共享内存区”
1.共享内存区是进程通信中最快的方式,而且传递的信息量是很大的!
2.是通过内存区间映射到进程空间来实现的!因此这种进程间的通信不再涉及到内核!
(即进程不是通过执行任何的进入内核的系统调用来传递数据的。这样内核就必须建立允许各个进程之间的共享内存区的映射关系,然后一直管理该内存区!同时也要保证所谓的同步,有序,而且没有死锁!)
3.简单的实现过程:
4.数据结构: