一种进程间通信的方法及系统与流程

文档序号:17488784发布日期:2019-04-23 20:14阅读:175来源:国知局
一种进程间通信的方法及系统与流程

本发明涉及计算机领域,尤其涉及一种进程间通信方法及系统。



背景技术:

进程间通信(inter-processcommunication,ipc)就是其中的一种通信传递技术,它主要用于计算机系统中的不同进程之间的消息传递。目前主要有管道通信、socket、共享内存等机制。

在现有的终端操作系统,例如安卓(androidtm)系统中的消息通信基础有一种叫做binder的通信机制,它就是一种ipc通信机制。原理上讲,它也是一种基于c/s架构的通信机制,只是binder通信采用了内部代理通信,使得binder的客户端进行通信的时候,好像在本地进行操作一样。同时,binder通信的时候也无需知道对端服务的端口,只需知道了该服务的名字即可。

android的binder通信机制确实是非常安全和快捷,但是它也存在缺点:1)binder的通信性能受到其携带的数据长度有关。同时,binder的驱动需要针对binder第一进程携带过来的数据拷贝进入第二进程空间,这个也是需要耗费时间的,数据量越大,耗时越长。2)内核驱动由于需要拷贝第一进程的数据,因此需要管理特定的内存来存储该数据,通信的信息长度受限、需要内核驱动额外分配内存协助通信。



技术实现要素:

本发明提供了一种进程间通信的方法及系统,解决了由于内存拷贝和分配释放带来的延时问题,以及binder通信机制携带数据量大小限制问题。

第一方面,提供了一种进程间通信的方法,用于从第一进程向第二进程传输通信数据。该方法包括:确定第一进程的通信数据的数据长度是否小于第一内存空间的大小,其中通信数据用于第一进程与第二进程进行数据交换,第一内存空间为分配给第一进程访问的内存空间;当通信数据的长度小于第一内存空间的大小,将通信数据存储至第一内存空间中;为第二进程分配虚拟内存空间,虚拟内存空间用于第二进程访问通信数据;将第一内存空间的物理内存页映射到虚拟内存空间。解决了由于内存拷贝和分配释放带来的延时问题,以及安卓中的binder通信机制携带数据量大小限制问题。

在一种可能的实施方式中,解除第一内存空间中的物理内存页与虚拟地址空间的映射,释放虚拟地址空间。该实施方式,可以回收虚拟地址。

在一种可能的实施方式中,当通信数据的长度大于第一内存空间的大小,将通信数据存储为数据文件,第二进程通过数据文件的元数据访问通信数据。

在一种可能的实施方式中,将通信数据存储为数据文件,第二进程通过数据文件的元数据访问通信数据具体包括:将通信数据存储在位于第一内存空间之外的第二内存空间中;将第二内存空间映射为数据文件;将数据文件的元数据存储到第一内存空间中。

在一种可能的实施方式中,调整通信数据的地址;向第二进程发送消息,消息包括数据文件的元数据。

在一种可能的实施方式中,数据文件的元数据包括文件描述符,向第二进程发送消息之前,还包括:根据文件描述符所对应的控制信息,确定对应的第二进程,将文件描述符转换成第二进程能够识别的文件描述符。

在一种可能的实施方式中,在通过所选的通信方式进行进程间的数据交互之后,还包括:根据数据文件的通信状态标识,判断数据文件的通信状态;响应于数据文件通信已经完成,将数据文件的文件信息存储到第一缓存列表,作为下次待使用的文件信息。该实施方式,将第二进程读取结束的使用文件保留,用作下次进程备用。

在一种可能的实施方式中,将通信数据存储为数据文件,第二进程通过数据文件的元数据访问通信数据具体包括:将通信数据存储在位于第一内存空间之外的第二内存空间中;将数据文件的元数据发送到内核;为第二进程分配虚拟内存空间,虚拟内存空间用于第二进程访问通信数据;根据元数据,将数据文件的物理内存地址空间映射到虚拟内存空间。

再一方面,提供了一种进程间通信的方法,该方法包括:将第一进程的通信数据存储至第一内存空间中,通信数据用于第一进程与第二进程进行数据交换,第一内存空间为分配给第一进程访问的内存空间;为第二进程分配虚拟内存空间,虚拟内存空间用于第二进程访问通信数据;将第一内存空间的物理内存页映射到虚拟内存空间。

在一种可能的实施方式中,将第一进程的通信数据存储至第一内存空间中之前,该方法还包括:确定通信数据的数据长度小于第一内存空间的大小。

再一方面,本发明实施例提供了一种进程间通信的系统,用于从第一进程向第二进程传输通信数据,该系统包括选择模块,用于确定第一进程的通信数据的数据长度是否小于第一内存空间的大小,其中所述通信数据用于所述第一进程与第二进程进行数据交换,所述第一内存空间为分配给第一进程访问的内存空间;处理模块,用于当所述通信数据的长度小于所述第一内存空间的大小,将所述通信数据存储至第一内存空间中;配置模块,用于为所述第二进程分配虚拟内存空间,所述虚拟内存空间用于第二进程访问所述通信数据;处理模块,还用于将所述第一内存空间的物理内存页映射到所述虚拟内存空间。

再一方面,提供了一种进程间通信的方法,用于从第一进程向第二进程传输通信数据。该方法包括:对第一进程和第二进程进行初始化配置,包括在共享内存空间中开辟第一内存空间;根据通信数据长度和阈值的大小选择通信方式,其中通信数据包括数据和消息,阈值为第一内存空间的大小;通过所选的通信方式进行进程间的数据交互。解决了由于内存拷贝和分配释放带来的延时问题,以及安卓中的binder通信机制携带数据量大小限制问题。

在一种可能的实施方式中,响应于通信数据长度小于阈值,选择共享内存方式进行通信;共享内存方式为通过第一内存空间传输通信数据。

在一种可能的实施方式中,通过所选的通信方式进行进程间的数据交互,包括:为第二进程分配虚拟地址空间;将第一内存空间的物理内存页映射到第二进程的虚拟地址空间。该实施方式,利用第一进程的共享内存,开通读写功能,实现内存对于第一进程和第二进程的完全共享,解决由于内存拷贝和分配释放而带来的时延问题。

在一种可能的实施方式中,通过所选的通信方式进行进程间的数据交互,还包括:向第二进程发送消息,以触发第二进程运行。

在一种可能的实施方式中,通过所选的通信方式进行进程间的数据交互之后,还包括:解除第一内存空间中的物理内存页与虚拟地址空间的映射,释放虚拟地址空间。在一种可能的实施方式中,根据通信数据长度和阈值的大小选择通信方式,包括:响应于通信数据长度大于或等于阈值,选择数据文件方式进行通信,数据文件方式为,将通信数据存储为数据文件,通过第一内存空间传输数据文件的元数据。该实施方式,解决了通信机制携带数据量大小限制问题。

在一种可能的实施方式中,响应于通信数据长度大于等于阈值,选择数据文件方式进行通信,包括:将通信数据存储在位于共享内存空间之外的第二内存空间中;将第二内存空间映射为数据文件;将数据文件的元数据存储到第一内存空间中。该实施方式,解决了通信机制携带数据量大小限制问题。

在一种可能的实施方式中,将通信数据存储在位于共享内存空间之外的第二内存空间之前,还包括:根据用于存储待使用文件信息的第一缓存列表确定待使用数据文件,根据待使用数据文件确定待使用数据文件所对应的待使用共享内存,判断待使用共享内存中是否包含满足通信数据长度的待使用共享内存;响应于待使用共享内存中包含满足通信数据长度的待使用共享内存,将满足通信数据长度的待使用共享内存作为第二内存空间;响应于待使用共享内存中不包含满足通信数据长度的待使用共享内存,在共享内存空间之外创建满足通信数据长度的共享内存作为第二内存空间。该实施方式,利用共享内存空间之外创建第二内存空间,不受原有共享内存空间大小的限制,解决了通信机制携带数据量大小限制的问题。

在一种可能的实施方式中,数据文件包含通信状态标识,通信状态标识用于示出数据文件的通信状态,在根据用于存储待使用文件信息的第一缓存列表确定待使用数据文件之前,还包括:遍历第二缓存列表,第二缓存列表用于存储通信中的数据文件的文件信息,根据通信状态标识判断第二缓存列表中是否包含已经完成通信的数据文件所对应的文件信息;响应于第二缓存列表中包含已经完成通信的数据文件所对应的文件信息,将第二缓存列表中已经完成通信的数据文件所对应的文件信息存储到第第一缓存列表,作为待使用文件信息。该实施方式,可以确保将第二缓存列表中已经完成通信,但是还没有及时存储到第一缓存列表的文件信息所对应的数据文件,也列入第二缓存的选择范围,提高缓存资源的利用率。

在一种可能的实施方式中,第一缓存列表中的文件信息按照所对应的待使用共享内存的大小进行排序,判断待使用共享内存中是否包含满足通信数据长度的待使用共享内存包括:在第一缓存列表中,从最小的待使用共享内存开始依次进行判断。该实施方式,在第一缓存列表中文件描述符所对应的满足通信数据长度的共享内存中,优先使用最小的共享内存,可以节省空间。

在一种可能的实施方式中,将数据文件的元数据存储到第一内存空间中,包括:判断第一内存空间是否足够存储数据文件的元数据;响应于第一内存空间不足以存储数据文件的元数据,扩大第一内存空间至足够存储数据文件的元数据;响应于第一内存空间足够存储数据文件的元数据,将第一内存空间中的原有数据替换为数据文件的元数据。该实施方式,利用已有的第一内存空间来存储数据文件的元数据,节省了空间。

在一种可能的实施方式中,通过所选的通信方式进行进程间的数据交互,包括:通过数据文件元数据的传输进行数据交互。该实施方式,利用元数据的传输来实现数据共享。

在一种可能的实施方式中,通过数据文件元数据的传输进行数据交互,包括:调整通信数据的地址;向第二进程发送消息,消息用于触发第二进程,消息包括数据文件的元数据。

在一种可能的实施方式中,数据文件的元数据包括文件描述符,向第二进程发送消息之前,还包括:根据文件描述符所对应的控制信息,确定对应的第二进程,将文件描述符转换成第二进程能够识别的文件描述符。

在一种可能的实施方式中,触发第二进程包括:触发第二进程根据第二进程能够识别的文件描述符和相对应的控制信息,还原出数据文件中的数据。

在一种可能的实施方式中,在通过所选的通信方式进行进程间的数据交互之后,还包括:根据数据文件的通信状态标识,判断数据文件的通信状态;响应于数据文件通信已经完成,将该数据文件的文件信息存储到第一缓存列表,作为下次待使用的文件信息。该实施方式,将第二进程读取结束的使用文件保留,用作下次进程备用。

在一种可能的实施方式中,将数据文件的文件信息存储到第二缓存列表,作为下次待使用的文件信息,还包括:判断第一缓存列表中存储的待使用文件信息的数量是否大于第一缓存列表阈值;第一缓存列表阈值为第一缓存列表所能容纳的待使用文件信息数量最大值;响应于第一缓存列表中存储的待使用文件信息数量大于第一缓存列表阈值,根据第一缓存列表中的待使用文件信息确定待使用文件信息所对应的待使用数据文件,根据待使用数据文件确定待使用数据文件所对应的待使用共享内存,将待使用共享内存中最小的待使用共享内存释放,在第一缓存列表删除最小的待使用共享内存所对应的待使用文件信息。该实施方式,在第一缓存列表中设置待使用文件信息存储的数量上限,当存储数量达到上限,释放掉最小的内存,即保证缓存的共享内存不会因为太多而占用内存,又能提高缓存的利用率。

