CN114296951A - 一种进程间数据共享的方法、系统、终端以及存储介质 - Google Patents

一种进程间数据共享的方法、系统、终端以及存储介质 Download PDF

Info

Publication number
CN114296951A
CN114296951A CN202111487234.XA CN202111487234A CN114296951A CN 114296951 A CN114296951 A CN 114296951A CN 202111487234 A CN202111487234 A CN 202111487234A CN 114296951 A CN114296951 A CN 114296951A
Authority
CN
China
Prior art keywords
data
shared
memory
segment
mapping
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202111487234.XA
Other languages
English (en)
Inventor
徐建浩
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Topsec Technology Co Ltd
Beijing Topsec Network Security Technology Co Ltd
Beijing Topsec Software Co Ltd
Original Assignee
Beijing Topsec Technology Co Ltd
Beijing Topsec Network Security Technology Co Ltd
Beijing Topsec Software Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Topsec Technology Co Ltd, Beijing Topsec Network Security Technology Co Ltd, Beijing Topsec Software Co Ltd filed Critical Beijing Topsec Technology Co Ltd
Priority to CN202111487234.XA priority Critical patent/CN114296951A/zh
Publication of CN114296951A publication Critical patent/CN114296951A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Stored Programmes (AREA)

Abstract

本申请公开了一种进程间数据共享的方法、系统、终端以及存储介质,其中方法包括:创建用于存储待共享的目标段数据的自定义输入段;同时,将待共享的目标段数据放入自定义输入段内,通过内存映射文件的方式,将待共享的目标段数据映射到进程地址空间,实现进程间数据共享。本申请具有的技术效果是减少较大工作量,提高程序的开发效率。

Description

