您的位置:首页 > 运维架构 > Linux

linux--共享内存

2014-09-15 09:42 113 查看
共享内存解决的问题是:



任意两个进程之间的通信如果是有名管道,是没有办法对管道中间的数据获取读和写操作的,只能是两段的数据,那么如何对所有的数据进行操作---共享内存



共享内存也是通过内核来完成



命令:Ipcs –m/-p/-s



共享内存的工作机制如下所示:

首先linux系统运行的每一个程序,都是一个进程,内核会给每一个进程分配一些资源,叫做pcb(进程控制块)



每一个进程事先要申请能够访问内核态中的一块内存单元,这块单元就是共享块,可以是一个文件,对该文件进行读写操作

但是每一个进程对该文件的操作如何做到是同一个文件呢?

这里有一个key值,用来标识该文件,可以使用ls –i命令查看,利用该key值就可以对该共享内存进行操作











对共享内存的处理过程






使用过程:

1、先获得key

Ftok()可以得到一个key值

2、向内核申请(类似malloc)

Shmget()

申请的size必须是内存页的整数倍

Key可以从ftok得到,也可以为IPC_PRIVATE

3、将申请到的共享内存映射到用户空间(绑定)

4、像使用普通内存空间一样使用此空间

5、如果不再使用,要先将地址映射解除掉

6、释放申请的共享内存

7、删除共享内存标记
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: