CN114064302B - 一种进程间通信的方法及装置 - Google Patents

一种进程间通信的方法及装置 Download PDF

Info

Publication number
CN114064302B
CN114064302B CN202010753141.6A CN202010753141A CN114064302B CN 114064302 B CN114064302 B CN 114064302B CN 202010753141 A CN202010753141 A CN 202010753141A CN 114064302 B CN114064302 B CN 114064302B
Authority
CN
China
Prior art keywords
execution entity
data
entity
execution
memory
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.)
Active
Application number
CN202010753141.6A
Other languages
English (en)
Other versions
CN114064302A (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.)
Huawei Technologies 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 CN202010753141.6A priority Critical patent/CN114064302B/zh
Priority to PCT/CN2021/081410 priority patent/WO2022021896A1/zh
Priority to EP21849255.1A priority patent/EP4187386A4/en
Publication of CN114064302A publication Critical patent/CN114064302A/zh
Priority to US18/160,671 priority patent/US20230168953A1/en
Application granted granted Critical
Publication of CN114064302B publication Critical patent/CN114064302B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/064Management of blocks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/54Indexing scheme relating to G06F9/54
    • G06F2209/543Local

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Human Computer Interaction (AREA)
  • Computer And Data Communications (AREA)

Abstract

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

Description

