一种进程间通信的方法及装置制造方法及图纸

技术编号:32345193 阅读:11 留言:0更新日期:2022-02-20 01:59
本申请公开了一种进程间通信的方法,该方法应用于计算机系统,该方法包括:根据调用约定,将发送进程与接收进程之间要传递的数据写入到发送进程的第一执行实体的寄存器组和栈内存中,并在寄存器组中写入该栈内存的地址和表示该栈内存中数据的数据量的第一值,然后通过接收进程的第二执行实体根据该栈内存的地址和相应的第一值将该要传递的数据从第一执行实体的栈内存复制到第二执行实体的栈内存。本申请通过寄存器组和栈内存传递数据,提高了IPC的通信性能,另外,本申请还提供了多级IPC序列的进程间通信的方案,多级IPC序列的中间进程只需要转发内存块的地址和数据长度,就可以实现跨进程拷贝,提高了多级IPC的通信性能。提高了多级IPC的通信性能。提高了多级IPC的通信性能。

【技术实现步骤摘要】
一种进程间通信的方法及装置


[0001]本申请涉及计算机
,具体涉及一种进程间通信的方法及装置。

技术介绍

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

技术实现思路

[0004]本申请提供一种进程间通信的方法,用于降低进程间通信(interprocess communication,IPC)的性能开销。本申请还提供了相应的装置、计算机可读存储介质、计算机程序产品等。
[0005]本申请第一方面提供一种进程间通信的方法,该方法应用于计算机系统,该方法包括:根据调用约定,将通信信息写入发送进程的第一执行实体的寄存器组中,将目标数据的第一数据写入第一执行实体的栈内存中,该通信信息包括第一值,第一值用于指示第一数据的数据量,目标数据为发送进程要发送给第一接收进程的数据,调用约定用于指示通信信息在寄存器组中的写入顺序,以及第一数据在栈内存中的写入顺序;将第一执行实体的寄存器组中的信息复制到第一执行实体的上下文中,寄存器组中的信息包括通信信息和栈内存的地址,第一执行实体的上下文为内核中存储的第一执行实体的寄存器组中的信息;根据第一执行实体的上下文中的第一值和栈内存的地址,从第一执行实体的栈内存复制第一数据到第一接收进程的第二执行实体的栈内存中,第二执行实体用于第一接收进程与发送进程通信。
[0006]该第一方面中,调用约定(calling convension)是应用在x86、arm等架构下的与数据写入和数据读取相关的规定,该处“数据写入”和“数据读取”中的“数据”包括各类型寄存器中的数值,以及进程间通信要传递的数据。该调用约定明确了数据在发送进程的执行实体对应的寄存器和栈内存中的写入顺序,以及从接收进程的执行实体对应的寄存器和栈内存中读取数据的顺序。
[0007]需要说明的是,寄存器组包括通用寄存器,该通用寄存器也可以用于存储发送进程与第一接收进程要传递的目标数据中的全部或部分数据。若要传递的目标数据的数据量很小的情况下,通用寄存器就可以完成传递,这种情况下,用于描述栈内存中存储的第一数据的第一值可以等于0。通信信息(ipcinfo)会写入到寄存器组中,寄存器组中还可以包括
栈帧寄存器,该栈帧寄存器中会写入栈内存的地址。
[0008]执行实体(activation)是线程控制块(thread control block,TCB)中的一部分,TCB中还包括调度实体。TCB是一种数据结构,用于存储与相应线程相关的信息。一个进程可以包括多个线程,也会包括一个或多个TCB,第一执行实体位于发送进程的一个TCB中,第二执行实体是第一接收进程的执行实体。进程间通信需要从用户态陷入内核,在内核中完成数据传递。所以,上述触发发送进程从用户态陷入内核后,在内核中根据第一执行实体的上下文中的第一值和栈内存的地址,从第一执行实体的栈内存复制第一数据到第二执行实体的栈内存中,就可以完成数据的传递。
[0009]由该第一方面可知,基于调用约定,通过栈内存传递进程间通信数据,在发送端因为栈内存地址一直在寄存器组中存在,不需要为进程间通信特别写入该栈内存的地址,可以降低通信开销,而且在接收端可以直接从栈内存中读取进程间通信的数据进行处理,不需要先将进程间通信的数据从内存块中先读取出来再写入到栈内存中,然后再进行处理,这样进一步降低了进程间通信的性能开销。
[0010]在第一方面的一种可能的实现方式中,目标数据还包括第二数据,在将第一执行实体的寄存器组中的信息复制到第一执行实体的上下文中之前,该方法还包括:根据调用约定,将第二数据写入第一执行实体的寄存器组中,调用约定还用于指示第二数据在寄存器组中的写入顺序;上述步骤:将第一执行实体的寄存器组中的信息复制到第一执行实体的上下文中包括:将寄存器组中的第二数据、通信信息和栈内存的地址复制到第一执行实体的上下文中。该方法还包括:将第一执行实体的上下文复制到第二执行实体的上下文中;将第二执行实体的上下文写入第二执行实体的寄存器组中。
[0011]该种可能的实现方式中,发送进程要发送给第一接收进程的目标数据包括第一数据和第二数据两部分,第一数据通过栈内存发送,第二数据通过寄存器组发送。通过寄存器组发送第二数据,可以提高第二数据的传输速度,提高了进程间通信的性能。
[0012]应理解的是,在其他实现方式中,发送进程要发送给第一接收进程的目标数据可以全部通过栈内存发送,或全部通过寄存器组发送。
[0013]在第一方面的一种可能的实现方式中,目标数据还包括第三数据,通信信息还包括第二值,第二值用于指示存储在第一执行实体的第一内存块中第三数据的数据量,该方法还包括:将第一内存块的地址写入第一执行实体的寄存器组中,将第三数据写入第一执行实体的第一内存块中;根据第二值,以及第一内存块的地址,从第一执行实体的内存块复制第三数据到第二执行实体的内存块中。
[0014]该种可能的实现方式中,目标数据较大的情况下,为了避免过多占用栈内存,可以通过第一内存块再传输一部分数据,如:第三数据。可以将第三数据的数据量(也就是第二值)携带在通信信息中通知给第一接收进程,这样在保证性能开销的情况下,也有利于大数据的传输。
[0015]在第一方面的一种可能的实现方式中,第一执行实体中还包括第一页表信息,第二执行实体中还包括第二页表信息,第一页表信息和第二页表信息用于第一数据从第一执行实体的栈内存复制到第二执行实体的栈内存,或第三数据从第一执行实体的第一内存块复制到第二执行实体的内存块。
[0016]上述基于第一页表信息和第二页表信息实现数据的复制过程可以包括如下两种:
[0017]第一种复制方式:基于第一页表信息将第一数据从用户态的栈内存复制到内核的内存,再基于第二页表信息将第一数据从内核的内存复制到第二执行实体的栈内存。对于第三数据,从第一执行实体的第一内存块复制到第二执行实体的内存块的原理也是相同的。
[0018]第二种复制方式:基于第一页表信息将第一执行实体的栈内存映射到内核的第一内存,基于第二执行实体的页表信息将第二执行实体的栈内存映射到内核的第二内存,将第一数据从第一内存复制到第二内存。对于第三数据,从第一执行实体的第一内存块复制到第二执行实体的内存块的原理也是相同的。
[0019]在第一方面的一种可能的实现方式中,该方法还包括:在第一执行实体上叠加第二执行实体,并将第二执行实体的上下文写入到第二本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种进程间通信的方法,其特征在于,所述方法应用于计算机系统,所述方法包括:根据调用约定,将通信信息写入发送进程的第一执行实体的寄存器组中,将目标数据的第一数据写入所述第一执行实体的栈内存中,所述通信信息包括第一值,所述第一值用于指示所述第一数据的数据量,所述目标数据为所述发送进程要发送给第一接收进程的数据,所述调用约定用于指示所述通信信息在所述寄存器组中的写入顺序,以及所述第一数据在所述栈内存中的写入顺序;将所述第一执行实体的所述寄存器组中的信息复制到所述第一执行实体的上下文中,所述寄存器组中的所述信息包括所述通信信息和所述栈内存的地址;根据所述第一执行实体的所述上下文中的所述第一值和所述栈内存的地址,从所述第一执行实体的所述栈内存复制所述第一数据到所述第一接收进程的第二执行实体的栈内存中。2.根据权利要求1所述的方法,其特征在于,所述目标数据还包括第二数据,在所述将所述第一执行实体的所述寄存器组中的信息复制到所述第一执行实体的上下文中之前,所述方法还包括:根据所述调用约定,将所述第二数据写入所述第一执行实体的所述寄存器组中,所述调用约定还用于指示所述第二数据在所述寄存器组中的写入顺序;所述将所述第一执行实体的所述寄存器组中的信息复制到所述第一执行实体的上下文中包括:将所述寄存器组中的第二数据、所述通信信息和所述栈内存的地址复制到所述第一执行实体的上下文中;所述方法还包括:将所述第一执行实体的上下文复制到所述第二执行实体的上下文中;将所述第二执行实体的上下文写入所述第二执行实体的寄存器组中。3.根据权利要求1或2所述的方法,其特征在于,所述目标数据还包括第三数据,所述通信信息还包括第二值,所述第二值用于指示存储在所述第一执行实体的第一内存块中所述第三数据的数据量,所述方法还包括:将所述第一内存块的地址写入所述第一执行实体的所述寄存器组中,将所述第三数据写入所述第一执行实体的所述第一内存块中;根据所述第二值,以及所述第一内存块的地址,从所述第一执行实体的所述第一内存块复制所述第三数据到所述第二执行实体的内存块中。4.根据权利要求3所述的方法,其特征在于,所述第一执行实体中还包括第一页表信息,所述第二执行实体中还包括第二页表信息,所述第一页表信息和所述第二页表信息用于所述第一数据从所述第一执行实体的栈内存复制到所述第二执行实体的栈内存,或所述第三数据从所述第一执行实体的第一内存块复制到所述第二执行实体的内存块。5.根据权利要求1-4任一项所述的方法,其特征在于,所述方法还包括:在所述第一执行实体上叠加所述第二执行实体,并将所述第二执行实体的上下文写入到所述第二执行实体的寄存器组中,其中,所述第二执行实体的上下文包括所述第一执行实体的上下文中的数据;根据所述调用约定从所述第二执行实体的寄存器组和所述第二执行实体的所述栈内
存中读取全部或部分所述目标数据,并对所述全部或部分所述目标数据进行处理,以得到处理结果,所述调用约定还用于指示对所述第...

【专利技术属性】
技术研发人员:王楠齐义飞余青松付明
申请(专利权)人:华为技术有限公司
类型:发明
国别省市:

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

1