再一方面,本发明实施例提供了一种进程间通信的系统,用于从第一进程向第二进程传输通信数据,该系统包括配置模块、选择模块和处理模块,其中,配置模块,用于对第一进程和第二进程进行初始化配置,初始化配置包括在共享内存空间中开辟第一内存空间;选择模块,用于根据通信数据长度和阈值的大小,选择通信方式,其中通信数据包括数据和消息,阈值为第一内存空间的大小;处理模块,用于通过所选的通信方式进行进程间的数据交互。该系统可以实现上述第一方面方法设计中所执行的功能,功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。硬件或软件包括一个或多个上述功能相应的模块。

再一方面,本发明实施例提供了一种计算机存储介质,所述计算机存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述第一方面或第一方面的任意一种可能的设计中所述的方法。

再一方面,本发明实施例提供了一种计算机程序产品,其包含指令,当所述程序被计算机所执行时,该指令使得计算机执行上述第一方面或第一方面的任意一种可能的设计中所述的方法。

附图说明

图1为本发明实施例提供的一种手机的结构示意图;

图2为本发明实施例提供的一种进程间通信的方法流程图;

图3为本发明实施例提供的一种对第一进程和第二进程进行初始化配置的流程图;

图4为本发明实施例提供的一种共享内存机制的方法原理图;

图5为本发明实施例提供的一种选择数据文件方式进行通信的方法流程示意图;

图6为本发明实施例提供的一种进程间数据交互的方法流程示意图;

图7为本发明实施例提供的一种数据文件机制的方法原理图;

图8为本发明实施例提供的一种进程间通信系统结构示意图。

具体实施方式

本发明实施例提供的进程间通信的方法,由于不需要在第二进程中重新分配内存地址存放第一进程的数据,使得进程间通信结束后无需释放内存。从而解决由于内存拷贝和分配释放而带来的时延问题。

本发明实施例还提供一种终端,该终端至少可以包括存储器、收发器以及处理器,存储器可用于存储软件程序,处理器通过运行存储在存储器的软件程序,执行终端的各种功能,收发器可用于接收发射通知消息。

下面以图1为例对终端的结构做进一步的介绍。图1示出的是与本发明实施例相关的一种手机结构示意图。参考图1,手机800包括:收发器810、存储器820、其他输入设备830、触摸屏840、传感器850、音频电路860、i/o子系统870、处理器880、以及电源890等部件。本领域技术人员可以理解,图8中示出的手机结构并不构成对手机的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置。

下面结合图1对手机800的各个构成部件进行具体的介绍:

收发器810可用于收发信息或通话过程中信号的接收和发送,特别地,将基站的下行信息接收后,给处理器880处理;另外,将设计上行的数据发送给基站。通常,收发器包括但不限于天线、至少一个放大器、收发信机、耦合器、lna(lownoiseamplifier,低噪声放大器)、双工器等。此外,收发器810还可以通过无线通信与网络和其他设备通信。所述无线通信可以使用任一通信标准或协议,包括但不限于gsm(globalsystemofmobilecommunication,全球移动通讯系统)、gprs(generalpacketradioservice,通用分组无线服务)、cdma(codedivisionmultipleaccess,码分多址)、wcdma(widebandcodedivisionmultipleaccess,宽带码分多址)、lte(longtermevolution,长期演进)、电子邮件、sms(shortmessagingservice,短消息服务)等。

存储器820可用于存储软件程序,处理器880通过运行存储在存储器820的软件程序,从而执行手机800的各种功能。存储器820可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图象播放功能等)等;存储数据区可存储根据手机800的使用所维护的数据(比如音频数据、电话本等)等。此外,存储器820可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。

其他输入设备830可用于接收输入的数字或字符信息,以及产生与手机800的用户设置以及功能控制有关的键信号输入。具体地,其他输入设备830可包括但不限于物理键盘、功能键(比如音量控制按键、开关按键等)、轨迹球、鼠标、操作杆、光鼠(光鼠是不显示可视输出的触摸敏感表面,或者是由触摸屏形成的触摸敏感表面的延伸)等中的一种或多种。其他输入设备830与i/o子系统870的其他输入设备控制器871相连接,在其他设备输入控制器871的控制下与处理器880进行信号交互。

触摸屏840可用于显示由用户输入的信息或提供给用户的信息以及手机800的各种菜单,还可以接受用户输入。具体的触摸屏840可包括显示面板841,以及触控面板842。其中显示面板841可以采用lcd(liquidcrystaldisplay,液晶显示器)、oled(organiclight-emittingdiode,有机发光二极管)等形式来配置显示面板841。触控面板842,也称为显示屏、触敏屏等,可收集用户在其上或附近的接触或者非接触操作(比如用户使用手指、触笔等任何适合的物体或附件在触控面板842上或在触控面板842附近的操作,也可以包括体感操作;该操作包括单点控制操作、多点控制操作等操作类型。),并根据预先设定的程序驱动相应的连接装置。可选的,触控面板842可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的手势,也就是触摸方位、姿势,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成处理器能够处理的信息,再送给处理器880,并能接收处理器880发来的命令并加以执行。此外,可以采用电阻式、电容式、红外线以及表面声波等多种类型实现触控面板842,也可以采用未来发展的任何技术实现触控面板842。进一步的,触控面板842可覆盖显示面板841,用户可以根据显示面板841显示的内容(该显示内容包括但不限于,软键盘、虚拟鼠标、虚拟按键、图标等等),在显示面板841上覆盖的触控面板842上或者附近进行操作,触控面板842检测到在其上或附近的操作后,通过i/o子系统870传送给处理器880以确定用户输入,随后处理器880根据用户输入通过i/o子系统870在显示面板841上提供相应的视觉输出。虽然在图8中,触控面板842与显示面板841是作为两个独立的部件来实现手机800的输入和输入功能,但是在某些实施例中,可以将触控面板842与显示面板841集成而实现手机800的输入和输出功能。