一种进程间通信的方法及装置
技术领域
本申请涉及计算机技术领域,具体涉及一种进程间通信的方法及装置。
背景技术
随着计算机技术的发展,多个进程之间,以及多个进程与同一个进程之间的通信需求增大。当前通常采用基于通信信道的发送(send)-接收(recv)语义模型实现进程间消息的发送与接收。
内核通过通信信道提供进程间通信(interprocess communication,IPC)服务,通信信道由接收进程创建并授权给发送进程。发送进程在用户态根据需求准备好需要发送的数据,然后发送进程和接收进程分别使用内存块(buffer)发送和接收数据,在发送过程中,需要发送进程对数据进行序列化,在接收过程需要对数据进行反序列化,导致进程间通信过程中存在额外的性能开销。
发明内容
本申请提供一种进程间通信的方法,用于降低进程间通信(interprocesscommunication,IPC)的性能开销。本申请还提供了相应的装置、计算机可读存储介质、计算机程序产品等。
本申请第一方面提供一种进程间通信的方法,该方法应用于计算机系统,该方法包括:根据调用约定,将通信信息写入发送进程的第一执行实体的寄存器组中,将目标数据的第一数据写入第一执行实体的栈内存中,该通信信息包括第一值,第一值用于指示第一数据的数据量,目标数据为发送进程要发送给第一接收进程的数据,调用约定用于指示通信信息在寄存器组中的写入顺序,以及第一数据在栈内存中的写入顺序;将第一执行实体的寄存器组中的信息复制到第一执行实体的上下文中,寄存器组中的信息包括通信信息和栈内存的地址,第一执行实体的上下文为内核中存储的第一执行实体的寄存器组中的信息;根据第一执行实体的上下文中的第一值和栈内存的地址,从第一执行实体的栈内存复制第一数据到第一接收进程的第二执行实体的栈内存中,第二执行实体用于第一接收进程与发送进程通信。
该第一方面中,调用约定(calling convension)是应用在x86、arm等架构下的与数据写入和数据读取相关的规定,该处“数据写入”和“数据读取”中的“数据”包括各类型寄存器中的数值,以及进程间通信要传递的数据。该调用约定明确了数据在发送进程的执行实体对应的寄存器和栈内存中的写入顺序,以及从接收进程的执行实体对应的寄存器和栈内存中读取数据的顺序。
需要说明的是,寄存器组包括通用寄存器,该通用寄存器也可以用于存储发送进程与第一接收进程要传递的目标数据中的全部或部分数据。若要传递的目标数据的数据量很小的情况下,通用寄存器就可以完成传递,这种情况下,用于描述栈内存中存储的第一数据的第一值可以等于0。通信信息(ipcinfo)会写入到寄存器组中,寄存器组中还可以包括栈帧寄存器,该栈帧寄存器中会写入栈内存的地址。
执行实体(activation)是线程控制块(thread control block,TCB)中的一部分,TCB中还包括调度实体。TCB是一种数据结构,用于存储与相应线程相关的信息。一个进程可以包括多个线程,也会包括一个或多个TCB,第一执行实体位于发送进程的一个TCB中,第二执行实体是第一接收进程的执行实体。进程间通信需要从用户态陷入内核,在内核中完成数据传递。所以,上述触发发送进程从用户态陷入内核后,在内核中根据第一执行实体的上下文中的第一值和栈内存的地址,从第一执行实体的栈内存复制第一数据到第二执行实体的栈内存中,就可以完成数据的传递。
由该第一方面可知,基于调用约定,通过栈内存传递进程间通信数据,在发送端因为栈内存地址一直在寄存器组中存在,不需要为进程间通信特别写入该栈内存的地址,可以降低通信开销,而且在接收端可以直接从栈内存中读取进程间通信的数据进行处理,不需要先将进程间通信的数据从内存块中先读取出来再写入到栈内存中,然后再进行处理,这样进一步降低了进程间通信的性能开销。
在第一方面的一种可能的实现方式中,目标数据还包括第二数据,在将第一执行实体的寄存器组中的信息复制到第一执行实体的上下文中之前,该方法还包括:根据调用约定,将第二数据写入第一执行实体的寄存器组中,调用约定还用于指示第二数据在寄存器组中的写入顺序;上述步骤:将第一执行实体的寄存器组中的信息复制到第一执行实体的上下文中包括:将寄存器组中的第二数据、通信信息和栈内存的地址复制到第一执行实体的上下文中。该方法还包括:将第一执行实体的上下文复制到第二执行实体的上下文中;将第二执行实体的上下文写入第二执行实体的寄存器组中。
该种可能的实现方式中,发送进程要发送给第一接收进程的目标数据包括第一数据和第二数据两部分,第一数据通过栈内存发送,第二数据通过寄存器组发送。通过寄存器组发送第二数据,可以提高第二数据的传输速度,提高了进程间通信的性能。
应理解的是,在其他实现方式中,发送进程要发送给第一接收进程的目标数据可以全部通过栈内存发送,或全部通过寄存器组发送。
在第一方面的一种可能的实现方式中,目标数据还包括第三数据,通信信息还包括第二值,第二值用于指示存储在第一执行实体的第一内存块中第三数据的数据量,该方法还包括:将第一内存块的地址写入第一执行实体的寄存器组中,将第三数据写入第一执行实体的第一内存块中;根据第二值,以及第一内存块的地址,从第一执行实体的内存块复制第三数据到第二执行实体的内存块中。
该种可能的实现方式中,目标数据较大的情况下,为了避免过多占用栈内存,可以通过第一内存块再传输一部分数据,如:第三数据。可以将第三数据的数据量(也就是第二值)携带在通信信息中通知给第一接收进程,这样在保证性能开销的情况下,也有利于大数据的传输。
在第一方面的一种可能的实现方式中,第一执行实体中还包括第一页表信息,第二执行实体中还包括第二页表信息,第一页表信息和第二页表信息用于第一数据从第一执行实体的栈内存复制到第二执行实体的栈内存,或第三数据从第一执行实体的第一内存块复制到第二执行实体的内存块。
上述基于第一页表信息和第二页表信息实现数据的复制过程可以包括如下两种:
第一种复制方式:基于第一页表信息将第一数据从用户态的栈内存复制到内核的内存,再基于第二页表信息将第一数据从内核的内存复制到第二执行实体的栈内存。对于第三数据,从第一执行实体的第一内存块复制到第二执行实体的内存块的原理也是相同的。
第二种复制方式:基于第一页表信息将第一执行实体的栈内存映射到内核的第一内存,基于第二执行实体的页表信息将第二执行实体的栈内存映射到内核的第二内存,将第一数据从第一内存复制到第二内存。对于第三数据,从第一执行实体的第一内存块复制到第二执行实体的内存块的原理也是相同的。
在第一方面的一种可能的实现方式中,该方法还包括:在第一执行实体上叠加第二执行实体,并将第二执行实体的上下文写入到第二执行实体的寄存器组中,其中,第二执行实体的上下文包括第一执行实体的上下文中的数据。根据调用约定从第二执行实体的寄存器组和第二执行实体的栈内存中读取全部或部分目标数据,并对全部或部分目标数据进行处理,以得到处理结果,调用约定还用于指示对第二执行实体的寄存器组和栈内存的读取顺序。
该种可能的实现方式中,可以通过链表的方式在第一执行实体上叠加第二执行实体,叠加第二执行实体后,该第一执行实体会进入非活跃状态,由第二执行实体来接替第一执行实体的工作,叠加在第一执行实体上的第二执行实体会被切换到第二执行实体的用户态,随着第二执行实体从内核到用户态的切换,会将第二执行实体的上下文写入到第二执行实体的寄存器组中,这样第二执行实体就可以在用户态读取目标数据并进行处理,从而得到处理结果。另外,因为寄存器、栈内存和内存块传递数据的速度不同,在处理目标数据时可以等待全部目标数据都到达第二执行实体后再处理,也可以针对先到达第二执行实体的部分数据先进行处理。需要说明的是,本申请的方案中,第一执行实体位于发送进程的一个线程,或者一个TCB中,该TCB还包括调度实体,在第二执行实体叠加到第一执行实体后,该TCB就包括第二执行实体和该调度实体,这样本申请实现了发送进程的一个线程借用第一接收进程的第二执行实体进行目标数据处理,得到处理结果。可见,该种可能的实现方式提供了一种不同的进程间通信的形式。
在第一方面的一种可能的实现方式中,通信信息还包括用于处理目标数据的函数的标识;上述步骤:对全部或部分目标数据进行处理,以得到处理结果,包括:根据第二执行实体的寄存器组中的函数的标识,调用函数,对全部或部分目标数据进行处理,以得到处理结果。
该种可能的实现方式中,在通信信息中传递函数的标识,这样,可以确保发送进程借用第一接收进程的资源后也可以准确调用到用于目标数据处理的函数,提高了数据处理的准确度。
在第一方面的一种可能的实现方式中,第一执行实体中还包括发送进程的标识,该方法还包括:将发送进程的标识写入第二执行实体的上下文中,发送进程的标识用于第二执行实体验证发送进程的身份。
该种可能的实现方式中,将发送进程的标识写入第二执行实体的上下文中,在第二执行实体切换到用户态的过程中,该发送进程的标识也会写入第二执行实体的寄存器组中,这样,在接收端就可以从寄存器组中读取发送进程的标识,进而进行身份验证,该身份验证的过程可以参考白名单的原理进行理解,安全的进程都会提前注册到白名单中,接收端可以根据该发送进程的标识查找该标识是否在白名单中,若在白名单中,则可以确认该发送进程是安全的进程,这样,该种可能的实现方式中,在采用执行实体执行进程间通信的过程中借用第二执行实体传递了发送进程的标识,从而对发送进程进行身份验证,提高了进程间通信的安全性。
在第一方面的一种可能的实现方式中,该方法还包括:根据目标数据的数据量,以及调用约定,确定第一值;使用第一值,生成通信信息。
该种可能的实现方式中,在使用调用约定,将通信信息写入发送进程的第一执行实体的寄存器组中之前,可以根据目标数据的数据量,先确定要写入栈内存中第一数据的数据量,也就是第一值,当然,如果目标数据较大,还需要使用内存块传递数据,可以再确定出要写入内存块中第三数据的数据量,也就是第二值,然后将该第一值和第二值都放入该通信信息中。这样,就可以通过通信信息向第一接收进程通知该目标数据在栈内存和内存块中的数据量,进而在第一接收进程端从栈内存中读取相应的第一数据,从内存块中读取相应的第三数据进行数据处理。
在第一方面的一种可能的实现方式中,该方法还包括:从执行实体的资源池分配第二执行实体;若资源池中减掉第二执行实体后可用执行实体的数量低于下水线,则在资源池中创建新的执行实体,下水线用于表示资源池中可用执行实体的数量下限。
该种可能的实现方式中,通过合理设置下水线,可以使得发送进程申请IPC服务时,第一接收进程有执行实体可以提供服务,且可用执行实体数量可控,避免了因发送进程阻塞导致的可靠性下降问题。
在第一方面的一种可能的实现方式中,该方法还包括:在得到处理结果后,释放第二执行实体;若资源池中加上第二执行实体后可用执行实体的数量高于上水线,则从资源池中删除至少一个执行实体,上水线用于表示资源池中可用执行实体的数量上限。
该种可能的实现方式中,通过合理设置上水线,可以控制生成过多的执行实体,可以避免因执行实体过多而导致过大的内存开销。
在第一方面的一种可能的实现方式中,第一接收进程位于多级IPC序列中,多级IPC序列还包括第二接收进程,在与发送进程的通信顺序上,第二接收进程位于第一接收进程之后;该方法还包括:通过第一接收进程的第二执行实体传递第一执行实体的第二内存块的地址,第一执行实体的第一页表信息,以及第三值到第二接收进程的第三执行实体,第三值用于指示发送进程发送给第二接收进程的第四数据的数据量;根据第一执行实体的第二内存块的地址,第一执行实体的第一页表信息,以及第三值,从第一执行实体的第二内存块中复制第四数据到第三执行实体的内存块中。
该种可能的实现方式中,在多级IPC序列中,当较大数据需要多级传递时,该种可能的实现方式中只需要各级中间进程(如:第一接收进程)的执行实体中记录发送进程的第一页表信息、第一执行实体的第二内存块的地址和第四数据的数据量。这样,从发送进程到第二接收进程的第四数据的传递只需基于发送进程和第二接收进程页表信息做跨进程拷贝。需要说明的是,第一接收进程和第二接收进程之间还可以包括其他接收进程,无论从发送进程到第二接收进程之间包括一个或多个中间进程,本申请中从发送进程到第二接收进程只需要传递第二内存块的地址、第四数据的数据量以及第一页表信息,第二接收进程只需要进行一次对第四数据的跨进程拷贝,大大提高了数据传输的性能。
在第一方面的一种可能的实现方式中,该方法还包括:通过第一接收进程的第二执行实体传递发送进程的标识到第二接收进程的第三执行实体,发送进程的标识用于第三执行实体回到用户态后验证发送进程的身份。
该种可能的实现方式中,在进程间通信时,第二接收进程能够直接读取内核传递的发送进程的标识,进而进行身份验证,提高了进程间通信的安全性。
本申请第二方面提供一种进程间通信的装置,该进程间通信的装置具有实现上述第一方面或第一方面任意一种可能实现方式的方法的功能。该功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。该硬件或软件包括一个或多个与上述功能相对应的模块,例如:处理单元。
本申请第三方面提供一种计算机设备,该计算机设备包括至少一个处理器、存储器、输入/输出(input/output,I/O)接口以及存储在存储器中并可在处理器上运行的计算机执行指令,当计算机执行指令被处理器执行时,处理器执行如上述第一方面或第一方面任意一种可能的实现方式的方法。
本申请第四方面提供一种存储一个或多个计算机执行指令的计算机可读存储介质,当计算机执行指令被处理器执行时,处理器执行如上述第一方面或第一方面任意一种可能的实现方式的方法。
本申请第五方面提供一种存储一个或多个计算机执行指令的计算机程序产品,当计算机执行指令被处理器执行时,处理器执行如上述第一方面或第一方面任意一种可能的实现方式的方法。
本申请第六方面提供了一种芯片系统,该芯片系统包括至少一个处理器,至少一个处理器用于支持进程间通信的装置实现上述第一方面或第一方面任意一种可能的实现方式中所涉及的功能。在一种可能的设计中,芯片系统还可以包括存储器,存储器,用于保存进程间通信的装置必要的程序指令和数据。该芯片系统,可以由芯片构成,也可以包含芯片和其他分立器件。
本申请实施例,基于调用约定,通过栈内存传递进程间通信数据,在发送端因为栈内存地址一直在寄存器组中存在,不需要为进程间通信特别写入该栈内存的地址,可以降低通信开销,而且在接收端可以直接从栈内存中读取进程间通信的数据进行处理,不需要先将进程间通信的数据从内存块中先读取出来再写入到栈内存中,然后再进行处理,这样进一步降低了进程间通信的性能开销。而且,本申请在多级IPC序列的通信过程中,不需要通过中间进程多级传递数据,只需一次跨进程复制就可以完成多级IPC序列的数据传输,大大降低了通信开销,提高了进程间通信的性能。
附图说明
图1是本申请实施例提供的计算机系统的一实施例示意图;
图2是本申请实施例提供的进程间通信的方法的一实施例示意图;
图3A是本申请实施例提供的进程间通信的方法的另一实施例示意图;
图3B是本申请实施例提供的进程间通信的方法的另一实施例示意图;
图4是本申请实施例提供的进程间通信的方法的另一实施例示意图;
图5是本申请实施例提供的进程间通信的方法的另一实施例示意图;
图6是本申请实施例提供的进程间通信的方法的另一实施例示意图;
图7是本申请实施例提供的进程间通信的方法的另一实施例示意图;
图8是本申请实施例提供的进程间通信的装置的一实施例示意图;
图9是本申请实施例提供的计算机设备的一实施例示意图。
具体实施方式
下面结合附图,对本申请的实施例进行描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。本领域普通技术人员可知,随着技术的发展和新场景的出现,本申请实施例提供的技术方案对于类似的技术问题,同样适用。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
本申请实施例提供本申请实施例提供一种进程间通信的方法,用于降低进程间通信(interprocess communication,IPC)的性能开销。本申请还提供了相应的装置、计算机可读存储介质、计算机程序产品等。以下分别进行详细说明。
本申请实施例提供的进程间通信的方法应用于计算机系统,该计算机系统可以为服务器、终端设备或虚拟机(virtual machine,VM)。该计算机系统的架构可以参阅图1进行理解。
终端设备(也可以称为用户设备(user equipment,UE))是一种具有无线收发功能的设备,可以部署在陆地上,包括室内或室外、手持或车载;也可以部署在水面上(如轮船等);还可以部署在空中(例如飞机、气球和卫星上等)。所述终端可以是手机(mobilephone)、平板电脑(pad)、带无线收发功能的电脑、虚拟现实(virtual reality,VR)终端、增强现实(augmented reality,AR)终端、工业控制(industrial control)中的无线终端、无人驾驶(self driving)中的无线终端、远程医疗(remote medical)中的无线终端、智能电网(smart grid)中的无线终端、运输安全(transportation safety)中的无线终端、智慧城市(smart city)中的无线终端、智慧家庭(smart home)中的无线终端等。
图1为计算机系统的一架构示意图。
如图1所示,该计算机系统10的架构包括用户层101、内核102、编译器103和硬件层104。
该用户层101包括多个应用,每个应用都会对应一个进程,也可以将进程理解为是应用的抽象或实体。进程在执行对应应用的发送任务时可以称为发送进程,在执行对应应用的接收任务时可以称为接收进程。进程间通信的过程可以是用户通过触发应用启动的,例如:用户打开浏览器中的一个网页,在浏览该网页中的一个消息时需要插件辅助完成该消息的全文加载,该场景中,网页为发送进程,插件为接收进程,需要网页的进程向插件的进程发送该消息的相应加载指示,插件的进程才会执行该消息的全文加载。
进程间通信的主要目的是实现同一计算机系统内部相互协作的进程之间的数据共享与信息交换。参与通信的双方或多方通过消息发送或接收实现数据在进程之间的传递,从而完成数据通信。相互通信的两个进程或多个进程,发送数据的进程可以称为发送进程,接收数据的进程可以称为接收进程。在用户层101运行的进程称为运行在用户态的进程。进程间通信通常是在用户态被触发的,但进程间通信的过程需要内核102才能实现。
内核102是操作系统(operating system,OS)负责管理关键资源,并为用户态的进程提供系统调用入口进而在内核提供服务,如:进程间通信,页表管理以及中断控制等服务。以进程间通信为例,从用户态到内核,发送进程可以通过系统调用来申请发送数据的服务,接收进程可以通过系统调用来申请接收数据的服务。
编译器103在进程间通信过程中,可以提供编译服务。本申请中,编译器可以将通信信息写入到寄存器组中,可以将进程间通信要传输的数据写入到寄存器组中等。
硬件层104包括内核102运行所依赖的硬件资源,如:处理器、内存、内存管理单元(memory management unit,MMU),以及输入/输出(input/output,I/O)设备等。处理器中可以包括寄存器组,该寄存器组可以包括多种类型的寄存器,如:栈帧寄存器、通用寄存器,以及非易失性(callee-saved)寄存器等。栈帧寄存器用于存储栈内存的地址,通用寄存器可以用于存储进程间通信要传输的目标数据,也可以用于存储其他信息,如:通用信息(ipcinfo)等,非易失性寄存器可以用于存储除目标数据之外的一些参数,例如:该非易失性寄存器也可以保存通信信息。
MMU是一种负责处理中央处理器(central processing unit,CPU)的内存访问请求的计算机硬件。它的功能包括虚拟地址到物理地址的转换、内存保护、CPU高速缓存的控制等。
在计算机系统中,进程包括线程。进程是程序的运行实体,是系统进行资源分配和调用的基本单位。线程是程序调度的最小单位,同一进程可能有多个线程,它们拥有各自的调度属性,共享进程的资源。操作系统中,对进程采用进程控制块(processing controlblock,PCB)来管理进程,采用线程控制块(thread control block,TCB)来管理线程。PCB是OS中为了管理进程设置的一个数据结构,PCB中会记录进程运行的相关信息。TCB可以PCB的一个子集,也可以理解为一个PCB包括多个TCB,每个TCB对应一个线程。一个发送进程中的不同线程可以与同一接收进程中的不同线程通信,也可以与不同接收进程中的线程通信。同理,一个接收进程中的线程也可以与多个不同发送进程中的线程通信,因此,进程间的通信也可以理解为是不同进程中的线程间的通信。
在一次通信过程中,发送进程需要一个TCB来支持本次通信,该TCB中可以包括执行实体(activation)和调度实体。执行实体是线程的一部分,包含线程运行所需的寄存器的信息,栈内存的信息、内存块的信息等。调度实体也是线程的一部分,包含线程运行所需的优先级等调度相关信息。本申请实施例中,接收进程需要提供一个执行实体来支持本次通信。
本申请实施例提供的进程间通信的方法包括两种情况,第一种为:两个进程之间的通信,即一个发送进程,一个接收进程。第二种情况:包括多级进程间的通信,即一个发送进程,多个接收进程,该种情况也可以称为多级IPC序列的进程间通信。需要说明的是,本申请中,“多个”包括“两个”。“多个”也可以描述为“至少两个”。下面对这两种情况分别进行介绍。
无论是两个进程间的通信,还是多级IPC序列的进程间通信,本申请实施例提供的进程间通信的方法都可以通过具有计算机系统的设备,如:终端设备来实现,具体的,可以是计算机系统中的一个或多个处理器来实现上述进程间通信的过程。
第一种:两个进程之间的通信,即一个发送进程,一个接收进程。
如图2所示,本申请实施例提供的进程间通信的方法的一实施例包括:
201、根据调用约定,将通信信息写入发送进程的第一执行实体的寄存器组中,将第一数据写入第一执行实体的栈内存中。
该步骤201可以在用户态执行。
第一数据包含在发送进程要发送给第一接收进程的目标数据中。
调用约定(calling convension)是与数据写入和数据读取相关的规定,该处“数据写入”和“数据读取”中的“数据”包括各类型寄存器中的数值,以及进程间通信要传递的数据。该调用约定明确了数据在发送进程的执行实体对应的寄存器和栈内存中的写入顺序,以及从接收进程的执行实体对应的寄存器和栈内存中读取数据的顺序。
第一执行实体用于发送进程与第一接收进程通信。寄存器组中可以包括多个类型的寄存器,如:栈帧寄存器、通用寄存器,以及非非易失性寄存器等。该栈帧寄存器用于存储栈内存的地址。通用寄存器可以用于存储目标数据中的部分或全部。栈内存可以用于存储目标数据中的部分或全部。第一内存块也可以存储目标数据中的部分或全部。
通信信息(ipcinfo)是本申请实施例中新提出的概念,该通信信息中可以包括第一值,该第一值用于指示第一数据的数据量。
通用寄存器中也可以存储有目标数据中的一部分数据,这部分数据可以称为第二数据。当有第二数据时,根据调用约定,将第二数据写入第一执行实体的寄存器组中,第一执行实体的寄存器组中的信息还包括第二数据。
若该内存块中也存储有目标数据中的部分数据,则将这部分数据称为第三数据。这时该通信信息中还可以包括第二值,该第二值用于指示第三数据的数据量。
若寄存器组中没有写入目标数据中的一部分数据,则该目标数据不包括第二数据。若内存块中不包括第三数据,则该目标数据就为第一数据。若寄存器组中有写入第二数据,但内存块中不包括第三数据,则该目标数据就为第一数据加上第二数据。若寄存器组中有写入第二数据,内存块中也包括第三数据,则该目标数据就为第一数据加上第二数据,再加上第三数据。
该通信信息中还可以包括用于处理该目标数据的函数的标识,该函数可以是接收函数。
该通用信息中的第一值,也可以还包括的第二值可以是上述图1的计算机系统中的编译器确定的,该编译器可以根据目标数据的大小,再结合调用约定在寄存器组和栈内存中对写入数据量的要求,确定出第一值,若数据较大,可以将除掉存储在寄存器组和栈内存之外的数据放在第一内存块中,该存储在第二内存块中的数据量可以用第二值表示,这时,该通信信息中也应包含该第二值,即根据第一值、第二值,以及用于处理该目标数据的函数的标识生成该通信信息。
202、通过系统调用,将第一执行实体的寄存器组中的信息复制到第一执行实体的上下文中。
该步骤可以通过系统调用触发发送进程陷入内核来实现。
寄存器组中的信息包括通信信息和栈内存的地址,也可以包括第二数据,第一内存块的地址等,第一执行实体的上下文为内核中存储的第一执行实体的寄存器组中的信息。当然,寄存器组中还会包括其他的信息或数值,这些信息或数值都会随着发送进程陷入内核而被复制到第一执行实体的上下文中。
203、根据第一执行实体的上下文中的第一值和栈内存的地址,从第一执行实体的栈内存复制第一数据到第二执行实体的栈内存中。
第二执行实体可以是从第一接收进程的执行实体的资源池中分配的一个执行实体,该资源池中通常包括多个执行实体,当发送进程申请与第一接收进程通信时,就可以从该资源池中为该发送进程分配一个执行实体。
栈内存的地址指示了第一数据在栈内存中存储的起始位置,第一值指示了第一数据的数据长度,因此,根据栈内存的地址和第一值就可以在第一执行实体的栈内存中找到该第一数据,并将该第一数据复制到第二执行实体在内核中的栈内存中。
若目标数据还包括第二数据,在步骤202之前,还包括:根据调用约定,将第二数据写入第一执行实体的寄存器组中,调用约定还用于指示第二数据在寄存器组中的写入顺序。
然后,上述步骤202可以包括:将寄存器组中的第二数据、通信信息和栈内存的地址复制到第一执行实体的上下文中。
在执行步骤202之后,还可以包括:将第一执行实体的上下文复制到第二执行实体的上下文中;将第二执行实体的上下文写入第二执行实体的寄存器组中。
第二执行实体的上下文为内核中存储的第二执行实体的寄存器组中的信息。
若目标数据还包括第三数据,则还可以根据第二值,以及第一内存块的地址,从第一执行实体的第一内存块复制第三数据到第二执行实体的内存块中。
可选地,第一执行实体中还包括第一页表信息,第二执行实体中还包括第二页表信息,第一页表信息和第二页表信息用于第一数据从第一执行实体的栈内存复制到第二执行实体的栈内存,或第三数据从第一执行实体的第一内存块复制到第二执行实体的内存块。
第一页表信息用于表示第一执行实体的内存空间的虚拟地址与物理地址的映射关系,该第一执行实体的内存空间包括第一执行实体的栈内存和第一内存块,第二页表信息用于表示第二执行实体的内存空间的虚拟地址与物理地址的映射关系,该第二执行实体的内存空间包括第二执行实体的栈内存和内存块。
本申请实施例中,基于第一页表信息和第二页表信息复制第一数据或第三数据的过程可以通过如下两种方式实现。
第一种复制方式:基于第一页表信息将第一数据从用户态的栈内存复制到内核的内存,再基于第二页表信息将第一数据从内核的内存复制到第二执行实体的栈内存。对于第三数据,从第一执行实体的第一内存块复制到第二执行实体的内存块的原理也是相同的,只是将第一执行实体的栈内存修改为第一执行实体的第一内存块,第二执行实体的栈内存修改为第二执行实体的内存块。
该过程参阅图3A可以包括:
2031、根据第一执行实体的栈内存的地址(虚拟地址)以及第一页表信息所包含的虚拟地址与物理地址的映射关系,确定该栈内存的地址对应的第一物理地址,进而确定第一物理内存。
2032、根据该第一物理地址以及第一值从第一执行实体的第一物理内存中读出该第一数据,并将该第一数据放入内核的一块物理内存中。
2033、在内核基于第二执行实体的栈内存的地址和第二页表信息确定该第二执行实体的栈内存对应的第二物理地址,再根据该第一值所指示的第一数据的长度,确定需要的第二执行实体的第二物理内存。
2034、从内核的内存中将该第一数据复制到该第二执行实体的第二物理内存中。
第二种复制方式:基于第一页表信息将第一执行实体的栈内存映射到内核的第一内存,基于第二执行实体的页表信息将第二执行实体的栈内存映射到内核的第二内存,将第一数据从第一内存复制到第二内存。对于第三数据,从第一执行实体的第一内存块复制到第二执行实体的内存块的原理也是相同的,只是将第一执行实体的栈内存修改为第一执行实体的第一内存块,第二执行实体的栈内存修改为第二执行实体的内存块。
该过程参阅图3B可以包括:
2035、基于第一页表信息所表示的第一执行实体的用户态的内存空间与内核的内存空间的映射关系,根据第一执行实体的栈内存的地址确定在内核中对应的第一内存。
2036、基于第二页表信息所表示的第二执行实体的用户态的内存空间与内核的内存空间的映射关系,根据第二执行实体的栈内存的地址确定在内核中对应的第二内存。
2037、将第一数据从第一内存复制到第二内存。
因为第一内存与第一执行实体的栈内存映射,通过上述图3A对应的过程可知,第一执行实体的栈内存与第一执行实体的第一物理内存映射,第二内存与第二执行实体的栈内存映射,通过上述图3A对应的过程可知,第二执行实体的栈内存与第二执行实体的第二物理内存映射,所以,虚拟形态上,将第一数据从第一内存复制到第二内存,物理形态上,该第一数据就好从第一物理内存被复制到第二物理内存。
本申请实施例基于调用约定,通过栈内存传递进程间通信数据,在发送端因为栈内存地址一直在寄存器组中存在,不需要为进程间通信特别写入该栈内存的地址,可以降低通信开销,而且在接收端可以直接从栈内存中读取进程间通信的数据进行处理,不需要先将进程间通信的数据从内存块中先读取出来再写入到栈内存中,然后再进行处理,这样进一步降低了进程间通信的性能开销。
另外,本申请实施例中,若发送进程与第一接收进程要传递的目标数据的数据量很小,通用寄存器就可以完成传递,这种情况下,用于描述栈内存中存储的第一数据的第一值可以等于0。
从上述图2、图3A和图3B可知,栈内存、内存块、内核的第一内存和第二内存都是逻辑上的内存空间,第一物理内存和第二物理内存才是硬件的存储器件,上述描述中涉及了第一数据从第一执行实体的栈内存复制到第二执行实体的栈内存的描述,以及第三数据从第一执行实体的第一内存块复制到第二执行实体的内存块的描述,这里的第一数据和第三数据可以理解为是逻辑上的数据。上述也涉及到了第一数据和第三数据从第一物理被复制到第二物理内存的描述,这里的第一数据和第三数据可以理解为是物理上的数据。无论是逻辑的还是物理的,本申请中指代的都是同一份数据,逻辑数据被复制的过程物理数据也会同步被复制。
可选地,本申请实施例提供的进程间通信的方法,还可以通过叠加执行实体的方式来实现由第二执行实体加上发送进程的调度实体来处理数据,然后返回处理结果。而且,为了保证进程间通信的安全性,本申请实施例提供的方案还可以对发送进程进行身份验证。下面结合图4进一步介绍本申请实施例提供的进程间通信的方法。
如图4所示,在内核中,发送进程的第一执行实体中包括链表节点(list node)、第一配置信息(Curr_Conf)、第二配置信息(Xact_Conf)和上下文(UCTX)。第二执行实体也包括链表节点、第一配置信息、第二配置信息和上下文。每个执行实体中都会包括上述四个部分,只是各部分中所包括的内容可能不相同。
第一执行实体的链表节点和第二执行实体的链表节点通过箭头关联表示第二执行实体叠加到第一执行实体上。叠加第二执行实体后,该第一执行实体会进入非活跃状态(inactive),由第二执行实体来接替第一执行实体的工作。第一执行实体位于发送进程的一个线程,或者一个TCB中,该TCB还包括调度实体,在第二执行实体叠加到第一执行实体后,该TCB就包括第二执行实体和该调度实体,这样本申请实现发送进程的一个线程运行第二执行实体的内容来执行数据处理的过程。
第一配置信息中会包括本进程的标识和本进程的页表信息,第二配置信息会包括通信发起进程的标识和该通信发起进程的页表信息。这样,第一执行实体的第一配置信息中可以包括发送进程的标识,以及第一页表信息。第一执行实体的第二配置信息的位置可以不使用,也就是第二配置信息中不包括具体内容,也可以是该第二配置信息中的内容与第一配置信息中的内容相同。第二执行实体的第一配置信息包括第一接收进程的标识和第二页表信息。第二配置信息中包括的是发送进程的标识和第一页表信息。若是多级IPC序列的场景,第二配置信息中包括的是发起该多级IPC序列的进程的标识,也就是整个IPC序列上的第一个进程的标识。
第一执行实体的上下文中包括第一执行实体的寄存器组中的信息。第二执行实体的上下文中包括第二执行实体的寄存器组中的信息。
该第一执行实体可以是线程控制块1中的执行实体,该线程控制块1中还包括调度实体,该调度实体中包括该发送进程本次发送任务的调度优先级(priority),以及该发送进程所处的状态(state)。该线程控制块1可以是该发送进程多个线程控制块中的一个,该发送进程还可以包括线程控制块2到线程控制块X等多个线程控制块,X为大于2的整数。
该第二执行实体可以是第一接收进程的执行实体的资源池中的一个执行实体,该资源池中还包括其他执行实体,如执行实体M到执行实体N。
在发送进程与第一接收进程通信的过程中,从发送进程在用户态开始运行到第一数据在内核中被复制到第二执行实体的栈内存的过程可以参阅前述图2、图3A和图3B所对应的实施例部分的相应内容进行理解。下面对后续内容进行介绍。
204、在第一执行实体上叠加第二执行实体。
执行实体叠加的过程可以是通过链表的方式实现的。
205、第二执行实体切换到用户态。
发送进程的线程控制块中包括第二执行实体和原本的调度实体,并且该第二执行实体会切换到用户态。从内核进入用户态,第二执行实体的上下文中的内容会写入到第二执行实体在用户态的寄存器组中。由前述第一页表信息和第二页表信息部分的描述可知,第一数据可以通过第一种复制方式或第二种复制方式被复制到第二执行实体的栈内存中,若目标数据中包括第三数据,该第三数据也会通过第一种复制方式或第二种复制方式被复制到第二执行实体的内存块中。
206、读取全部或部分目标数据并对全部或部分目标数据进行处理,以得到处理结果。
通信信息会随着系统调用从第一执行实体的寄存器组被复制到第一执行实体的上下文,在进入内核后,该通信信息又会随第一执行实体的上下文被复制到第二执行实体的上下文,然后随着第二执行实体切换到用户态被复制到第二执行实体的寄存器组。
因为通信信息中包括用于处理目标数据的函数的标识,所以,该用于处理目标数据的函数的标识也会被复制到第二执行实体的寄存器组中,这样,就可以根据第二执行实体的寄存器组中的函数的标识,调用函数,对全部或部分目标数据进行处理,以得到处理结果。
因为寄存器、栈内存和内存块传递数据的速度不同,在处理目标数据时可以等待全部目标数据都到达第二执行实体后再处理,也可以针对先到达第二执行实体的部分数据先进行处理。
第二配置信息中包括发送进程的标识,在将第二执行实体切换到用户态之前,将发送进程的标识写入第二执行实体的上下文中,在第二执行实体切换到用户态的过程中,该发送进程的标识也会写入第二执行实体的寄存器组中,这样,在接收端就可以从寄存器组中读取发送进程的标识,进而进行身份验证,该身份验证的过程可以参考白名单的原理进行理解,安全的进程都会提前注册到白名单中,接收端可以根据该发送进程的标识查找该标识是否在白名单中,若在白名单中,则可以确认该发送进程是安全的进程,这样,该种可能的实现方式中,在采用执行实体执行进程间通信的过程中借用第二执行实体传递了发送进程的标识,从而对发送进程进行身份验证,提高了进程间通信的安全性。
在得到处理结果后,可以释放第二执行实体,由原来的第一执行实体继续执行发送进程的工作,接收第二执行实体处理目标数据后返回的处理结果,完成一次IPC通信。
本申请实施例,发送进程的一个线程借用第一接收进程的第二执行实体进行目标数据处理,得到处理结果。可见,该种可能的实现方式提供了一种不同的进程间通信的形式。
为了便于理解,将上述进程间通信的过程结合到基于ARM-V7架构的微内核系统中,在如图5所示的结构中,发送进程的第一执行实体包括寄存器组,该寄存器组包括R0-R3四个通用寄存器,根据调用约定规定,第一执行实体的R0-R3四个通用寄存器可用于传递通信信息和目标数据,该寄存器组中还可以包括其他寄存器,如栈帧寄存器,图5中未全部示出。第二执行实体的寄存器组包括R0-R3四个通用寄存器,R4可以是一个非易失性寄存器,该寄存器组还可以包括其他寄存器,如栈帧寄存器,图5中未全部示出。
需要说明的是,本申请提出的方法也可以适用于其它类型的内核架构。
根据调用约定,在发送进程的用户态可以使用64位无符号整数编码通信信息(ipcinfo),存储在R0和R1寄存器中。当然,这里的64位只是举例,本申请中不限定该通信信息的位数。以64位为例,该通信信息由低到高位数分别为:14位:发送进程通过内存块发送的数据的数据量(第二值)。1位:0表示开启一个新的事务(transaction),1表示转发当前事务。本申请实施例中将多级IPC序列,或者只有一个发送进程和一个接收进程的序列称为一个事务。首次开启的事务指的是一个新的事务。如果是在已有事务的基础上进行后续IPC,那么该种情况的IPC表示的是转发当前事务。11位:用户处理目标数据的函数的标识;5位:发送进程通过栈内存发送的数据量(该处的数据量表示的是通过5位二进制(也就是最大32)构成的数值所标识的4字节大小的倍数),该数据量也可以描述为数据的大小。33位:保留,待扩展使用。
使用R2传递第一内存块的地址。栈内存的地址可以通过寄存器组中的栈帧寄存器传递,在该图5中未示出该栈帧寄存器。
通用寄存器中还空余出一个通过寄存器R3,该通过寄存器R3可以用于传递目标数据中的一部分,也就是前述所描述的第二数据。该第二数据可以是目标数据中的第一个数据。
根据调用约定,发送进程和第一接收进程可以分别使用上述5位表示的最多128字节内存发送和接收通过栈内存传递的数据。当然,该128字节也是举例说明,具体使用栈内存传递的数据的数据量可以根据需求设置。
该发送进程通过系统调用从用户态陷入内核。
在内核中,每个进程对应一个用于记录授权信息的结构体CNode,每个CNode具有一个由32位无符号整数表示的唯一标识cnode_idx,本申请中用cnode_idx表示进程的标识,该进程的标识可以用于验证发送进程的身份。
第一执行实体的第一配置信息(Curr_Conf)中记录第一执行实体的cnode_idx和第一执行实体的地址空间信息,该地址空间信息用于表示内核中的与该第一执行实体对应的内存的地址空间,可以参阅第一页表信息进行理解。
第一执行实体的第二配置信息(Xact_Conf)中记录事务发起者所在进程的标识和地址空间信息,因为该场景中,只涉及到一个发送进程和一个接收进程,所以该处第二配置信息中的内容为空,也可以与第一配置信息的内容相同。
第二执行实体使用64位无符号整数编码前一级执行实体所在进程的cnode_idx,存储在R0寄存器和R1寄存器,因为该场景中,只涉及到一个发送进程和一个接收进程,所以,R0和R1寄存器中的进程的表示可以是相同的。
第二执行实体中R2寄存器用作保留(该保留的寄存器可用于传递第一接收进程预先为发送进程设置的用户态标识信息,该用户态标识信息可以用于加速数据处理)。
通过第二执行实体中的通用寄存器R3开始接收第二数据。
通过第二执行实体中的栈内存接收第一数据。
通过第二执行实体中的内存块接收第三数据。
通信信息可以存储在寄存器R4中,若通信信息使用高32位保留位,则需要R4以及R5来存储该通信信息。
本申请实施例中第二执行实体来自于第一接收进程的执行实体的资源池。本申请实施例中还会对该资源池中的执行实体进行增加或删除的弹性管理。该过程可以参阅图6进行理解。
如图6所示,该执行实体的资源池中可以设置侦听线程,该侦听线程用于侦听该资源池中执行实体的分配或释放,或者用于监控资源池中剩余执行实体的数量,剩余执行实体也可以理解为可被使用的执行实体。
该资源池中设置有下水线和上水线。下水线用于表示资源池中可用执行实体的数量下限。上水线用于表示资源池中可用执行实体的数量上限。
从图6中可见,该下水线为M+1个执行实体,上水线为N个执行实体。
当侦听线程侦听到有执行实体被分配,如:上述IPC过程中,从执行实体的资源池分配第二执行实体。若资源池中减掉第二执行实体后可用执行实体的数量低于下水线,则在资源池中创建新的执行实体。如:若资源池中剩余的可用执行实体数量小于M+1,则会创建一个或多个执行实体,以补充资源池中执行实体的数量。这样通过合理设置下水线,可以使得发送进程申请IPC服务时,第一接收进程有执行实体可以提供服务,且可用执行实体数量可控,避免了因阻塞导致的可靠性下降问题。
当侦听线程侦听到有执行实体被释放,如:在得到处理结果后,释放第二执行实体;若资源池中加上第二执行实体后可用执行实体的数量高于上水线,则从资源池中删除至少一个执行实体,如:释放第二执行实体后,该资源池中的执行实体数量超过N,则可以删除一个或多个执行实体。这样通过合理设置上水线,可以控制过多的可用执行实体导致过大的内存开销。
无论是弹性增加还是弹性删除,都尽量使资源池中执行实体的数量保持在上水线和下水线之间。既可以避免执行实体数量太少而导致的进程堵塞,也可以避免因执行实体数量太多而导致过大的内存开销。
第二种情况:多个进程间的通信,即一个发送进程,多个接收进程,该种情况也可以称为多级IPC序列的进程间通信。
上述第一接收进程位于多级IPC序列中,多级IPC序列还包括第二接收进程,在与发送进程的通信顺序上,第二接收进程位于第一接收进程之后。需要说明的是,这里只是以第一接收进程和第二接收进程这两级接收进程为例来进行说明,实际上多级IPC序列中可以包括多个接收进程,无论有多少接收进程,每两个连续的接收进程之间的IPC原理都是相同的,每两个连续的接收进程的IPC过程都可以参阅前述发送进程和第一接收进程的过程进行理解。
在多级IPC序列中与前述两级IPC的过程不同的是,每个中间进程都会传递第一个进程的标识,第一个进程的页表信息,用于标识通过第二内存块传递给最后一个进程的第四数据的数据量的第三值,以及第二内存块的地址。
将该过程结合到上述过程中,可以参阅图7进行理解。如图7所示,第二接收进程包括第三执行实体,该第三执行实体中不仅包括上一个第二接收进程的标识和第三页表信息,还包括发送进程的标识和第一页表信息。
发送进程和第一接收进程通过前述实施例所描述的方式,将第一数据、第二数据和第三数据分别通过通用寄存器、栈内存和第一内存块传递给第一接收进程。
发送进程通过第一接收进程的第二执行实体传递第四值、第二内存块的地址,发送进程的标识和第一页表信息。第三执行实体根据该发送进程的标识进行身份验证,根据第一执行实体的第二内存块的地址,第一执行实体的第一页表信息,以及第三值,从第一执行实体的第二内存块中复制第四数据到第三执行实体的内存块中。
本申请实施例中,在多级IPC序列中,当较大数据需要多级传递时,该种可能的实现方式中只需要各级中间进程(如:第一接收进程)的执行实体中记录发送进程的第一页表信息、第一执行实体的第二内存块的地址和第四数据的数据量。这样,从发送进程到第二接收进程的第四数据的传递只需基于发送进程和第二接收进程页表信息做跨进程拷贝。需要说明的是,第一接收进程和第二接收进程之间还可以包括其他接收进程,无论从发送进程到第二接收进程之间包括一个或多个中间进程,本申请中从发送进程到第二接收进程只需要传递第二内存块的地址、第四数据的数据量以及第一页表信息,第二接收进程只需要复制一次第四数据,大大提高了数据传输的性能。
以上介绍了计算机系统和进程间通信的方法,下面结合附图介绍本申请实施例提供的进程间通信的装置,该装置可以是一个计算机设备。
如图8所示,本申请实施例提供的进程间通信的装置40的一实施例包括:
第一处理单元401,用于根据调用约定,将通信信息写入发送进程的第一执行实体的寄存器组中,将目标数据的第一数据写入第一执行实体的栈内存中,通信信息包括第一值,第一值用于指示第一数据的数据量,目标数据为发送进程要发送给第一接收进程的数据,调用约定用于指示通信信息在寄存器组中的写入顺序,以及第一数据在栈内存中的写入顺序。
第二处理单元402,用于将第一执行实体的寄存器组中的信息复制到第一执行实体的上下文中,寄存器组中的信息包括通信信息和栈内存的地址。
第三处理单元403,用于根据第一执行实体的上下文中的第一值和栈内存的地址,从第一执行实体的栈内存复制第一数据到第一接收进程的第二执行实体的栈内存中。
本申请实施例中,基于调用约定,通过栈内存传递进程间通信数据,在发送端因为栈内存地址一直在寄存器组中存在,不需要为进程间通信特别写入该栈内存的地址,可以降低通信开销,而且在接收端可以直接从栈内存中读取进程间通信的数据进行处理,不需要先将进程间通信的数据从内存块中先读取出来再写入到栈内存中,然后再进行处理,这样进一步降低了进程间通信的性能开销。
可选地,目标数据还包括第二数据,第一处理单元401,还用于在将第一执行实体的寄存器组中的信息复制到第一执行实体的上下文中之前,根据调用约定,将第二数据写入第一执行实体的寄存器组中,调用约定还用于指示第二数据在寄存器组中的写入顺序。
第二处理单元402,用于将寄存器组中的第二数据、通信信息和栈内存的地址复制到第一执行实体的上下文中。
第三处理单元403,还用于将第一执行实体的上下文复制到第二执行实体的上下文中;将第二执行实体的上下文写入第二执行实体的寄存器组中。
可选地,目标数据还包括第三数据,通信信息还包括第二值,第二值用于指示存储在第一执行实体的第一内存块中第三数据的数据量,第一处理单元401,将第一内存块的地址写入第一执行实体的寄存器组中,将第三数据写入第一执行实体的第一内存块中。
第三处理单元403,还用于根据第二值,以及第一内存块的地址,从第一执行实体的内存块复制第三数据到第二执行实体的内存块中。
可选地,第一执行实体中还包括第一页表信息,第二执行实体中还包括第二页表信息,第一页表信息和第二页表信息用于第一数据从第一执行实体的栈内存复制到第二执行实体的栈内存,或第三数据从第一执行实体的第一内存块复制到第二执行实体的内存块。
可选地,第三处理单元403,还用于在第一执行实体上叠加第二执行实体,并将第二执行实体的上下文写入到第二执行实体的寄存器组中,其中,第二执行实体的上下文包括第一执行实体的上下文中的数据;根据调用约定从第二执行实体的寄存器组和第二执行实体的栈内存中读取全部或部分目标数据,并对全部或部分目标数据进行处理,以得到处理结果,调用约定还用于指示对第二执行实体的寄存器组和栈内存的读取顺序。
可选地,第三处理单元403,用于根据第二执行实体的寄存器组中的函数的标识,调用函数,对全部或部分目标数据进行处理,以得到处理结果。
可选地,第一执行实体中还包括发送进程的标识,第三处理单元403,还用于在将第二执行实体切换到用户态之前,将发送进程的标识写入第二执行实体的上下文中,发送进程的标识用于在第二执行实体切换到到用户态后验证发送进程的身份。
可选地,第一处理单元401,还用于根据目标数据的数据量,以及调用约定,确定第一值;使用第一值,生成通信信息。
可选地,第二处理单元402,还用于从执行实体的资源池分配第二执行实体;若资源池中减掉第二执行实体后可用执行实体的数量低于下水线,则在资源池中创建新的执行实体,下水线用于表示资源池中可用执行实体的数量下限。
可选地,第二处理单元402,还用于在得到处理结果后,释放第二执行实体;若资源池中加上第二执行实体后可用执行实体的数量高于上水线,则从资源池中删除至少一个执行实体,上水线用于表示资源池中可用执行实体的数量上限。
可选地,第一接收进程位于多级IPC序列中,多级IPC序列还包括第二接收进程,在与发送进程的通信顺序上,第二接收进程位于第一接收进程之后;第三处理单元403,还用于通过第一接收进程的第二执行实体传递第一执行实体的第二内存块的地址,第一执行实体的第一页表信息,以及第三值到第二接收进程的第三执行实体,第三值用于指示发送进程发送给第二接收进程的第四数据的数据量;根据第一执行实体的第二内存块的地址,第一执行实体的第一页表信息,以及第三值,从第一执行实体的第二内存块中复制第四数据到第三执行实体的内存块中。
第三处理单元403,还用于通过第一接收进程的第二执行实体传递发送进程的标识到第二接收进程的第三执行实体,发送进程的标识用于第三执行实体验证发送进程的身份。
以上所描述的进程间通信的装置40可以参阅前述方法实施例部分的相应描述进行理解,此处不做重复赘述。
图9所示,为本申请的实施例提供的计算机设备50的一种可能的逻辑结构示意图。计算机设备50包括:处理器501、通信接口502、存储器503以及总线504。处理器501、通信接口502以及存储器503通过总线504相互连接。在本申请的实施例中,处理器501用于对计算机设备50的动作进行控制管理,例如,处理器501用于执行图2至图7的方法实施例中201至205的步骤,通信接口502用于支持计算机设备50进行通信。存储器503,用于存储计算机设备50的程序代码和数据。
其中,处理器501可以是中央处理器单元,通用处理器,数字信号处理器,专用集成电路,现场可编程门阵列或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,模块和电路。处理器501也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,数字信号处理器和微处理器的组合等等。总线504可以是外设部件互连标准(PeripheralComponent Interconnect,PCI)总线或扩展工业标准结构(Extended Industry StandardArchitecture,EISA)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,图8中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
在本申请的另一实施例中,还提供一种计算机可读存储介质,计算机可读存储介质中存储有计算机执行指令,当设备的处理器执行该计算机执行指令时,设备执行上述图2至图7中进程间通信的方法。
在本申请的另一实施例中,还提供一种计算机程序产品,该计算机程序产品包括计算机执行指令,该计算机执行指令存储在计算机可读存储介质中;当设备的处理器执行该计算机执行指令时,设备执行上述图2至图7中进程间通信的方法。
在本申请的另一实施例中,还提供一种芯片系统,该芯片系统包括处理器,该处理器用于支持进程间通信的装置实现上述图2至图7中进程间通信的方法。在一种可能的设计中,芯片系统还可以包括存储器,存储器,用于保存进程间通信的装置必要的程序指令和数据。该芯片系统,可以由芯片构成,也可以包含芯片和其他分立器件。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请实施例的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请实施例所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请实施例各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请实施例各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上,仅为本申请实施例的具体实施方式,但本申请实施例的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请实施例揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请实施例的保护范围之内。因此,本申请实施例的保护范围应以权利要求的保护范围为准。

