linux进程间通信 共享内存

linux进程间通信 共享内存

ID:9240701

大小:39.60 KB

页数:10页

时间:2018-04-24

linux进程间通信 共享内存_第1页
linux进程间通信 共享内存_第2页
linux进程间通信 共享内存_第3页
linux进程间通信 共享内存_第4页
linux进程间通信 共享内存_第5页
资源描述:

《linux进程间通信 共享内存》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Linux进程间通信共享内存共享内存(SharedMemory)共享内存区域是被多个进程共享的一部分物理内存。如果多个进程都把该内存区域映射到自己的虚拟地址空间,则这些进程就都可以直接访问该共享内存区域,从而可以通过该区域进行通信。共享内存是进程间共享数据的一种最快的方法,一个进程向共享内存区域写入了数据,共享这个内存区域的所有进程就可以立刻看到其中的内容。这块共享虚拟内存的页面,出现在每一个共享该页面的进程的页表中。但是它不需要在所有进程的虚拟内存中都有相同的虚拟地址。图共享内存映射图象所有的SystemVIPC对象一样,对于共享内存对象的访问由ke

2、y控制,并要进行访问权限检查。内存共享之后,对进程如何使用这块内存就不再做检查。它们必须依赖于其它机制,比如SystemV的信号灯来同步对于共享内存区域的访问。每一个新创建的共享内存对象都用一个shmid_kernel数据结构来表达。系统中所有的shmid_kernel数据结构都保存在shm_segs向量表中,该向量表的每一个元素都是一个指向shmid_kernel数据结构的指针。shm_segs向量表的定义如下:structshmid_kernel*shm_segs[SHMMNI];SHMMNI为128,表示系统中最多可以有128个共享内存对象。数据

3、结构shmid_kernel的定义如下:structshmid_kernel{structshmid_dsu;/*thefollowingareprivate*/unsignedlongshm_npages;/*sizeofsegment(pages)*/unsignedlong*shm_pages;/*arrayofptrstoframes-SHMMAX*/structvm_area_struct*attaches;/*descriptorsforattaches*/};其中:shm_pages是该共享内存对象的页表,每个共享内存对象一个,它描述了如

4、何把该共享内存区域映射到进程的地址空间的信息。shm_npages是该共享内存区域的大小,以页为单位。shmid_ds是一个数据结构,它描述了这个共享内存区的认证信息,字节大小,最后一次粘附时间、分离时间、改变时间,创建该共享区域的进程,最后一次对它操作的进程,当前有多少个进程在使用它等信息。其定义如下:structshmid_ds{structipc_permshm_perm;/*operationperms*/intshm_segsz;/*sizeofsegment(bytes)*/__kernel_time_tshm_atime;/*lastat

5、tachtime*/__kernel_time_tshm_dtime;/*lastdetachtime*/__kernel_time_tshm_ctime;/*lastchangetime*/__kernel_ipc_pid_tshm_cpid;/*pidofcreator*/__kernel_ipc_pid_tshm_lpid;/*pidoflastoperator*/unsignedshortshm_nattch;/*no.ofcurrentattaches*/unsignedshortshm_unused;/*compatibility*/voi

6、d*shm_unused2;/*ditto-usedbyDIPC*/void*shm_unused3;/*unused*/};attaches描述被共享的物理内存对象所映射的各进程的虚拟内存区域。每一个希望共享这块内存的进程都必须通过系统调用将其粘附(attach)到它的虚拟内存中。这一过程将为该进程创建了一个新的描述这块共享内存的vm_area_struct数据结构。进程可以选择共享内存在它的虚拟地址空间的位置,也可以让Linux为它选择一块足够的空闲区域。这个新的vm_area_struct结构除了要连接到进程的内存结构mm中以外,还被连接到共享内

7、存数据结构shmid_kernel的一个链表中,该结构中的attaches指针指向该链表。vm_area_struct数据结构中专门提供了两个指针:vm_next_shared和vm_prev_shared,用于连接该共享区域在使用它的各进程中所对应的vm_area_struct数据结构。其实,虚拟内存并没有在粘附的时候创建,而要等到第一个进程试图访问它的时候才创建。图SystemVIPC机制-共享内存Linux为共享内存提供了四种操作。1.共享内存对象的创建或获得。与其它两种IPC机制一样,进程在使用共享内存区域以前,必须通过系统调用sys_ipc(

8、call值为SHMGET)创建一个键值为key的共享内存对象,或获得已经存在的键值为key的某

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。