CN105868028A - 一种进程间共享数据的方法、装置及终端 - Google Patents

一种进程间共享数据的方法、装置及终端 Download PDF

Info

Publication number
CN105868028A
CN105868028A CN201510037120.3A CN201510037120A CN105868028A CN 105868028 A CN105868028 A CN 105868028A CN 201510037120 A CN201510037120 A CN 201510037120A CN 105868028 A CN105868028 A CN 105868028A
Authority
CN
China
Prior art keywords
memory block
virtual
address space
operating system
address
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.)
Granted
Application number
CN201510037120.3A
Other languages
English (en)
Other versions
CN105868028B (zh
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.)
Shenzhen Lianke Network Technology Co.,Ltd.
Original Assignee
Huawei Technologies 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 Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN201510037120.3A priority Critical patent/CN105868028B/zh
Publication of CN105868028A publication Critical patent/CN105868028A/zh
Application granted granted Critical
Publication of CN105868028B publication Critical patent/CN105868028B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Memory System Of A Hierarchy Structure (AREA)
  • Memory System (AREA)

Abstract

本申请公开一种进程间共享数据的方法、装置及终端,本申请将虚拟i/o设备分别映射至第一进程和第二进程的虚拟地址空间中,第一目标地址空间和第二目标地址空间相同;若第一进程需要共享数据,第一进程向操作系统传输内存分配请求,操作系统分配内存块,将内存块映射到第一目标地址空间,将内存块的信息和第一目标地址空间的第一地址段与内存块的映射关系存储至页表管理模块中。第二进程访问第一地址段中的虚拟地址,触发操作系统产生访问异常,指示虚拟i/o设备执行异常处理例程,将内存块映射至所述第二进程,以便第二进程能够访问内存块。本申请不需要预先分配共享内存,而在需要共享数据时,才由第一进程触发系统分配内存块,提高内存的利用效率。

Description

