[发明专利]一种传递共享内存的方法和装置有效
申请号: | 201310446221.7 | 申请日: | 2011-06-17 |
公开(公告)号: | CN103995736B | 公开(公告)日: | 2017-09-22 |
发明(设计)人: | 王东临 | 申请(专利权)人: | 天津书生软件技术有限公司 |
主分类号: | G06F9/46 | 分类号: | G06F9/46 |
代理公司: | 暂无信息 | 代理人: | 暂无信息 |
地址: | 300308 天津市滨海新区空港*** | 国省代码: | 天津;12 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 传递 共享 内存 方法 装置 | ||
本案是申请号为201110164503.9(一种传递共享内存的方法和装置),申请日为2011.6.17的中国专利申请的分案申请。
技术领域
本发明涉及数据交换技术,尤其涉及一种传递共享内存的方法和装置。
背景技术
传统意义上的本地内存传递方式通常仅局限于一个进程的内部,是因为操作系统为每个运行于其中的进程所提供的虚拟内存空间都是相同的,而虚拟内存与物理内存之间的映射完全由操作系统控制,应用程序进程只能通过虚拟内存地址访问实际存储于物理内存中的数据。由此可见,即使是完全相同的虚拟内存地址,在不同进程中所对应的物理内存也可以完全不同,故不同进程之间是无法通过本地内存传递数据的。
为了提高进程间数据交换的效率,简化进程间通信的流程,大多数操作系统都会提供共享内存的进程间通信机制。所述的共享内存不是从某一进程的内存中划分出来的,而是在系统的物理内存中开辟一块可以为多个进程共享的内存区域,因为每个进程的内存总是私有的,建立共享内存的目的是希望每一个访问它的进程连接它,这个连接过程称为映射。系统在建立共享内存时给共享内存分配每个进程的本地内存地址,每个进程的本地内存地址都可以连接到相应的共享内存。即将共享内存分别映射到每一个进程各自的本地内存空间,从而实现多个进程之间基于共享内存的数据交换。
图1为现有技术中传递共享内存的示意图,如图1所示:在同一系统中有两个进程(进程A和进程B)正在运行,其中进程A期望通过访问共享内存来实现对进程B信息的调用,在这种情况下,进程A可称之为调用者进程,进程B可称之为被调用者进程。具体来说,进程A调用进程B的方法如下:
步骤1:进程A申请一个共享内存;
步骤2:系统根据进程A的申请指定一个共享内存关键词(0X00)建立共享内存(0X00),并通过一定的方式告知进程A和进程B;
在本步骤中,系统可以通过如下方式将共享内存关键词告知进程A和进程B:
A、系统采用特殊文件以匿名方式创建共享内存时,操作系统通过特殊文件将共享内存关键词(0X00)告知进程A和进程B,但是,这种方式一般只适用于具有亲缘关系的进程之间。例如,在父进程中先调用mmap函数,再调用fork函数,那么在父进程调用fork函数后,子进程继承父进程匿名映射后的本地内存地址;
B、系统也可以在编译程序的命令行参数中指定同一个公共头文件,该公共头文件包含共享内存关键词(0X00),并同时告知进程A和进程B,但是,在关键字已经与一个共享内存相结合的情况下,任何试图创建同名共享内存的操作都会失败,此时,系统必须处理这种失败,删除已有的共享内存,然后再次尝试创建,使得流程更加复杂,并且可能需要多次尝试;
为了解决同名共享内存问题,进程A和进程B约定一个路径名和项目ID(一个介于0到255之间的字符值),进程A调用fork函数,将这两个值变换为一个关键字,系统根据此关键字创建共享内存;但是,这种方式通常只能应用于类UNIX操作系统,而且仅限于系统的路径和项目ID为公知的;
步骤3:进程A把共享内存(0X00)连接(即映射)到自己的本地内存地址(即进程A的本地内存地址0X003D2C8);进程B把共享内存(0X00)映射(即连接)到自己的本地内存地址(即进程B的本地内存地址0X0024C28),从而实现进程A和进程B之间基于共享内存(0X00)的数据交换。
从上述现有技术公开的技术方案中,可以看出,系统在创建共享内存时,不仅需要依赖特殊的文件系统,有可能存在共享内存创建失败的情形,同时,进程A和进程B都必须通过共享内存关键词与共享内存会合,再将共享内存映射到各自的本地内存地址,流程比较复杂,容易导致进程间共享内存数据交换的不同步性。而这种进程间数据交换的不同步性是因为进程间共享内存数据交换和进程内本地内存数据交换方式的不统一造成的。
发明内容
有鉴于此,本发明实施例提供了一种传递共享内存的方法和装置,能够实现进程间共享内存和进程内本地内存这两种数据交换方式的统一,提高进程间共享内存数据交换的同步性。
为实现上述目的,本发明实施例采用如下技术方案。
一种传递共享内存的方法,包括:
调用函数以调用者进程的本地内存地址作为关键词创建共享内存并以所述的共享内存关键词为参数构建函数调用语句;
将所述的函数调用语句发送给被调用者进程,以供被调用者进程解析函数调用语句获取共享内存。
本发明实施例还提供了一种实现传递共享内存方法的装置,应用于调用者进程侧,包括:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于天津书生软件技术有限公司,未经天津书生软件技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201310446221.7/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种电子行车记录仪
- 下一篇:车辆防溜坡驱动控制器、系统及驱动控制方法