一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种进程间通信的方法及装置与流程

2022-02-22 22:42:33 来源:中国专利 TAG:


1.本技术涉及计算机技术领域,具体涉及一种进程间通信的方法及装置。


背景技术:

2.随着计算机技术的发展,多个进程之间,以及多个进程与同一个进程之间的通信需求增大。当前通常采用基于通信信道的发送(send)-接收(recv)语义模型实现进程间消息的发送与接收。
3.内核通过通信信道提供进程间通信(interprocess communication,ipc)服务,通信信道由接收进程创建并授权给发送进程。发送进程在用户态根据需求准备好需要发送的数据,然后发送进程和接收进程分别使用内存块(buffer)发送和接收数据,在发送过程中,需要发送进程对数据进行序列化,在接收过程需要对数据进行反序列化,导致进程间通信过程中存在额外的性能开销。


技术实现要素:

4.本技术提供一种进程间通信的方法,用于降低进程间通信(interprocess communication,ipc)的性能开销。本技术还提供了相应的装置、计算机可读存储介质、计算机程序产品等。
5.本技术第一方面提供一种进程间通信的方法,该方法应用于计算机系统,该方法包括:根据调用约定,将通信信息写入发送进程的第一执行实体的寄存器组中,将目标数据的第一数据写入第一执行实体的栈内存中,该通信信息包括第一值,第一值用于指示第一数据的数据量,目标数据为发送进程要发送给第一接收进程的数据,调用约定用于指示通信信息在寄存器组中的写入顺序,以及第一数据在栈内存中的写入顺序;将第一执行实体的寄存器组中的信息复制到第一执行实体的上下文中,寄存器组中的信息包括通信信息和栈内存的地址,第一执行实体的上下文为内核中存储的第一执行实体的寄存器组中的信息;根据第一执行实体的上下文中的第一值和栈内存的地址,从第一执行实体的栈内存复制第一数据到第一接收进程的第二执行实体的栈内存中,第二执行实体用于第一接收进程与发送进程通信。
6.该第一方面中,调用约定(calling convension)是应用在x86、arm等架构下的与数据写入和数据读取相关的规定,该处“数据写入”和“数据读取”中的“数据”包括各类型寄存器中的数值,以及进程间通信要传递的数据。该调用约定明确了数据在发送进程的执行实体对应的寄存器和栈内存中的写入顺序,以及从接收进程的执行实体对应的寄存器和栈内存中读取数据的顺序。
7.需要说明的是,寄存器组包括通用寄存器,该通用寄存器也可以用于存储发送进程与第一接收进程要传递的目标数据中的全部或部分数据。若要传递的目标数据的数据量很小的情况下,通用寄存器就可以完成传递,这种情况下,用于描述栈内存中存储的第一数据的第一值可以等于0。通信信息(ipcinfo)会写入到寄存器组中,寄存器组中还可以包括
栈帧寄存器,该栈帧寄存器中会写入栈内存的地址。
8.执行实体(activation)是线程控制块(thread control block,tcb)中的一部分,tcb中还包括调度实体。tcb是一种数据结构,用于存储与相应线程相关的信息。一个进程可以包括多个线程,也会包括一个或多个tcb,第一执行实体位于发送进程的一个tcb中,第二执行实体是第一接收进程的执行实体。进程间通信需要从用户态陷入内核,在内核中完成数据传递。所以,上述触发发送进程从用户态陷入内核后,在内核中根据第一执行实体的上下文中的第一值和栈内存的地址,从第一执行实体的栈内存复制第一数据到第二执行实体的栈内存中,就可以完成数据的传递。
9.由该第一方面可知,基于调用约定,通过栈内存传递进程间通信数据,在发送端因为栈内存地址一直在寄存器组中存在,不需要为进程间通信特别写入该栈内存的地址,可以降低通信开销,而且在接收端可以直接从栈内存中读取进程间通信的数据进行处理,不需要先将进程间通信的数据从内存块中先读取出来再写入到栈内存中,然后再进行处理,这样进一步降低了进程间通信的性能开销。
10.在第一方面的一种可能的实现方式中,目标数据还包括第二数据,在将第一执行实体的寄存器组中的信息复制到第一执行实体的上下文中之前,该方法还包括:根据调用约定,将第二数据写入第一执行实体的寄存器组中,调用约定还用于指示第二数据在寄存器组中的写入顺序;上述步骤:将第一执行实体的寄存器组中的信息复制到第一执行实体的上下文中包括:将寄存器组中的第二数据、通信信息和栈内存的地址复制到第一执行实体的上下文中。该方法还包括:将第一执行实体的上下文复制到第二执行实体的上下文中;将第二执行实体的上下文写入第二执行实体的寄存器组中。
11.该种可能的实现方式中,发送进程要发送给第一接收进程的目标数据包括第一数据和第二数据两部分,第一数据通过栈内存发送,第二数据通过寄存器组发送。通过寄存器组发送第二数据,可以提高第二数据的传输速度,提高了进程间通信的性能。
12.应理解的是,在其他实现方式中,发送进程要发送给第一接收进程的目标数据可以全部通过栈内存发送,或全部通过寄存器组发送。
13.在第一方面的一种可能的实现方式中,目标数据还包括第三数据,通信信息还包括第二值,第二值用于指示存储在第一执行实体的第一内存块中第三数据的数据量,该方法还包括:将第一内存块的地址写入第一执行实体的寄存器组中,将第三数据写入第一执行实体的第一内存块中;根据第二值,以及第一内存块的地址,从第一执行实体的内存块复制第三数据到第二执行实体的内存块中。
14.该种可能的实现方式中,目标数据较大的情况下,为了避免过多占用栈内存,可以通过第一内存块再传输一部分数据,如:第三数据。可以将第三数据的数据量(也就是第二值)携带在通信信息中通知给第一接收进程,这样在保证性能开销的情况下,也有利于大数据的传输。
15.在第一方面的一种可能的实现方式中,第一执行实体中还包括第一页表信息,第二执行实体中还包括第二页表信息,第一页表信息和第二页表信息用于第一数据从第一执行实体的栈内存复制到第二执行实体的栈内存,或第三数据从第一执行实体的第一内存块复制到第二执行实体的内存块。
16.上述基于第一页表信息和第二页表信息实现数据的复制过程可以包括如下两种:
17.第一种复制方式:基于第一页表信息将第一数据从用户态的栈内存复制到内核的内存,再基于第二页表信息将第一数据从内核的内存复制到第二执行实体的栈内存。对于第三数据,从第一执行实体的第一内存块复制到第二执行实体的内存块的原理也是相同的。
18.第二种复制方式:基于第一页表信息将第一执行实体的栈内存映射到内核的第一内存,基于第二执行实体的页表信息将第二执行实体的栈内存映射到内核的第二内存,将第一数据从第一内存复制到第二内存。对于第三数据,从第一执行实体的第一内存块复制到第二执行实体的内存块的原理也是相同的。
19.在第一方面的一种可能的实现方式中,该方法还包括:在第一执行实体上叠加第二执行实体,并将第二执行实体的上下文写入到第二执行实体的寄存器组中,其中,第二执行实体的上下文包括第一执行实体的上下文中的数据。根据调用约定从第二执行实体的寄存器组和第二执行实体的栈内存中读取全部或部分目标数据,并对全部或部分目标数据进行处理,以得到处理结果,调用约定还用于指示对第二执行实体的寄存器组和栈内存的读取顺序。
20.该种可能的实现方式中,可以通过链表的方式在第一执行实体上叠加第二执行实体,叠加第二执行实体后,该第一执行实体会进入非活跃状态,由第二执行实体来接替第一执行实体的工作,叠加在第一执行实体上的第二执行实体会被切换到第二执行实体的用户态,随着第二执行实体从内核到用户态的切换,会将第二执行实体的上下文写入到第二执行实体的寄存器组中,这样第二执行实体就可以在用户态读取目标数据并进行处理,从而得到处理结果。另外,因为寄存器、栈内存和内存块传递数据的速度不同,在处理目标数据时可以等待全部目标数据都到达第二执行实体后再处理,也可以针对先到达第二执行实体的部分数据先进行处理。需要说明的是,本技术的方案中,第一执行实体位于发送进程的一个线程,或者一个tcb中,该tcb还包括调度实体,在第二执行实体叠加到第一执行实体后,该tcb就包括第二执行实体和该调度实体,这样本技术实现了发送进程的一个线程借用第一接收进程的第二执行实体进行目标数据处理,得到处理结果。可见,该种可能的实现方式提供了一种不同的进程间通信的形式。
21.在第一方面的一种可能的实现方式中,通信信息还包括用于处理目标数据的函数的标识;上述步骤:对全部或部分目标数据进行处理,以得到处理结果,包括:根据第二执行实体的寄存器组中的函数的标识,调用函数,对全部或部分目标数据进行处理,以得到处理结果。
22.该种可能的实现方式中,在通信信息中传递函数的标识,这样,可以确保发送进程借用第一接收进程的资源后也可以准确调用到用于目标数据处理的函数,提高了数据处理的准确度。
23.在第一方面的一种可能的实现方式中,第一执行实体中还包括发送进程的标识,该方法还包括:将发送进程的标识写入第二执行实体的上下文中,发送进程的标识用于第二执行实体验证发送进程的身份。
24.该种可能的实现方式中,将发送进程的标识写入第二执行实体的上下文中,在第二执行实体切换到用户态的过程中,该发送进程的标识也会写入第二执行实体的寄存器组中,这样,在接收端就可以从寄存器组中读取发送进程的标识,进而进行身份验证,该身份
验证的过程可以参考白名单的原理进行理解,安全的进程都会提前注册到白名单中,接收端可以根据该发送进程的标识查找该标识是否在白名单中,若在白名单中,则可以确认该发送进程是安全的进程,这样,该种可能的实现方式中,在采用执行实体执行进程间通信的过程中借用第二执行实体传递了发送进程的标识,从而对发送进程进行身份验证,提高了进程间通信的安全性。
25.在第一方面的一种可能的实现方式中,该方法还包括:根据目标数据的数据量,以及调用约定,确定第一值;使用第一值,生成通信信息。
26.该种可能的实现方式中,在使用调用约定,将通信信息写入发送进程的第一执行实体的寄存器组中之前,可以根据目标数据的数据量,先确定要写入栈内存中第一数据的数据量,也就是第一值,当然,如果目标数据较大,还需要使用内存块传递数据,可以再确定出要写入内存块中第三数据的数据量,也就是第二值,然后将该第一值和第二值都放入该通信信息中。这样,就可以通过通信信息向第一接收进程通知该目标数据在栈内存和内存块中的数据量,进而在第一接收进程端从栈内存中读取相应的第一数据,从内存块中读取相应的第三数据进行数据处理。
27.在第一方面的一种可能的实现方式中,该方法还包括:从执行实体的资源池分配第二执行实体;若资源池中减掉第二执行实体后可用执行实体的数量低于下水线,则在资源池中创建新的执行实体,下水线用于表示资源池中可用执行实体的数量下限。
28.该种可能的实现方式中,通过合理设置下水线,可以使得发送进程申请ipc服务时,第一接收进程有执行实体可以提供服务,且可用执行实体数量可控,避免了因发送进程阻塞导致的可靠性下降问题。
29.在第一方面的一种可能的实现方式中,该方法还包括:在得到处理结果后,释放第二执行实体;若资源池中加上第二执行实体后可用执行实体的数量高于上水线,则从资源池中删除至少一个执行实体,上水线用于表示资源池中可用执行实体的数量上限。
30.该种可能的实现方式中,通过合理设置上水线,可以控制生成过多的执行实体,可以避免因执行实体过多而导致过大的内存开销。
31.在第一方面的一种可能的实现方式中,第一接收进程位于多级ipc序列中,多级ipc序列还包括第二接收进程,在与发送进程的通信顺序上,第二接收进程位于第一接收进程之后;该方法还包括:通过第一接收进程的第二执行实体传递第一执行实体的第二内存块的地址,第一执行实体的第一页表信息,以及第三值到第二接收进程的第三执行实体,第三值用于指示发送进程发送给第二接收进程的第四数据的数据量;根据第一执行实体的第二内存块的地址,第一执行实体的第一页表信息,以及第三值,从第一执行实体的第二内存块中复制第四数据到第三执行实体的内存块中。
32.该种可能的实现方式中,在多级ipc序列中,当较大数据需要多级传递时,该种可能的实现方式中只需要各级中间进程(如:第一接收进程)的执行实体中记录发送进程的第一页表信息、第一执行实体的第二内存块的地址和第四数据的数据量。这样,从发送进程到第二接收进程的第四数据的传递只需基于发送进程和第二接收进程页表信息做跨进程拷贝。需要说明的是,第一接收进程和第二接收进程之间还可以包括其他接收进程,无论从发送进程到第二接收进程之间包括一个或多个中间进程,本技术中从发送进程到第二接收进程只需要传递第二内存块的地址、第四数据的数据量以及第一页表信息,第二接收进程只
需要进行一次对第四数据的跨进程拷贝,大大提高了数据传输的性能。
33.在第一方面的一种可能的实现方式中,该方法还包括:通过第一接收进程的第二执行实体传递发送进程的标识到第二接收进程的第三执行实体,发送进程的标识用于第三执行实体回到用户态后验证发送进程的身份。
34.该种可能的实现方式中,在进程间通信时,第二接收进程能够直接读取内核传递的发送进程的标识,进而进行身份验证,提高了进程间通信的安全性。
35.本技术第二方面提供一种进程间通信的装置,该进程间通信的装置具有实现上述第一方面或第一方面任意一种可能实现方式的方法的功能。该功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。该硬件或软件包括一个或多个与上述功能相对应的模块,例如:处理单元。
36.本技术第三方面提供一种计算机设备,该计算机设备包括至少一个处理器、存储器、输入/输出(input/output,i/o)接口以及存储在存储器中并可在处理器上运行的计算机执行指令,当计算机执行指令被处理器执行时,处理器执行如上述第一方面或第一方面任意一种可能的实现方式的方法。
37.本技术第四方面提供一种存储一个或多个计算机执行指令的计算机可读存储介质,当计算机执行指令被处理器执行时,处理器执行如上述第一方面或第一方面任意一种可能的实现方式的方法。
38.本技术第五方面提供一种存储一个或多个计算机执行指令的计算机程序产品,当计算机执行指令被处理器执行时,处理器执行如上述第一方面或第一方面任意一种可能的实现方式的方法。
39.本技术第六方面提供了一种芯片系统,该芯片系统包括至少一个处理器,至少一个处理器用于支持进程间通信的装置实现上述第一方面或第一方面任意一种可能的实现方式中所涉及的功能。在一种可能的设计中,芯片系统还可以包括存储器,存储器,用于保存进程间通信的装置必要的程序指令和数据。该芯片系统,可以由芯片构成,也可以包含芯片和其他分立器件。
40.本技术实施例,基于调用约定,通过栈内存传递进程间通信数据,在发送端因为栈内存地址一直在寄存器组中存在,不需要为进程间通信特别写入该栈内存的地址,可以降低通信开销,而且在接收端可以直接从栈内存中读取进程间通信的数据进行处理,不需要先将进程间通信的数据从内存块中先读取出来再写入到栈内存中,然后再进行处理,这样进一步降低了进程间通信的性能开销。而且,本技术在多级ipc序列的通信过程中,不需要通过中间进程多级传递数据,只需一次跨进程复制就可以完成多级ipc序列的数据传输,大大降低了通信开销,提高了进程间通信的性能。
附图说明
41.图1是本技术实施例提供的计算机系统的一实施例示意图;
42.图2是本技术实施例提供的进程间通信的方法的一实施例示意图;
43.图3a是本技术实施例提供的进程间通信的方法的另一实施例示意图;
44.图3b是本技术实施例提供的进程间通信的方法的另一实施例示意图;
45.图4是本技术实施例提供的进程间通信的方法的另一实施例示意图;
46.图5是本技术实施例提供的进程间通信的方法的另一实施例示意图;
47.图6是本技术实施例提供的进程间通信的方法的另一实施例示意图;
48.图7是本技术实施例提供的进程间通信的方法的另一实施例示意图;
49.图8是本技术实施例提供的进程间通信的装置的一实施例示意图;
50.图9是本技术实施例提供的计算机设备的一实施例示意图。
具体实施方式
51.下面结合附图,对本技术的实施例进行描述,显然,所描述的实施例仅仅是本技术一部分的实施例,而不是全部的实施例。本领域普通技术人员可知,随着技术的发展和新场景的出现,本技术实施例提供的技术方案对于类似的技术问题,同样适用。
52.本技术的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
53.本技术实施例提供本技术实施例提供一种进程间通信的方法,用于降低进程间通信(interprocess communication,ipc)的性能开销。本技术还提供了相应的装置、计算机可读存储介质、计算机程序产品等。以下分别进行详细说明。
54.本技术实施例提供的进程间通信的方法应用于计算机系统,该计算机系统可以为服务器、终端设备或虚拟机(virtual machine,vm)。该计算机系统的架构可以参阅图1进行理解。
55.终端设备(也可以称为用户设备(user equipment,ue))是一种具有无线收发功能的设备,可以部署在陆地上,包括室内或室外、手持或车载;也可以部署在水面上(如轮船等);还可以部署在空中(例如飞机、气球和卫星上等)。所述终端可以是手机(mobile phone)、平板电脑(pad)、带无线收发功能的电脑、虚拟现实(virtual reality,vr)终端、增强现实(augmented reality,ar)终端、工业控制(industrial control)中的无线终端、无人驾驶(self driving)中的无线终端、远程医疗(remote medical)中的无线终端、智能电网(smart grid)中的无线终端、运输安全(transportation safety)中的无线终端、智慧城市(smart city)中的无线终端、智慧家庭(smart home)中的无线终端等。
56.图1为计算机系统的一架构示意图。
57.如图1所示,该计算机系统10的架构包括用户层101、内核102、编译器103和硬件层104。
58.该用户层101包括多个应用,每个应用都会对应一个进程,也可以将进程理解为是应用的抽象或实体。进程在执行对应应用的发送任务时可以称为发送进程,在执行对应应用的接收任务时可以称为接收进程。进程间通信的过程可以是用户通过触发应用启动的,例如:用户打开浏览器中的一个网页,在浏览该网页中的一个消息时需要插件辅助完成该消息的全文加载,该场景中,网页为发送进程,插件为接收进程,需要网页的进程向插件的
进程发送该消息的相应加载指示,插件的进程才会执行该消息的全文加载。
59.进程间通信的主要目的是实现同一计算机系统内部相互协作的进程之间的数据共享与信息交换。参与通信的双方或多方通过消息发送或接收实现数据在进程之间的传递,从而完成数据通信。相互通信的两个进程或多个进程,发送数据的进程可以称为发送进程,接收数据的进程可以称为接收进程。在用户层101运行的进程称为运行在用户态的进程。进程间通信通常是在用户态被触发的,但进程间通信的过程需要内核102才能实现。
60.内核102是操作系统(operating system,os)负责管理关键资源,并为用户态的进程提供系统调用入口进而在内核提供服务,如:进程间通信,页表管理以及中断控制等服务。以进程间通信为例,从用户态到内核,发送进程可以通过系统调用来申请发送数据的服务,接收进程可以通过系统调用来申请接收数据的服务。
61.编译器103在进程间通信过程中,可以提供编译服务。本技术中,编译器可以将通信信息写入到寄存器组中,可以将进程间通信要传输的数据写入到寄存器组中等。
62.硬件层104包括内核102运行所依赖的硬件资源,如:处理器、内存、内存管理单元(memory management unit,mmu),以及输入/输出(input/output,i/o)设备等。处理器中可以包括寄存器组,该寄存器组可以包括多种类型的寄存器,如:栈帧寄存器、通用寄存器,以及非易失性(callee-saved)寄存器等。栈帧寄存器用于存储栈内存的地址,通用寄存器可以用于存储进程间通信要传输的目标数据,也可以用于存储其他信息,如:通用信息(ipcinfo)等,非易失性寄存器可以用于存储除目标数据之外的一些参数,例如:该非易失性寄存器也可以保存通信信息。
63.mmu是一种负责处理中央处理器(central processing unit,cpu)的内存访问请求的计算机硬件。它的功能包括虚拟地址到物理地址的转换、内存保护、cpu高速缓存的控制等。
64.在计算机系统中,进程包括线程。进程是程序的运行实体,是系统进行资源分配和调用的基本单位。线程是程序调度的最小单位,同一进程可能有多个线程,它们拥有各自的调度属性,共享进程的资源。操作系统中,对进程采用进程控制块(processing control block,pcb)来管理进程,采用线程控制块(thread control block,tcb)来管理线程。pcb是os中为了管理进程设置的一个数据结构,pcb中会记录进程运行的相关信息。tcb可以pcb的一个子集,也可以理解为一个pcb包括多个tcb,每个tcb对应一个线程。一个发送进程中的不同线程可以与同一接收进程中的不同线程通信,也可以与不同接收进程中的线程通信。同理,一个接收进程中的线程也可以与多个不同发送进程中的线程通信,因此,进程间的通信也可以理解为是不同进程中的线程间的通信。
65.在一次通信过程中,发送进程需要一个tcb来支持本次通信,该tcb中可以包括执行实体(activation)和调度实体。执行实体是线程的一部分,包含线程运行所需的寄存器的信息,栈内存的信息、内存块的信息等。调度实体也是线程的一部分,包含线程运行所需的优先级等调度相关信息。本技术实施例中,接收进程需要提供一个执行实体来支持本次通信。
66.本技术实施例提供的进程间通信的方法包括两种情况,第一种为:两个进程之间的通信,即一个发送进程,一个接收进程。第二种情况:包括多级进程间的通信,即一个发送进程,多个接收进程,该种情况也可以称为多级ipc序列的进程间通信。需要说明的是,本申
请中,“多个”包括“两个”。“多个”也可以描述为“至少两个”。下面对这两种情况分别进行介绍。
67.无论是两个进程间的通信,还是多级ipc序列的进程间通信,本技术实施例提供的进程间通信的方法都可以通过具有计算机系统的设备,如:终端设备来实现,具体的,可以是计算机系统中的一个或多个处理器来实现上述进程间通信的过程。
68.第一种:两个进程之间的通信,即一个发送进程,一个接收进程。
69.如图2所示,本技术实施例提供的进程间通信的方法的一实施例包括:
70.201、根据调用约定,将通信信息写入发送进程的第一执行实体的寄存器组中,将第一数据写入第一执行实体的栈内存中。
71.该步骤201可以在用户态执行。
72.第一数据包含在发送进程要发送给第一接收进程的目标数据中。
73.调用约定(calling convension)是与数据写入和数据读取相关的规定,该处“数据写入”和“数据读取”中的“数据”包括各类型寄存器中的数值,以及进程间通信要传递的数据。该调用约定明确了数据在发送进程的执行实体对应的寄存器和栈内存中的写入顺序,以及从接收进程的执行实体对应的寄存器和栈内存中读取数据的顺序。
74.第一执行实体用于发送进程与第一接收进程通信。寄存器组中可以包括多个类型的寄存器,如:栈帧寄存器、通用寄存器,以及非非易失性寄存器等。该栈帧寄存器用于存储栈内存的地址。通用寄存器可以用于存储目标数据中的部分或全部。栈内存可以用于存储目标数据中的部分或全部。第一内存块也可以存储目标数据中的部分或全部。
75.通信信息(ipcinfo)是本技术实施例中新提出的概念,该通信信息中可以包括第一值,该第一值用于指示第一数据的数据量。
76.通用寄存器中也可以存储有目标数据中的一部分数据,这部分数据可以称为第二数据。当有第二数据时,根据调用约定,将第二数据写入第一执行实体的寄存器组中,第一执行实体的寄存器组中的信息还包括第二数据。
77.若该内存块中也存储有目标数据中的部分数据,则将这部分数据称为第三数据。这时该通信信息中还可以包括第二值,该第二值用于指示第三数据的数据量。
78.若寄存器组中没有写入目标数据中的一部分数据,则该目标数据不包括第二数据。若内存块中不包括第三数据,则该目标数据就为第一数据。若寄存器组中有写入第二数据,但内存块中不包括第三数据,则该目标数据就为第一数据加上第二数据。若寄存器组中有写入第二数据,内存块中也包括第三数据,则该目标数据就为第一数据加上第二数据,再加上第三数据。
79.该通信信息中还可以包括用于处理该目标数据的函数的标识,该函数可以是接收函数。
80.该通用信息中的第一值,也可以还包括的第二值可以是上述图1的计算机系统中的编译器确定的,该编译器可以根据目标数据的大小,再结合调用约定在寄存器组和栈内存中对写入数据量的要求,确定出第一值,若数据较大,可以将除掉存储在寄存器组和栈内存之外的数据放在第一内存块中,该存储在第二内存块中的数据量可以用第二值表示,这时,该通信信息中也应包含该第二值,即根据第一值、第二值,以及用于处理该目标数据的函数的标识生成该通信信息。
81.202、通过系统调用,将第一执行实体的寄存器组中的信息复制到第一执行实体的上下文中。
82.该步骤可以通过系统调用触发发送进程陷入内核来实现。
83.寄存器组中的信息包括通信信息和栈内存的地址,也可以包括第二数据,第一内存块的地址等,第一执行实体的上下文为内核中存储的第一执行实体的寄存器组中的信息。当然,寄存器组中还会包括其他的信息或数值,这些信息或数值都会随着发送进程陷入内核而被复制到第一执行实体的上下文中。
84.203、根据第一执行实体的上下文中的第一值和栈内存的地址,从第一执行实体的栈内存复制第一数据到第二执行实体的栈内存中。
85.第二执行实体可以是从第一接收进程的执行实体的资源池中分配的一个执行实体,该资源池中通常包括多个执行实体,当发送进程申请与第一接收进程通信时,就可以从该资源池中为该发送进程分配一个执行实体。
86.栈内存的地址指示了第一数据在栈内存中存储的起始位置,第一值指示了第一数据的数据长度,因此,根据栈内存的地址和第一值就可以在第一执行实体的栈内存中找到该第一数据,并将该第一数据复制到第二执行实体在内核中的栈内存中。
87.若目标数据还包括第二数据,在步骤202之前,还包括:根据调用约定,将第二数据写入第一执行实体的寄存器组中,调用约定还用于指示第二数据在寄存器组中的写入顺序。
88.然后,上述步骤202可以包括:将寄存器组中的第二数据、通信信息和栈内存的地址复制到第一执行实体的上下文中。
89.在执行步骤202之后,还可以包括:将第一执行实体的上下文复制到第二执行实体的上下文中;将第二执行实体的上下文写入第二执行实体的寄存器组中。
90.第二执行实体的上下文为内核中存储的第二执行实体的寄存器组中的信息。
91.若目标数据还包括第三数据,则还可以根据第二值,以及第一内存块的地址,从第一执行实体的第一内存块复制第三数据到第二执行实体的内存块中。
92.可选地,第一执行实体中还包括第一页表信息,第二执行实体中还包括第二页表信息,第一页表信息和第二页表信息用于第一数据从第一执行实体的栈内存复制到第二执行实体的栈内存,或第三数据从第一执行实体的第一内存块复制到第二执行实体的内存块。
93.第一页表信息用于表示第一执行实体的内存空间的虚拟地址与物理地址的映射关系,该第一执行实体的内存空间包括第一执行实体的栈内存和第一内存块,第二页表信息用于表示第二执行实体的内存空间的虚拟地址与物理地址的映射关系,该第二执行实体的内存空间包括第二执行实体的栈内存和内存块。
94.本技术实施例中,基于第一页表信息和第二页表信息复制第一数据或第三数据的过程可以通过如下两种方式实现。
95.第一种复制方式:基于第一页表信息将第一数据从用户态的栈内存复制到内核的内存,再基于第二页表信息将第一数据从内核的内存复制到第二执行实体的栈内存。对于第三数据,从第一执行实体的第一内存块复制到第二执行实体的内存块的原理也是相同的,只是将第一执行实体的栈内存修改为第一执行实体的第一内存块,第二执行实体的栈
内存修改为第二执行实体的内存块。
96.该过程参阅图3a可以包括:
97.2031、根据第一执行实体的栈内存的地址(虚拟地址)以及第一页表信息所包含的虚拟地址与物理地址的映射关系,确定该栈内存的地址对应的第一物理地址,进而确定第一物理内存。
98.2032、根据该第一物理地址以及第一值从第一执行实体的第一物理内存中读出该第一数据,并将该第一数据放入内核的一块物理内存中。
99.2033、在内核基于第二执行实体的栈内存的地址和第二页表信息确定该第二执行实体的栈内存对应的第二物理地址,再根据该第一值所指示的第一数据的长度,确定需要的第二执行实体的第二物理内存。
100.2034、从内核的内存中将该第一数据复制到该第二执行实体的第二物理内存中。
101.第二种复制方式:基于第一页表信息将第一执行实体的栈内存映射到内核的第一内存,基于第二执行实体的页表信息将第二执行实体的栈内存映射到内核的第二内存,将第一数据从第一内存复制到第二内存。对于第三数据,从第一执行实体的第一内存块复制到第二执行实体的内存块的原理也是相同的,只是将第一执行实体的栈内存修改为第一执行实体的第一内存块,第二执行实体的栈内存修改为第二执行实体的内存块。
102.该过程参阅图3b可以包括:
103.2035、基于第一页表信息所表示的第一执行实体的用户态的内存空间与内核的内存空间的映射关系,根据第一执行实体的栈内存的地址确定在内核中对应的第一内存。
104.2036、基于第二页表信息所表示的第二执行实体的用户态的内存空间与内核的内存空间的映射关系,根据第二执行实体的栈内存的地址确定在内核中对应的第二内存。
105.2037、将第一数据从第一内存复制到第二内存。
106.因为第一内存与第一执行实体的栈内存映射,通过上述图3a对应的过程可知,第一执行实体的栈内存与第一执行实体的第一物理内存映射,第二内存与第二执行实体的栈内存映射,通过上述图3a对应的过程可知,第二执行实体的栈内存与第二执行实体的第二物理内存映射,所以,虚拟形态上,将第一数据从第一内存复制到第二内存,物理形态上,该第一数据就好从第一物理内存被复制到第二物理内存。
107.本技术实施例基于调用约定,通过栈内存传递进程间通信数据,在发送端因为栈内存地址一直在寄存器组中存在,不需要为进程间通信特别写入该栈内存的地址,可以降低通信开销,而且在接收端可以直接从栈内存中读取进程间通信的数据进行处理,不需要先将进程间通信的数据从内存块中先读取出来再写入到栈内存中,然后再进行处理,这样进一步降低了进程间通信的性能开销。
108.另外,本技术实施例中,若发送进程与第一接收进程要传递的目标数据的数据量很小,通用寄存器就可以完成传递,这种情况下,用于描述栈内存中存储的第一数据的第一值可以等于0。
109.从上述图2、图3a和图3b可知,栈内存、内存块、内核的第一内存和第二内存都是逻辑上的内存空间,第一物理内存和第二物理内存才是硬件的存储器件,上述描述中涉及了第一数据从第一执行实体的栈内存复制到第二执行实体的栈内存的描述,以及第三数据从第一执行实体的第一内存块复制到第二执行实体的内存块的描述,这里的第一数据和第三
数据可以理解为是逻辑上的数据。上述也涉及到了第一数据和第三数据从第一物理被复制到第二物理内存的描述,这里的第一数据和第三数据可以理解为是物理上的数据。无论是逻辑的还是物理的,本技术中指代的都是同一份数据,逻辑数据被复制的过程物理数据也会同步被复制。
110.可选地,本技术实施例提供的进程间通信的方法,还可以通过叠加执行实体的方式来实现由第二执行实体加上发送进程的调度实体来处理数据,然后返回处理结果。而且,为了保证进程间通信的安全性,本技术实施例提供的方案还可以对发送进程进行身份验证。下面结合图4进一步介绍本技术实施例提供的进程间通信的方法。
111.如图4所示,在内核中,发送进程的第一执行实体中包括链表节点(list node)、第一配置信息(curr_conf)、第二配置信息(xact_conf)和上下文(uctx)。第二执行实体也包括链表节点、第一配置信息、第二配置信息和上下文。每个执行实体中都会包括上述四个部分,只是各部分中所包括的内容可能不相同。
112.第一执行实体的链表节点和第二执行实体的链表节点通过箭头关联表示第二执行实体叠加到第一执行实体上。叠加第二执行实体后,该第一执行实体会进入非活跃状态(inactive),由第二执行实体来接替第一执行实体的工作。第一执行实体位于发送进程的一个线程,或者一个tcb中,该tcb还包括调度实体,在第二执行实体叠加到第一执行实体后,该tcb就包括第二执行实体和该调度实体,这样本技术实现发送进程的一个线程运行第二执行实体的内容来执行数据处理的过程。
113.第一配置信息中会包括本进程的标识和本进程的页表信息,第二配置信息会包括通信发起进程的标识和该通信发起进程的页表信息。这样,第一执行实体的第一配置信息中可以包括发送进程的标识,以及第一页表信息。第一执行实体的第二配置信息的位置可以不使用,也就是第二配置信息中不包括具体内容,也可以是该第二配置信息中的内容与第一配置信息中的内容相同。第二执行实体的第一配置信息包括第一接收进程的标识和第二页表信息。第二配置信息中包括的是发送进程的标识和第一页表信息。若是多级ipc序列的场景,第二配置信息中包括的是发起该多级ipc序列的进程的标识,也就是整个ipc序列上的第一个进程的标识。
114.第一执行实体的上下文中包括第一执行实体的寄存器组中的信息。第二执行实体的上下文中包括第二执行实体的寄存器组中的信息。
115.该第一执行实体可以是线程控制块1中的执行实体,该线程控制块1中还包括调度实体,该调度实体中包括该发送进程本次发送任务的调度优先级(priority),以及该发送进程所处的状态(state)。该线程控制块1可以是该发送进程多个线程控制块中的一个,该发送进程还可以包括线程控制块2到线程控制块x等多个线程控制块,x为大于2的整数。
116.该第二执行实体可以是第一接收进程的执行实体的资源池中的一个执行实体,该资源池中还包括其他执行实体,如执行实体m到执行实体n。
117.在发送进程与第一接收进程通信的过程中,从发送进程在用户态开始运行到第一数据在内核中被复制到第二执行实体的栈内存的过程可以参阅前述图2、图3a和图3b所对应的实施例部分的相应内容进行理解。下面对后续内容进行介绍。
118.204、在第一执行实体上叠加第二执行实体。
119.执行实体叠加的过程可以是通过链表的方式实现的。
120.205、第二执行实体切换到用户态。
121.发送进程的线程控制块中包括第二执行实体和原本的调度实体,并且该第二执行实体会切换到用户态。从内核进入用户态,第二执行实体的上下文中的内容会写入到第二执行实体在用户态的寄存器组中。由前述第一页表信息和第二页表信息部分的描述可知,第一数据可以通过第一种复制方式或第二种复制方式被复制到第二执行实体的栈内存中,若目标数据中包括第三数据,该第三数据也会通过第一种复制方式或第二种复制方式被复制到第二执行实体的内存块中。
122.206、读取全部或部分目标数据并对全部或部分目标数据进行处理,以得到处理结果。
123.通信信息会随着系统调用从第一执行实体的寄存器组被复制到第一执行实体的上下文,在进入内核后,该通信信息又会随第一执行实体的上下文被复制到第二执行实体的上下文,然后随着第二执行实体切换到用户态被复制到第二执行实体的寄存器组。
124.因为通信信息中包括用于处理目标数据的函数的标识,所以,该用于处理目标数据的函数的标识也会被复制到第二执行实体的寄存器组中,这样,就可以根据第二执行实体的寄存器组中的函数的标识,调用函数,对全部或部分目标数据进行处理,以得到处理结果。
125.因为寄存器、栈内存和内存块传递数据的速度不同,在处理目标数据时可以等待全部目标数据都到达第二执行实体后再处理,也可以针对先到达第二执行实体的部分数据先进行处理。
126.第二配置信息中包括发送进程的标识,在将第二执行实体切换到用户态之前,将发送进程的标识写入第二执行实体的上下文中,在第二执行实体切换到用户态的过程中,该发送进程的标识也会写入第二执行实体的寄存器组中,这样,在接收端就可以从寄存器组中读取发送进程的标识,进而进行身份验证,该身份验证的过程可以参考白名单的原理进行理解,安全的进程都会提前注册到白名单中,接收端可以根据该发送进程的标识查找该标识是否在白名单中,若在白名单中,则可以确认该发送进程是安全的进程,这样,该种可能的实现方式中,在采用执行实体执行进程间通信的过程中借用第二执行实体传递了发送进程的标识,从而对发送进程进行身份验证,提高了进程间通信的安全性。
127.在得到处理结果后,可以释放第二执行实体,由原来的第一执行实体继续执行发送进程的工作,接收第二执行实体处理目标数据后返回的处理结果,完成一次ipc通信。
128.本技术实施例,发送进程的一个线程借用第一接收进程的第二执行实体进行目标数据处理,得到处理结果。可见,该种可能的实现方式提供了一种不同的进程间通信的形式。
129.为了便于理解,将上述进程间通信的过程结合到基于arm-v7架构的微内核系统中,在如图5所示的结构中,发送进程的第一执行实体包括寄存器组,该寄存器组包括r0-r3四个通用寄存器,根据调用约定规定,第一执行实体的r0-r3四个通用寄存器可用于传递通信信息和目标数据,该寄存器组中还可以包括其他寄存器,如栈帧寄存器,图5中未全部示出。第二执行实体的寄存器组包括r0-r3四个通用寄存器,r4可以是一个非易失性寄存器,该寄存器组还可以包括其他寄存器,如栈帧寄存器,图5中未全部示出。
130.需要说明的是,本技术提出的方法也可以适用于其它类型的内核架构。
131.根据调用约定,在发送进程的用户态可以使用64位无符号整数编码通信信息(ipcinfo),存储在r0和r1寄存器中。当然,这里的64位只是举例,本技术中不限定该通信信息的位数。以64位为例,该通信信息由低到高位数分别为:14位:发送进程通过内存块发送的数据的数据量(第二值)。1位:0表示开启一个新的事务(transaction),1表示转发当前事务。本技术实施例中将多级ipc序列,或者只有一个发送进程和一个接收进程的序列称为一个事务。首次开启的事务指的是一个新的事务。如果是在已有事务的基础上进行后续ipc,那么该种情况的ipc表示的是转发当前事务。11位:用户处理目标数据的函数的标识;5位:发送进程通过栈内存发送的数据量(该处的数据量表示的是通过5位二进制(也就是最大32)构成的数值所标识的4字节大小的倍数),该数据量也可以描述为数据的大小。33位:保留,待扩展使用。
132.使用r2传递第一内存块的地址。栈内存的地址可以通过寄存器组中的栈帧寄存器传递,在该图5中未示出该栈帧寄存器。
133.通用寄存器中还空余出一个通过寄存器r3,该通过寄存器r3可以用于传递目标数据中的一部分,也就是前述所描述的第二数据。该第二数据可以是目标数据中的第一个数据。
134.根据调用约定,发送进程和第一接收进程可以分别使用上述5位表示的最多128字节内存发送和接收通过栈内存传递的数据。当然,该128字节也是举例说明,具体使用栈内存传递的数据的数据量可以根据需求设置。
135.该发送进程通过系统调用从用户态陷入内核。
136.在内核中,每个进程对应一个用于记录授权信息的结构体cnode,每个cnode具有一个由32位无符号整数表示的唯一标识cnode_idx,本技术中用cnode_idx表示进程的标识,该进程的标识可以用于验证发送进程的身份。
137.第一执行实体的第一配置信息(curr_conf)中记录第一执行实体的cnode_idx和第一执行实体的地址空间信息,该地址空间信息用于表示内核中的与该第一执行实体对应的内存的地址空间,可以参阅第一页表信息进行理解。
138.第一执行实体的第二配置信息(xact_conf)中记录事务发起者所在进程的标识和地址空间信息,因为该场景中,只涉及到一个发送进程和一个接收进程,所以该处第二配置信息中的内容为空,也可以与第一配置信息的内容相同。
139.第二执行实体使用64位无符号整数编码前一级执行实体所在进程的cnode_idx,存储在r0寄存器和r1寄存器,因为该场景中,只涉及到一个发送进程和一个接收进程,所以,r0和r1寄存器中的进程的表示可以是相同的。
140.第二执行实体中r2寄存器用作保留(该保留的寄存器可用于传递第一接收进程预先为发送进程设置的用户态标识信息,该用户态标识信息可以用于加速数据处理)。
141.通过第二执行实体中的通用寄存器r3开始接收第二数据。
142.通过第二执行实体中的栈内存接收第一数据。
143.通过第二执行实体中的内存块接收第三数据。
144.通信信息可以存储在寄存器r4中,若通信信息使用高32位保留位,则需要r4以及r5来存储该通信信息。
145.本技术实施例中第二执行实体来自于第一接收进程的执行实体的资源池。本技术
实施例中还会对该资源池中的执行实体进行增加或删除的弹性管理。该过程可以参阅图6进行理解。
146.如图6所示,该执行实体的资源池中可以设置侦听线程,该侦听线程用于侦听该资源池中执行实体的分配或释放,或者用于监控资源池中剩余执行实体的数量,剩余执行实体也可以理解为可被使用的执行实体。
147.该资源池中设置有下水线和上水线。下水线用于表示资源池中可用执行实体的数量下限。上水线用于表示资源池中可用执行实体的数量上限。
148.从图6中可见,该下水线为m 1个执行实体,上水线为n个执行实体。
149.当侦听线程侦听到有执行实体被分配,如:上述ipc过程中,从执行实体的资源池分配第二执行实体。若资源池中减掉第二执行实体后可用执行实体的数量低于下水线,则在资源池中创建新的执行实体。如:若资源池中剩余的可用执行实体数量小于m 1,则会创建一个或多个执行实体,以补充资源池中执行实体的数量。这样通过合理设置下水线,可以使得发送进程申请ipc服务时,第一接收进程有执行实体可以提供服务,且可用执行实体数量可控,避免了因阻塞导致的可靠性下降问题。
150.当侦听线程侦听到有执行实体被释放,如:在得到处理结果后,释放第二执行实体;若资源池中加上第二执行实体后可用执行实体的数量高于上水线,则从资源池中删除至少一个执行实体,如:释放第二执行实体后,该资源池中的执行实体数量超过n,则可以删除一个或多个执行实体。这样通过合理设置上水线,可以控制过多的可用执行实体导致过大的内存开销。
151.无论是弹性增加还是弹性删除,都尽量使资源池中执行实体的数量保持在上水线和下水线之间。既可以避免执行实体数量太少而导致的进程堵塞,也可以避免因执行实体数量太多而导致过大的内存开销。
152.第二种情况:多个进程间的通信,即一个发送进程,多个接收进程,该种情况也可以称为多级ipc序列的进程间通信。
153.上述第一接收进程位于多级ipc序列中,多级ipc序列还包括第二接收进程,在与发送进程的通信顺序上,第二接收进程位于第一接收进程之后。需要说明的是,这里只是以第一接收进程和第二接收进程这两级接收进程为例来进行说明,实际上多级ipc序列中可以包括多个接收进程,无论有多少接收进程,每两个连续的接收进程之间的ipc原理都是相同的,每两个连续的接收进程的ipc过程都可以参阅前述发送进程和第一接收进程的过程进行理解。
154.在多级ipc序列中与前述两级ipc的过程不同的是,每个中间进程都会传递第一个进程的标识,第一个进程的页表信息,用于标识通过第二内存块传递给最后一个进程的第四数据的数据量的第三值,以及第二内存块的地址。
155.将该过程结合到上述过程中,可以参阅图7进行理解。如图7所示,第二接收进程包括第三执行实体,该第三执行实体中不仅包括上一个第二接收进程的标识和第三页表信息,还包括发送进程的标识和第一页表信息。
156.发送进程和第一接收进程通过前述实施例所描述的方式,将第一数据、第二数据和第三数据分别通过通用寄存器、栈内存和第一内存块传递给第一接收进程。
157.发送进程通过第一接收进程的第二执行实体传递第四值、第二内存块的地址,发
送进程的标识和第一页表信息。第三执行实体根据该发送进程的标识进行身份验证,根据第一执行实体的第二内存块的地址,第一执行实体的第一页表信息,以及第三值,从第一执行实体的第二内存块中复制第四数据到第三执行实体的内存块中。
158.本技术实施例中,在多级ipc序列中,当较大数据需要多级传递时,该种可能的实现方式中只需要各级中间进程(如:第一接收进程)的执行实体中记录发送进程的第一页表信息、第一执行实体的第二内存块的地址和第四数据的数据量。这样,从发送进程到第二接收进程的第四数据的传递只需基于发送进程和第二接收进程页表信息做跨进程拷贝。需要说明的是,第一接收进程和第二接收进程之间还可以包括其他接收进程,无论从发送进程到第二接收进程之间包括一个或多个中间进程,本技术中从发送进程到第二接收进程只需要传递第二内存块的地址、第四数据的数据量以及第一页表信息,第二接收进程只需要复制一次第四数据,大大提高了数据传输的性能。
159.以上介绍了计算机系统和进程间通信的方法,下面结合附图介绍本技术实施例提供的进程间通信的装置,该装置可以是一个计算机设备。
160.如图8所示,本技术实施例提供的进程间通信的装置40的一实施例包括:
161.第一处理单元401,用于根据调用约定,将通信信息写入发送进程的第一执行实体的寄存器组中,将目标数据的第一数据写入第一执行实体的栈内存中,通信信息包括第一值,第一值用于指示第一数据的数据量,目标数据为发送进程要发送给第一接收进程的数据,调用约定用于指示通信信息在寄存器组中的写入顺序,以及第一数据在栈内存中的写入顺序。
162.第二处理单元402,用于将第一执行实体的寄存器组中的信息复制到第一执行实体的上下文中,寄存器组中的信息包括通信信息和栈内存的地址。
163.第三处理单元403,用于根据第一执行实体的上下文中的第一值和栈内存的地址,从第一执行实体的栈内存复制第一数据到第一接收进程的第二执行实体的栈内存中。
164.本技术实施例中,基于调用约定,通过栈内存传递进程间通信数据,在发送端因为栈内存地址一直在寄存器组中存在,不需要为进程间通信特别写入该栈内存的地址,可以降低通信开销,而且在接收端可以直接从栈内存中读取进程间通信的数据进行处理,不需要先将进程间通信的数据从内存块中先读取出来再写入到栈内存中,然后再进行处理,这样进一步降低了进程间通信的性能开销。
165.可选地,目标数据还包括第二数据,第一处理单元401,还用于在将第一执行实体的寄存器组中的信息复制到第一执行实体的上下文中之前,根据调用约定,将第二数据写入第一执行实体的寄存器组中,调用约定还用于指示第二数据在寄存器组中的写入顺序。
166.第二处理单元402,用于将寄存器组中的第二数据、通信信息和栈内存的地址复制到第一执行实体的上下文中。
167.第三处理单元403,还用于将第一执行实体的上下文复制到第二执行实体的上下文中;将第二执行实体的上下文写入第二执行实体的寄存器组中。
168.可选地,目标数据还包括第三数据,通信信息还包括第二值,第二值用于指示存储在第一执行实体的第一内存块中第三数据的数据量,第一处理单元401,将第一内存块的地址写入第一执行实体的寄存器组中,将第三数据写入第一执行实体的第一内存块中。
169.第三处理单元403,还用于根据第二值,以及第一内存块的地址,从第一执行实体
的内存块复制第三数据到第二执行实体的内存块中。
170.可选地,第一执行实体中还包括第一页表信息,第二执行实体中还包括第二页表信息,第一页表信息和第二页表信息用于第一数据从第一执行实体的栈内存复制到第二执行实体的栈内存,或第三数据从第一执行实体的第一内存块复制到第二执行实体的内存块。
171.可选地,第三处理单元403,还用于在第一执行实体上叠加第二执行实体,并将第二执行实体的上下文写入到第二执行实体的寄存器组中,其中,第二执行实体的上下文包括第一执行实体的上下文中的数据;根据调用约定从第二执行实体的寄存器组和第二执行实体的栈内存中读取全部或部分目标数据,并对全部或部分目标数据进行处理,以得到处理结果,调用约定还用于指示对第二执行实体的寄存器组和栈内存的读取顺序。
172.可选地,第三处理单元403,用于根据第二执行实体的寄存器组中的函数的标识,调用函数,对全部或部分目标数据进行处理,以得到处理结果。
173.可选地,第一执行实体中还包括发送进程的标识,第三处理单元403,还用于在将第二执行实体切换到用户态之前,将发送进程的标识写入第二执行实体的上下文中,发送进程的标识用于在第二执行实体切换到到用户态后验证发送进程的身份。
174.可选地,第一处理单元401,还用于根据目标数据的数据量,以及调用约定,确定第一值;使用第一值,生成通信信息。
175.可选地,第二处理单元402,还用于从执行实体的资源池分配第二执行实体;若资源池中减掉第二执行实体后可用执行实体的数量低于下水线,则在资源池中创建新的执行实体,下水线用于表示资源池中可用执行实体的数量下限。
176.可选地,第二处理单元402,还用于在得到处理结果后,释放第二执行实体;若资源池中加上第二执行实体后可用执行实体的数量高于上水线,则从资源池中删除至少一个执行实体,上水线用于表示资源池中可用执行实体的数量上限。
177.可选地,第一接收进程位于多级ipc序列中,多级ipc序列还包括第二接收进程,在与发送进程的通信顺序上,第二接收进程位于第一接收进程之后;第三处理单元403,还用于通过第一接收进程的第二执行实体传递第一执行实体的第二内存块的地址,第一执行实体的第一页表信息,以及第三值到第二接收进程的第三执行实体,第三值用于指示发送进程发送给第二接收进程的第四数据的数据量;根据第一执行实体的第二内存块的地址,第一执行实体的第一页表信息,以及第三值,从第一执行实体的第二内存块中复制第四数据到第三执行实体的内存块中。
178.第三处理单元403,还用于通过第一接收进程的第二执行实体传递发送进程的标识到第二接收进程的第三执行实体,发送进程的标识用于第三执行实体验证发送进程的身份。
179.以上所描述的进程间通信的装置40可以参阅前述方法实施例部分的相应描述进行理解,此处不做重复赘述。
180.图9所示,为本技术的实施例提供的计算机设备50的一种可能的逻辑结构示意图。计算机设备50包括:处理器501、通信接口502、存储器503以及总线504。处理器501、通信接口502以及存储器503通过总线504相互连接。在本技术的实施例中,处理器501用于对计算机设备50的动作进行控制管理,例如,处理器501用于执行图2至图7的方法实施例中201至
205的步骤,通信接口502用于支持计算机设备50进行通信。存储器503,用于存储计算机设备50的程序代码和数据。
181.其中,处理器501可以是中央处理器单元,通用处理器,数字信号处理器,专用集成电路,现场可编程门阵列或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本技术公开内容所描述的各种示例性的逻辑方框,模块和电路。处理器501也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,数字信号处理器和微处理器的组合等等。总线504可以是外设部件互连标准(peripheral component interconnect,pci)总线或扩展工业标准结构(extended industry standard architecture,eisa)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,图8中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
182.在本技术的另一实施例中,还提供一种计算机可读存储介质,计算机可读存储介质中存储有计算机执行指令,当设备的处理器执行该计算机执行指令时,设备执行上述图2至图7中进程间通信的方法。
183.在本技术的另一实施例中,还提供一种计算机程序产品,该计算机程序产品包括计算机执行指令,该计算机执行指令存储在计算机可读存储介质中;当设备的处理器执行该计算机执行指令时,设备执行上述图2至图7中进程间通信的方法。
184.在本技术的另一实施例中,还提供一种芯片系统,该芯片系统包括处理器,该处理器用于支持进程间通信的装置实现上述图2至图7中进程间通信的方法。在一种可能的设计中,芯片系统还可以包括存储器,存储器,用于保存进程间通信的装置必要的程序指令和数据。该芯片系统,可以由芯片构成,也可以包含芯片和其他分立器件。
185.本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本技术实施例的范围。
186.所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
187.在本技术实施例所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
188.作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
189.另外,在本技术实施例各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
190.功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储
在一个计算机可读取存储介质中。基于这样的理解,本技术实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本技术实施例各个实施例方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-only memory,rom)、随机存取存储器(random access memory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。
191.以上,仅为本技术实施例的具体实施方式,但本技术实施例的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本技术实施例揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本技术实施例的保护范围之内。因此,本技术实施例的保护范围应以权利要求的保护范围为准。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献