一种进程间共享数据的方法、装置及终端
技术领域
本申请涉及共享内存技术领域,尤其涉及一种进程间共享数据的方法、装置及终端。
背景技术
现有的操作系统经常需要多个进程并行完成工作,每个进程都无法直接获取其他进程中的数据,因此通常利用共享内存实现不同进程之间的数据共享。
在传统技术中,如果利用共享内存实现不同进程之间的数据共享,需要预先分配多个进程均可访问的内存,即共享内存,当不同进程间需要共享数据时,由其中一个进程将需要共享的数据存储至所述共享内存中,其他各个进程可通过访问所述共享内存,获取需要共享的数据。其中,分配共享内存的方法通常包括以下步骤:首先,选择其中一个进程作为第一进程,由第一进程向系统申请一个内存块,并将该内存块映射到所述第一进程的虚拟地址空间中;然后,第一进程向其他各个进程发送映射通知,所述映射通知中包含有所述内存块的地址和大小等信息;其他各个进程通过解析所述映射通知,获取其中包含的信息,并将该内存块映射到各个进程的虚拟地址空间中,完成分配。映射指的是,将内存或者设备寄存器等和地址关联起来的动作。上述将内存块映射到进程的虚拟地址空间,需要预先由操作系统通过内存控制器为内存块配置一个虚拟地址,并建立所述内存块的虚拟地址与该内存块的物理地址转换的表项,该表项通常被称为TLB(Translation Look-aside Buffer,转换后援缓冲器)表项,然后,建立所述内存块的虚拟地址和进程的虚拟地址之间的关联,从而完成内存块到进程的虚拟地址空间的映射。在内存块映射到进程的虚拟地址空间后,进程可通过所述TLB表项,以及该内存块的虚拟地址和进程的虚拟地址之间的关联,确定所述内存块的物理地址,根据该物理地址实现对所述内存块的访问。内存分配完成后,所述内存块成为共享内存。若其中一个进程向共享内存中存入数据,该进程会向其他各个进程发送共享通知,其他各个进程接收到所述共享通知后,若需要获取所述数据,则可通过访问共享内存,获取所述共享内存中的数据,实现数据在进程间的共享。
通过上述方法,能够通过共享内存实现不同进程之间的数据共享。但是,发明人发现,上述实现不同进程间数据共享的方法,共享内存需要预先创建,难以实时调整大小,而创建后的共享内存往往存在过大或过小的问题,不符合进程共享数据的需求,导致内存资源的使用效率低。例如,若预先创建的共享内存过大,会造成共享内存的浪费,甚至导致内存使用紧张;若预先创建的共享内存过小,则不能满足进程共享数据的需求。
发明内容
本发明实施例提供了一种进程间共享数据的方法、装置及终端,以一定程度上改善传统技术中,通过共享内存实现不同进程之间的数据共享时,内存资源的使用效率低的问题。
为了解决上述技术问题,本发明实施例公开了如下技术方案:
根据本公开实施例的第一方面,提供一种进程间共享数据的方法,包括:
在第一进程和第二进程初始化的过程中,将操作系统创建的虚拟i/o设备分别映射到所述第一进程的虚拟地址空间和所述第二进程的虚拟地址空间中,其中,所述第一进程和第二进程均运行于所述操作系统中,设定所述虚拟i/o设备在所述第一进程中占用的虚拟地址空间为第一目标地址空间,所述虚拟i/o设备在所述第二进程中占用的虚拟地址空间为第二目标地址空间,所述第一目标地址空间和所述第二目标地址空间相同;
将所述操作系统为所述第一进程分配的内存块映射到所述第一目标地址空间中,建立所述内存块与所述第一目标地址空间中的第一地址段的映射关系,并将所述内存块的信息以及所述映射关系存储至操作系统预先创建的页表管理模块中,其中,所述内存块是所述操作系统根据所述第一进程触发的内存分配请求分配的,所述内存块用于存储所述第一进程需要共享的数据;
检测所述操作系统是否产生访问异常,其中,所述第二进程访问所述第一地址段中的虚拟地址时,触发所述操作系统产生访问异常;
基于所述操作系统产生访问异常的检测结果,指示所述虚拟i/o设备执行异常处理例程,所述异常处理例程包括:获取触发所述操作系统产生访问异常时,所述第二进程访问的所述第一地址段的虚拟地址,并根据所述第一地址段的虚拟地址和所述页表管理模块中存储的所述内存块的信息以及所述映射关系,获取所述内存块的信息,根据所述内存块的信息,将所述内存块映射至所述第二进程,以便所述第二进程能够访问所述内存块,获取所述第一进程在所述内存块中存储的数据。
结合第一方面,在第一方面的第一种可能的实现方式中,在所述第二进程获取所述内存块中存储的数据后,还包括:
将所述内存块从所述第一目标地址空间中去映射;
将虚拟i/o设备映射至所述第一地址段指示的虚拟地址空间中;
或者,
将所述内存块从所述第二进程的虚拟地址空间中去映射;
确定将所述内存块映射至所述第二进程后,所述第二进程的虚拟地址空间中的第二地址段与所述内存块存在映射关系,将虚拟i/o设备映射至所述第二地址段指示的虚拟地址空间中。
结合第一方面,在第一方面的第二种可能的实现方式中,所述指示所述虚拟i/o设备执行异常处理例程之前,还包括:
判断所述第二进程是否具备所述内存块的访问权限;
基于所述第二进程具备所述内存块的访问权限的判断结果,再执行指示所述虚拟i/o设备执行异常处理例程的操作。
根据本公开实施例的第二方面,提供一种进程间共享数据的方法,应用于由操作系统创建的虚拟i/o设备,所述虚拟i/o设备被分别映射至所述操作系统中第一进程的虚拟地址空间和第二进程的虚拟地址空间中,所述虚拟i/o设备在所述第一进程中占用的虚拟地址空间为第一目标地址空间,所述虚拟i/o设备在所述第二进程中占用的虚拟地址空间为第二目标地址空间,并且所述第一目标空间地址和第二目标空间地址相同,所述进程间共享数据的方法包括:
接收执行异常处理例程的指示,其中,所述指示是将操作系统为所述第一进程分配的内存块映射到所述第一目标地址空间中后,若所述第二进程访问第一地址段中的虚拟地址时,触发操作系统指示虚拟i/o设备向所述虚拟i/o设备发送的;所述内存块的信息,以及所述内存块与所述第一目标地址空间中的第一地址段之间的映射关系被存储至操作系统预先创建的页表管理模块中,所述内存块是所述操作系统根据所述第一进程触发的内存分配请求分配的,所述内存块用于存储所述第一进程需要共享的数据;
获取触发所述操作系统产生访问异常时,所述第二进程访问的所述第一地址段的虚拟地址,并根据所述第一地址段的虚拟地址和所述页表管理模块中存储的所述内存块的信息以及所述映射关系,获取所述内存块的信息;
根据所述内存块的信息,将所述内存块映射至所述第二进程,以便所述第二进程能够访问所述内存块,获取所述第一进程在所述内存块中存储的数据。
根据本公开实施例的第三方面,提供一种进程间共享数据的装置,包括:
虚拟i/o设备映射模块,用于在第一进程和第二进程初始化的过程中,将操作系统创建的虚拟i/o设备分别映射到所述第一进程的虚拟地址空间和所述第二进程的虚拟地址空间中,其中,所述第一进程和第二进程均运行于所述操作系统中,设定所述虚拟i/o设备在所述第一进程中占用的虚拟地址空间为第一目标地址空间,所述虚拟i/o设备在所述第二进程中占用的虚拟地址空间为第二目标地址空间,所述第一目标地址空间和所述第二目标地址空间相同;
内存块映射模块,用于将所述操作系统为所述第一进程分配的内存块映射到所述第一目标地址空间中,建立所述内存块与所述第一目标地址空间中的第一地址段的映射关系,并将所述内存块的信息以及所述映射关系存储至操作系统预先创建的页表管理模块中,其中,所述内存块是所述操作系统根据所述第一进程触发的内存分配请求分配的,所述内存块用于存储所述第一进程需要共享的数据;
访问异常检测模块,用于检测所述操作系统是否产生访问异常,其中,所述第二进程访问所述第一地址段中的虚拟地址时,触发所述操作系统产生访问异常;
指示模块,用于基于所述操作系统产生访问异常的检测结果,指示所述虚拟i/o设备执行异常处理例程,所述异常处理例程包括:获取触发所述操作系统产生访问异常时,所述第二进程访问的所述第一地址段的虚拟地址,并根据所述第一地址段的虚拟地址和所述页表管理模块中存储的所述内存块的信息以及所述映射关系,获取所述内存块的信息,根据所述内存块的信息,将所述内存块映射至所述第二进程,以便所述第二进程能够访问所述内存块,获取所述第一进程在所述内存块中存储的数据。
结合第三方面,在第三方面的第一种可能的实现方式中,所述进程间共享数据的装置还包括:
第一去映射模块,用于将所述内存块从所述第一目标地址空间中去映射;
第一映射模块,用于将虚拟i/o设备映射至所述第一地址段指示的虚拟地址空间中;
或者,
第二去映射模块,用于将所述内存块从所述第二进程的虚拟地址空间中去映射;
第二映射模块,用于确定将所述内存块映射至所述第二进程后,所述第二进程的虚拟地址空间中的第二地址段与所述内存块存在映射关系,将虚拟i/o设备映射至所述第二地址段指示的虚拟地址空间中。
结合第三方面,在第三方面的第二种可能的实现方式中,所述进程间共享数据的装置还包括:
判断模块,用于指示所述虚拟i/o设备执行异常处理例程之前,判断所述第二进程是否具备所述内存块的访问权限;
所述指示模块还用于,基于所述第二进程具备所述内存块的访问权限的判断结果,再执行指示所述虚拟i/o设备执行异常处理例程的操作。
根据本公开实施例的第四方面,提供一种进程间共享数据的装置,其特征在于,应用于由操作系统创建的虚拟i/o设备,所述虚拟i/o设备被分别映射至所述操作系统中第一进程的虚拟地址空间和第二进程的虚拟地址空间中,所述虚拟i/o设备在所述第一进程中占用的虚拟地址空间为第一目标地址空间,所述虚拟i/o设备在所述第二进程中占用的虚拟地址空间为第二目标地址空间,并且所述第一目标空间地址和第二目标空间地址相同,所述进程间共享数据的装置包括:
指示接收模块,用于接收执行异常处理例程的指示,其中,所述指示是将操作系统为所述第一进程分配的内存块映射到所述第一目标地址空间中后,若所述第二进程访问第一地址段中的虚拟地址时,触发操作系统指示虚拟i/o设备向所述虚拟i/o设备发送的;所述内存块的信息,以及所述内存块与所述第一目标地址空间中的第一地址段之间的映射关系被存储至操作系统预先创建的页表管理模块中,所述内存块是所述操作系统根据所述第一进程触发的内存分配请求分配的,所述内存块用于存储所述第一进程需要共享的数据;
内存块信息获取模块,用于获取触发所述操作系统产生访问异常时,所述第二进程访问的所述第一地址段的虚拟地址,并根据所述第一地址段的虚拟地址和所述页表管理模块中存储的所述内存块的信息以及所述映射关系,获取所述内存块的信息;
第二进程映射模块,用于根据所述内存块的信息,将所述内存块映射至所述第二进程,以便所述第二进程能够访问所述内存块,获取所述第一进程在所述内存块中存储的数据。
根据本公开实施例的第五方面,提供一种终端,包括:处理器、存储器和总线,其中,
所述处理器通过总线,与所述存储器相连接;
所述存储器,用于存储进程间共享数据的方法的程序代码;
所述处理器,用于获取所述存储器中存储的程序代码,并根据所述程序代码执行以下操作:
在第一进程和第二进程初始化的过程中,将操作系统创建的虚拟i/o设备分别映射到所述第一进程的虚拟地址空间和所述第二进程的虚拟地址空间中,其中,所述第一进程和第二进程均运行于所述操作系统中,设定所述虚拟i/o设备在所述第一进程中占用的虚拟地址空间为第一目标地址空间,所述虚拟i/o设备在所述第二进程中占用的虚拟地址空间为第二目标地址空间,所述第一目标地址空间和所述第二目标地址空间相同;
将所述操作系统为所述第一进程分配的内存块映射到所述第一目标地址空间中,建立所述内存块与所述第一目标地址空间中的第一地址段的映射关系,并将所述内存块的信息以及所述映射关系存储至操作系统预先创建的页表管理模块中,其中,所述内存块是所述操作系统根据所述第一进程触发的内存分配请求分配的,所述内存块用于存储所述第一进程需要共享的数据;
检测所述操作系统是否产生访问异常,其中,所述第二进程访问所述第一地址段中的虚拟地址时,触发所述操作系统产生访问异常;
基于所述操作系统产生访问异常的检测结果,指示所述虚拟i/o设备执行异常处理例程,所述异常处理例程包括:获取触发所述操作系统产生访问异常时,所述第二进程访问的所述第一地址段的虚拟地址,并根据所述第一地址段的虚拟地址和所述页表管理模块中存储的所述内存块的信息以及所述映射关系,获取所述内存块的信息,根据所述内存块的信息,将所述内存块映射至所述第二进程,以便所述第二进程能够访问所述内存块,获取所述第一进程在所述内存块中存储的数据。
根据本公开实施例的第六方面,提供一种终端,包括:处理器、存储器和总线,其中,
所述处理器通过总线,与所述存储器相连接;
所述存储器,用于存储进程间共享数据的方法的程序代码;
所述处理器,用于获取所述存储器中存储的程序代码,并根据所述程序代码执行以下操作:
生成由操作系统创建的虚拟i/o设备,所述虚拟i/o设备被分别映射至所述操作系统中第一进程的虚拟地址空间和第二进程的虚拟地址空间中,所述虚拟i/o设备在所述第一进程中占用的虚拟地址空间为第一目标地址空间,所述虚拟i/o设备在所述第二进程中占用的虚拟地址空间为第二目标地址空间,并且所述第一目标空间地址和第二目标空间地址相同,
所述虚拟i/o设备接收执行异常处理例程的指示,其中,所述指示是将操作系统为所述第一进程分配的内存块映射到所述第一目标地址空间中后,若所述第二进程访问第一地址段中的虚拟地址时,触发操作系统指示虚拟i/o设备向所述虚拟i/o设备发送的;所述内存块的信息,以及所述内存块与所述第一目标地址空间中的第一地址段之间的映射关系被存储至操作系统预先创建的页表管理模块中,所述内存块是所述操作系统根据所述第一进程触发的内存分配请求分配的,所述内存块用于存储所述第一进程需要共享的数据;
所述虚拟i/o设备获取触发所述操作系统产生访问异常时,所述第二进程访问的所述第一地址段的虚拟地址,并根据所述第一地址段的虚拟地址和所述页表管理模块中存储的所述内存块的信息以及所述映射关系,获取所述内存块的信息;
所述虚拟i/o设备根据所述内存块的信息,将所述内存块映射至所述第二进程,以便所述第二进程能够访问所述内存块,获取所述第一进程在所述内存块中存储的数据。
本申请公开一种进程间共享数据的方法、装置及终端,本申请中,预先由操作系统创建虚拟i/o设备,并且将虚拟i/o设备分别映射至第一进程的虚拟地址空间和第二进程的虚拟地址空间中,并且所述虚拟i/o设备占用的第一目标地址空间和第二目标地址空间相同。当第一进程需要共享数据时,所述第一进程向所述操作系统传输内存分配请求,所述操作系统根据所述内存分配请求分配内存块,并将所述内存块映射到所述第一目标地址空间中,建立所述内存块与所述第一目标地址空间中的第一地址段的映射关系,将所述内存块的信息以及所述映射关系存储至操作系统预先创建的页表管理模块中。若第二进程需要获取所述内存块中存储的数据,所述第二进程会访问所述第一地址段中的虚拟地址,触发所述操作系统产生访问异常。若所述操作系统产生访问异常,会指示所述虚拟i/o设备执行异常处理例程,从而将所述内存块映射至所述第二进程,以便所述第二进程能够访问所述内存块,获取所述第一进程在所述内存块中存储的数据,该内存块即成为共享内存。
本申请公开方案,不需要预先分配共享内存,而是在需要共享数据时,才由第一进程触发操作系统分配内存块,实现动态分配共享内存,该分配共享内存的方法用时短,便于根据共享数据的需求,实时迅速的调整共享内存的大小,提高内存的利用效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其它的附图。
图1为本发明公开的一种进程间共享数据的方法的实施例流程图;
图2为本发明公开的一种进程间共享数据的方法中,进程将虚拟i/o设备映射至自身的地址空间后,进程的虚拟地址空间的示意图;
图3为本发明公开的一种进程间共享数据的方法中,在将内存块映射到第一进程的虚拟i/o设备占用的地址空间后,第一进程的虚拟地址空间的示意图;
图4为本发明公开的一种进程间共享数据的方法中,在第二进程中映射内存块后,第一进程的虚拟地址空间和第二进程的虚拟地址空间的示意图;
图5为本发明公开的一种进程间共享数据的方法中,第一进程和第二进程对内存块去映射后,第一进程和第二进程的地址空间的示意图;
图6为本发明公开的又一种进程间共享数据的方法的实施例流程图;
图7为本发明公开的一种进程间共享数据的装置的结构示意图;
图8为本发明公开的又一种进程间共享数据的装置的结构示意图;
图9为本发明公开的一种终端的结构示意图;
图10为本发明公开的又一种终端的结构示意图。
具体实施方式
本申请实施例提供一种进程间共享数据的方法、装置及终端,以一定程度上改善传统技术中,通过共享内存实现不同进程之间的数据共享时,内存资源的使用效率低的问题。
为了使本领域的技术人员更好地理解本发明实施例中的技术方案,并使本发明实施例的上述目的、特征和优点能够更加明显易懂,下面结合附图对本发明实施例中技术方案作进一步详细的说明。
本申请公开一种进程间共享数据的方法,应用该方法的操作系统中的CPU读取多个应用程序的程序代码,生成多个进程,其中,所述程序代码存储在存储器中,并且,至少有两个进程之间有共享数据的需求。本申请中,为简明起见,仅以两个进程(即第一进程和第二进程)为例进行说明。
操作系统除了能够生成多个进程,还创建了虚拟i/o设备和页表管理模块。其中,所述虚拟i/o设备为一个虚拟的设备驱动模块,所述页表管理模块用于存储系统分配的各个内存块的信息等。
参见图1所示的工作流程示意图,本申请公开的进程间共享数据的方法包括:
步骤S11、在第一进程和第二进程初始化的过程中,将操作系统创建的虚拟i/o设备分别映射到所述第一进程的虚拟地址空间和所述第二进程的虚拟地址空间中,其中,所述第一进程和第二进程均运行于所述操作系统中,设定所述虚拟i/o设备在所述第一进程中占用的虚拟地址空间为第一目标地址空间,所述虚拟i/o设备在所述第二进程中占用的虚拟地址空间为第二目标地址空间,所述第一目标地址空间和所述第二目标地址空间相同。
虚拟i/o设备为一个虚拟的设备驱动模块,将虚拟i/o设备映射到进程的虚拟地址空间,指的是将虚拟i/o设备与进程的虚拟地址空间中的一个地址段关联起来,建立所述虚拟i/o设备与该地址段的映射关系,所述映射关系通常存储至页表管理模块中。其中,所述进程的虚拟地址空间中,与所述虚拟i/o设备存在映射关系的地址段,指的是所述虚拟i/o设备占用的虚拟地址空间。
参见图2,图2为将虚拟i/o设备映射至所述第一进程的虚拟地址空间和所述第二进程的虚拟地址空间后,第一进程的虚拟地址空间和第二进程的虚拟地址空间的示意图。在将所述虚拟i/o设备映射到第一进程的虚拟地址空间和第二进程的虚拟地址空间中时,通常会将所述虚拟i/o设备所占用的虚拟地址空间,设置为所述第一进程和第二进程最大可能使用的共享内存的虚拟地址空间。例如,预先设定所述第一进程最大可能使用1Gigabyte的共享内存,则所述第一进程会将虚拟i/o设备映射到1Gigabyte的虚拟地址空间中。
另外,在本申请中,第一目标地址空间和第二目标地址空间相同,指的是所述虚拟i/o设备在第一进程中占用的虚拟地址空间,和所述虚拟i/o设备在所述第二进程中占用的虚拟地址空间相同。例如,虚拟i/o设备与第一进程的虚拟地址空间中(0x00100000,0x00B00000)这一地址段存在映射关系,则所述虚拟i/o设备在第二进程的虚拟地址空间中占用的地址段也为(0x00100000,0x00B00000),也就是说,所述虚拟i/o设备与第二进程的虚拟地址空间中(0x00100000,0x00B00000)这一地址段也存在映射关系。
步骤S12、将所述操作系统为所述第一进程分配的内存块映射到所述第一目标地址空间中,建立所述内存块与所述第一目标地址空间中的第一地址段的映射关系,并将所述内存块的信息以及所述映射关系存储至操作系统预先创建的页表管理模块中,其中,所述内存块是所述操作系统根据所述第一进程触发的内存分配请求分配的,所述内存块用于存储所述第一进程需要共享的数据。
当需要共享数据时,第一进程会触发操作系统,操作系统根据所述第一进程的触发,为所述第一进程分配内存块。在将所述内存块映射到所述第一目标地址空间之后,第一进程则可以向所述内存块中写入数据。
在将操作系统为所述第一进程分配的内存块映射到所述第一目标地址空间后,所述第一进程的虚拟地址空间的示意图如图3所示,该图中,假设操作系统为所述第一进程分配的内存块为第二个内存块,并且,将所述第二个内存块映射到所述第一目标地址空间中。
另外,需要将所述内存块的信息存储至操作系统预先创建的页表管理模块中。其中,所述内存块的信息包括:所述内存块的地址和大小,所述内存块的地址可以为所述内存块的起始地址,或者,为所述内存块的开始地址或结束地址,并且,所述内存块的地址包括虚拟地址和物理地址两种类型。
步骤S13、检测所述操作系统是否产生访问异常,其中,所述第二进程访问所述第一地址段中的虚拟地址时,触发所述操作系统产生访问异常。
虚拟i/o设备为一个虚拟的设备驱动模块,若将虚拟i/o设备映射到进程的虚拟地址空间中,并不会占用实际的内存。若虚拟i/o设备映射的某一进程的虚拟地址空间没有对应实际的内存页面,该进程在访问所述虚拟i/o设备映射的所述虚拟地址空间时,操作系统会产生访问异常。
在步骤S12中,将所述内存块映射至第一目标地址空间中,并且,所述第一目标地址空间中的第一地址段与所述内存块存在映射关系。所述内存块中存储有所述第一进程写入的数据之后,若第二进程需要共享该数据,则所述第二进程需要访问所述第一地址段中的虚拟地址。
其中,所述第二进程可通过多种方式获取所述第一地址段这一虚拟地址。在其中一种方式中,所述第一进程将需要共享的数据存储至所述内存块后,产生通知信息,所述通知信息中包含与所述内存块存在映射关系的虚拟地址,即第一地址段,并且,所述第一进程直接将所述通知信息传输给第二进程,或通过其他进程将所述通知信息转发给第二进程。所述第二进程接收到所述通知信息后,对所述通知信息进行解析,即可获取所述第一地址段。
在另外一种方式中,通过对操作系统的预先操作,为操作系统中分布的各个内存块设置相应次序,操作系统根据该次序依次为第一进程分配内存块。例如,在上一次共享数据时,已经为所述第一进程分配了第一内存块,那么本次在进程间共享数据时,操作系统在所述第一进程的触发下,会为所述第一进程分配第二内存块,这种情况下,第二进程能够根据该次序,确定本次操作分配的是第二内存块,进而根据预先存储的映射关系,确定与所述第二内存块具有映射关系的地址段,即第一地址段。
当然,所述第二进程还可以通过其他方式确定所述第一地址段,以访问所述第一地址段在第二进程中占用的虚拟地址空间,本申请对此不作限定。
第二进程访问所述第一地址段中的虚拟地址时,由于所述第二进程预先并未将与所述第一地址段具备映射关系的内存块与实际的物理页面建立映射,操作系统会产生访问异常。
步骤S14、基于所述操作系统产生访问异常的检测结果,指示所述虚拟i/o设备执行异常处理例程,所述异常处理例程包括:获取触发所述操作系统产生访问异常时,所述第二进程访问的所述第一地址段的虚拟地址,并根据所述第一地址段的虚拟地址和所述页表管理模块中存储的所述内存块的信息以及所述映射关系,获取所述内存块的信息,根据所述内存块的信息,将所述内存块映射至所述第二进程,以便所述第二进程能够访问所述内存块,获取所述第一进程在所述内存块中存储的数据。
第二进程访问所述第一地址段中的虚拟地址时,操作系统会产生访问异常,并且产生访问异常的虚拟地址为所述第一地址段在所述第二进程的虚拟地址空间中占用的虚拟地址。由于在本申请中,第一目标地址空间和第二目标地址空间相同,并且,所述第一地址段在所述第一进程中占用的虚拟地址属于所述第一目标地址空间,则所述第一地址段在所述第二进程中占用的虚拟地址属于所述第二目标地址空间,而所述第二目标地址空间为所述虚拟i/o设备在所述第二进程中占用的虚拟地址空间,因此,操作系统会调用虚拟i/o设备的异常处理接口,指示所述虚拟i/o设备执行异常处理例程。
在操作系统的指示下,所述虚拟i/o设备会执行异常处理例程。通过所述虚拟i/o设备执行的异常处理例程,能够将所述内存块映射至所述第二进程。在映射完成后,所述第二进程能够访问所述内存块,该内存块即成为共享内存,所述第二进程通过访问该共享内存,能够获取第一进程在所述内存块中存储的数据。
所述虚拟i/o设备执行异常处理例程,将内存块映射至第二进程的过程,可称为缺页中断,所述虚拟i/o设备执行的操作对所述第二进程的执行流程来说是透明的。在内存块映射至第二进程之后,所述第一进程的虚拟地址空间和第二进程的虚拟地址空间的示意图如图4所示。
上述步骤S11至步骤S14公开一种进程间共享数据的方法,该方法中,预先由操作系统创建虚拟i/o设备,并且将虚拟i/o设备分别映射至第一进程的虚拟地址空间和第二进程的虚拟地址空间中,其中所述虚拟i/o设备占用的第一目标地址空间和第二目标地址空间相同。当第一进程需要共享数据时,所述第一进程向所述操作系统传输内存分配请求,所述操作系统根据所述内存分配请求分配内存块,将所述内存块映射到所述第一目标地址空间中,建立所述内存块与所述第一目标地址空间中的第一地址段的映射关系,并将所述内存块的信息以及所述映射关系存储至操作系统预先创建的页表管理模块中。若第二进程需要获取所述内存块中存储的数据,所述第二进程会访问所述第一地址段中的虚拟地址,触发所述操作系统产生访问异常。若所述操作系统产生访问异常,会指示所述虚拟i/o设备执行异常处理例程,从而将所述内存块映射至所述第二进程,以便所述第二进程能够访问所述内存块,获取所述第一进程在所述内存块中存储的数据,该内存块即成为共享内存。
本申请公开的进程间共享数据的方法,不需要预先分配共享内存,而是在需要共享数据时,才由第一进程触发操作系统分配内存块,实现动态分配共享内存,该分配共享内存的方法用时短,便于根据共享数据的需求,实时迅速的调整共享内存的大小,提高内存的利用效率。
进一步的,本申请公开的进程间共享数据的方法还包括:
在所述第二进程获取所述内存块中存储的数据后,将所述内存块从所述第一目标地址空间中去映射;
将虚拟i/o设备映射至所述第一地址段指示的虚拟地址空间中。
若第一进程不再需要访问所述内存块,可将所述内存块从所述第一目标地址空间中去映射。在去映射之前,所述第一目标地址空间中的第一地址段与所述内存块存在映射关系,而在去映射之后,所述第一地址段与所述内存块不再存在映射关系,并且,所述第一地址段也未与虚拟i/o设备建立映射,这种情况下,需要将所述虚拟i/o设备映射至所述第一地址段指示的虚拟地址空间中。
或者,在所述第二进程获取所述内存块中存储的数据后,将所述内存块从所述第二进程的虚拟地址空间中去映射;
确定将所述内存块映射至所述第二进程后,所述第二进程的虚拟地址空间中的第二地址段与所述内存块存在映射关系,将虚拟i/o设备映射至所述第二地址段指示的虚拟地址空间中。
若第二进程不再需要访问所述内存块,可将所述内存块从所述第二目标地址空间中去映射。在去映射之前,所述第二目标地址空间中的第二地址段与所述内存块存在映射关系,而在去映射之后,所述第二地址段与所述内存块不再存在映射关系,并且,所述第二地址段也未与虚拟i/o设备建立映射,这种情况下,需要将所述虚拟i/o设备映射至所述第二地址段指示的虚拟地址空间中。
在第一进程和第二进程不再需要访问内存块时,可将所述内存块从占用的虚拟地址空间中去映射,并将所述虚拟i/o设备映射至去映射前与所述内存块存在映射关系的地址段所指示的虚拟空间中。在将所述虚拟i/o设备映射至所述第一地址段指示的虚拟地址空间,并且,在将所述虚拟i/o设备映射至所述第二地址段指示的虚拟地址空间后,所述第一进程的虚拟地址空间和第二进程的虚拟地址空间如图5所示,从而便于下次在进程间共享数据时,由操作系统重新为第一进程分配内存块,并将重新分配的内存块映射至第一目标地址空间中。
另外,在去映射后,该内存块不再作为共享内存,该内存块被归还所述操作系统,所述操作系统可通过该内存块执行其他操作。
进一步的,为了提高操作系统的稳定性,操作系统可预先为各个进程分配相应的访问权限。这种情况下,在指示所述虚拟i/o设备执行异常处理例程之前,本申请公开的进程间共享数据的方法还包括:
判断所述第二进程是否具备所述内存块的访问权限;
基于所述第二进程具备所述内存块的访问权限的判断结果,再执行指示所述虚拟i/o设备执行异常处理例程的操作。
操作系统在分配内存块后,会存储所述内存块的相关信息,所述相关信息中包含有各个进程针对所述内存块的访问权限。其中,所述相关信息通常被存储至所述操作系统预先创建的页表管理模块中。在产生访问异常后,可通过查询所述相关信息,判断所述第二进程是否具备所述内存块的访问权限。
若通过判断结果,确定所述第二进程不具备所述内存块的访问权限,则不再指示所述虚拟i/o设备执行异常处理例程。只有在确定所述第二进程具备所述内存块的访问权限的情况下,才指示所述虚拟i/o设备执行异常处理例程的操作,从而提高了操作系统的稳定性。
相应的,本申请还公开了一种进程间共享数据的方法,该方法应用于由操作系统创建的虚拟i/o设备,所述虚拟i/o设备被分别映射至所述操作系统中第一进程的虚拟地址空间和第二进程的虚拟地址空间中,所述虚拟i/o设备在所述第一进程中占用的虚拟地址空间为第一目标地址空间,所述虚拟i/o设备在所述第二进程中占用的虚拟地址空间为第二目标地址空间,并且所述第一目标空间地址和第二目标空间地址相同。其中,创建所述虚拟i/o设备的操作系统中的CPU通过读取多个应用程序的程序代码,生成多个进程,所述程序代码存储在存储器中,并且,至少有两个进程之间有共享数据的需求。本申请中,为简明起见,仅以两个进程(即第一进程和第二进程)为例进行说明。
所述操作系统除了创建虚拟i/o设备以外,还创建了页表管理模块。其中,所述虚拟i/o设备为一个虚拟的设备驱动模块,所述页表管理模块用于存储系统分配的各个内存块的信息。
参见图6所示的工作流程示意图,所述进程间共享数据的方法包括:
步骤S21、接收执行异常处理例程的指示,其中,所述指示是将操作系统为所述第一进程分配的内存块映射到所述第一目标地址空间中后,若所述第二进程访问第一地址段中的虚拟地址时,触发操作系统指示虚拟i/o设备向所述虚拟i/o设备发送的;所述内存块的信息,以及所述内存块与所述第一目标地址空间中的第一地址段之间的映射关系被存储至操作系统预先创建的页表管理模块中,所述内存块是所述操作系统根据所述第一进程触发的内存分配请求分配的,所述内存块用于存储所述第一进程需要共享的数据。
步骤S22、获取触发所述操作系统产生访问异常时,所述第二进程访问的所述第一地址段的虚拟地址,并根据所述第一地址段的虚拟地址和所述页表管理模块中存储的所述内存块的信息以及所述映射关系,获取所述内存块的信息。
步骤S23、根据所述内存块的信息,将所述内存块映射至所述第二进程,以便所述第二进程能够访问所述内存块,获取所述第一进程在所述内存块中存储的数据。
本申请公开的进程间共享数据的方法中,在第一进程和第二进程初始化的过程中,会将操作系统创建的虚拟i/o设备分别映射到所述第一进程的虚拟地址空间和所述第二进程的虚拟地址空间中,其中,所述第一进程和第二进程均运行于所述操作系统中。设定所述虚拟i/o设备在所述第一进程中占用的虚拟地址空间为第一目标地址空间,所述虚拟i/o设备在所述第二进程中占用的虚拟地址空间为第二目标地址空间,所述第一目标地址空间和所述第二目标地址空间相同。当第一进程需要向第二进程共享数据时,第一进程会触发操作系统,操作系统根据所述第一进程的触发,为所述第一进程分配内存块。然后,将所述操作系统为所述第一进程分配的内存块映射到所述第一目标地址空间中,建立所述内存块与所述第一目标地址空间中的第一地址段的映射关系,并将所述内存块的信息以及所述映射关系存储至操作系统预先创建的页表管理模块中,其中,所述内存块用于存储被所述第一进程写入的数据。第二进程在需要获取所述内存块中存储的数据时,会访问所述第一地址段中的虚拟地址,由于所述第二进程预先并未将与所述第一地址段具备映射关系的内存块与实际的物理页面建立映射,操作系统会产生访问异常。
所述操作系统在产生访问异常时,产生访问异常的虚拟地址为所述第一地址段在所述第二进程的虚拟地址空间中占用的虚拟地址。由于在本申请中,第一目标地址空间和第二目标地址空间相同,并且,所述第一地址段在所述第一进程中占用的虚拟地址属于所述第一目标地址空间,则所述第一地址段在所述第二进程中占用的虚拟地址属于所述第二目标地址空间,而所述第二目标地址空间为所述虚拟i/o设备再所述第二进程中占用的虚拟地址空间,因此,操作系统会调用虚拟i/o设备的异常处理接口,指示所述虚拟i/o设备执行异常处理例程。
在操作系统的指示下,所述虚拟i/o设备会执行异常处理例程。所述虚拟i/o设备执行的异常处理例程包括:所述虚拟i/o设备获取触发所述操作系统产生访问异常时,所述第二进程访问的所述第一地址段的虚拟地址,并根据所述第一地址段的虚拟地址和所述页表管理模块中存储的所述内存块的信息和所述映射关系,获取所述内存块的信息;然后,根据所述内存块的信息,将所述内存块映射至所述第二进程。
通过所述虚拟i/o设备执行的异常处理例程,能够将所述内存块映射至所述第二进程。在映射完成后,所述第二进程能够访问所述内存块,该内存块即成为共享内存,所述第二进程通过访问该共享内存,能够获取第一进程在所述内存块中存储的数据。
本申请公开的进程间共享数据的方法,不需要预先分配共享内存,而是在需要共享数据时,才由第一进程触发操作系统分配内存块,实现动态分配共享内存,该分配共享内存的方法用时短,便于根据共享数据的需求,实时迅速的调整共享内存的大小,提高内存的利用效率。
相应的,本申请还公开一种进程间共享数据的装置。参见图7所示的结构示意图,所述进程间共享数据的装置包括:虚拟i/o设备映射模块101、内存块映射模块102、访问异常检测模块103和指示模块104。
其中,所述虚拟i/o设备映射模块101,用于在第一进程和第二进程初始化的过程中,将操作系统创建的虚拟i/o设备分别映射到所述第一进程的虚拟地址空间和所述第二进程的虚拟地址空间中,其中,所述第一进程和第二进程均运行于所述操作系统中,设定所述虚拟i/o设备在所述第一进程中占用的虚拟地址空间为第一目标地址空间,所述虚拟i/o设备在所述第二进程中占用的虚拟地址空间为第二目标地址空间,所述第一目标地址空间和所述第二目标地址空间相同;
所述内存块映射模块102,用于将所述操作系统为所述第一进程分配的内存块映射到所述第一目标地址空间中,建立所述内存块与所述第一目标地址空间中的第一地址段的映射关系,并将所述内存块的信息以及所述映射关系存储至操作系统预先创建的页表管理模块中,其中,所述内存块是所述操作系统根据所述第一进程触发的内存分配请求分配的,所述内存块用于存储所述第一进程需要共享的数据;
所述访问异常检测模块103,用于检测所述操作系统是否产生访问异常,其中,所述第二进程访问所述第一地址段中的虚拟地址时,触发所述操作系统产生访问异常;
所述指示模块104,用于基于所述操作系统产生访问异常的检测结果,指示所述虚拟i/o设备执行异常处理例程,所述异常处理例程包括:获取触发所述操作系统产生访问异常时,所述第二进程访问的所述第一地址段的虚拟地址,并根据所述第一地址段的虚拟地址和所述页表管理模块中存储的所述内存块的信息以及所述映射关系,获取所述内存块的信息,根据所述内存块的信息,将所述内存块映射至所述第二进程,以便所述第二进程能够访问所述内存块,获取所述第一进程在所述内存块中存储的数据。
进一步的,所述进程间共享数据的装置还包括:
第一去映射模块,用于将所述内存块从所述第一目标地址空间中去映射;
第一映射模块,用于将虚拟i/o设备映射至所述第一地址段指示的虚拟地址空间中;
或者,
第二去映射模块,用于将所述内存块从所述第二进程的虚拟地址空间中去映射;
第二映射模块,用于确定将所述内存块映射至所述第二进程后,所述第二进程的虚拟地址空间中的第二地址段与所述内存块存在映射关系,将虚拟i/o设备映射至所述第二地址段指示的虚拟地址空间中。
进一步的,所述进程间共享数据的装置还包括:
判断模块,用于指示所述虚拟i/o设备执行异常处理例程之前,判断所述第二进程是否具备所述内存块的访问权限;
所述指示模块还用于,基于所述第二进程具备所述内存块的访问权限的判断结果,再执行指示所述虚拟i/o设备执行异常处理例程的操作。
本申请公开的装置,不需要预先分配共享内存,而是在需要共享数据时,才由第一进程触发系统分配内存块,实现动态分配共享内存,该分配共享内存的方法用时短,便于根据共享数据的需求,实时迅速的调整共享内存的大小,提高内存的利用效率。
相应的,本申请还公开一种进程间共享数据的装置,应用于由操作系统创建的虚拟i/o设备,所述虚拟i/o设备被分别映射至所述操作系统中第一进程的虚拟地址空间和第二进程的虚拟地址空间中,所述虚拟i/o设备在所述第一进程中占用的虚拟地址空间为第一目标地址空间,所述虚拟i/o设备在所述第二进程中占用的虚拟地址空间为第二目标地址空间,并且所述第一目标空间地址和第二目标空间地址相同,参见图8所示的结构示意图,所述进程间共享数据的装置包括:指示接收模块201、内存块信息获取模块202和第二进程映射模块203。
其中,所述指示接收模块201,用于接收执行异常处理例程的指示,其中,所述指示是将操作系统为所述第一进程分配的内存块映射到所述第一目标地址空间中后,若所述第二进程访问第一地址段中的虚拟地址时,触发操作系统指示虚拟i/o设备向所述虚拟i/o设备发送的;所述内存块的信息,以及所述内存块与所述第一目标地址空间中的第一地址段之间的映射关系被存储至操作系统预先创建的页表管理模块中,所述内存块是所述操作系统根据所述第一进程触发的内存分配请求分配的,所述内存块用于存储所述第一进程需要共享的数据;其中,操作系统在将为所述第一进程分配的内存块映射到第一目标地址空间中时,会建立所述内存块与所述第一目标地址空间中的第一地址段的映射关系。
所述内存块信息获取模块202,用于获取触发所述操作系统产生访问异常时,所述第二进程访问的所述第一地址段的虚拟地址,并根据所述第一地址段的虚拟地址和所述页表管理模块中存储的所述内存块的信息以及所述映射关系,获取所述内存块的信息;
所述第二进程映射模块203,用于根据所述内存块的信息,将所述内存块映射至所述第二进程,以便所述第二进程能够访问所述内存块,获取所述第一进程在所述内存块中存储的数据。
本申请公开的装置,不需要预先分配共享内存,而是在需要共享数据时,才由第一进程触发系统分配内存块,实现动态分配共享内存,该分配共享内存的方法用时短,便于根据共享数据的需求,实时迅速的调整共享内存的大小,提高内存的利用效率。
本申请还公开一种终端,参见图9所示的结构示意图,所述终端包括:处理器11、存储器12和总线13,其中,
所述处理器11通过总线13,与所述存储器12相连接;
所述存储器12,用于存储进程间共享数据的方法的程序代码;
所述处理器11,用于获取所述存储器12中存储的程序代码,并根据所述程序代码执行以下操作:
在第一进程和第二进程初始化的过程中,将操作系统创建的虚拟i/o设备分别映射到所述第一进程的虚拟地址空间和所述第二进程的虚拟地址空间中,其中,所述第一进程和第二进程均运行于所述操作系统中,设定所述虚拟i/o设备在所述第一进程中占用的虚拟地址空间为第一目标地址空间,所述虚拟i/o设备在所述第二进程中占用的虚拟地址空间为第二目标地址空间,所述第一目标地址空间和所述第二目标地址空间相同;
将所述操作系统为所述第一进程分配的内存块映射到所述第一目标地址空间中,建立所述内存块与所述第一目标地址空间中的第一地址段的映射关系,并将所述内存块的信息以及所述映射关系存储至操作系统预先创建的页表管理模块中,其中,所述内存块是所述操作系统根据所述第一进程触发的内存分配请求分配的,所述内存块用于存储所述第一进程需要共享的数据;
检测所述操作系统是否产生访问异常,其中,所述第二进程访问所述第一地址段中的虚拟地址时,触发所述操作系统产生访问异常;
基于所述操作系统产生访问异常的检测结果,指示所述虚拟i/o设备执行异常处理例程,所述异常处理例程包括:获取触发所述操作系统产生访问异常时,所述第二进程访问的所述第一地址段的虚拟地址,并根据所述第一地址段的虚拟地址和所述页表管理模块中存储的所述内存块的信息以及所述映射关系,获取所述内存块的信息,根据所述内存块的信息,将所述内存块映射至所述第二进程,以便所述第二进程能够访问所述内存块,获取所述第一进程在所述内存块中存储的数据。
本申请公开的上述终端中,存在的操作系统中的CPU读取多个应用程序的程序代码,生成多个进程,其中,所述程序代码存储在存储器中,并且,至少有两个进程之间有共享数据的需求。本申请中,为简明起见,仅以两个进程(即第一进程和第二进程)为例进行说明。
操作系统除了能够生成多个进程,还创建了虚拟i/o设备和页表管理模块。其中,所述虚拟i/o设备为一个虚拟的设备驱动模块,所述页表管理模块用于存储系统分配的各个内存块的信息。
本申请公开的终端在进程间共享数据时,不需要预先分配共享内存,而是在需要共享数据时,才由第一进程触发操作系统分配内存块,实现动态分配共享内存,该分配共享内存的方法用时短,便于根据共享数据的需求,实时迅速的调整共享内存的大小,提高内存的利用效率。
相应的,本申请还公开一种终端,参见图10所示的结构示意图,所述终端包括:处理器21、存储器22和总线23,其中,
所述处理器21通过总线23,与所述存储器22相连接;
所述存储器22,用于存储进程间共享数据的方法的程序代码;
所述处理器23,用于获取所述存储器22中存储的程序代码,并根据所述程序代码执行以下操作:
生成由操作系统创建的虚拟i/o设备,所述虚拟i/o设备被分别映射至所述操作系统中第一进程的虚拟地址空间和第二进程的虚拟地址空间中,所述虚拟i/o设备在所述第一进程中占用的虚拟地址空间为第一目标地址空间,所述虚拟i/o设备在所述第二进程中占用的虚拟地址空间为第二目标地址空间,并且所述第一目标空间地址和第二目标空间地址相同,
所述虚拟i/o设备接收执行异常处理例程的指示,其中,所述指示是将操作系统为所述第一进程分配的内存块映射到所述第一目标地址空间中后,若所述第二进程访问第一地址段中的虚拟地址时,触发操作系统指示虚拟i/o设备向所述虚拟i/o设备发送的;所述内存块的信息,以及所述内存块与所述第一目标地址空间中的第一地址段之间的映射关系被存储至操作系统预先创建的页表管理模块中,所述内存块是所述操作系统根据所述第一进程触发的内存分配请求分配的,所述内存块用于存储所述第一进程需要共享的数据;
所述虚拟i/o设备获取触发所述操作系统产生访问异常时,所述第二进程访问的所述第一地址段的虚拟地址,并根据所述第一地址段的虚拟地址和所述页表管理模块中存储的所述内存块的信息以及所述映射关系,获取所述内存块的信息;
所述虚拟i/o设备根据所述内存块的信息,将所述内存块映射至所述第二进程,以便所述第二进程能够访问所述内存块,获取所述第一进程在所述内存块中存储的数据。
本申请公开的上述终端中,存在的操作系统中的CPU读取多个应用程序的程序代码,生成多个进程,其中,所述程序代码存储在存储器中,并且,至少有两个进程之间有共享数据的需求。本申请中,为简明起见,仅以两个进程(即第一进程和第二进程)为例进行说明。
操作系统除了能够生成多个进程,还创建了虚拟i/o设备和页表管理模块。其中,所述虚拟i/o设备为一个虚拟的设备驱动模块,所述页表管理模块用于存储系统分配的各个内存块的信息。
本申请公开的终端在进程间共享数据时,不需要预先分配共享内存,而是在需要共享数据时,才由第一进程触发操作系统分配内存块,实现动态分配共享内存,该分配共享内存的方法用时短,便于根据共享数据的需求,实时迅速的调整共享内存的大小,提高内存的利用效率。
本领域的技术人员可以清楚地了解到本发明实施例中的技术可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本发明实施例中的技术方案可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如只读存储器(英文:read-only memory,缩写:ROM)、随机存取存储器(英文:random access memory,缩写:RAM)、磁碟、光盘等,包括若干指令用以使得处理器执行本发明实施例或者实施例的某些部分所述的方法。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其它实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
应当理解的是,本发明并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本发明的范围仅由所附的权利要求来限制。