Claims (15)

1.一种进程间通信的方法,其特征在于,所述方法应用于计算机系统,所述方法包括:
根据调用约定,将通信信息写入发送进程的第一执行实体的寄存器组中,将目标数据的第一数据写入所述第一执行实体的栈内存中,所述通信信息包括第一值,所述第一值用于指示所述第一数据的数据量,所述目标数据为所述发送进程要发送给第一接收进程的数据,所述调用约定用于指示所述通信信息在所述寄存器组中的写入顺序,以及所述第一数据在所述栈内存中的写入顺序,所述第一执行实体位于所述发送进程的一个线程控制块TCB中,所述TCB用于存储与所述发送进程的相应线程相关的信息,所述第一执行实体用于所述发送进程与所述第一接收进程通信;
将所述第一执行实体的所述寄存器组中的信息复制到所述第一执行实体的上下文中,所述寄存器组中的所述信息包括所述通信信息和所述栈内存的地址,所述第一执行实体的上下文为内核中所述第一执行实体的寄存器组中的信息;
根据所述第一执行实体的所述上下文中的所述第一值和所述栈内存的地址,从所述第一执行实体的所述栈内存复制所述第一数据到所述第一接收进程的第二执行实体的栈内存中;其中,所述栈内存的地址指示所述第一数据在所述栈内存中存储的起始位置,所述第一值指示所述第一数据的长度,所述栈内存的地址和所述第一值用于在所述第一执行实体的栈内存中查找所述第一数据,所述第二执行实体为位于所述第一接收进程的一个TCB中,所述第二执行实体用于所述第一接收进程与所述发送进程通信。
2.根据权利要求1所述的方法,其特征在于,所述目标数据还包括第二数据,在所述将所述第一执行实体的所述寄存器组中的信息复制到所述第一执行实体的上下文中之前,所述方法还包括:
根据所述调用约定,将所述第二数据写入所述第一执行实体的所述寄存器组中,所述调用约定还用于指示所述第二数据在所述寄存器组中的写入顺序;
所述将所述第一执行实体的所述寄存器组中的信息复制到所述第一执行实体的上下文中包括:
将所述寄存器组中的第二数据、所述通信信息和所述栈内存的地址复制到所述第一执行实体的上下文中;
所述方法还包括:
将所述第一执行实体的上下文复制到所述第二执行实体的上下文中;
将所述第二执行实体的上下文写入所述第二执行实体的寄存器组中。
3.根据权利要求1或2所述的方法,其特征在于,所述目标数据还包括第三数据,所述通信信息还包括第二值,所述第二值用于指示存储在所述第一执行实体的第一内存块中所述第三数据的数据量,所述方法还包括:
将所述第一内存块的地址写入所述第一执行实体的所述寄存器组中,将所述第三数据写入所述第一执行实体的所述第一内存块中;
根据所述第二值,以及所述第一内存块的地址,从所述第一执行实体的所述第一内存块复制所述第三数据到所述第二执行实体的内存块中。
4.根据权利要求3所述的方法,其特征在于,所述第一执行实体中还包括第一页表信息,所述第二执行实体中还包括第二页表信息,所述第一页表信息和所述第二页表信息用于所述第一数据从所述第一执行实体的栈内存复制到所述第二执行实体的栈内存,或所述第三数据从所述第一执行实体的第一内存块复制到所述第二执行实体的内存块。
5.根据权利要求1或2所述的方法,其特征在于,所述方法还包括:
在所述第一执行实体上叠加所述第二执行实体,并将所述第二执行实体的上下文写入到所述第二执行实体的寄存器组中,其中,所述第二执行实体的上下文包括所述第一执行实体的上下文中的数据;
根据所述调用约定从所述第二执行实体的寄存器组和所述第二执行实体的所述栈内存中读取全部或部分所述目标数据,并对所述全部或部分所述目标数据进行处理,以得到处理结果,所述调用约定还用于指示对所述第二执行实体的所述寄存器组和所述栈内存的读取顺序。
6.根据权利要求5所述的方法,其特征在于,所述通信信息还包括用于处理所述目标数据的函数的标识;
所述对所述全部或部分目标数据进行处理,以得到处理结果,包括:
根据所述第二执行实体的寄存器组中的所述函数的标识,调用所述函数,对所述全部或部分目标数据进行处理,以得到所述处理结果。
7.根据权利要求5所述的方法,其特征在于,所述第一执行实体中还包括所述发送进程的标识,所述方法还包括:
将所述发送进程的标识写入所述第二执行实体的上下文中,所述发送进程的标识用于所述第二执行实体验证所述发送进程的身份。
8.根据权利要求1或2所述的方法,其特征在于,所述方法还包括:
从执行实体的资源池分配所述第二执行实体;
若所述资源池中减掉所述第二执行实体后可用执行实体的数量低于下水线,则在所述资源池中创建新的执行实体,所述下水线用于表示所述资源池中可用执行实体的数量下限。
9.根据权利要求5所述的方法,其特征在于,所述方法还包括:
在得到所述处理结果后,释放所述第二执行实体;
若资源池中加上所述第二执行实体后可用执行实体的数量高于上水线,则从所述资源池中删除至少一个执行实体,所述上水线用于表示所述资源池中可用执行实体的数量上限。
10.根据权利要求1或2所述的方法,其特征在于,所述第一接收进程位于多级IPC序列中,所述多级IPC序列还包括第二接收进程,在与所述发送进程的通信顺序上,所述第二接收进程位于所述第一接收进程之后;所述方法还包括:
通过所述第一接收进程的第二执行实体传递所述第一执行实体的第二内存块的地址,所述第一执行实体的第一页表信息,以及第三值到所述第二接收进程的第三执行实体,所述第三值用于指示所述发送进程发送给所述第二接收进程的第四数据的数据量;
根据所述第一执行实体的第二内存块的地址,所述第一执行实体的第一页表信息,以及所述第三值,从所述第一执行实体的第二内存块复制所述第四数据到所述第三执行实体的内存块中。
11.根据权利要求10所述的方法,其特征在于,所述方法还包括:
通过所述第一接收进程的第二执行实体传递所述发送进程的标识到所述第二接收进程的所述第三执行实体,所述发送进程的标识用于所述第三执行实体验证所述发送进程的身份。
12.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1-11任一项所述的方法。
13.一种计算设备,其特征在于,包括处理器和存储有计算机程序的计算机可读存储介质;
所述处理器与所述计算机可读存储介质耦合,所述计算机程序被所述处理器执行时实现如权利要求1-11任一项所述的方法。
14.一种芯片系统,其特征在于,包括处理器,所述处理器被调用用于执行如权利要求1-11任一项所述的方法。
15.一种计算机程序产品,其特征在于,包括计算机程序,所述计算机程序当被一个或多个处理器执行时用于实现如权利要求1-11任一项所述的方法。
CN202010753141.6A 2020-07-30 2020-07-30 一种进程间通信的方法及装置 Active CN114064302B (zh)