一种进程间数据共享的方法、系统、终端以及存储介质
技术领域
本发明涉及数据处理的技术领域,尤其是涉及一种进程间数据共享的方法、系统、终端以及存储介质。
背景技术
在程序开发中常需使用Linux操作系统,而进程是在操作系统中正在运转的一个应用程序,也是一个独立的资源分配单元;在现有的Linux操作系统中,每个进程均各自拥有不同的用户地址空间,不同进程之间的资源是相互独立、没有关联,因此任意一个进程的全局变量在另一个进程中都看不到,不能在一个进程中直接访问另一个进程的资源;但是不同进程之间需要进行数据交互,譬如数据传输、资源共享、事件通知等,因而需要用到进程间通信。
进程之间要交换数据就必须通过内核,在内核中开辟一块缓冲区,一个进程把数据从用户地址空间拷贝到内核缓冲区,另一个进程再从内核缓冲区把数据读走;目前进程间要完成数据交互需要借助操作系统提供的特殊方法,其中包括管道、信号、套接字、共享内存这四种通信方式:
(1)管道的实质是内核利用环形队列的数据结构在内核缓冲区中的一个实现,读和写的位置都是自动增长的,不能随意改变,一个数据只能被读取一次,读取后数据会从缓冲区中移出;当缓冲区读空或者写满时,有一定规则控制相应的读进程或者写进程进入等待队列;当空的缓冲区有新数据写入或者满的缓冲区有数据读取出来时,就唤醒等待队列中的进程继续读写。
但是管道的局限在于采用半双工的通信方式且缓冲区大小有限制,在需要传递或处理大批量数据时的效率不高。
(2)信号是软件层次上对中断机制的一种模拟,也是一种异步通信方式;信号可以在任何时候发送给某一进程,而且无需知道该进程的状态,信号也可以在用户地址空间的内核之间直接交互,利用信号通知用户地址空间的进程发生了哪些系统事件。
但是信号的通信方式较复杂,不适用于一般场景的进程间通信。
(3)套接字与另外三个通信方式的不同点在于:它可以用于不同机器之间的进程通信,但是套接字受限于网络波动的影响,在数据传输时的稳定性较差。
(4)共享内存是不同进程将其虚拟内存映射到相同的物理内存,这段共享内存虽然由一个进程创建,但是可供多个进程进行访问,共享内存在使用前需要利用系统,调用每一块共享内存,进而完成创建、挂接、设置属性、去挂接等操作,但相对于另外三种通信方式的效率高。
在实现本申请过程中,发明人发现该技术中至少存在如下问题:在多进程系统架构场景中,程序中定义的全局变量无法进行进程间通信,而传统的共享内存通信方式需要调用多个系统调用接口,在实现数据交互初始化的过程中需要较大的工作量,且灵活性和扩展性较低,使得开发效率较低。对此,有待进一步改进。
发明内容
为了在多进程系统架构的场景中提高开发效率,本申请提供一种进程间数据共享的方法、系统、终端以及存储介质。
第一方面,本申请提供一种进程间数据共享的方法,采用如下的技术方案:一种进程间数据共享的方法,所述方法包括以下步骤:
创建用于存储待共享的目标段数据的自定义输入段;
将所述待共享的目标段数据放入自定义输入段内,并利用内存映射文件的方式,将所述待共享的目标段数据映射到进程地址空间,实现进程间数据共享。
通过采用上述技术方案,创建的自定义输入段可以与系统的默认段区相互分开,从而使系统资源可以更加集中的完成数据共享功能,减少资源不足而影响其他数据段正常使用的情况;而利用内存地址映射文件的方式,可以减少系统调用的步骤,实现直接操作待共享的目标段数据的地址空间,从而提高开发效率;同时,把初始化流程进行封装处理,使开发人员无需关注初始化过程即可实现进程间数据共享,从而进一步提高开发效率。
可选的,所述创建用于存储待共享的目标段数据的自定义输入段为采用GCC编译器创建section属性的自定义输入段。
通过采用上述技术方案,采用GCC编译器可以实现把用户文本形式的源代码转化成计算机可以直接执行的机器代码,而section属性可以提供访问标识对象的权限。
可选的,所述将所述待共享的目标段数据放入自定义输入段内,具体包括:通过在所述待共享的目标段数据之前增加用于改变待共享的目标段数据特性的属性,实现将所述待共享的目标段数据放入所述自定义输入段内。
通过采用上述技术方案,在待共享的目标段数据内添加用于改变声明数据特性的属性,可以实现把待共享的目标段数据映射到自定义输入段内。
可选的,所述利用内存映射文件的方式,将所述待共享的目标段数据映射到进程地址空间,具体包括:
修改链接脚本,添加用于修改所述待共享的目标段数据位置的修改段,其中,所述修改段的内存地址空间位于“.bss”数据段的内存地址空间上方;
调用系统调用接口,实现将所述待共享的目标段数据映射到进程地址空间。
通过采用上述技术方案,修改链接脚本可以修改待共享的目标段数据的位置,使待共享的目标段数据被放到自定义输入段的正确位置;而调用系统调用接口可以实现将目标段数据映射到进程地址空间内。
可选的,所述修改段,具体包括:
用于对齐内存页边界的对齐行,所述内存页边界以0x1000字节对齐;
用于识别所述待共享的目标段数据起始地址的起始段;
以及用于识别所述待共享的目标段数据结束地址的结束段,所述结束段位于起始段后。
通过采用上述技术方案,对齐行可以以0x1000字节对齐内存页的边界,从而提高存储效率;而起始段可以识别待共享的目标段数据的起始地址;同时,结束段可以识别待共享的目标段数据的结束地址。
可选的,所述调用系统调用接口,实现将所述待共享的目标段数据映射到进程地址空间,具体包括:
调用mmap函数接口,用于创建内存映射区,其中,所述mmap函数接口的参数值包括用于设置所述内存映射区开始地址的“start”、用于设置所述内存映射区长度的“length”、用于设置所述内存映射区的文件权限的“prot”,以及用于设置所述内存映射区的内存映射对象类型的“flags”;
修改所述mmap函数接口的参数值,其中,把所述“start”设置为自定义输入段的起始地址;把所述“length”设置为自定义输入段的长度大小;把所述“prot”设置为可读可写;把“flags”设置为进程间共享内存,使得所述待共享的目标段数据与所有映射到该待共享的目标段数据的进程均共享同一个映射空间。
通过采用上述技术方案,调用mmap函数接口可以实现创建内存映射区,从而实现共享内存;同时,可以减少read、write等系统调用操作,从而提高开发效率。
可选的,在创建section属性的自定义输入段之后,获取所述自定义输入段的地址范围;在所述利用内存映射文件的方式,将所述待共享的目标段数据映射到进程地址空间之后,获取内存地址映射文件的地址范围;把所述自定义输入段的地址范围与内存地址映射文件的地址范围作比较,若所述自定义输入段的地址范围位于内存地址映射文件的地址范围内,则所述自定义输入段位于共享映射空间内。
通过采用上述技术方案,把自定义输入段的地址范围与内存地址映射文件的地址范围作比较,实现检查代码,从而提高代码的质量以及减少代码的缺陷,同时缩短发现错误的时间,减少开发成本。
第二方面,本申请提供一种进程间数据共享的系统,采用如下的技术方案:一种进程间数据共享的系统,所述系统包括:
编译构建模块:创建用于存储待共享的目标段数据的自定义输入段;
映射模块:将所述待共享的目标段数据放入自定义输入段内,并利用内存映射文件的方式,将所述待共享的目标段数据映射到进程地址空间,实现进程间数据共享。
通过采用上述技术方案,创建的自定义输入段可以与系统的默认段区相互分开,可以使系统资源可以更加集中的完成数据共享功能,从而减少资源不足而影响其他数据段正常使用的情况;利用内存地址映射文件的方式,可以减少系统调用的步骤,实现直接操作待共享的目标段数据的地址空间,从而提高开发效率;把初始化流程进行封装处理,使开发人员无需关注初始化过程即可实现进程间数据共享,从而进一步提高开发效率。
第三方面,本申请提供一种智能终端,采用如下的技术方案:
一种智能终端,包括存储器和处理器,所述存储器上存储有能够被处理器加载并执行上述方法的计算机程序。
第四方面,本申请提供一种计算机可读存储介质,采用如下的技术方案:
一种计算机可读存储介质,存储有能够被处理器加载并执行上述方法的计算机程序。
综上所述,本申请包括以下至少一种有益技术效果:
1.利用内存地址映射文件的方式,可以减少系统调用的步骤,实现直接操作待共享的目标段数据的地址空间,从而提高开发效率;而对初始化流程进行封装处理,可以使开发人员无需关注初始化过程即可实现进程间数据共享,从而进一步提高开发效率。
2.把自定义输入段的地址范围与内存地址映射文件的地址范围作比较,可以检查代码,从而提高代码的质量。
附图说明
图1是本申请实施例中一种进程间数据共享的方法的流程图。
图2是本申请实施例中内存地址空间的示意图。
图3是本申请实施例中内存地址空间的示意图。
图4是本申请实施例中进程内存分布的示意图。
图5是本申请实施例中S2的子流程图。
图6是本申请实施例中S23的子流程图。
图7是本申请实施例中内存映射文件的示意图。
图8是本申请实施例中检查自定义输入段的流程图。
图9是本申请实施例中检查全局变量的流程图。
图10是本申请实施例中一种进程间数据共享的系统的结构框图。
附图标记说明:
1、编译模块;2、映射模块。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图1-10以及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本申请,并不用于限定本申请。
本申请实施例公开了一种进程间数据共享的方法。
如图1所示,该方法包括以下步骤:
S1,创建用于存储待共享的目标段数据的自定义输入段;
具体来说,采用GCC编译器创建section属性的自定义输入段;其中,GCC编译器是由GNU开发的编程语言译器,适用于多进程系统架构的场景中,已经被Linux操作系统采纳为标准的编译器;在程序源代码被编译的过程中,用户文本形式的源代码转化成计算机可以直接执行的机器代码,该机械代码为可执行文件,即程序。
通常来说,用来存放程序的段被称为程序段,在程序源代码被编译后,程序源代码包括程序指令和程序数据,该程序数据位于程序段;在冯诺依曼的体系结构中,规定了一个进程必须包括代码段,该代码段属于程序指令;如图2所示,此时进程的内存地址空间从最高内存地址到最低内存地址依次是“Other data”数据段、“.comment”数据段、“.bss”数据段、“.data”数据段以及“.text”数据段,其中,“.comment”数据段、“.bss”数据段、“.data”数据段以及“.text”数据段均属于程序段。
在系统默认情况下,目标文件被GCC编译器编译后,代码会被放到“.text”数据段,而已经初始化的全局变量和静态变量会被放到“.data”数据段中,未被初始化的全局变量和静态变量会被放到“.bss”数据段中。
section属性的作用是标识对象的某个节,并提供该节的属性的访问权限;在本实施例中,为了便于辨识自定义输入段,故把自定义输入段命名为“custom_name”,如图2和图3所示,自定义输入段在内存地址空间中的位置位于“.bss”数据段与“.data”数据段之间。
如图4所示,图中的“system”表示系统进程,“stack”表示栈,而“sharedlibraries”表示链接共享库,“heap”表示堆,同时,“.custom_name”表示自定义输入段,“.text”表示代码段,此时的进程内存分布从最高内存地址到最低内存地址依次是“system”、“stack”、“shared libraries”、“heap”、“.custom_name”、“.data”以及“.text”。
S2,将待共享的目标段数据放入自定义输入段内,并利用内存映射文件的方式,将待共享的目标段数据映射到进程地址空间,实现进程间数据共享。
在本实施例中,待共享的目标段数据是全局变量,从而减少调用较大数据量的情况,提高代码的灵活性和扩展性;在其他实施例中,待共享的目标段数据还可以是函数;
如图5所示,S2包括S21、S22以及S23这三个子步骤,具体包括:
S21,在待共享的目标段数据之前增加用于改变待共享的目标段数据特性的属性。
在本实施例中,该属性为“_attribute_(section("name"))”;由于自定义输入段的命名为“custom_name”,故name为custom_name,即该属性为“_attribute_(section("custom_name"))”。
在GCC编译器中,“_attribute_”属性的作用是改变待共享的目标段数据的特性,而“_attribute_(section("custom_name"))”属性的作用是将待共享的目标段数据放入命名为“custom_name”的自定义输入段中。
因此,在待共享的目标段数据内添加“_attribute_(section("name"))”属性后,可以实现将待共享的目标段数据映射到自定义输入段内。
S22,修改链接脚本,添加修改段。
在本实施例中,链接脚本为lds文件,在其他实施例中,链接脚本还可以是scatter文件;通常来说,创建一个可执行程序需要经过预处理、编译、汇编以及链接;在链接阶段中,由ld或者GCC编译器间接调用ld来完成;lds文件在链接阶段中起作用,lds文件是一个起链接定位作用的链接脚本。
在本实施例中,具体修改lds文件的代码为“ld-verbose>femor.lds”,该代码的作用是生成默认链接信息的.lds文件;在其他实施例中还可以是“gcc femor_section.c-lrt-T femor.lds”,该代码为GCC编译器的编译指令,其中,“femor_section.c”为源码,“-T”用于指定lds选项,而“-lrt”表示链接时所需要的库,“femor.lds”表示lds链接脚本。
通过修改lds文件,既定义了整个程序编译后的链接过程,又决定了可执行程序的各个段的位置,同时把待共享的目标段数据放到自定义输入段的正确位置。
而修改段的内存地址空间位于“.bss”数据段的内存地址空间的上方。
如表1所示,修改段具体包括对齐行、起始段以及位于起始段后的结束段,在表1中,“.=ALIGN(0x1000);”为对齐行的代码;“__custom_name_start=.;”为起始段的代码;而“__custom_name_end=.;”为结束段的代码。
表1
修改段的代码段:
.=ALIGN(0x1000);
__custom_name_start=.;
.custom_name:{*(.custom_name)};
.=ALIGN(0x1000);
__custom_name_end=.;
.=ALIGN(0x1000);
在对齐行中,由于Linux操作系统默认页的大小为4KB,而内存映射指定的起始地址必须落在页的边界上,故在本实施例中,内存页边界以0x1000字节对齐;因此对齐行的代码为“.=ALIGN(0x1000);”,该对齐行的作用是为后续的内存映射做准备;在其他实施例中,若页的大小不为4KB的情况时,内存页边界的对齐字节根据实际情况调整;起始段的作用是识别待共享的目标段数据的起始地址;结束段的作用是识别待共享的目标段数据的结束地址。
S23,调用系统调用接口,将待共享的目标段数据映射到进程地址空间。
如图6所示,S23包括S231以及S232这两个子步骤,具体包括:
S231,调用mmap函数接口。
通常来说,mmap函数接口属于一种系统调用接口,调用mma)函数接口后可以创建内存映射区,使得进程之间映射到同一个普通文件,同时把普通文件的数据内容映射到内存映射区上,并对该内存映射区的读取和修改,实现对文件数据内容的读取和修改,从而实现共享内存。
在普通文件被映射到进程地址空间后,进程可以相对于访问普通内存一样,对映射到进程地址空间内的普通文件进行访问,从而不必再调用read、write等系统调用操作,缩减处理步骤,提高开发效率。
具体mmap函数接口为“void*mmap(void*addr,size_t length,int prot,intflags,int fd,off_t offset);”其中,参数值“start”表示内存映射区的开始地址;参数值“length”表示内存映射区的长度;而参数值“prot”表示内存映射区的文件权限;参数值“flags”表示内存映射区的内存映射对象类型,而内存映射对象类型分为可以共享和不可以共享这两种情况。
S232,修改mmap函数接口的参数值。
具体的,把参数值“start”设置为自定义输入段的起始地,把参数值“length”设置为自定义输入段的长度大小,把参数值“prot”设置为可读可写,同时,把参数值“flags”设置为进程间共享内存,从而使得待共享的目标段数据与所有映射到该待共享的目标段数据的进程均共享同一个映射空间。
如图7所示,图中的“File memory mapping”表示内存映射文件,进程A中的自定义输入段和进程B中的自定义输入段均映射到内存映射文件内,从而实现不同进程之间的数据共享。
为了验证代码的质量,减少代码的缺陷,故检查自定义输入段是否位于共享映射空间内。
如图8所示,检查自定义输入段是否位于共享映射空间内包括S31、S32以及S33这三个子步骤,具体包括:
S31,获取自定义输入段的地址范围。
在本实施例中,子步骤S31在创建section属性的自定义输入段之后执行,具体的获取代码为“readelf-S a.out”,其中,“a.out”表示可执行程序。
发明人对本申请实施例中的地址范围进行了一系列获取处理,具体如下:
由表2可知,程序中新增了一个命名为“.custom_name”的自定义输入段,该自定义输入段的起始地址为0x602000,而结束地址为“.bss”数据段的起始地址,即为0x605000。
表2
可执行程序的地址:
Figure BDA0003397087930000081
Figure BDA0003397087930000091
S32,获取内存地址映射文件的地址范围。
在本实施例中,子步骤S32在利用内存映射文件的方式,将待共享的目标段数据映射到进程地址空间之后执行,具体的查看进程内存分布的代码为“cat/proc/<pid>/maps”,在其他实施例中,该代码还可以是“pmap-x<pid>”。
S33,把自定义输入段的地址范围与内存地址映射文件的地址范围作比较。
具体的,若自定义输入段的地址范围位于内存地址映射文件的地址范围内,则自定义输入段位于共享映射空间内。
由表3可知,在查看进程内存分布maps时,可以得知映射文件“/dev/shm/file_memory_share”的地址空间基于0x602000-0x605000的范围,而0x602000-0x605000这范围为自定义输入段的地址范围;
在表3中,“rw-s”表示该块内存的属性为可读、可写以及是共享的。
表3
进程内存映射文件的地址范围的片段:
00602000-00605000rw-s 00000000 00:13 2373324/dev/shm/file_memory_share
00605000-0060a000rw-p 00000000 00:00 0[heap]
发明人对本申请实施例中的全局变量,进行了一系列测试,具体如下:
如图9所示,检查全局变量是否位于自定义输入段内包括S41、S42、S43以及S44这四个子步骤,具体包括:
S41,创建一个位于待共享的目标段数据内的变量。
在本实施例中,子步骤S41在将待共享的目标段数据映射到进程地址空间之后执行,具体来说,通过宏定义方式创建变量,具体创建变量的代码如表3所示,表4创建变量的代码段:
#define__share__attribute__((section("custom_name")))
int__share value=1;
在其他实施例中,还可以如表5所示定义变量,
表5创建变量的代码段:
int value=1;
int__attribute__((section("custom_name")))value=1;
在表5中,“int value=1;”表示定义全局变量,而“int__attribute__((section("custom_name")))value=1;”表示定义全局共享变量。
S42,获取变量的地址范围。
具体来说,查看value的地址范围。
S43,获取自定义输入段的地址范围。
具体的获取代码为“readelf-S a.out”。
S44,把变量的地址范围与自定义输入段的地址范围作比较。
具体的,若变量的地址范围位于自定义输入段的地址范围内,则变量为全局共享变量。
总的来说,利用section属性定义的value变量,会被放到命名为“custom_name”的自定义输入段中,即value的地址会在自定义输入段的地址范围内,表示value在进程间是共享的,因此value为全局共享变量。
本申请实施例的实施原理为:采用GCC编译器创建section属性的自定义输入段,通过内存地址映射文件方式把待共享的目标段数据放入自定义输入段内,实现自定义输入段的共享映射。
基于上述方法,本申请实施例还公开了一种进程间数据共享的系统。
如图10所示,该系统包括以下模块:
编译构建模块1:创建用于存储待共享的目标段数据的自定义输入段;
映射模块2:将待共享的目标段数据放入自定义输入段内,并利用内存映射文件的方式,将待共享的目标段数据映射到进程地址空间,实现进程间数据共享。
本申请实施例还公开了一种智能终端。
具体的,该智能终端包括存储器和处理器,存储器上存储有能够被处理器加载并执行上述一种进程间数据共享的方法的计算机程序。
本申请实施例还公开一种计算机可读存储介质。
该存储介质存储有能够被处理器加载并执行上述一种进程间数据共享的方法的计算机程序,该存储介质包括:移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(RandomAccessMemory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上均为本申请的较佳实施例,并非依此限制本申请的保护范围,故:凡依本申请的方法、原理、结构所做的等效变化,均应涵盖于本申请的保护范围之内。

Claims (10)

1.一种进程间数据共享的方法,其特征在于,所述方法包括以下步骤:
创建用于存储待共享的目标段数据的自定义输入段;
将所述待共享的目标段数据放入自定义输入段内,并利用内存映射文件的方式,将所述待共享的目标段数据映射到进程地址空间,实现进程间数据共享。
2.根据权利要求1所述的进程间数据共享的方法,其特征在于,所述创建用于存储待共享的目标段数据的自定义输入段为采用GCC编译器创建section属性的自定义输入段。
3.根据权利要求1所述的进程间数据共享的方法,其特征在于,所述将所述待共享的目标段数据放入自定义输入段内,具体包括:
通过在所述待共享的目标段数据之前增加用于改变待共享的目标段数据特性的属性,实现将所述待共享的目标段数据放入所述自定义输入段内。
4.根据权利要求1所述的进程间数据共享的方法,其特征在于,所述利用内存映射文件的方式,将所述待共享的目标段数据映射到进程地址空间,具体包括:
修改链接脚本,添加用于修改所述待共享的目标段数据位置的修改段,其中,所述修改段的内存地址空间位于“.bss”数据段的内存地址空间上方;
调用系统调用接口,实现将所述待共享的目标段数据映射到进程地址空间。
5.根据权利要求4所述的进程间数据共享的方法,其特征在于,所述修改段,具体包括:
用于对齐内存页边界的对齐行,所述内存页边界以0x1000字节对齐;
用于识别所述待共享的目标段数据起始地址的起始段;
以及用于识别所述待共享的目标段数据结束地址的结束段,所述结束段位于起始段后。
6.根据权利要求4所述的进程间数据共享的方法,其特征在于,所述调用系统调用接口,实现将所述待共享的目标段数据映射到进程地址空间,具体包括:
调用mmap函数接口,用于创建内存映射区,其中,所述mmap函数接口的参数值包括用于设置所述内存映射区开始地址的“start”、用于设置所述内存映射区长度的“length”、用于设置所述内存映射区的文件权限的“prot”,以及用于设置所述内存映射区的内存映射对象类型的“flags”;
修改所述mmap函数接口的参数值,其中,把所述“start”设置为自定义输入段的起始地址;把所述“length”设置为自定义输入段的长度大小;把所述“prot”设置为可读可写;把“flags”设置为进程间共享内存,使得所述待共享的目标段数据与所有映射到该待共享的目标段数据的进程均共享同一个映射空间。
7.根据权利要求2所述的进程间数据共享的方法,其特征在于,
在创建section属性的自定义输入段之后,获取所述自定义输入段的地址范围;
在所述利用内存映射文件的方式,将所述待共享的目标段数据映射到进程地址空间之后,获取内存地址映射文件的地址范围;
把所述自定义输入段的地址范围与内存地址映射文件的地址范围作比较,若所述自定义输入段的地址范围位于内存地址映射文件的地址范围内,则所述自定义输入段位于共享映射空间内。
8.一种进程间数据共享的系统,其特征在于,所述系统包括,
编译构建模块(1):创建用于存储待共享的目标段数据的自定义输入段;
映射模块(2):将所述待共享的目标段数据放入所述自定义输入段内,并利用内存映射文件的方式,将所述待共享的目标段数据映射到进程地址空间,实现进程间数据共享。
9.一种智能终端,其特征在于,包括存储器和处理器,所述存储器上存储有能够被处理器加载并执行如权利要求1至7中任一项所述方法的计算机程序。
10.一种计算机可读存储介质,其特征在于,存储有能够被处理器加载并执行如权利要求1至7中任一项所述方法的计算机程序。
CN202111487234.XA 2021-12-07 2021-12-07 一种进程间数据共享的方法、系统、终端以及存储介质 Pending CN114296951A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111487234.XA CN114296951A (zh) 2021-12-07 2021-12-07 一种进程间数据共享的方法、系统、终端以及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111487234.XA CN114296951A (zh) 2021-12-07 2021-12-07 一种进程间数据共享的方法、系统、终端以及存储介质

Publications (1)

Publication Number Publication Date
CN114296951A true CN114296951A (zh) 2022-04-08

Family

ID=80965128

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111487234.XA Pending CN114296951A (zh) 2021-12-07 2021-12-07 一种进程间数据共享的方法、系统、终端以及存储介质

Country Status (1)

Country Link
CN (1) CN114296951A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114595084A (zh) * 2022-05-10 2022-06-07 麒麟软件有限公司 一种Linux操作系统上系统级进程间视频共享方法
CN116483597A (zh) * 2023-06-25 2023-07-25 广东科伺智能科技有限公司 一种数据共享方法、装置、设备和存储介质

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114595084A (zh) * 2022-05-10 2022-06-07 麒麟软件有限公司 一种Linux操作系统上系统级进程间视频共享方法
CN116483597A (zh) * 2023-06-25 2023-07-25 广东科伺智能科技有限公司 一种数据共享方法、装置、设备和存储介质
CN116483597B (zh) * 2023-06-25 2024-01-05 广东科伺智能科技有限公司 一种数据共享方法、装置、设备和存储介质

Similar Documents

Publication Publication Date Title
US10367822B2 (en) Restrictive access control for modular reflection
JP4878715B2 (ja) オペレーティングシステムに適合しないアプリケーションにパッチを当てる方法、コンピュータシステム及びコンピュータ可読記録媒体
US10261796B2 (en) Processor and method for executing in-memory copy instructions indicating on-chip or off-chip memory
CN114296951A (zh) 一种进程间数据共享的方法、系统、终端以及存储介质
KR102104695B1 (ko) 하드웨어 디바이스에 대한 소프트웨어 인터페이스
US7558724B2 (en) Operation region describing a virtual device
US20060136134A1 (en) Information processing apparatus and method for obtaining software processing log
JP2000181725A (ja) 実行可能なコ―ドを改変し、追加機能を付与するための方法およびシステム
US20080005728A1 (en) Methods, systems, and computer program products for enabling cross language access to an addressable entity in an execution environment
US20080005727A1 (en) Methods, systems, and computer program products for enabling cross language access to an addressable entity
CN111796831A (zh) 一种多芯片兼容的编译方法和装置
US20020174418A1 (en) Constant return optimization transforming indirect calls to data fetches
US20230289187A1 (en) Method and apparatus for rectifying weak memory ordering problem
CN114327777A (zh) 确定全局页目录的方法、装置、电子设备及存储介质
RU2510073C2 (ru) Управление дескриптором типа для замороженных объектов
CN117193882A (zh) 一种基于微内核操作系统的elf加载方法
CN112905180A (zh) 指令优化方法及装置
US9323543B2 (en) Capability based device driver framework
CN109408226A (zh) 数据处理方法、装置及终端设备
US11055202B1 (en) Compilation scheme for tagged global variables
CN113051004B (zh) 一种依赖函数的处理方法、装置、设备及存储介质
US8122205B2 (en) Structured virtual registers for embedded controller devices
US11132305B1 (en) Automatic static region generation for memory protection units (MPUs)
CN109947407B (zh) 一种数据获取方法及装置
CN110045962B (zh) 一种支持多语言脚本执行的方法和装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination