电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

Linux进程间通信共享内存shmget方式VIP免费

Linux进程间通信共享内存shmget方式_第1页
1/7
Linux进程间通信共享内存shmget方式_第2页
2/7
Linux进程间通信共享内存shmget方式_第3页
3/7
Linux 进程间通信 - 共享内存 shmget 方式(转)共享内存区域是被多个进程共享的一部分物理内存。如果多个进程都把该内存区域映射到自己的虚拟地址空间,则这些进程就都可以直接访问该共享内存区域,从而可以通过该区域进行通信。共享内存是进程间共享数据的一种最快的方法,一个进程向共享内存区域写入了数据,共享这个内存区域的所有进程就可以立刻看到其中的内容。这块共享虚拟内存的页面,出现在每一个共享该页面的进程的页表中。但是它不需要在所有进程的虚拟内存中都有相同的虚拟地址。图 共享内存映射图象所有的 SystemVIPC对象一样,对于共享内存对象的获取是由 key控制。内存共享之后,对进程如何使用这块内存就不再做检查。它们必须依赖于其它机制,比如 SystemV的信号灯来同步对于共享内存区域的访问(信号灯如何控制对临界代码的访问另起一篇说话)。每一个新创建的共享内存对象都用一个 shmid_kernel数据结构来表达。系统中所有的shmid_kernel数据结构都保存在 shm_segs向量表中,该向量表的每一个元素都是一个指向shmid_kernel数据结构的指针。shm_segs向量表的定义如下:structshmid_kernel*shm_segs[SHMMNI];SHMMNI为128,表示系统中最多可以有128个共享内存对象。数据结构 shmid_kernel的定义如下:structshmid_kernel{structshmid_dsu;/*the followingareprivate*/unsignedlongshm_npages;/*sizeofsegment(pages)*/unsignedlong*shm_pages;/*arrayofptrstoframes-> SHMMAX*/structvm_area_struct*attaches;/*descriptorsforattaches*/};其中:shm_pages代表该共享内存对象的所占据的内存页面数组,数组里面的每个元素当然是每个内存页面的起始地址.shm_npages则是该共享内存对象占用内存页面的个数,以页为单位。这个数量当然涵盖了申请空间的最小整数倍.(Anewsharedmemorysegment,withsizeequaltothevalueofsizeroundeduptoamultipleofPAGE_SIZE)shmid_ds是一个数据结构,它描述了这个共享内存区的认证信息,字节大小,最后一次粘附时间、分离时间、改变时间,创建该共享区域的进程,最后一次对它操作的进程,当前有多少个进程在使用它等信息。其定义如下:structshmid_ds{structipc_permshm_perm;/*operationperms*/intshm_segsz;/*sizeofsegment(bytes)*/__kernel_time_tshm_atime;/*lastattachtime*/__kernel_time_tshm_dtime;/*lastdetachtime*/__kernel_time_tshm_ctime;/*lastchangetime*/__kernel_ipc_pid_tsh...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

Linux进程间通信共享内存shmget方式

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部