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、删除共享内存标记
任意两个进程之间的通信如果是有名管道,是没有办法对管道中间的数据获取读和写操作的,只能是两段的数据,那么如何对所有的数据进行操作---共享内存
共享内存也是通过内核来完成
命令: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、删除共享内存标记
相关文章推荐
- Linux环境进程间通信: 共享内存
- Linux环境进程间通信:共享内存
- Linux环境进程间通信(五): 共享内存(下)
- Linux环境进程间通信(五): 共享内存(上)
- Linux环境进程间通信 共享内存
- Linux环境进程间通信(五): 共享内存(下)
- 将 Win32 C/C++ 应用程序迁移到 POWER 上的 Linux,第 1 部分: 进程、线程和共享内存服务 (转载)
- Linux编程常用的函数(五) 共享内存
- Linux环境进程间通信(五): 共享内存(下)
- Linux中共享内存及内存映射技术
- linux-c: ipc_共享内存
- Linux中共享内存及内存映射技术研究
- Linux的共享内存技术
- Linux环境进程间通信(五): 共享内存(上)
- linux 文件操作函数 通过例子来解释 父子间文件描述符共享 内存映像图
- Linux环境进程间通信:共享内存
- Linux中共享内存及内存映射技术研究
- Linux环境进程间通信: 共享内存
- Linux环境进程间通信(五): 共享内存(上)
- 将 Win32 C/C++ 应用程序迁移到 POWER 上的 Linux,第 1 部分: 进程、线程和共享内存服务 (转)