Claims (10)

1.一种进程间共享数据的方法,其特征在于,包括:
在第一进程和第二进程初始化的过程中,将操作系统创建的虚拟i/o设备分别映射到所述第一进程的虚拟地址空间和所述第二进程的虚拟地址空间中,其中,所述第一进程和第二进程均运行于所述操作系统中,设定所述虚拟i/o设备在所述第一进程中占用的虚拟地址空间为第一目标地址空间,所述虚拟i/o设备在所述第二进程中占用的虚拟地址空间为第二目标地址空间,所述第一目标地址空间和所述第二目标地址空间相同;
将所述操作系统为所述第一进程分配的内存块映射到所述第一目标地址空间中,建立所述内存块与所述第一目标地址空间中的第一地址段的映射关系,并将所述内存块的信息以及所述映射关系存储至操作系统预先创建的页表管理模块中,其中,所述内存块是所述操作系统根据所述第一进程触发的内存分配请求分配的,所述内存块用于存储所述第一进程需要共享的数据;
检测所述操作系统是否产生访问异常,其中,所述第二进程访问所述第一地址段中的虚拟地址时,触发所述操作系统产生访问异常;
基于所述操作系统产生访问异常的检测结果,指示所述虚拟i/o设备执行异常处理例程,所述异常处理例程包括:获取触发所述操作系统产生访问异常时,所述第二进程访问的所述第一地址段的虚拟地址,并根据所述第一地址段的虚拟地址和所述页表管理模块中存储的所述内存块的信息以及所述映射关系,获取所述内存块的信息,根据所述内存块的信息,将所述内存块映射至所述第二进程,以便所述第二进程能够访问所述内存块,获取所述第一进程在所述内存块中存储的数据。
2.根据权利要求1所述的方法,其特征在于,在所述第二进程获取所述内存块中存储的数据后,还包括:
将所述内存块从所述第一目标地址空间中去映射;
将虚拟i/o设备映射至所述第一地址段指示的虚拟地址空间中;
或者,
将所述内存块从所述第二进程的虚拟地址空间中去映射;
确定将所述内存块映射至所述第二进程后,所述第二进程的虚拟地址空间中的第二地址段与所述内存块存在映射关系,将虚拟i/o设备映射至所述第二地址段指示的虚拟地址空间中。
3.根据权利要求1所述的方法,其特征在于,所述指示所述虚拟i/o设备执行异常处理例程之前,还包括:
判断所述第二进程是否具备所述内存块的访问权限;
基于所述第二进程具备所述内存块的访问权限的判断结果,再执行指示所述虚拟i/o设备执行异常处理例程的操作。
4.一种进程间共享数据的方法,其特征在于,应用于由操作系统创建的虚拟i/o设备,所述虚拟i/o设备被分别映射至所述操作系统中第一进程的虚拟地址空间和第二进程的虚拟地址空间中,所述虚拟i/o设备在所述第一进程中占用的虚拟地址空间为第一目标地址空间,所述虚拟i/o设备在所述第二进程中占用的虚拟地址空间为第二目标地址空间,并且所述第一目标空间地址和第二目标空间地址相同,所述进程间共享数据的方法包括:
接收执行异常处理例程的指示,其中,所述指示是将操作系统为所述第一进程分配的内存块映射到所述第一目标地址空间中后,若所述第二进程访问第一地址段中的虚拟地址时,触发操作系统指示虚拟i/o设备向所述虚拟i/o设备发送的;所述内存块的信息,以及所述内存块与所述第一目标地址空间中的第一地址段之间的映射关系被存储至操作系统预先创建的页表管理模块中,所述内存块是所述操作系统根据所述第一进程触发的内存分配请求分配的,所述内存块用于存储所述第一进程需要共享的数据;
获取触发所述操作系统产生访问异常时,所述第二进程访问的所述第一地址段的虚拟地址,并根据所述第一地址段的虚拟地址和所述页表管理模块中存储的所述内存块的信息以及所述映射关系,获取所述内存块的信息;
根据所述内存块的信息,将所述内存块映射至所述第二进程,以便所述第二进程能够访问所述内存块,获取所述第一进程在所述内存块中存储的数据。
5.一种进程间共享数据的装置,其特征在于,包括:
虚拟i/o设备映射模块,用于在第一进程和第二进程初始化的过程中,将操作系统创建的虚拟i/o设备分别映射到所述第一进程的虚拟地址空间和所述第二进程的虚拟地址空间中,其中,所述第一进程和第二进程均运行于所述操作系统中,设定所述虚拟i/o设备在所述第一进程中占用的虚拟地址空间为第一目标地址空间,所述虚拟i/o设备在所述第二进程中占用的虚拟地址空间为第二目标地址空间,所述第一目标地址空间和所述第二目标地址空间相同;
内存块映射模块,用于将所述操作系统为所述第一进程分配的内存块映射到所述第一目标地址空间中,建立所述内存块与所述第一目标地址空间中的第一地址段的映射关系,并将所述内存块的信息以及所述映射关系存储至操作系统预先创建的页表管理模块中,其中,所述内存块是所述操作系统根据所述第一进程触发的内存分配请求分配的,所述内存块用于存储所述第一进程需要共享的数据;
访问异常检测模块,用于检测所述操作系统是否产生访问异常,其中,所述第二进程访问所述第一地址段中的虚拟地址时,触发所述操作系统产生访问异常;
指示模块,用于基于所述操作系统产生访问异常的检测结果,指示所述虚拟i/o设备执行异常处理例程,所述异常处理例程包括:获取触发所述操作系统产生访问异常时,所述第二进程访问的所述第一地址段的虚拟地址,并根据所述第一地址段的虚拟地址和所述页表管理模块中存储的所述内存块的信息以及所述映射关系,获取所述内存块的信息,根据所述内存块的信息,将所述内存块映射至所述第二进程,以便所述第二进程能够访问所述内存块,获取所述第一进程在所述内存块中存储的数据。
6.根据权利要求1所述的方法,其特征在于,所述进程间共享数据的装置还包括:
第一去映射模块,用于将所述内存块从所述第一目标地址空间中去映射;
第一映射模块,用于将虚拟i/o设备映射至所述第一地址段指示的虚拟地址空间中;
或者,
第二去映射模块,用于将所述内存块从所述第二进程的虚拟地址空间中去映射;
第二映射模块,用于确定将所述内存块映射至所述第二进程后,所述第二进程的虚拟地址空间中的第二地址段与所述内存块存在映射关系,将虚拟i/o设备映射至所述第二地址段指示的虚拟地址空间中。
7.根据权利要求5所述的装置,其特征在于,所述进程间共享数据的装置还包括:
判断模块,用于指示所述虚拟i/o设备执行异常处理例程之前,判断所述第二进程是否具备所述内存块的访问权限;
所述指示模块还用于,基于所述第二进程具备所述内存块的访问权限的判断结果,再执行指示所述虚拟i/o设备执行异常处理例程的操作。
8.一种进程间共享数据的装置,其特征在于,应用于由操作系统创建的虚拟i/o设备,所述虚拟i/o设备被分别映射至所述操作系统中第一进程的虚拟地址空间和第二进程的虚拟地址空间中,所述虚拟i/o设备在所述第一进程中占用的虚拟地址空间为第一目标地址空间,所述虚拟i/o设备在所述第二进程中占用的虚拟地址空间为第二目标地址空间,并且所述第一目标空间地址和第二目标空间地址相同,所述进程间共享数据的装置包括:
指示接收模块,用于接收执行异常处理例程的指示,其中,所述指示是将操作系统为所述第一进程分配的内存块映射到所述第一目标地址空间中后,若所述第二进程访问第一地址段中的虚拟地址时,触发操作系统指示虚拟i/o设备向所述虚拟i/o设备发送的;所述内存块的信息,以及所述内存块与所述第一目标地址空间中的第一地址段之间的映射关系被存储至操作系统预先创建的页表管理模块中,所述内存块是所述操作系统根据所述第一进程触发的内存分配请求分配的,所述内存块用于存储所述第一进程需要共享的数据;
内存块信息获取模块,用于获取触发所述操作系统产生访问异常时,所述第二进程访问的所述第一地址段的虚拟地址,并根据所述第一地址段的虚拟地址和所述页表管理模块中存储的所述内存块的信息以及所述映射关系,获取所述内存块的信息;
第二进程映射模块,用于根据所述内存块的信息,将所述内存块映射至所述第二进程,以便所述第二进程能够访问所述内存块,获取所述第一进程在所述内存块中存储的数据。
9.一种终端,其特征在于,包括:处理器、存储器和总线,其中,
所述处理器通过总线,与所述存储器相连接;
所述存储器,用于存储进程间共享数据的方法的程序代码;
所述处理器,用于获取所述存储器中存储的程序代码,并根据所述程序代码执行以下操作:
在第一进程和第二进程初始化的过程中,将操作系统创建的虚拟i/o设备分别映射到所述第一进程的虚拟地址空间和所述第二进程的虚拟地址空间中,其中,所述第一进程和第二进程均运行于所述操作系统中,设定所述虚拟i/o设备在所述第一进程中占用的虚拟地址空间为第一目标地址空间,所述虚拟i/o设备在所述第二进程中占用的虚拟地址空间为第二目标地址空间,所述第一目标地址空间和所述第二目标地址空间相同;
将所述操作系统为所述第一进程分配的内存块映射到所述第一目标地址空间中,建立所述内存块与所述第一目标地址空间中的第一地址段的映射关系,并将所述内存块的信息以及所述映射关系存储至操作系统预先创建的页表管理模块中,其中,所述内存块是所述操作系统根据所述第一进程触发的内存分配请求分配的,所述内存块用于存储所述第一进程需要共享的数据;
检测所述操作系统是否产生访问异常,其中,所述第二进程访问所述第一地址段中的虚拟地址时,触发所述操作系统产生访问异常;
基于所述操作系统产生访问异常的检测结果,指示所述虚拟i/o设备执行异常处理例程,所述异常处理例程包括:获取触发所述操作系统产生访问异常时,所述第二进程访问的所述第一地址段的虚拟地址,并根据所述第一地址段的虚拟地址和所述页表管理模块中存储的所述内存块的信息以及所述映射关系,获取所述内存块的信息,根据所述内存块的信息,将所述内存块映射至所述第二进程,以便所述第二进程能够访问所述内存块,获取所述第一进程在所述内存块中存储的数据。
10.一种终端,其特征在于,包括:处理器、存储器和总线,其中,
所述处理器通过总线,与所述存储器相连接;
所述存储器,用于存储进程间共享数据的方法的程序代码;
所述处理器,用于获取所述存储器中存储的程序代码,并根据所述程序代码执行以下操作:
生成由操作系统创建的虚拟i/o设备,所述虚拟i/o设备被分别映射至所述操作系统中第一进程的虚拟地址空间和第二进程的虚拟地址空间中,所述虚拟i/o设备在所述第一进程中占用的虚拟地址空间为第一目标地址空间,所述虚拟i/o设备在所述第二进程中占用的虚拟地址空间为第二目标地址空间,并且所述第一目标空间地址和第二目标空间地址相同,
所述虚拟i/o设备接收执行异常处理例程的指示,其中,所述指示是将操作系统为所述第一进程分配的内存块映射到所述第一目标地址空间中后,若所述第二进程访问第一地址段中的虚拟地址时,触发操作系统指示虚拟i/o设备向所述虚拟i/o设备发送的;所述内存块的信息,以及所述内存块与所述第一目标地址空间中的第一地址段之间的映射关系被存储至操作系统预先创建的页表管理模块中,所述内存块是所述操作系统根据所述第一进程触发的内存分配请求分配的,所述内存块用于存储所述第一进程需要共享的数据;
所述虚拟i/o设备获取触发所述操作系统产生访问异常时,所述第二进程访问的所述第一地址段的虚拟地址,并根据所述第一地址段的虚拟地址和所述页表管理模块中存储的所述内存块的信息以及所述映射关系,获取所述内存块的信息;
所述虚拟i/o设备根据所述内存块的信息,将所述内存块映射至所述第二进程,以便所述第二进程能够访问所述内存块,获取所述第一进程在所述内存块中存储的数据。
CN201510037120.3A 2015-01-23 2015-01-23 一种进程间共享数据的方法、装置及终端 Active CN105868028B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510037120.3A CN105868028B (zh) 2015-01-23 2015-01-23 一种进程间共享数据的方法、装置及终端

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510037120.3A CN105868028B (zh) 2015-01-23 2015-01-23 一种进程间共享数据的方法、装置及终端

