unix/linux共享内存应用与陷阱 (2012-06-12 14:32) 标签: linux 内存 分类: linux应用 共享内存是系统出于多个进程之间通讯的考虑,而预留的的一块内存区。在/proc/sys/kernel/目录下,记录着共享内存的一些限制,如一个共享内存区的最大字节数shmma...
分类:
系统相关 时间:
2015-09-15 14:28:58
阅读次数:
253
每一个进程都有着自己独立的地址空间,比如程序之前申请了一块内存,当调用fork函数之后,父进程和子进程所使用的是不同的内存。因此进程间的通信,不像线程间通信那么简单。但是共享内存编程接口可以让一个进程使用一个公共的内存区段,这样我们便能轻易的实现进程间的通信了(当然对于此内存区段的访问还是要控制好的)。
共享内存实现进程通信的优点:
共享内存是进程通信方式中最快速的方式之一,它的快速体现在,为...
分类:
系统相关 时间:
2015-08-19 20:47:31
阅读次数:
329
共享内存是最高效的IPC机制,因为它不涉及进程之间的任何数据传输。这种高效带来的问题是,我们必须使用其他辅助手段来同步进程对内存的访问,否则会产生竞态条件(一般我们与信号量结合使用)。因此,共享内存通常和其他进程间通信方式一起使用。
Linux共享内存的API都定义在sys/shm.h头文件中,包括4个系统调用:shmget、shmat、shmdt和shmctl
#include ...
分类:
系统相关 时间:
2015-06-30 15:08:00
阅读次数:
267
所谓共享内存就是使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。其他进程能把同一段共享内存段“连接到”他们自己的地址空间里去。所有进程都能访问共享内存中的地址。如果一个进程向这段共享内...
分类:
系统相关 时间:
2015-06-16 14:20:57
阅读次数:
179
概述 共享内存区是最快的IPC形式。一旦这样的内存映射到共享它的进程的地址空间,这些进程间数据传递不再涉及到内核,换句话说是进程不再通过执行进入内核的系统调用来传递彼此的数据(如图)。 共享内存 VS. 其他IPC形式 用管道/消息队列传递数据 用共享内存传递数据 共享内存生成之后,传递数据并不需要再走Linux内核,共享内存允许两个或多个进程共享一个给定的...
分类:
系统相关 时间:
2015-02-19 15:09:59
阅读次数:
280
这应该可以算得上是IPC的一种,虽然效率可能并没有其它IPC方式高.
看到map很容易联想到映射.的确,mmap就是一种映射方式,将打开的文件和一段连续的内存做映射.使得对内存进行操作即可以实现对文件的读写,反过来,也就是说,可以通过这种方式来达到进程通信.
mmap系列涉及三个函数.
void * mmap(void *buf, size_t len, int prot, int flag...
分类:
系统相关 时间:
2015-01-03 23:59:28
阅读次数:
489
什么是共享内存
顾名思义,共享内存就是允许两个不相关的进程访问同一个逻辑内存。共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常安排为同一段物理内存。进程可以将同一段共享内存连接到它们自己的地址空间中,所有进程都可以访问共享内存中的地址,就好像它们是由用...
分类:
系统相关 时间:
2014-12-25 18:07:50
阅读次数:
305
今天Mayuyu要学习Linux中一个重要的东西,即共享内存。我们知道在Linux中提供了多种IPC通信机制,比如信号,信号量,管道,消息队列,共享内存和套接字等。其中共享内存的效率最高。Mayuyu将用以下几个方面来介绍
Contens
1. 共享内存的认识
2. 共享内存的原理
3. Linux中共享内存的API
4. 共享内存的读...
分类:
系统相关 时间:
2014-12-09 17:50:08
阅读次数:
332
共享内存基本概念 共享内存区是最快的IPC形式。一旦这样的内存映射到共享它的进程的地址空间,这些进程间数据传递不再涉及到内核,换句话说是进程不再通过执行进入内核的系统调用来传递彼此的数据(如图)。 共享内存 VS. 其他IPC形式 用管道/消息队列传递数据 用共享内存传递数据 (内核为每个IPC对象维护一个数据结构) 共享内存生成之后,传递数据并不需要再走Linux...
分类:
系统相关 时间:
2014-11-27 16:17:24
阅读次数:
313
shmdt函数功能:将共享内存段与当前进程脱离原型:int shmdt(const void *shmaddr);参数: shmaddr: 由shmat所返回的指针 返回值: 成功返回0;失败返回-1//实践:运行程序,观察ipcs输出
int main()
{
//获取或者打开共享内存
int shmid = shmget(0x15764221, 1024 * siz...
分类:
系统相关 时间:
2014-11-27 16:16:35
阅读次数:
332