手机800还可包括至少一种传感器850,比如光传感器、运动传感器以及其他传感器。具体地,光传感器可包括环境光传感器及接近传感器,其中,环境光传感器可根据环境光线的明暗来调节显示面板841的亮度,接近传感器可在手机800移动到耳边时,关闭显示面板841和/或背光。作为运动传感器的一种,加速计传感器可检测各个方向上(一般为三轴)加速度的大小,静止时可检测出重力的大小及方向,可用于识别手机姿态的应用(比如横竖屏切换、相关游戏、磁力计姿态校准)、振动识别相关功能(比如计步器、敲击)等;至于手机800还可配置的陀螺仪、气压计、湿度计、温度计、红外线传感器等其他传感器,在此不再赘述。

音频电路860、扬声器861,麦克风862可提供用户与手机800之间的音频接口。音频电路860可将接收到的音频数据转换后的信号,传输到扬声器861,由扬声器861转换为声音信号输出;另一方面,麦克风862将收集的声音信号转换为信号,由音频电路860接收后转换为音频数据,再将音频数据输出至收发器808以发送给比如另一手机,或者将音频数据输出至存储器820以便进一步处理。

i/o子系统870用来控制输入输出的外部设备,可以包括其他设备输入控制器871、传感器控制器872、显示控制器873。可选的,一个或多个其他输入控制设备控制器871从其他输入设备830接收信号和/或者向其他输入设备830发送信号,其他输入设备830可以包括物理按钮(按压按钮、摇臂按钮等)、拨号盘、划动开关、操纵杆、点击滚轮、光鼠(光鼠是不显示可视输出的触摸敏感表面,或者是由触摸屏形成的触摸敏感表面的延伸)。值得说明的是,其他输入控制设备控制器871可以与任一个或者多个上述设备连接。所述i/o子系统870中的显示控制器873从触摸屏840接收信号和/或者向触摸屏840发送信号。触摸屏840检测到用户输入后,显示控制器873将检测到的用户输入转换为与显示在触摸屏840上的用户界面对象的交互,即实现人机交互。传感器控制器872可以从一个或者多个传感器850接收信号和/或者向一个或者多个传感器850发送信号。

处理器880是手机800的控制中心,利用各种接口和线路连接整个手机的各个部分,通过运行或执行存储在存储器820内的软件程序和/或模块,以及调用存储在存储器820内的数据,执行手机800的各种功能和处理数据,从而对手机进行整体监控。可选的,处理器880可包括一个或多个处理单元;优选的,处理器880可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器880中。

手机800还包括给各个部件供电的电源890(比如电池),优选的,电源可以通过电源管理系统与处理器880逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗等功能。

尽管未示出,手机800还可以包括摄像头、蓝牙模块等,在此不再赘述。

所述各器件的工作过程如下:

处理器880,对第一进程和第二进程进行初始化配置,所述初始化配置包括在共享内存空间中创建第一内存空间;根据第一进程的通信数据长度和阈值的大小选择通信方式,其中所述通信数据包括数据和消息,所述阈值为所述第一内存空间的大小;通过所选的通信方式进行进程间的数据交互。

可选地,处理器880,响应于所述通信数据长度小于阈值,选择共享内存方式进行通信;所述共享内存方式为通过所述第一内存空间传输所述通信数据。

可选地,处理器880,为所述第二进程分配虚拟地址空间;将第一内存空间的物理内存页映射到第二进程的虚拟地址空间。

可选地,收发器810,向所述第二进程发送所述消息,以触发第二进程运行。

可选地,处理器880,解除第一内存空间中的物理内存页与所述虚拟地址空间的映射,释放所述虚拟地址空间。

可选地,处理器880,响应于通信数据长度大于或等于所述阈值,选择数据文件方式进行通信,所述数据文件方式为,将所述通信数据存储为数据文件,通过所述第一内存空间传输所述数据文件的元数据。

可选地,处理器880,将所述通信数据存储在位于所述共享内存空间之外的第二内存空间中;将所述第二内存空间映射为数据文件;将所述数据文件的元数据存储到所述第一内存空间中。

可选地,处理器880,根据用于存储待使用文件信息的第一缓存列表确定待使用数据文件,根据所述待使用数据文件确定待使用数据文件所对应的待使用共享内存,判断待使用共享内存中是否包含满足所述通信数据长度的待使用共享内存;响应于待使用共享内存中包含满足所述通信数据长度的待使用共享内存,将满足所述通信数据长度的待使用共享内存作为第二内存空间;响应于待使用共享内存中不包含满足通信数据长度的待使用共享内存,在所述共享内存空间之外创建满足所述通信数据长度的共享内存作为第二内存空间。

可选地,处理器880,遍历第二缓存列表,所述第二缓存列表用于存储通信中的数据文件的文件信息,根据所述通信状态标识判断所述第二缓存列表中是否包含已经完成通信的数据文件所对应的文件信息;响应于第二缓存列表中包含已经完成通信的数据文件所对应的文件信息,将所述第二缓存列表中已经完成通信的数据文件所对应的文件信息存储到第第一缓存列表,作为待使用文件信息

可选地,处理器880,在所述第一缓存列表中,从最小的待使用共享内存开始依次进行判断。

可选地,处理器880,判断第一内存空间是否足够存储所述数据文件的元数据;响应于第一内存空间不足以存储所述数据文件的元数据,扩大第一内存空间至足够存储数据文件的元数据;响应于第一内存空间足够存储所述数据文件的元数据,将所述第一内存空间中的原有数据替换为所述数据文件的元数据。

可选地,处理器880,通过数据文件元数据的传输进行数据交互。

可选地,处理器880,调整所述通信数据的地址。

可选地,收发器810,向第二进程发送消息,所述消息用于触发第二进程,所述消息包括所述数据文件的元数据。

可选地,处理器880,根据所述文件描述符所对应的控制信息,确定对应的第二进程,将所述文件描述符转换成第二进程能够识别的文件描述符。

可选地,处理器880,触发第二进程根据所述第二进程能够识别的文件描述符和相对应的控制信息,还原出所述数据文件中的数据。

可选地,处理器880,根据所述数据文件的通信状态标识,判断所述数据文件的通信状态;响应于所述数据文件通信已经完成,将所述数据文件的文件信息存储到第一缓存列表,作为下次待使用的文件信息。

可选地,处理器880,判断所述第一缓存列表中存储的待使用文件信息的数量是否大于第一缓存列表阈值;所述第一缓存列表阈值为第一缓存列表所能容纳的待使用文件信息数量最大值;响应于所述第一缓存列表中存储的待使用文件信息数量大于所述第一缓存列表阈值,根据第一缓存列表中的待使用文件信息确定所述待使用文件信息所对应的待使用数据文件,根据所述待使用数据文件确定待使用数据文件所对应的待使用共享内存,将待使用共享内存中最小的待使用共享内存释放,在所述第一缓存列表删除所述最小的待使用共享内存所对应的待使用文件信息。

图2本发明实施例提供的一种进程间通信的方法流程图,该方法包括:

步骤101,确定第一进程的通信数据的数据长度是否小于第一内存空间的大小,其中通信数据用于第一进程与第二进程进行数据交换,第一内存空间为分配给第一进程访问的内存空间;

步骤102,当通信数据的长度小于第一内存空间的大小,将通信数据存储至第一内存空间中;

步骤103,为第二进程分配虚拟内存空间,虚拟内存空间用于第二进程访问通信数据;

步骤104,将第一内存空间的物理内存页映射到虚拟内存空间。

根据一个具体实施例,在该步骤中,在共享内存方式下,binder驱动通过数据的重新映射进行进程间的数据交互,在数据文件方式下,通过数据文件元数据的传输进行进程间的数据交互,实现进程间通信。

在一个实施例中,对于通信数据长度小于阈值的情况,选取共享内存机制的方案。该方案是利用第一进程的共享内存,开通读写功能,实现内存对于第一进程和第二进程的完全共享。下面结合附图对本实施例方案进行介绍:

图3本发明实施例提供的一种对第一进程和第二进程进行初始化配置的方法流程示意图。

在一个示例中,结合图1和图2,对应的在步骤101,对第一进程和第二进程进行初始化配置,包括用户空间的进程初始化和binder驱动针对进程的初始化。具体如下:

步骤1011:对第一进程的地址空间和第二进程的地址空间的控制参数进行初始化配置。

步骤1012:在共享内存空间中开辟第一内存空间。

在一个示例中,对应的在步骤102,比较通信数据长度和阈值的大小,根据比较结果,选择通信方式,其中上述阈值为步骤101中分配的第一内存空间的大小。当通信数据长度小于阈值,选择共享内存方式进行通信,共享内存方式为通过第一内存空间传输通信数据。

在一个示例中,对应的在步骤103,通过所选的通信方式进行进程间的数据交互,包括:

为第二进程分配虚拟地址空间;将第一内存空间的物理内存页映射到第二进程的虚拟地址空间。通过将共享内存中数据重新映射到第二进程的方式,实现了零次拷贝数据。

在一个示例中,对应的在步骤103,向第二进程发送消息,用以触发第二进程运行。如此,第二进程开始运行,根据重新映射的地址,直接到第一内存空间中读取数据,从而实现与第一进程的数据交互。

在通过共享内存方式进行进程间的数据交互之后,为了回收虚拟地址,解除第一内存空间中的物理内存页与虚拟地址空间的映射,释放虚拟地址空间。

图4本发明实施例提供的一种共享内存机制的方法原理图。通过图3的图示可以看到,在共享内存方案中,第一进程将数据写入共享内存,通过数据的重新映射,将共享内存中数据重新映射到第二进程,使得第二进程直接从该共享内存读取数据,实现了数据的零次拷贝。由于不需要在第二进程中重新分配内存地址存放第一进程的数据,使得进程间通信结束后无需释放内存,从而解决由于内存拷贝和分配释放而带来的时延问题。

在另一个实施例中,对于通信数据长度大于或者等于阈值的情况,选取数据文件机制的方案。在该方案中,利用一个数据文件存储需要传送的第一进程的数据,解决通信数据长度的大小限制问题。下面结合附图对本实施例方案进行介绍:

在一个示例中,首先在步骤101,对第一进程和第二进程进行初始化配置,包括在共享内存空间开辟第一内存空间。

在一个示例中,对应的在步骤102,根据通信数据长度和阈值的大小选择通信方式,包括:

响应于通信数据长度达到或超过阈值,选择数据文件方式进行通信,其中,数据文件方式为,将通信数据存储为数据文件,通过第一内存空间传输数据文件的元数据。

图5本发明实施例提供的一种响应于通信数据长度达到或超过阈值,选择数据文件方式进行通信的方法流程示意图,该示意图示出上述步骤102的子步骤。结合图1和图4,在步骤102,响应于通信数据长度达到或超过阈值,选择数据文件方式进行通信,进一步包括:

步骤1021:将通信数据存储在位于共享内存空间之外的第二内存空间中;

步骤1022:将第二内存空间映射为数据文件;

步骤1023:将数据文件的元数据存储到第一内存空间中。

在一个示例中,对应的在步骤1021,将通信数据存储在位于共享内存空间之外的第二内存空间之前,还包括:

根据用于存储待使用文件信息的第一缓存列表确定待使用数据文件,根据待使用数据文件确定待使用数据文件所对应的待使用共享内存,判断待使用共享内存中是否包含满足通信数据长度的待使用共享内存;

响应于待使用共享内存中包含满足通信数据长度的待使用共享内存,将满足通信数据长度的待使用共享内存作为第二内存空间;