Publications (2)

Publication Number Publication Date
CN105868028A true CN105868028A (zh) 2016-08-17
CN105868028B CN105868028B (zh) 2021-05-18

Family

ID=56623655

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510037120.3A Active CN105868028B (zh) 2015-01-23 2015-01-23 一种进程间共享数据的方法、装置及终端

Country Status (1)

Country Link
CN (1) CN105868028B (zh)

Cited By (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2018119709A1 (zh) * 2016-12-27 2018-07-05 深圳前海达闼云端智能科技有限公司 用于多操作系统的内存访问方法、装置和电子设备
CN109240602A (zh) * 2018-08-06 2019-01-18 联想(北京)有限公司 数据存取方法
CN109921929A (zh) * 2019-02-27 2019-06-21 深信服科技股份有限公司 一种网络升级方法、装置、设备及介质
CN111190748A (zh) * 2019-12-23 2020-05-22 腾讯科技(深圳)有限公司 数据共享方法、装置、设备及存储介质
CN111316244A (zh) * 2018-12-28 2020-06-19 深圳市大疆创新科技有限公司 多进程间的通信方法和系统
CN111522673A (zh) * 2020-04-26 2020-08-11 腾讯科技(深圳)有限公司 内存数据访问方法、装置、计算机设备和存储介质
CN112256598A (zh) * 2020-10-27 2021-01-22 上海壁仞智能科技有限公司 一种内存分配的方法及装置、内存寻址的方法及装置
CN112256460A (zh) * 2020-11-24 2021-01-22 北京元心科技有限公司 进程间通信方法、装置、电子设备及计算机可读存储介质
CN112306702A (zh) * 2019-07-26 2021-02-02 龙芯中科技术股份有限公司 数据共享方法、装置、电子设备及储存介质
CN112650603A (zh) * 2020-12-28 2021-04-13 北京天融信网络安全技术有限公司 内存管理方法、装置、电子设备及存储介质
WO2022000799A1 (zh) * 2020-06-28 2022-01-06 华为技术有限公司 一种内存管理方法及设备
CN114296658A (zh) * 2021-12-31 2022-04-08 深圳市兆珑科技有限公司 一种存储空间分配方法、装置、终端设备及存储介质
CN114595084A (zh) * 2022-05-10 2022-06-07 麒麟软件有限公司 一种Linux操作系统上系统级进程间视频共享方法
CN114661497A (zh) * 2022-03-31 2022-06-24 慧之安信息技术股份有限公司 操作系统分区共享内存方法和系统
CN115878210A (zh) * 2021-09-29 2023-03-31 华为技术有限公司 一种系统配置处理方法及相关设备
WO2023077880A1 (zh) * 2021-11-08 2023-05-11 海飞科(南京)信息技术有限公司 基于便笺存储器来共享数据的方法和电子装置
WO2023124424A1 (zh) * 2021-12-31 2023-07-06 深圳市兆珑科技有限公司 内存数据库的访问方法、装置、系统、服务器及存储介质
WO2024088194A1 (zh) * 2022-10-28 2024-05-02 华为技术有限公司 一种通信方法、装置和智能驾驶设备

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102402487A (zh) * 2011-11-15 2012-04-04 北京天融信科技有限公司 一种零拷贝接收报文的方法和系统
US8356151B2 (en) * 2008-02-01 2013-01-15 International Business Machines Corporation Reporting of partially performed memory move
CN103077120A (zh) * 2012-12-31 2013-05-01 东软集团股份有限公司 程序共享内存的地址转换方法和装置
US8725963B1 (en) * 2011-04-15 2014-05-13 Parallels IP Holdings GmbH System and method for managing a virtual swap file for virtual environments

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8356151B2 (en) * 2008-02-01 2013-01-15 International Business Machines Corporation Reporting of partially performed memory move
US8725963B1 (en) * 2011-04-15 2014-05-13 Parallels IP Holdings GmbH System and method for managing a virtual swap file for virtual environments
CN102402487A (zh) * 2011-11-15 2012-04-04 北京天融信科技有限公司 一种零拷贝接收报文的方法和系统
CN103077120A (zh) * 2012-12-31 2013-05-01 东软集团股份有限公司 程序共享内存的地址转换方法和装置

Cited By (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2018119709A1 (zh) * 2016-12-27 2018-07-05 深圳前海达闼云端智能科技有限公司 用于多操作系统的内存访问方法、装置和电子设备
CN109240602A (zh) * 2018-08-06 2019-01-18 联想(北京)有限公司 数据存取方法
CN111316244A (zh) * 2018-12-28 2020-06-19 深圳市大疆创新科技有限公司 多进程间的通信方法和系统
WO2020133197A1 (zh) * 2018-12-28 2020-07-02 深圳市大疆创新科技有限公司 多进程间的通信方法和系统
CN109921929A (zh) * 2019-02-27 2019-06-21 深信服科技股份有限公司 一种网络升级方法、装置、设备及介质
CN109921929B (zh) * 2019-02-27 2022-04-29 深信服科技股份有限公司 一种网络升级方法、装置、设备及介质
CN112306702B (zh) * 2019-07-26 2023-07-14 龙芯中科技术股份有限公司 数据共享方法、装置、电子设备及储存介质
CN112306702A (zh) * 2019-07-26 2021-02-02 龙芯中科技术股份有限公司 数据共享方法、装置、电子设备及储存介质
CN111190748A (zh) * 2019-12-23 2020-05-22 腾讯科技(深圳)有限公司 数据共享方法、装置、设备及存储介质
CN111190748B (zh) * 2019-12-23 2023-06-09 腾讯科技(深圳)有限公司 数据共享方法、装置、设备及存储介质
CN111522673A (zh) * 2020-04-26 2020-08-11 腾讯科技(深圳)有限公司 内存数据访问方法、装置、计算机设备和存储介质
WO2022000799A1 (zh) * 2020-06-28 2022-01-06 华为技术有限公司 一种内存管理方法及设备
CN112256598A (zh) * 2020-10-27 2021-01-22 上海壁仞智能科技有限公司 一种内存分配的方法及装置、内存寻址的方法及装置
CN112256460A (zh) * 2020-11-24 2021-01-22 北京元心科技有限公司 进程间通信方法、装置、电子设备及计算机可读存储介质
CN112650603B (zh) * 2020-12-28 2024-02-06 北京天融信网络安全技术有限公司 内存管理方法、装置、电子设备及存储介质
CN112650603A (zh) * 2020-12-28 2021-04-13 北京天融信网络安全技术有限公司 内存管理方法、装置、电子设备及存储介质
CN115878210A (zh) * 2021-09-29 2023-03-31 华为技术有限公司 一种系统配置处理方法及相关设备
WO2023077880A1 (zh) * 2021-11-08 2023-05-11 海飞科(南京)信息技术有限公司 基于便笺存储器来共享数据的方法和电子装置
WO2023124424A1 (zh) * 2021-12-31 2023-07-06 深圳市兆珑科技有限公司 内存数据库的访问方法、装置、系统、服务器及存储介质
CN114296658A (zh) * 2021-12-31 2022-04-08 深圳市兆珑科技有限公司 一种存储空间分配方法、装置、终端设备及存储介质
CN114296658B (zh) * 2021-12-31 2024-06-21 深圳市兆珑科技有限公司 一种存储空间分配方法、装置、终端设备及存储介质
CN114661497B (zh) * 2022-03-31 2023-01-10 慧之安信息技术股份有限公司 操作系统分区共享内存方法和系统
CN114661497A (zh) * 2022-03-31 2022-06-24 慧之安信息技术股份有限公司 操作系统分区共享内存方法和系统
CN114595084A (zh) * 2022-05-10 2022-06-07 麒麟软件有限公司 一种Linux操作系统上系统级进程间视频共享方法
WO2024088194A1 (zh) * 2022-10-28 2024-05-02 华为技术有限公司 一种通信方法、装置和智能驾驶设备

Also Published As

Publication number Publication date
CN105868028B (zh) 2021-05-18

Similar Documents

Publication Publication Date Title
CN105868028A (zh) 一种进程间共享数据的方法、装置及终端
US10585726B2 (en) Parameter-sharing apparatus and method
CN110941481A (zh) 资源调度方法、装置及系统
CN106445628A (zh) 一种虚拟化方法、装置和系统
US20060150195A1 (en) System and method for interprocess communication
CN109710190B (zh) 一种数据存储方法、装置、设备及存储介质
CN103744719B (zh) 锁管理方法及系统、锁管理系统的配置方法及装置
CN103984599B (zh) 一种提高操作系统大页使用率的方法
DE102013017509A1 (de) Effiziente Speichervirtualisierung in mehrsträngigen Verarbeitungseinheiten
CN109886693B (zh) 区块链系统的共识实现方法、装置、设备和介质
US20180293108A1 (en) Data Processing Method and Apparatus, and System
KR102064764B1 (ko) 메시지 시그널 인터럽트의 통신
WO2018182473A1 (en) Performance manager and method performed thereby for managing the performance of a logical server of a data center
JPH07262092A (ja) 仮想メモリ管理システム、変換索引バッファ管理方法、及び変換索引バッファパージオーバーヘッド最小化方法
CN105302765A (zh) 一种系统级芯片及其内存访问管理方法
CN105917319A (zh) 存储器单元和方法
JP4833220B2 (ja) ローカル権限によるクライアントリソース分割のための方法、システム、およびプログラム
CN104199699B (zh) 程序加载方法、芯片启动方法、装置及主控设备
CN106294233A (zh) 一种直接内存访问的传输控制方法及装置
CN105843819A (zh) 一种数据导出方法及装置
CN107168801A (zh) 基于多内核页表的内核动态数据隔离以及保护技术
CN110727517A (zh) 一种基于分区设计的内存分配方法和装置
CN106777085A (zh) 一种数据处理方法、装置及数据查询系统
US10062137B2 (en) Communication between integrated graphics processing units
JP6974510B2 (ja) データを処理するための方法、装置、デバイス及び媒体

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
TA01 Transfer of patent application right
TA01 Transfer of patent application right

Effective date of registration: 20210427

Address after: 518116 room 310, building a, Huafeng Zhigu Yuanshan high tech Industrial Park, 62 Yinhe Road, heao community, Yuanshan street, Longgang District, Shenzhen City, Guangdong Province

Applicant after: Shenzhen Lianke Network Technology Co.,Ltd.

Address before: 510670 Room 518, 91 Kefeng Road, Huangpu District, Guangzhou City, Guangdong Province

Applicant before: Guangzhou Fangwei Information Technology Co.,Ltd.

Effective date of registration: 20210427

Address after: 510670 Room 518, 91 Kefeng Road, Huangpu District, Guangzhou City, Guangdong Province

Applicant after: Guangzhou Fangwei Information Technology Co.,Ltd.

Address before: 518129 Bantian HUAWEI headquarters office building, Longgang District, Guangdong, Shenzhen

Applicant before: HUAWEI TECHNOLOGIES Co.,Ltd.

GR01 Patent grant
GR01 Patent grant