【UNIX】什么是IPC对象以及共享内存

sys V 的IPC 对象:对于内核中创建的文件对象,就是文件标识符(它引用了文件对象的全部信息)在进程中文件描述符一般使用当前最小可用值。

对于IPC标识符返回的是索引的整数值,它是全局变量的流水号,在系统中唯一分配的,若果在创建的IPC对象没有关闭,他会全局存在,只有在系统关闭的时候才关闭,这样会造成内存空间的资源被占用。

为了进程之间交换信息,内核专门留了一块内存空间,由进程映射到各自进程私有空间。

【共享内存的实现】:

1)创建/打开共享内存,这里的创建/打开和文件的创建/打开差不多,只是换了一种说法,都是在内核空间创建有一个缓存空间,提供要交换的信息

2)映射共享内存的内容,就是把共享内存的内容映射到进程的地址空间用于访问

3)撤销共享内存的映射,就是解挂的含义,进程不需要再访问共享内存的时候

4)删除共享内存的对象,就是内核系统在内存空间创建的文件描述符

具体代码如下:

时间: 2024-10-13 00:27:02

【UNIX】什么是IPC对象以及共享内存的相关文章

UNIX C XSI_IPC对象、共享内存

1.创建IPC对象 #include <sys/ipc.h> key_t ftok(const char* pathname,int proj_id); 成功返回可用于创建或获取IPC的键,失败则返回-1 2.创建.获取共享内存 #include <sys/shm.h> int shmget(key_t key,size_t size,int shmflg); 成功返回共享内存标志符,失败返回-1 --key:共享内存键 --size:共享内存大小 --shmflg:创建标志,可取

Unix IPC之基于共享内存的计数器

目的 本文主要实现一个基于共享内存的计数器,通过父子进程对其访问. 本文程序需基于<<Unix网络编程-卷2>>的环境才能运行.程序中大写开头的函数为其小写同名函数的包裹函数,增加了错误处理信息. 1 函数介绍 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 #include <sys/mman> /**  * Map addresses starting near ADDR an

Linux IPC实践(8) --共享内存/内存映射

概述 共享内存区是最快的IPC形式.一旦这样的内存映射到共享它的进程的地址空间,这些进程间数据传递不再涉及到内核,换句话说是进程不再通过执行进入内核的系统调用来传递彼此的数据(如图). 共享内存 VS. 其他IPC形式 用管道/消息队列传递数据 用共享内存传递数据 共享内存生成之后,传递数据并不需要再走Linux内核,共享内存允许两个或多个进程共享一个给定的存储区域,数据并不需要在多个进程之间进行复制,因此,共享内存的传输速度更快! mmap内存映射 将文件/设备空间映射到共享内存区 #incl

IPC(SystemV) 之 共享内存

很久以来我都是只闻其名,未见其形.终于在这次系统的学习linux编程中接触到了共享内存.果然很牛. 上一篇文章中我们讲的信号量,个人感觉,严格的说,信号量只是进城通信的辅助.而共享内存才真正实现了进程通信. 共享内存机制允许两个不想关的进程访问同一段物理内存,当然得是一台主机. 头文件<sys/shm.h>   和信号量的情况一样,也需要包含sys/types.h 和 sys/ipc.h .当然有可能已经包含在了sys/shm.h中了. 共享内存函数如下: int shmget(key_t k

IPC通信_共享内存

共享内存允许两个或多个进程共享一个给定的存储区,就是多个进程将同一块物理内存映射到自己的虚拟地址上.因为不需要在客户进程和服务进程之间拷贝,所以是最快的一种IPC. 函数1 #include <sys/shm.h> int shmget(key_t key, size_t size, int flag); 该函数转换键值获取共享内存ID, key键值的获取还是通过ftok函数. 返回值:成功返回共享内存ID, 失败返回-1 参数key:键值(key) 参数size:请求的共享内存的长度,单位字

进程间通信(IPC)之————共享内存

一. 共享内存 在系统中,两个不同的进程都会维护自己的一块地址空间,这个地址空间一般是虚拟地址,会通过mmu和页表映射到对应的物理内存中,因为不同的进程会有不同的内存空间,因此两个进程之间是无法看见彼此的数据的,而共享内存就是使两个进程看到同一块地址空间,以此来实现不同进程间的数据交互. 值得提出的是,共享内存是进程间通信方式中最高效的一种,因为是直接通过访问内存来交换数据的,省去了消息队列中数据的复制和信号量中进行P.V操作所占用的时间. 二. 共享内存中的函数 共享内存的创建与销毁 创建:

System V IPC 之共享内存

IPC 是进程间通信(Interprocess Communication)的缩写,通常指允许用户态进程执行系列操作的一组机制: 通过信号量与其他进程进行同步 向其他进程发送消息或者从其他进程接收消息 和其他进程共享一段内存区 System V IPC 最初是在一个名为 "Columbus Unix" 的开发版 Unix 变种中引入的,之后在 AT&T 的 System III 中采用.现在在大部分 Unix 系统 (包括 Linux) 中都可以找到. IPC 资源包含信号量.

Linux IPC之共享内存

System V共享内存机制: shmget  shmat  shmdt  shmctl 原理及实现: system V IPC机制下的共享内存本质是一段特殊的内存区域,进程间需要共享的数据被放在该共享内存区域中,所有需要访问该共享区域的进程都要把该共享区域映射到本进程的地址空间中去.这样一个使用共享内存的进程可以将信息写入该空间,而另一个使用共享内存的进程又可以通过简单的内存读操作获取刚才写入的信息,使得两个不同进程之间进行了一次信息交换,从而实现进程间的通信. 共享内存允许一个或多个进程通过

将C++对象保存到共享内存上

将C++对象保存到共享内存上时,由于程序DWON掉或者其他原因停掉程序(不清除共享内存)重新拉起程序时,共享内存上C++对象的虚函数指针已经失效.为了使得不清除共享内存重启程序时C++对象仍然有效,需要恢复共享内存上C++对象的虚函数表,通过C++的placement new可以做到. 假设 void *pShmDataAddr是挂载后的共享内存地址,TData是存放的C++对象,共享内存上总共存放了MAX_OBJ_NUM个对象.具体做法如下. 当程序启动的时候执行操作: TData *pShm