响应于待使用共享内存中不包含满足通信数据长度的待使用共享内存,在共享内存空间之外创建满足通信数据长度的共享内存作为第二内存空间。

其中,待使用文件信息包括文件描述符,文件大小和文件起始地址。

进一步地,在一个示例中,数据文件包含通信状态标识,该通信状态标识用于示出数据文件的通信状态,在根据用于存储待使用文件信息的第一缓存列表确定待使用数据文件之前,还包括:遍历第二缓存列表,第二缓存列表用于存储通信中的数据文件的文件信息,根据通信状态标识判断第二缓存列表中是否包含已经完成通信的数据文件所对应的文件信息;响应于第二缓存列表中包含已经完成通信的数据文件所对应的文件信息,将第二缓存列表中已经完成通信的数据文件所对应的文件信息存储到第第一缓存列表,作为待使用文件信息。如此,确保可以将第二缓存列表中已经完成通信,但是还没有及时存储到第一缓存列表的文件信息所对应的数据文件,也列入第二缓存的选择范围,提高缓存资源的利用率。

进一步地,在一个示例中,第一缓存列表中的文件信息按照所对应的待使用共享内存的大小进行排序,判断待使用共享内存中是否包含满足通信数据长度的待使用共享内存包括:在第一缓存列表中,从最小的待使用共享内存开始依次进行判断,当判断出包含满足通信数据长度的待使用共享内存时,停止判断,将所判断出的共享内存作为第二内存空间。如此,在第一缓存列表中文件描述符所对应的满足通信数据长度的共享内存中,优先使用最小的共享内存,可以节省空间。

在一个示例中,对应的在步骤1023,将数据文件的元数据存储到第一内存空间中,包括:判断第一内存空间是否足够存储数据文件的元数据;

响应于第一内存空间不足以存储数据文件的元数据,扩大第一内存空间至足够存储数据文件的元数据;

响应于第一内存空间足够存储数据文件的元数据,将第一内存空间中的原有数据替换为数据文件的元数据。如此,利用已有的第一内存空间来存储数据文件的元数据,节省了空间。

在如上执行步骤102的基础上,在一个示例中,对应的在步骤103,通过所选的通信方式进行进程间的数据交互,包括:通过数据文件元数据的传输进行数据交互。

图6本发明实施例提供的一种选择数据文件方式进行进程间数据交互的方法流程示意图。该示意图示出步骤103的子步骤。结合图1和图5,对应的在步骤103,通过数据文件元数据的传输进行数据交互,包括:

步骤1031:调整通信数据的地址;

步骤1032:向第二进程发送消息;消息用于触发第二进程,消息包括数据文件元数据。

在一个示例中,对应的在步骤1032,数据文件的元数据包括文件描述符,向第二进程发送消息之前,还包括:

根据文件描述符所对应的控制信息,确定对应的第二进程,将文件描述符转换成第二进程能够识别的文件描述符。

在一个示例中,对应的在步骤1032,触发第二进程包括:

触发第二进程根据第二进程能够识别的的文件描述符和相对应的控制信息,还原出数据文件中的数据。

在如上执行步骤1032的基础上,在一个示例中,在通过数据文件方式完成数据交互后,根据数据文件的通信状态标识,判断数据文件的通信状态;响应于数据文件通信已经完成,将使用结束的数据文件的文件信息存储到第一缓存列表,作为下次待使用的文件信息。如此,将第二进程读取结束的使用文件保留,用作下次进程备用。

进一步地,在一个示例中,将使用结束的数据文件的文件信息存储到第一缓存列表,作为下次待使用的文件信息,还包括:

判断第一缓存列表中存储的待使用文件信息数量是否大于第一缓存列表阈值;第一缓存列表阈值为第一缓存列表所能容纳的待使用文件信息数量最大值。

响应于第一缓存列表中存储的待使用文件信息数量大于第一缓存列表阈值,根据第一缓存列表中的待使用文件信息确定待使用文件信息所对应的待使用数据文件,根据待使用数据文件确定待使用数据文件所对应的待使用共享内存,将待使用共享内存中最小的待使用共享内存释放,在第一缓存列表删除最小的待使用共享内存所对应的待使用文件信息。如此,在第一缓存列表中设置待使用文件信息存储的数量上限,当存储数量达到上限,释放掉最小的内存,即保证缓存的共享内存不会因为太多而占用内存,又能提高缓存的利用率。

图7本发明实施例提供的一种数据文件机制的方法原理图。通过图7以看到,在数据文件的方案中,利用一个数据文件存储需要传送的第一进程的数据。在这个过程中,利用binder驱动仅需要传输这个数据文件的元数据,而不需要传输整个文件,即可实现数据共享。利用这种方式,可以解决binder通信机制携带数据量大小限制问题。

图8本发明实施例提供的一种进程间通信系统结构示意图。

本发明实施例提供的进程间通信系统,包括,配置模块701,选择模块702,处理模块703。其中,配置模块701,用于对第一进程和第二进程进行初始化配置,初始化配置包括在共享内存空间中创建第一内存空间;选择模块702,根据通信数据长度和阈值的大小选择通信方式,阈值为第一内存空间的大小;处理模块703,用于通过所选的通信方式进行进程间的数据交互。在一个具体例子中,共享内存空间通常设定为131072b(128kb),第一内存空间的大小可以设置为8kb。

对应通信数据长度小于阈值时,选取共享内存机制方案的实施例,配置模块701执行对第一进程和第二进程进行初始化配置包括:

对第一进程的地址空间和第二进程的地址空间的控制参数进行初始化配置;

在共享内存空间中开辟第一内存空间。

在一个示例中,选择模块702执行根据通信数据长度和阈值的大小,选择通信方式,其中上述阈值为在共享内存空间中分配的第一内存空间的大小。响应于通信数据长度小于阈值,选择共享内存方式进行通信。

在一个示例中,处理模块703执行通过所选的通信方式进行进程间的数据交互,包括:

为第二进程分配虚拟地址空间;将第一内存空间的物理内存页映射到第二进程的虚拟地址空间。通过将共享内存中数据重新映射到第二进程的方式,实现了零次拷贝数据。

在一个示例中,处理模块703向第二进程发送消息,用以触发第二进程运行。如此,第二进程开始运行,根据重新映射的地址,直接到第一内存空间中读取数据,从而实现与第一进程的数据交互。

在通过共享内存方式进行进程间的数据交互之后,为了回收虚拟地址,处理模块703解除第一内存空间中的物理内存页与虚拟地址空间的映射,释放虚拟地址空间。

在共享内存方案中,第一进程将数据写入共享内存,通过数据的重新映射,将共享内存中数据重新映射到第二进程,使得第二进程直接从该共享内存读取数据,实现了数据的零次拷贝。由于不需要在第二进程中重新分配内存地址存放第一进程的数据,使得进程间通信结束后无需释放内存,从而解决由于内存拷贝和分配释放而带来的时延问题。

对应通信数据长度高于阈值的情况,选取数据文件机制的实施例,利用一个数据文件存储需要传送的第一进程的数据,解决通信数据长度的大小限制问题。

在一个示例中,配置模块701执行对第一进程和第二进程进行初始化配置还包括在共享内存空间中开辟第一内存空间。

在一个示例中,选择模块执行根据通信数据长度和阈值的大小选择通信方式,包括:

响应于通信数据长度达到或超过阈值,选择数据文件方式进行通信。

在一个示例中,选择模块执行响应于通信数据长度达到或超过阈值,选择数据文件方式进行通信,进一步包括:

将通信数据存储在位于共享内存空间之外的第二内存空间中;

将第二内存空间映射为数据文件;

将数据文件的元数据存储到第一内存空间中。.

在一个示例中,选择模块执行上述将通信数据存储在位于共享内存空间之外的第二内存空间之前,还包括:

根据用于存储待使用文件信息的第一缓存列表确定待使用数据文件,根据待使用数据文件确定待使用数据文件所对应的待使用共享内存,判断待使用共享内存中是否包含满足通信数据长度的待使用共享内存;

响应于待使用共享内存中包含满足通信数据长度的待使用共享内存,将满足通信数据长度的待使用共享内存作为第二内存空间;

响应于待使用共享内存中不包含满足通信数据长度的待使用共享内存,在共享内存空间之外创建满足通信数据长度的共享内存作为第二内存空间。

其中,待使用文件信息包括文件描述符,文件大小和文件起始地址。

进一步地,在一个示例中,数据文件包含通信状态标识,该通信状态标识用于示出数据文件的通信状态,在上述选择模块执根据用于存储待使用文件信息的第一缓存列表确定待使用数据文件之前,还包括:遍历第二缓存列表,第二缓存列表用于存储通信中的数据文件的文件信息,根据通信状态标识判断第二缓存列表中是否包含已经完成通信的数据文件所对应的文件信息;响应于第二缓存列表中包含已经完成通信的数据文件所对应的文件信息,将第二缓存列表中已经完成通信的数据文件所对应的文件信息存储到第第一缓存列表,作为待使用文件信息。如此,确保可以将第二缓存列表中已经完成通信,但是还没有及时存储到第一缓存列表的文件信息所对应的数据文件,也列入第二缓存的选择范围,提高缓存资源的利用率。

进一步地,在一个示例中,第一缓存列表中的文件信息按照所对应的待使用共享内存的大小进行排序,在上述选择模块执行判断待使用共享内存中是否包含满足通信数据长度的待使用共享内存,还包括:在第一缓存列表中,从最小的待使用共享内存开始依次进行判断,当判断出包含满足通信数据长度的待使用共享内存时,停止判断,将所判断出的共享内存作为第二内存空间。如此,在第一缓存列表中文件描述符所对应的满足通信数据长度的共享内存中,优先使用最小的共享内存,可以节省空间。

在一个示例中,选择模块执行将数据文件的元数据存储到第一内存空间中,包括:

判断第一内存空间中是否足够存储数据文件的元数据;

响应于第一内存空间中不够存储数据文件的元数据,扩大第一内存空间至足够存储数据文件的元数据;

响应于第一内存空间中足够存储数据文件的元数据,将第一内存空间中的原有数据替换为数据文件的元数据。

在如上执行选择数据文件方式进行通信的基础上,在一个示例中,处理模块执行通过所选的通信方式进行进程间的数据交互,包括:通过数据文件元数据的传输进行数据交互。

其中,通过数据文件元数据的传输进行数据交互,进一步包括:

调整通信数据的地址;

向第二进程发送消息;消息用于触发第二进程,消息包括数据文件元数据。

进一步地,在一个示例中,数据文件的元数据包括文件描述符,处理模块执行向第二进程发送消息之前,还包括:

根据文件描述符所对应的控制信息,确定对应的第二进程,将文件描述符转换成第二进程能够识别的文件描述符。

进一步地,在一个示例中,处理模块执行触发第二进程包括:

触发第二进程根据第二进程能够识别的的文件描述符和相对应的控制信息,还原出数据文件中的数据。

在一个示例中,在通过数据文件方式完成数据交互后,处理模块根据数据文件的通信状态标识,判断数据文件的通信状态;响应于数据文件通信已经完成,将使用结束的数据文件的文件信息存储到第一缓存列表,作为下次待使用的文件信息。如此,将第二进程读取结束的使用文件保留,用作下次进程备用。

进一步地,在一个示例中,处理模块将使用结束的数据文件的文件信息存储到第一缓存列表,作为下次待使用的文件信息,还包括:

判断第一缓存列表中存储的待使用文件信息数量是否大于第一缓存列表阈值;第一缓存列表阈值为第一缓存列表所能容纳的待使用文件信息数量最大值。

