一种传递共享内存的方法和装置制造方法及图纸

技术编号:6882111 阅读:158 留言:0更新日期:2012-04-11 18:40
本发明专利技术实施例公开了一种传递共享内存的方法和装置。其中,所述传递共享内存的方法包括:调用函数以调用者进程的本地内存地址作为关键词创建共享内存并以所述的共享内存关键词为参数构建函数调用语句;将所述的函数调用语句发送给被调用者进程,以供被调用者进程解析函数调用语句获取共享内存,实现数据交换。应用本发明专利技术实施例提供的方法和装置,可以实现进程间的共享内存和进程内的本地内存这两种数据交换方式的统一,提高数据交换的同步性。

【技术实现步骤摘要】

本专利技术涉及数据交换技术,尤其涉及一种传递共享内存的方法和装置
技术介绍
传统意义上的本地内存传递方式通常仅局限于一个进程的内部,是因为操作系统为每个运行于其中的进程所提供的虚拟内存空间都是相同的,而虚拟内存与物理内存之间的映射完全由操作系统控制,应用程序进程只能通过虚拟内存地址访问实际存储于物理内存中的数据。由此可见,即使是完全相同的虚拟内存地址,在不同进程中所对应的物理内存也可以完全不同,故不同进程之间是无法通过本地内存传递数据的。为了提高进程间数据交换的效率,简化进程间通信的流程,大多数操作系统都会提供共享内存的进程间通信机制。所述的共享内存不是从某一进程的内存中划分出来的, 而是在系统的物理内存中开辟一块可以为多个进程共享的内存区域,因为每个进程的内存总是私有的,建立共享内存的目的是希望每一个访问它的进程连接它,这个连接过程称为映射。系统在建立共享内存时给共享内存分配每个进程的本地内存地址,每个进程的本地内存地址都可以连接到相应的共享内存。即将共享内存分别映射到每一个进程各自的本地内存空间,从而实现多个进程之间基于共享内存的数据交换。图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都必须通过共享内存关键词与共享内存会合,再将共享内存映射到各自的本地内存地址,流程比较复杂,容易导致进程间共享内存数据交换的不同步性。而这种进程间数据交换的不同步性是因为进程间共享内存数据交换和进程内本地内存数据交换方式的不统一造成的。
技术实现思路
有鉴于此,本专利技术实施例提供了一种传递共享内存的方法和装置,能够实现进程间共享内存和进程内本地内存这两种数据交换方式的统一,提高进程间共享内存数据交换的同步性。为实现上述目的,本专利技术实施例采用如下技术方案。一种传递共享内存的方法,包括调用函数以调用者进程的本地内存地址作为关键词创建共享内存并以所述的共享内存关键词为参数构建函数调用语句;将所述的函数调用语句发送给被调用者进程,以供被调用者进程解析函数调用语句获取共享内存。本专利技术实施例还提供了一种实现传递共享内存方法的装置,应用于调用者进程侧,包括第一模块,用于调用函数以调用者进程的本地内存地址作为关键词创建共享内存并以所述的共享内存关键词为参数构建函数调用语句;第二模块,用于将所述的函数调用语句发送给被调用者进程,以供被调用者进程解析函数调用语句获取共享内存。 本专利技术实施例还提供了一种实现传递共享内存方法的装置,应用于被调用者进程侧,包括第一模块,用于接收来自调用者进程的函数调用语句,其中所述函数调用语句的构建方式为调用函数以调用者进程的本地内存地址作为关键词创建共享内存并以所述的共享内存关键词为参数构建;第二模块,用于解析函数调用语句获取共享内存。本专利技术实施例通过调用函数直接以本地内存地址为共享内存关键词创建共享内存,通过这种方式保持共享内存关键字与本地内存地址的一致性,使所创建的共享内存可以直接与调用者进程的本地内存连接,调用者进程不需要根据共享内存关键词与共享内存会合并将共享内存映射到本地内存,从而使调用者进程本地内存与共享内存之间透明,本地内存数据内容可以直接复制到共享内存;同时,本专利技术实施例又通过调用函数将共享内存关键词作为参数构建函数调用语4句,并将函数调用语句发送给被调用者进程供其获取共享内存,使得被调用者进程本地内存访问与共享内存访问在函数接口层面加以统一;因此,本专利技术实施例提供的技术方案可以保证进程间共享内存的传递数据方式和进程内本地内存的传递数据方式的统一,简化了数据交换的流程,提高了数据交换的同步性。附图说明图1为现有技术中传递共享内存的示意图;图2为本专利技术实施例中传递共享内存的方法流程图;图3为本专利技术实施例中传递共享内存的示意图;图4为本专利技术实施例中传递共享内存的方法流程图。具体实施例方式为使本专利技术的目的、技术方案和优点更加清楚,下面结合附图对本专利技术做进一步的详细描述。为了实现进程间共享内存和进程内本地内存的数据方式的统一,本专利技术实施例提供的一种传递共享内存的方法,具体包括调用函数以调用者进程的本地内存地址作为关键词创建共享内存并以所述的共享内存关键词为参数构建函数调用语句;将所述的函数调用语句发送给被调用者进程,以供被调用者进程解析函数调用语句获取共享内存,从而实现进程间的数据交换。图2为本专利技术实施例提供的一种传递共享内存的方法流程图;如图2所示,该方法包括步骤201 调用者进程调用函数以本地内存地址作为关键词创建共享内存;所述的函数包括shmat,shmdt, shmget, shmctl等可以创建共享内存的函数;所述的本地内存地址可以是调用者进程的文本化形式的本地内存地址;所述的共享内存是在系统物理内存中建立一个可以为多个进程共享的内存段;在该步骤中,调用者进程利用函数以本地内存地址为关键词创建共享内存,所创建的共享内存可以直接与调用者进程的本地内存连接,调用者进程不需要根据共享内存关键词与共享内存会合并将共享内存映射到本地内存,从而使调用者进程本地内存与共享内存之间透明。步骤202 调用者进程调用函数以所述的共享内存关键词为参数构建函数调用语句,并通本文档来自技高网
...

