设为首页 加入收藏

TOP

Linux下多任务间通信和同步-System V共享内存
2014-11-24 02:31:56 来源: 作者: 【 】 浏览:26
Tags:Linux 任务 信和 同步 -System 共享 内存

1.简介


共享内存是一种最为高效的进程间通信方式,进程可以直接读写内存,而不需要任何数据的拷贝.为了在多个进程间交换信息,内核专门留出了一块内存区,可以由需要访问的进程将其映射到自己的私有地址空间.进程就可以直接读写这一内存区而不需要进行数据的拷贝,从而大大提高的效率.由于多个进程共享一段内存,因此也需要依靠某种同步机制,如互斥锁和信号量等.


Linux下多任务间通信和同步-System V共享内存



2.共享内存实现的步骤


创建共享内存,这里用到的函数是shmget,也就是从内存中获得一段共享内存区域;


映射共享内存,也就是把这段创建的共享内存映射到具体的进程空间中去,这里使用的函数是shmat;


到这里,就可以使用这段共享内存了,也就是可以使用不带缓冲的I/O读写命令对其进行操作;


撤销映射的操作,其函数为shmdt.


调用shmgat的过程相当于映射文件系统shm中的同名文件过程,原理和mmap大同小异,但使用更加方便.


3.shmget系统调用


该系统调用获得(或新建)一个共享内存区域,调用成功返回该区域的ID,即shmid,若出错则返回-1.shmget函数语法:


Linux下多任务间通信和同步-System V共享内存


注意:共享内存,消息队列和信号量是由内核维护的进程间通信方式,它们一IPC结构的结构存在于内核中,在内部以标示符加以应用,而在外部则通过键值引用.键的数据结构为key_t类型,由内核负责将它转换为标示符.命令ipcs可以提供系统中所有的共享内存,消息队列和信号量的标示符和键.


4.shmat系统调用


该系统调用将shmget返回的区域映射到进程的内存空间中.shmat函数语法:


Linux下多任务间通信和同步-System V共享内存



5.shmdt系统调用


该系统调用解除被共享内存区域与进程地址addr的映射关系.shmdt函数语法:


Linux下多任务间通信和同步-System V共享内存



推荐阅读


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇iOS仿网易新闻客户端左右侧栏 下一篇Linux下多任务间通信和同步-mmap..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: