1) 用ftok()函数获得一个ID号.2) shmget()用来开辟/指向一块共享内存的函数3) shmat()将这个内存区映射到本进程的虚拟地址空间。4) shmdt()函数删除本进程对这块内存的使用5) shmctl() 控制对这块共享内存的使用1) mmap()系统调用使得进程之间通过映射同...
分类:
系统相关 时间:
2014-10-28 00:18:18
阅读次数:
387
shmgetint shmget(key_tkey, size_tsize, intflag);key: 标识符的规则size:共享存储段的字节数flag:读写的权限返回值:成功返回共享存储的id,失败返回-1key_t key------------------------------------...
分类:
其他好文 时间:
2014-10-19 02:39:19
阅读次数:
219
本文主要分析内存以及I/O相关的系统调用和库函数的实现原理,根据原理给出在使用过程中需要注意的问题和优化的侧重点,本文涉及到的系统调用包括readahead,pread/pwrite,read/write,mmap,readv/writev,sendfile,fsync/fdatasync/msync,shmget,malloc。
本文先简单介绍应用程序对内存的使用以及I/O系统对...
分类:
其他好文 时间:
2014-09-23 12:55:44
阅读次数:
380
本文首先介绍了众所周知的共享内存API,然后介绍了相关的内核主要数据结构,并逐一分析了shmget、shmat、数据访问、shmdt的内核实现及数据结构之间的动态关系,从数据的关联图即可一窥共享内存的实现机制。...
分类:
系统相关 时间:
2014-09-23 01:59:03
阅读次数:
537
一 概念
内核分配的一块存储去,多个进程可以将物理内存映射到进程的虚拟地址空间,从而实现对内存的直接操作,是效率最高的IPC。
消息队列和管道都有在用户地址空间和内核空间相互复制产生的开销。
二 操作函数
1 创建共享内存
#include
#include
int shmget( key_t key, //代...
分类:
其他好文 时间:
2014-09-22 15:56:52
阅读次数:
312
nginx进程间的通信
进程间消息传递
共享内存
共享内存还是Linux下提供的最基本的进程间通信方式,它通过mmap和shmget系统调用在内存中创建了一块连续的线性地址空间,而通过munmap或者shmdt系统调用可以释放这块内存。使用共享内存的好处是当多个进程使用同一块共享内存时,在任何一个进程修改了共享内存中的内容后,其他进程通过访问这段共享内存都能够得到修改后的内容。
Nginx...
分类:
其他好文 时间:
2014-07-29 14:28:38
阅读次数:
338
共享内存允许两个或多个进程共享一给定的存储区,因为数据不需要来回复制,所以是最快的一种进程间通信机制。共享内存可以通过mmap()映射普通文件(特殊情况下还可以采用匿名映射)机制实现,也可以通过系统V共享内存机制实现。应用接口和原理很简单,内部机制复杂。为了实现更安全通信,往往还与信号量等同步机制共同使用。下面主要介绍系统V共享内存机制,主要用到的系统API包括:
1.shmget函数:获得一个...
分类:
系统相关 时间:
2014-07-26 02:33:37
阅读次数:
317
共享内存共享内存是被多个进程共享的一部分物理内存。共享内存是进程间共享数据的一种最快的方法,一个进程向共享内存写入了数据,共享这个内存区域的所有进程就可以立即看到其中的内容。共享内存实现分为连个步骤:一、创建共享内存,使用shmget函数。二、映射共享内存,将这段创建的共享内存映射到具体的进程空间去...
分类:
系统相关 时间:
2014-07-14 22:28:41
阅读次数:
334
共享内存是两个或多个进程共享同一块内存区域,并通过该内存区域实现数据交换的进程间通信。虽然共享内存是进程间通信的最快速的机制,但是进程间的同步问题靠自身难以解决,于是就需要信号量机制,信号量能很好的解决互斥资源的同步问题。这些牵涉到操作系统里的知识,要好好研究一番同步互斥问题才能继续。
共享内存的工作模式一般是:
1. int shmget(key_t key, int size...
分类:
其他好文 时间:
2014-05-13 23:08:44
阅读次数:
763