【技术保护点】
1.一种传递共享内存的方法,其特征在于:调用函数以调用者进程的本地内存地址作为关键词创建共享内存并以所述的共享内存关键词为参数构建函数调用语句;将所述的函数调用语句发送给被调用者进程,以供被调用者进程解析函数调用语句获取共享内存。

【技术特征摘要】
1.一种传递共享内存的方法,其特征在于调用函数以调用者进程的本地内存地址作为关键词创建共享内存并以所述的共享内存关键词为参数构建函数调用语句;将所述的函数调用语句发送给被调用者进程,以供被调用者进程解析函数调用语句获取共享内存。2.根据权利要求1所述的方法,其特征在于,所述被调用者进程解析函数调用语句获取共享内存包括被调用者进程解析函数调用语句的参数从中获取共享内存关键词;将共享内存关键词与共享内存会合,并将共享内存映射到被调用者进程的本地内存地址。3.根据权利要求1或2所述的方法,其特征在于,进一步包括被调用者进程根据函数调用语句,执行被调用者进程本地被调用的函数,并将执行结果写入共享内存,通过函数返回语句返回给调用者进程。4.根据权利要求3所述的方法,其特征在于,进一步包括调用者进程将共享内存中被被调用者进程更新的数据内容直接拷贝回调用者进程的本地内存地址。5.根据权利要求1或2所述的方法,其特征在于,所述调用者进程的本地内存地址为文本化形式的内存地址。6.一种传递共享内存的装置,其特征在于,应用于调用者进程侧,包括第一模块,用于调用函数...

【专利技术属性】
技术研发人员:闵卫
申请(专利权)人:北京书生国际信息技术有限公司北京书生网络技术有限公司北京书生数字图书馆软件技术有限公司
类型:发明
国别省市:11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1