响应于第一缓存列表中存储的待使用文件信息数量大于第一缓存列表阈值,根据第一缓存列表中的待使用文件信息确定待使用文件信息所对应的待使用数据文件,根据待使用数据文件确定待使用数据文件所对应的待使用共享内存,将待使用共享内存中最小的待使用共享内存释放,在第一缓存列表删除最小的待使用共享内存所对应的待使用文件信息。如此,在第一缓存列表中设置待使用文件信息存储的数量上限,当存储数量达到上限,释放掉最小的内存,即保证缓存的共享内存不会因为太多而占用内存,又能提高缓存的利用率。

在一种实施方式中,第一进程还可以通过内核将数据文件的元数据发送给第二进程。其中,第一进程将数据文件的元数据发送给内核,内核通过元数据确定数据文件所在的内存空间的物理地址。为第二进程分配虚拟内存地址后,内核将数据文件的物理内存地址映射到第二进程的虚拟内存地址,从而实现第二进程通过虚拟内存地址访问数据文件,从而访问通信数据。

在数据文件的方案中,利用一个数据文件存储需要传送的第一进程的数据。在这个过程中,利用binder驱动仅需要传输这个数据文件的元数据,而不需要传输整个文件,即可实现数据共享。利用这种方式,可以解决binder通信机制携带数据量大小限制问题。

下面描述具体实现的实施例,以帮助对本方案的理解。

在一个实施例中,优化了binder通信的总方法流程,具体步骤如下:

步骤一,进程(客户进程和目标进程)的初始化配置,包括用户空间的进程初始化和binder驱动针对进程的初始化;

步骤二,判断通信数据(包括数据和消息)长度,若长度小于阈值(阈值通常设定为1040384b(1mb-8kb)),则通过“共享内存方式”进行通信;若长度超过阈值,则通过“共享文件方式”进行通信;

步骤三,binder驱动通过“共享数据方式”进行进程间的数据交互(通过数据的重新映射或共享文件元数据的传输),实现进程间通信。

其中,通过“共享内存方式”进行通信,即通过binder驱动,将共享内存中数据重新映射到目标进程,实现零次拷贝;由于不需要在目标进程中重新分配内存地址存放客户进程的数据,使得进程间通信结束后无需释放内存。从而解决由于内存拷贝和分配释放而带来的时延问题。

具体步骤为:

步骤一,进程(客户进程和目标进程)的初始化配置,包括用户空间的进程初始化和binder驱动针对进程的初始化。

1、用户空间初始化控制参数;

2、内核空间实际分配共享内存(开辟1mb-8kb的可读写内存空间),并映射内存地址;

3、每个线程初始化,分配线程id,确定分享内存区域。

步骤二,判断通信数据(包括数据和消息)长度,若长度小于阈值(阈值通常设定为1040384b(1mb-8kb)),则通过“共享内存方式”进行通信。

1、通信数据(包括数据和消息)长度小于每个线程的共享内存长度时,通过共享内存方式进行通信;否则走原来流程;

2、只有加入工作线程池中的线程才会使用共享内存通信;

3、只针对同步消息,使用共享内存通信;

4、只针对发给内核binder驱动的消息,使用共享内存通信;

5、通信需要的共享内存大小,需要通过ioctl通知内核binder驱动进行提前分配,才能使用。

步骤三,binder驱动通过“共享数据方式”进行进程间的数据交互(通过数据的重新映射),实现进程间通信。

1、接收到用户空间的ioctl消息后,需要判断传递过来的内存地址是否在共享内存区;如果是,则按照共享内存方式处理;否则走原有流程;

2、客户进程通信的数据内容,无需分配内存来存储数据,只需重新映射到目标进程的地址空间即可;

3、内存通知消息,采取池化处理。

通过“共享内存方式”进行通信,即利用额外的一个共享文件存储需要传送的客户进程的数据,利用binder驱动仅需要传输这个共享文件的元数据来实现数据共享。利用共享文件方式,解决android的binder通信机制携带数据量大小限制问题。

具体步骤为:

步骤一,进程(客户进程和目标进程)的初始化配置(与现有技术binder通信方式的初始化配置方式相同):分别分配一块1mb-8kb的内存地址进行映射为共享内存(这块内存的大小就是binder通信时的最大能承受的数据长度);将客户进程的数据串行化。

步骤二,判断通信数据(包括数据和消息)长度,若长度超过阈值(阈值通常设定为1040384b(1mb-8kb)),则通过“共享文件方式”进行通信,即进行parcel内存扩容,然后利用binder驱动仅需要传输这个共享文件的元数据来实现数据共享。

1、根据通信数据长度判定是否采用文件共享;若数据长度超过阀值,则通过ashmem开辟共享内存区域,进行共享;否则采用原有流程进行通信;

2、若已采用共享内存,但是共享内存空间不够,则需重新映射共享内存区域。

步骤三,binder驱动通过“共享数据方式”进行进程间的数据交互(通过共享文件元数据的传输),实现进程间通信。

1、异步通信不采用共享文件通信,因此下发给驱动前,如果数据已经是共享内存了,需要回退到原有模式;

2、通过是否使用共享文件标记判别是否采用共享文件处理;若采用共享文件,则需将备份的共享文件元数据发送给驱动;共享文件的数据不变;

3、接收到binder驱动命令后,需要检查是否采用共享文件通信,若是,则需将共享文件中的数据恢复到通信数据包,传递到服务进程进行处理;否则走原有流程;

4、若已采用共享文件,则需将共享内存区域进行unmap,文件句柄进行关闭,释放文件描述符对象;否则和原因流程一致。

需要说明的是,本发明实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。

可以理解的是,进程间通信系统为了实现上述功能,其包含了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该很容易意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,本发明能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

本领域技术人员应该可以意识到,在上述一个或多个示例中,本发明所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。计算机可读介质包括计算机存储介质和通信介质,其中通信介质包括便于从一个地方向另一个地方传送计算机程序的任何介质。存储介质可以是通用或专用计算机能够存取的任何可用介质。

以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1