Priority Applications (4)

Application Number Priority Date Filing Date Title
CN202010753141.6A CN114064302B (zh) 2020-07-30 2020-07-30 一种进程间通信的方法及装置
PCT/CN2021/081410 WO2022021896A1 (zh) 2020-07-30 2021-03-18 一种进程间通信的方法及装置
EP21849255.1A EP4187386A4 (en) 2020-07-30 2021-03-18 METHOD AND DEVICE FOR COMMUNICATION BETWEEN PROCESSES
US18/160,671 US20230168953A1 (en) 2020-07-30 2023-01-27 Inter-process communication method and apparatus

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010753141.6A CN114064302B (zh) 2020-07-30 2020-07-30 一种进程间通信的方法及装置

Publications (2)

Publication Number Publication Date
CN114064302A CN114064302A (zh) 2022-02-18
CN114064302B true CN114064302B (zh) 2024-05-14

Family

ID=80037460

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010753141.6A Active CN114064302B (zh) 2020-07-30 2020-07-30 一种进程间通信的方法及装置

Country Status (4)

Country Link
US (1) US20230168953A1 (zh)
EP (1) EP4187386A4 (zh)
CN (1) CN114064302B (zh)
WO (1) WO2022021896A1 (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114756355B (zh) * 2022-06-14 2022-10-18 之江实验室 一种计算机操作系统的进程自动快速恢复的方法和装置
WO2024060228A1 (zh) * 2022-09-23 2024-03-28 华为技术有限公司 获取数据的方法、装置、系统及存储介质
CN117914860A (zh) * 2022-10-12 2024-04-19 华为技术有限公司 集合通信方法及计算集群

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102460376A (zh) * 2009-06-26 2012-05-16 英特尔公司 无约束事务存储器(utm)系统的优化
CN102460377A (zh) * 2009-06-19 2012-05-16 Arm有限公司 数据处理设备及方法
WO2015143904A1 (zh) * 2014-03-28 2015-10-01 华为技术有限公司 并行用户态协议栈的管理方法和协议栈系统
CN106802785A (zh) * 2016-12-13 2017-06-06 北京华为数字技术有限公司 一种栈解析方法和装置
CN111381879A (zh) * 2018-12-31 2020-07-07 华为技术有限公司 一种数据处理方法及装置

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7987453B2 (en) * 2004-03-18 2011-07-26 International Business Machines Corporation Method and apparatus for determining computer program flows autonomically using hardware assisted thread stack tracking and cataloged symbolic data
CN103176852B (zh) * 2011-12-22 2016-05-25 腾讯科技(深圳)有限公司 一种用于进程间通信的方法及装置
CN102609378B (zh) * 2012-01-18 2016-03-30 中国科学院计算技术研究所 一种消息式内存访问装置及其访问方法
CN104657224B (zh) * 2013-11-21 2017-12-15 华为技术有限公司 一种进程间通信的方法和装置
CN111367687A (zh) * 2020-02-28 2020-07-03 罗普特科技集团股份有限公司 进程间数据通信方法和装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102460377A (zh) * 2009-06-19 2012-05-16 Arm有限公司 数据处理设备及方法
CN102460376A (zh) * 2009-06-26 2012-05-16 英特尔公司 无约束事务存储器(utm)系统的优化
WO2015143904A1 (zh) * 2014-03-28 2015-10-01 华为技术有限公司 并行用户态协议栈的管理方法和协议栈系统
CN106802785A (zh) * 2016-12-13 2017-06-06 北京华为数字技术有限公司 一种栈解析方法和装置
CN111381879A (zh) * 2018-12-31 2020-07-07 华为技术有限公司 一种数据处理方法及装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
重叠地址空间的二次重定向研究;吴贞海;刘福岩;李雪敏;易松;;计算机工程与设计;20100716(第13期);全文 *

Also Published As

Publication number Publication date
EP4187386A4 (en) 2023-11-15
US20230168953A1 (en) 2023-06-01
EP4187386A1 (en) 2023-05-31
WO2022021896A1 (zh) 2022-02-03
CN114064302A (zh) 2022-02-18

Similar Documents

Publication Publication Date Title
CN114064302B (zh) 一种进程间通信的方法及装置
US10255088B2 (en) Modification of write-protected memory using code patching
KR101177971B1 (ko) 보호 영역 경계들에서의 오브젝트 호출 방법, 시스템 및 장치
WO2017008675A1 (zh) 一种用于虚拟化环境下传输数据的方法与设备
CN111679921B (zh) 内存共享方法、内存共享装置及终端设备
US10083129B2 (en) Code loading hardening by hypervisor page table switching
CN106415506A (zh) 用于调用安全区域的面向对象的编组方案
CN112035272A (zh) 进程间通信的方法、装置以及计算机设备
CN111190854B (zh) 通信数据处理方法、装置、设备、系统和存储介质
CN107368379B (zh) 面向EVP的跨Guest OS进程间通信方法及系统
US9063805B2 (en) Method and system for enabling access to functionality provided by resources outside of an operating system environment
CN113495795A (zh) 一种进程间通信方法及相关设备
CN112256460A (zh) 进程间通信方法、装置、电子设备及计算机可读存储介质
CN114281484B (zh) 数据传输方法、装置、设备及存储介质
CN113010265A (zh) Pod的调度方法、调度器、存储插件及系统
US20150331812A1 (en) Input/output (i/o) processing via a page fault doorbell mechanism
CN114296646A (zh) 基于io业务的缓存方法、装置、服务器和存储介质
CN113157396A (zh) 一种虚拟化服务系统和方法
CN111858020B (zh) 用户资源限制方法、装置及计算机存储介质
US11429412B2 (en) Guest protection from application code execution in kernel mode
EP2765512B1 (en) Method and device for implementing communications between virtual machines based on scheduling layer
CN105893112B (zh) 一种虚拟化环境下的数据包处理方法及装置
JP2004030224A (ja) プロセッサ、レジスタ退避方法およびレジスタ指定方法
CN115617537A (zh) 一种数据传输方法及装置、存储介质
CN112035379A (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
GR01 Patent grant
GR01 Patent grant