CN115878343A - 一种进程间通信方法及相关装置 - Google Patents

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

Info

Publication number
CN115878343A
CN115878343A CN202111155635.5A CN202111155635A CN115878343A CN 115878343 A CN115878343 A CN 115878343A CN 202111155635 A CN202111155635 A CN 202111155635A CN 115878343 A CN115878343 A CN 115878343A
Authority
CN
China
Prior art keywords
address
instruction
shared memory
memory
descriptor
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.)
Pending
Application number
CN202111155635.5A
Other languages
English (en)
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 CN202111155635.5A priority Critical patent/CN115878343A/zh
Priority to PCT/CN2022/122061 priority patent/WO2023051591A1/zh
Publication of CN115878343A publication Critical patent/CN115878343A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • 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/50Allocation of resources, e.g. of the central processing unit [CPU]
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Storage Device Security (AREA)

Abstract

本申请公开了一种进程间通信方法,应用于运行多个进程的电子设备。该方法包括:获取用于请求获取共享内存的地址的第一指令;根据第一指令向第一进程返回第一地址,并将第一地址添加至用于存放第一进程能够访问的共享内存的地址的过滤表中;获取来自于第一进程的第二指令,第二指令包括第一地址,第二指令用于请求使用第一地址对应的存储空间;基于第二指令中的第一地址为共享内存的地址,触发查询过滤表,并根据第一地址位于过滤表中,执行第二指令;在执行第二指令后,在过滤表中删除第一地址。基于本方法,能够保证在软件发生错误时,通信中的进程无法访问其他进程正在使用的内存段,从而避免共享内存中数据受到破坏而导致***宕机。

Description

一种进程间通信方法及相关装置
技术领域
本申请涉及计算机技术领域,尤其涉及一种进程间通信方法及相关装置。
背景技术
近年来,随着人们生活品质的提高和技术水平的飞跃,车载市场迎来前所未有的机遇--智能化。智能驾驶场景中会存在大量的进程间通信,例如,传感器进程把图像传输给不同的处理进程,处理进程执行相应的识别处理后,再给车辆内相应的部件发出控制信号。由实际应用可知,智能驾驶场景对进程间通信的效率和安全性都有很高的要求,效率影响车辆对紧急情况做出反应的速度,而安全性直接与乘客的生命安全息息相关。
在传统方法中,通常是基于套接字(socket)技术以及消息队列(Message Queue)技术来实现进程间通信。然而,socket技术以及Message Queue技术均涉及到数据的拷贝,通信效率差。因此,目前主要采用共享内存的方式来实现进程间通信。基于共享内存的方式来进行通信,无需涉及数据的拷贝,通信效率高。
在通过共享内存进行通信的场景,通信中的多个进程在任意时刻访问的是共享内存中不同的内存段。但是,当软件在运行过程中发生错误时,通信中的一个进程可能会访问另一个进程正在使用的内存段,这就有可能破坏共享内存中的数据,从而导致***宕机。在智能驾驶场景下,一旦出现这种情况,有可能会危害到人身安全。
发明内容
本申请实施例提供了一种进程间通信方法,能够保证在软件发生错误时,通信中的进程无法访问其他进程正在使用的内存段,从而避免出现共享内存中数据受到破坏而导致***宕机的现象,保证了***的正常运行。
本申请第一方面提供一种进程间通信方法,应用于运行有多个进程的电子设备,例如智能驾驶场景下的无线电子设备。该方法包括:处理器获取来自于第一进程的第一指令,所述第一指令用于请求获取共享内存的地址,以便于第一进程往共享内存中写入数据或者读取共享内存中的数据。所述共享内存用于进程间通信。在智能驾驶场景中,第一进程例如为传感器进程,负责获取传感器数据并将传感器数据发送给处理进程;第一进程也可以为处理进程,负责接收传感器数据通过共享内存传输的传感器数据,并根据传感器数据执行相应的处理操作。
处理器根据所述第一指令向所述第一进程返回第一地址,并将所述第一地址添加至所述第一进程对应的过滤表中。所述第一地址可以为一个地址范围,用于指示共享内存中的一个内存段所对应的地址段。所述第一地址对应的内存段即为用于供第一进程进行进程间通信的内存。所述过滤表用于存放第一进程能够访问的共享内存的地址,且所述过滤表中所记录的地址均为共享内存中的地址。
处理器获取来自于所述第一进程的第二指令,所述第二指令包括所述第一地址,所述第二指令用于请求使用所述第一地址对应的存储空间,以基于所述第一地址对应的存储空间来实现进程间通信。
处理器基于所述第二指令中的第一地址为共享内存的地址,触发查询所述过滤表,并根据所述第一地址位于所述过滤表中,执行所述第二指令。也就是说,在处理器在获取到访问某一个地址的指令并确定该地址为共享内存中的地址时,处理器则触发查询过滤表,以确定该地址是否位于过滤表中。如果该地址位于过滤表中,则代表进程具有访问该地址的权限;如果该地址不位于过滤表中,则代表进程不具有访问该地址的权限。
处理器在执行所述第二指令后,在所述过滤表中删除所述第一地址,从而使得第一进程不再具有访问第一地址的权限。
本方案中,需要基于共享内存进行通信的第一进程通过指令来获取共享内存的地址,并由该指令触发将获取的共享内存的地址加入过滤表中;在第一进程访问共享内存的地址时,触发查询过滤表,以确定第一进程是否具有访问共享内存的权限。并且,在第一进程成功访问共享内存后,在过滤表中释放第一进程的访问权限,从而保证进程不会因为软件错误或受到攻击而踩踏另一个进程正在使用的共享内存。基于本方案,能够保证在软件发生错误或受到恶意攻击时,通信中的进程无法访问其他进程正在使用的内存段,从而避免出现共享内存中数据受到破坏而导致***宕机的现象,保证了***的正常运行。
在一种可能的实现方式中,所述第一进程为发送方进程,所述第二指令还包括第一数据,所述第二指令用于指示向所述第一地址对应的存储空间写入所述第一数据,所述第一数据为待传输给第二进程的数据。所述处理器执行所述第二指令的过程包括:处理器向所述第一地址对应的存储空间写入所述第一数据。
在一种可能的实现方式中,所述第一进程为接收方进程,所述第二指令用于指示读取所述第一地址对应的存储空间中的第二数据,所述第二数据为第二进程向所述第一进程传输的数据。所述处理器执行所述第二指令的过程包括:处理器读取所述第一地址对应的存储空间中的第二数据,并向所述第一进程返回所述第二数据。
在一种可能的实现方式中,在第一进程出现bug或者受到恶意攻击时,处理器获取来自于所述第一进程的第三指令,所述第三指令包括第二地址,所述第三指令用于请求使用所述第二地址对应的存储空间。所述第二地址为所述共享内存中的地址,且所述第二地址并不位于过滤表中。即,处理器可以是并没有触发将第二地址添加至过滤表中;处理器也可以是在第一进程失去访问第二地址的访问权限之后,将第二地址从过滤表中删除。
处理器基于所述第三指令中的第二地址为共享内存的地址,触发查询所述过滤表,并根据所述第二地址不位于所述过滤表中,拒绝执行所述第三指令。
本方案中,在第一进程所请求访问的第二地址属于共享内存中的地址,且所述第二地址不位于所述过滤表时,处理器可以拒绝执行第一进程请求访问第二地址的指令,从而保证第一进程无法使用第二地址对应的存储空间,避免出现第一进程踩踏其他进程正在使用的存储空间的现象。
在一种可能的实现方式中,在为第一进程分配了所述共享内存或获取到来自于第一进程的第一指令之后,处理器在所述第一进程对应的页表项中添加标记。其中,所述标记用于指示所述第一地址为用于进程间通信的地址,所述页表项用于指示所述第一地址与所述第一地址对应的物理地址之间的映射关系,所述第一地址为虚拟地址。
在获取到第二指令之后,处理器可以基于所述第二指令中的第一地址查找所述页表项,并根据所述页表项中的标记,确定所述第二指令中的第一地址为共享内存的地址。
本方案中,通过在页表项中添加标记,来指示属于共享内存中的地址,使得处理器能够识别到第二指令中的第一地址为共享内存的地址,提高了方案的可行性。
在一种可能的实现方式中,在处理器为第一进程分配共享内存之后,第一进程生成的所述第一指令中包括所述共享内存的标识,所述第一指令用于请求获取所述共享内存的地址。
处理器根据所述第一指令中的所述标识获取所述共享内存对应的描述符。其中,所述描述符可以是处理器在为所述第一进程分配所述共享内存之后建立的,所述描述符用于记录所述共享内存的使用情况。即,处理器每次为需要进行通信的两个进程分配共享内存之后,则为所分配的共享内存建立一个描述符,以记录该共享内存的使用情况。
处理器根据所述描述符的内容确定所述第一地址,并向所述第一进程返回所述第一地址,所述第一地址对应的存储空间为所述共享内存中待写入或待读取的存储空间。
本方案中,通过采用描述符来实时记录共享内存的使用情况,可以使得处理器能够在获取到请求获取共享内存中的地址的指令时,获知共享内存的使用情况,从而向进程返回有效的内存段的地址。
在一种可能的实现方式中,在第一进程第一次与其他进程建立通信时,处理器可以为第一进程生成描述符表。在处理器获取到包括有共享内存的标识的第一指令时,处理器根据所述第一指令中的标识,在第一进程对应的描述符表中获取所述标识对应的描述符的地址,所述描述符表用于存储所述第一进程对应的一个或多个描述符的地址。处理器再根据所述描述符的地址获取所述描述符。
本方案中,通过描述符表来记录描述符的地址,可以有效管理同一个进程对应的多个描述符,保证方案的可实现性。
在一种可能的实现方式中,处理器为第一进程所分配的共享内存包括多个内存块,所述多个内存块构成用于供进程读写的环形队列。其中,所述共享内存对应的描述符对所述多个内存块中的每个内存块的状态进行记录与管理。具体地,所述描述符包括写入指针和读取指针,所述写入指针用于指示所述多个内存块中待写入的内存块在所述环形队列中的位置,所述读取指针用于指示所述多个内存块中待读取的内存块在所述环形队列中的位置。基于所述描述符中的写入指针以及读取指针,处理器可以快速确定用于供写入数据的内存块的地址以及用于供读取数据的内存块的地址。
本方案中,通过将共享内存中的多个内存块组织成环形队列,采用描述符记录环形队列中的内存块的状态,可以使得通信中的双方进程能够异步工作,即发送方进程和接收方进程同时访问共享内存中不同的内存块,提高通信的效率。
此外,由于共享内存中的多个内存块被组织成环形队列,发送方进程可以循环地在环形队列中写入数据,从而实现共享内存的循环利用,节省通信开销。
在一种可能的实现方式中,在执行所述第二指令后,处理器更新所述描述符中的所述写入指针,以更新所述多个内存块中待写入的内存块在所述环形队列中的位置;
或,在执行所述第二指令后,处理器更新所述描述符中的所述读取指针,以更新所述多个内存块中待读取的内存块在所述环形队列中的位置。
在一种可能的实现方式中,在第一进程与其他进程建立通信之前,处理器获取来自于所述第一进程的第四指令,所述第四指令用于请求分配用于进行进程间通信的内存。处理器根据所述第四指令为所述第一进程分配所述共享内存,并向所述第一进程返回所述共享内存的标识。
在一种可能的实现方式中,在获取到来自于第一进程的第四指令之后,处理器还根据所述第四指令生成所述共享内存对应的描述符,并将所述描述符的地址添加至所述第一进程对应的描述符表中。在处理器根据第四指令为第一进程分配共享内存之后,处理器还可以将该共享内存的标识添加至描述符表中,以建立所述描述符的地址与所述共享内存的标识之间的对应关系,便于后续处理器能够根据共享内存的标识确定相应的描述符。
在一种可能的实现方式中,所述在执行所述第二指令后,处理器获取来自于所述第一进程的第五指令,所述第五指令用于指示所述第一地址对应的存储空间使用完毕。处理器根据所述第五指令,将所述过滤表中的第一地址删除。
通过由第一进程发送的第二指令来触发处理器撤销第一进程对共享内存的访问权限,能够使得进程访问共享内存的行为能够得到控制,保证通信中的进程无法访问其他进程正在使用的内存段,从而避免出现共享内存中数据受到破坏而导致***宕机的现象。
本申请第二方面提供一种电子设备,包括获取单元、处理单元和发送单元;所述获取单元,用于获取来自于第一进程的第一指令,所述第一指令用于请求获取共享内存的地址,所述共享内存用于进程间通信;所述发送单元,用于根据所述第一指令向所述第一进程返回第一地址,并将所述第一地址添加至所述第一进程对应的过滤表中,所述第一地址为所述共享内存中的地址,所述过滤表用于存放第一进程能够访问的共享内存的地址;所述获取单元,还用于获取来自于所述第一进程的第二指令,所述第二指令包括所述第一地址,所述第二指令用于请求使用所述第一地址对应的存储空间;所述处理单元,用于基于所述第二指令中的第一地址为共享内存的地址,触发查询所述过滤表,并根据所述第一地址位于所述过滤表中,执行所述第二指令;所述处理单元,还用于在执行所述第二指令后,在所述过滤表中删除所述第一地址。
在一种可能的实现方式中,所述第二指令还包括第一数据,所述第二指令用于指示向所述第一地址对应的存储空间写入所述第一数据,所述第一数据为待传输给第二进程的数据;所述处理单元,具体用于向所述第一地址对应的存储空间写入所述第一数据。
在一种可能的实现方式中,所述第二指令用于指示读取所述第一地址对应的存储空间中的第二数据,所述第二数据为第二进程向所述第一进程传输的数据;所述处理单元,具体用于读取所述第一地址对应的存储空间中的第二数据,并向所述第一进程返回所述第二数据。
在一种可能的实现方式中,所述获取单元,还用于获取来自于所述第一进程的第三指令,所述第三指令包括第二地址,所述第三指令用于请求使用所述第二地址对应的存储空间,所述第二地址为所述共享内存中的地址;所述处理单元,具体用于基于所述第三指令中的第二地址为共享内存的地址,触发查询所述过滤表,并根据所述第二地址不位于所述过滤表中,拒绝执行所述第三指令。
在一种可能的实现方式中,所述处理单元,还用于在所述第一进程对应的页表项中添加标记,所述标记用于指示所述第一地址为用于进程间通信的地址,所述页表项用于指示所述第一地址与所述第一地址对应的物理地址之间的映射关系,所述第一地址为虚拟地址;所述处理单元,具体用于:基于所述第二指令中的第一地址查找所述页表项;根据所述页表项中的标记,确定所述第二指令中的第一地址为共享内存的地址。
在一种可能的实现方式中,所述第一指令包括所述共享内存的标识;所述处理单元,具体用于根据所述标识获取描述符,所述描述符用于记录所述共享内存的使用情况;所述发送单元,具体用于根据所述描述符确定所述第一地址,并向所述第一进程返回所述第一地址,所述第一地址对应的存储空间为所述共享内存中待写入或待读取的存储空间。
在一种可能的实现方式中,所述处理单元,具体用于:根据所述标识,在第一进程对应的描述符表中获取所述标识对应的描述符的地址,所述描述符表用于存储所述第一进程对应的一个或多个描述符的地址;根据所述描述符的地址获取所述描述符。
在一种可能的实现方式中,所述共享内存包括多个内存块,所述多个内存块构成用于供进程读写的环形队列;所述描述符包括写入指针和读取指针,所述写入指针用于指示所述多个内存块中待写入的内存块在所述环形队列中的位置,所述读取指针用于指示所述多个内存块中待读取的内存块在所述环形队列中的位置。
在一种可能的实现方式中,所述处理单元,具体用于:在执行所述第二指令后,更新所述描述符中的所述写入指针,以更新所述多个内存块中待写入的内存块在所述环形队列中的位置;或,在执行所述第二指令后,更新所述描述符中的所述读取指针,以更新所述多个内存块中待读取的内存块在所述环形队列中的位置。
在一种可能的实现方式中,所述获取单元,还用于获取来自于所述第一进程的第四指令,所述第四指令用于请求分配用于进行进程间通信的内存;所述处理单元,还用于根据所述第四指令为所述第一进程分配所述共享内存,并向所述第一进程返回所述共享内存的标识。
在一种可能的实现方式中,所述处理单元,还用于根据所述第四指令生成所述共享内存对应的描述符,并将所述描述符的地址添加至所述第一进程对应的描述符表中。
在一种可能的实现方式中,所述获取单元,还用于获取来自于所述第一进程的第五指令,所述第五指令用于指示所述第一地址对应的存储空间使用完毕;所述处理单元,还用于根据所述第五指令,将所述过滤表中的第一地址删除。
本申请第三方面提供一种电子设备,该电子设备包括:存储器和处理器;所述存储器存储有代码,所述处理器被配置为执行所述代码,当所述代码被执行时,所述电子设备执行如第一方面中的任意一种实现方式的方法。
本申请第四方面提供一种智能汽车,该智能汽车包括:存储器和处理器;所述存储器存储有代码,所述处理器被配置为执行所述代码,当所述代码被执行时,所述智能汽车执行如第一方面中的任意一种实现方式的方法。
本申请第五方面提供一种计算机可读存储介质,计算机可读存储介质中存储有计算机程序,当其在计算机上运行时,使得计算机执行如第一方面或第二方面中的任意一种实现方式的方法。
本申请第六方面提供一种计算机程序产品,当其在计算机上运行时,使得计算机执行如第一方面或第二方面中的任意一种实现方式的方法。
本申请第七方面提供一种芯片,包括一个或多个处理器。处理器中的部分或全部用于读取并执行存储器中存储的计算机程序,以执行上述任一方面任意可能的实现方式中的方法。
可选地,该芯片该包括存储器,该存储器与该处理器通过电路或电线与存储器连接。可选地,该芯片还包括通信接口,处理器与该通信接口连接。通信接口用于接收需要处理的数据和/或信息,处理器从该通信接口获取该数据和/或信息,并对该数据和/或信息进行处理,并通过该通信接口输出处理结果。该通信接口可以是输入输出接口。本申请提供的方法可以由一个芯片实现,也可以由多个芯片协同实现。
附图说明
图1为本申请实施例提供的一种基于socket技术的通信示意图;
图2为本申请实施例提供的一种基于Message Queue技术的通信示意图;
图3为本申请实施例提供的车辆100的一种结构示意图;
图4为本申请实施例提供的一种车辆内的计算机***101的结构示意图;
图5为本申请实施例提供的一种进程间通信方法500的流程示意图;
图6为本申请实施例提供的一种页表项的结构示意图;
图7为本申请实施例提供的一种描述符的结构示意图;
图8为本申请实施例提供的一种进程间通信方法800的流程示意图;
图9为本申请实施例提供的一种共享内存中的内存块的状态变化示意图;
图10为本申请实施例提供的一种进程间通信的***架构示意图;
图11A为本申请实施例提供的一种描述符表的结构示意图;
图11B为本申请实施例提供的一种描述符的结构示意图;
图12为本申请实施例提供的一种智能驾驶场景下的***架构示意图;
图13为本申请实施例提供的一种进程间通信方法1300的流程示意图;
图14为本申请实施例提供的一种电子设备1400的结构示意图;
图15为本申请实施例提供的一种计算机可读存储介质1500的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
下面结合附图,对本申请的实施例进行描述。本领域普通技术人员可知,随着技术的发展和新场景的出现,本申请实施例提供的技术方案对于类似的技术问题,同样适用。
近年来,随着人们生活品质的提高和技术水平的飞跃,车载市场迎来前所未有的机遇--智能化。智能驾驶场景中会存在大量的进程间通信,例如,传感器进程把图像传输给不同的处理进程,处理进程执行相应的识别处理后,再给车辆内相应的部件发出控制信号。由实际应用可知,智能驾驶场景对进程间通信的效率和安全性都有很高的要求,效率影响车辆对紧急情况做出反应的速度,而安全性直接与乘客的生命安全息息相关。
此外,在智能驾驶场景中,需要进行通信的两个进程通常位于不同的处理器上。因此,智能驾驶场景下的进程间通信通常又称为核间通信。
在传统方法中,通常是基于套接字(socket)技术以及消息队列(Message Queue)技术来实现进程间通信。
其中,socket技术是网络中进程通信的常用方式,也能应用于同一个计算机***中的进程间通信。如图1所示,图1为本申请实施例提供的一种基于socket技术的通信示意图。对于待通信的传输控制协议(Transmission Control Protocol,TCP)客户端以及TCP服务器端,TCP客户端和TCP服务器端分别建立一个socket对象。
TCP服务器端并不定位具体客户端的套接字,而是时刻处于监听状态。TCP客户端的套接字则需要描述TCP客户端所要连接的服务器的套接字,并提供地址和端口号;然后,TCP客户端向TCP服务器端的套接字提出连接请求。当TCP服务器端的套接字收到TCP客户端的套接字发来的连接请求后,响应TCP客户端的套接字的请求,并建立一个新的线程,把TCP服务器端的套接字的描述发给客户端。一旦TCP客户端确认TCP服务器端返回的描述,就正式建立连接。而TCP服务器端的套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。
Message Queue是Linux中较为常用的通信技术之一。Message Queue技术通过在内核建立一个消息队列,把进程放在用户态空间中消息缓冲区的数据拷贝到内核态,再拷贝到另一个进程的消息缓冲区,从而完成进程间的通信。如图2所示,图2为本申请实施例提供的一种基于Message Queue技术的通信示意图。
然而,socket技术以及Message Queue技术在通信过程中均涉及到数据的拷贝,通信效率较低。因此,目前主要采用共享内存的方式来实现进程间通信。基于共享内存的方式来进行通信,无需涉及数据的拷贝,通信效率高。
共享内存是当前效率最高的进程间通信方式。在基于共享内存进行通信的情况下,内存中的同一个物理地址被映射到不同进程的地址空间,通信中的两个进程异步读写该内存中相同的物理地址,从而实现数据的免拷贝通信。
一般来说,在通过共享内存进行通信的场景,通信中的多个进程在任意时刻访问的是共享内存中不同的内存段。但是,当软件在运行过程中发生错误时(例如软件发生了BUG),通信中的一个进程可能会访问另一个进程正在使用的内存段,这就有可能破坏共享内存中的数据,从而导致***宕机。在智能驾驶场景下,一旦出现这种情况,有可能会危害到人身安全。
此外,在大部分的进程间通信业务中,发送方进程所发送的数据被接收后,接收方进程会先进行数据的合法性检查。如果数据是合法的,则接收方进程再对数据进行处理。但是,在接收方进程对数据进行处理的过程中,如果发送方再次修改数据,则接收方进程无法再对数据的合法性进行检查,从而引入安全漏洞。在智能驾驶场景下,攻击方可以通过检查时间至使用时间(Time of check to time of use,TOCTTOU)攻击方式来攻击发送方进程。在发送方进程被攻击控制后,发送方进程会先发送一个合法的数据;接收方进程校验该数据为合法后,便会开始处理。此时,发送方进程可以通过修改数据的内容来进行攻击。
有鉴于此,本申请实施例提供一种进程间通信方法,需要基于共享内存进行通信的进程通过指令来获取共享内存的地址,并由该指令触发将获取的共享内存的地址加入过滤表中;在进程访问共享内存的地址时,触发查询过滤表,以确定进程是否具有访问共享内存的权限。并且,在进程成功访问共享内存后,在过滤表中释放进程的访问权限,从而保证进程不会因为软件错误或受到攻击而踩踏另一个进程正在使用的共享内存。
基于本实施例的方案,能够保证在软件发生错误或受到恶意攻击时,通信中的进程无法访问其他进程正在使用的内存段,从而避免出现共享内存中数据受到破坏而导致***宕机的现象,保证了***的正常运行。
具体地,本申请实施例所提供的进程间通信方法可以应用于电子设备上。示例性地,该电子设备例如可以是智能驾驶中的无线电子设备、服务器、智能手机(mobilephone)、个人电脑(personal computer,PC)、笔记本电脑、平板电脑、智慧电视、移动互联网设备(mobile internet device,MID)、可穿戴设备,虚拟现实(virtual reality,VR)设备、增强现实(augmented reality,AR)设备、工业控制(industrial control)中的无线电子设备、远程手术(remote medical surgery)中的无线电子设备、智能电网(smart grid)中的无线电子设备、运输安全(transportation safety)中的无线电子设备、智慧城市(smartcity)中的无线电子设备、智慧家庭(smart home)中的无线电子设备等。
为了便于叙述,以下将以本申请实施例提供的方法应用于智能驾驶中的无线电子设备上为例,对本申请实施例所提供的方法进行介绍。
为了便于理解本方案,本申请实施例中首先结合图3对本申请提供的智能驾驶场景下的车辆的结构进行介绍。请参阅图3,图3为本申请实施例提供的车辆100的一种结构示意图。
在一个实施例中,车辆100可以配置为完全或部分地自动驾驶模式。例如,车辆100可以在处于自动驾驶模式中的同时控制自身,并且可通过人为操作来确定车辆及其周边环境的当前状态,确定周边环境中的至少一个其他车辆的可能行为,并确定该其他车辆执行可能行为的可能性相对应的置信水平,基于所确定的信息来控制车辆100。在车辆100处于自动驾驶模式中时,可以将车辆100置为在没有和人交互的情况下操作。
车辆100可包括各种子***,例如行进***102、传感器***104、控制***106、一个或多个***设备108以及电源110、计算机***112和用户接口116。可选地,车辆100可包括更多或更少的子***,并且每个子***可包括多个元件,例如每个子***包括多个ECU。另外,车辆100的每个子***和元件可以通过有线或者无线互连。
行进***102可包括为车辆100提供动力运动的组件。在一个实施例中,推进***102可包括引擎118、能量源119、传动装置120和车轮/轮胎121。引擎118可以是内燃引擎、电动机、空气压缩引擎或其他类型的引擎组合,例如汽油发动机和电动机组成的混动引擎,内燃引擎和空气压缩引擎组成的混动引擎。引擎118将能量源119转换成机械能量。
能量源119的示例包括汽油、柴油、其他基于石油的燃料、丙烷、其他基于压缩气体的燃料、乙醇、太阳能电池板、电池和其他电力来源。能量源119也可以为车辆100的其他***提供能量。
传动装置120可以将来自引擎118的机械动力传送到车轮121。传动装置120可包括变速箱、差速器和驱动轴。在一个实施例中,传动装置120还可以包括其他器件,比如离合器。其中,驱动轴可包括可耦合到一个或多个车轮121的一个或多个轴。
传感器***104可包括感测关于车辆100周边的环境的信息的若干个传感器。例如,传感器***104可包括定位***122(定位***可以是GPS***,也可以是北斗***或者其他定位***)、惯性测量单元(inertial measurement unit,IMU)124、雷达126、激光测距仪128以及相机130。传感器***104还可包括被监视车辆100的内部***的传感器(例如,车内空气质量监测器、燃油量表、机油温度表等)。来自这些传感器中的一个或多个的传感器数据可用于检测对象及其相应特性(位置、形状、方向、速度等)。这种检测和识别是自主车辆100的安全操作的关键功能。
定位***122可用于估计车辆100的地理位置。IMU 124用于基于惯性加速度来感测车辆100的位置和朝向变化。在一个实施例中,IMU 124可以是加速度计和陀螺仪的组合。
雷达126可利用无线电信号来感测车辆100的周边环境内的物体。在一些实施例中,除了感测物体以外,雷达126还可用于感测物体的速度和/或前进方向。
激光测距仪128可利用激光来感测车辆100所位于的环境中的物体。在一些实施例中,激光测距仪128可包括一个或多个激光源、激光扫描器以及一个或多个检测器,以及其他***组件。
相机130可用于捕捉车辆100的周边环境的多个图像。相机130可以是静态相机或视频相机。
控制***106为控制车辆100及其组件的操作。控制***106可包括各种元件,其中包括转向***132、油门134、制动单元136、计算机视觉***140、路线控制***142以及障碍物避免***144。
转向***132可操作来调整车辆100的前进方向。例如在一个实施例中可以为方向盘***。
油门134用于控制引擎118的操作速度并进而控制车辆100的速度。
制动单元136用于控制车辆100减速。制动单元136可使用摩擦力来减慢车轮121。在其他实施例中,制动单元136可将车轮121的动能转换为电流。制动单元136也可采取其他形式来减慢车轮121转速从而控制车辆100的速度。
计算机视觉***140可以操作来处理和分析由相机130捕捉的图像以便识别车辆100周边环境中的物体和/或特征。所述物体和/或特征可包括交通信号、道路边界和障碍物。计算机视觉***140可使用物体识别算法、运动中恢复结构(Structure from Motion,SFM)算法、视频跟踪和其他计算机视觉技术。在一些实施例中,计算机视觉***140可以用于为环境绘制地图、跟踪物体、估计物体的速度等等。
路线控制***142用于确定车辆100的行驶路线。在一些实施例中,路线控制***142可结合来自传感器138、GPS 122和一个或多个预定地图的数据以为车辆100确定行驶路线。
障碍物避免***144用于识别、评估和避免或者以其他方式越过车辆100的环境中的潜在障碍物。
当然,在一个实例中,控制***106可以增加或替换地包括除了所示出和描述的那些以外的组件。或者也可以减少一部分上述示出的组件。
车辆100通过***设备108与外部传感器、其他车辆、其他计算机***或用户之间进行交互。***设备108可包括无线通信***146、车载电脑148、麦克风150和/或扬声器152。
在一些实施例中,***设备108提供车辆100的用户与用户接口116交互的手段。例如,车载电脑148可向车辆100的用户提供信息。用户接口116还可操作车载电脑148来接收用户的输入。车载电脑148可以通过触摸屏进行操作。在其他情况中,***设备108可提供用于车辆100与位于车内的其它设备通信的手段。例如,麦克风150可从车辆100的用户接收音频(例如,语音命令或其他音频输入)。类似地,扬声器152可向车辆100的用户输出音频。
无线通信***146可以直接地或者经由通信网络来与一个或多个设备无线通信。例如,无线通信***146可使用3G蜂窝通信,例如CDMA、EVD0、GSM/GPRS,或者4G蜂窝通信,例如LTE。或者5G蜂窝通信。无线通信***146可利用WiFi与无线局域网(wireless localarea network,WLAN)通信。在一些实施例中,无线通信***146可利用红外链路、蓝牙或ZigBee与设备直接通信。其他无线协议,例如各种车辆通信***,例如,无线通信***146可包括一个或多个专用短程通信(dedicated short range communications,DSRC)设备,这些设备可包括车辆和/或路边台站之间的公共和/或私有数据通信。
电源110可向车辆100的各种组件提供电力。在一个实施例中,电源110可以为可再充电锂离子或铅酸电池。这种电池的一个或多个电池组可被配置为电源为车辆100的各种组件提供电力。在一些实施例中,电源110和能量源119可一起实现,例如一些全电动车中那样。
车辆100的部分或所有功能受计算机***112控制。计算机***112可包括至少一个控制器113,控制器113执行存储在例如存储器114这样的非暂态计算机可读介质中的指令115。计算机***112还可以是采用分布式方式控制车辆100的个体组件或子***的多个计算设备。
控制器113可以是任何常规的处理器,诸如商业可获得的CPU。替选地,该处理器可以是诸如ASIC或其它基于硬件的处理器的专用设备。尽管图1功能性地图示了处理器、存储器、和在相同块中的计算机110的其它元件,但是本领域的普通技术人员应该理解该处理器、计算机、或存储器实际上可以包括可以或者可以不存储在相同的物理外壳内的多个处理器、计算机、或存储器。
例如,存储器可以是硬盘驱动器或位于不同于计算机110的外壳内的其它存储介质。因此,对处理器或计算机的引用将被理解为包括对可以或者可以不并行操作的处理器或计算机或存储器的集合的引用。不同于使用单一的处理器来执行此处所描述的步骤,诸如转向组件和减速组件的一些组件每个都可以具有其自己的处理器,所述处理器只执行与特定于组件的功能相关的计算。
在此处所描述的各个方面中,处理器可以位于远离该车辆并且与该车辆进行无线通信。在其它方面中,此处所描述的过程中的一些在布置于车辆内的处理器上执行而其它则由远程处理器执行,包括采取执行单一操纵的必要步骤。
在一些实施例中,数据存储装置114可包含指令115(例如,程序逻辑),指令115可被处理器执行来执行车辆100的各种功能,包括以上描述的那些功能。存储器114也可包含额外的指令,包括向推进***102、传感器***104、控制***106和***设备108中的一个或多个发送数据、从其接收数据、与其交互和/或对其进行控制的指令。
除了指令115以外,数据存储装置114还可存储数据,例如道路地图、路线信息,车辆的位置、方向、速度以及其它这样的车辆数据,以及其他信息。这种信息可在车辆100在自主、半自主和/或手动模式中操作期间被车辆100和计算机***112使用。
用户接口116,用于向车辆100的用户提供信息或从其接收信息。可选地,用户接口116可包括在***设备108的集合内的一个或多个输入/输出设备,例如无线通信***146、车车在电脑148、麦克风150和扬声器152。
计算机***112可基于从各种子***(例如,行进***102、传感器***104和控制***106)以及从用户接口116接收的输入来控制车辆100的功能。例如,计算机***112可利用来自控制***106的输入以便控制转向单元132来避免由传感器***104和障碍物避免***144检测到的障碍物。在一些实施例中,计算机***112可操作来对车辆100及其子***的许多方面提供控制。
可选地,上述这些组件中的一个或多个可与车辆100分开安装或关联。例如,数据存储装置114可以部分或完全地与车辆1100分开存在。上述组件可以按有线和/或无线方式来通信地耦合在一起。
可选地,上述组件只是一个示例,实际应用中,上述各个模块中的组件有可能根据实际需要增添或者删除,图1不应理解为对本申请实施例的限制。
在道路行进的自动驾驶汽车,如上面的车辆100,可以识别其周围环境内的物体以确定对当前速度的调整。所述物体可以是其它车辆、交通控制设备、或者其它类型的物体。在一些示例中,可以独立地考虑每个识别的物体,并且基于物体的各自的特性,诸如它的当前速度、加速度、与车辆的间距等,可以用来确定自动驾驶汽车所要调整的速度。
可选地,自动驾驶汽车车辆100或者与自动驾驶车辆100相关联的计算设备(如图1的计算机***112、计算机视觉***140、数据存储装置114)可以基于所识别的物体的特性和周围环境的状态(例如,交通、雨、道路上的冰、等等)来预测所述识别的物体的行为。可选地,每一个所识别的物体都依赖于彼此的行为,因此还可以将所识别的所有物体全部一起考虑来预测单个识别的物体的行为。车辆100能够基于预测的所述识别的物体的行为来调整它的速度。
换句话说,自动驾驶汽车能够基于所预测的物体的行为来确定车辆将需要调整到(例如,加速、减速、或者停止)什么稳定状态。在这个过程中,也可以考虑其它因素来确定车辆100的速度,诸如,车辆100在行驶的道路中的横向位置、道路的曲率、静态和动态物体的接近度等等。
除了提供调整自动驾驶汽车的速度的指令之外,计算设备还可以提供修改车辆100的转向角的指令,以使得自动驾驶汽车遵循给定的轨迹和/或维持与自动驾驶汽车附近的物体(例如,道路上的相邻车道中的轿车)的安全横向和纵向距离。
上述车辆100可以为轿车、卡车、摩托车、公共汽车、娱乐车、游乐场车辆、施工设备、电车、高尔夫球车以及火车等,本申请实施例不做特别的限定。
可以参阅图4,图4为本申请实施例提供的一种车辆内的计算机***101的结构示意图。图4所示的计算机***101用于执行本申请实施例所提供的进程间通信方法。计算机***101包括处理器103,处理器103和***总线105耦合。其中,处理器103可以用于实现图2所述的控制器的功能。处理器103可以是一个或者多个处理器,其中每个处理器都可以包括一个或多个处理器核。显示适配器(video adapter)107,显示适配器可以驱动显示器109,显示器109和***总线105耦合。***总线105通过总线桥111和输入输出(I/O)总线113耦合。I/O接口115和I/O总线耦合。I/O接口115和多种I/O设备进行通信,比如输入设备117(如:键盘,鼠标,触摸屏等),多媒体盘(media tray)121,(例如,CD-ROM,多媒体接口等)。收发器123(可以发送和/或接受无线电通信信号),摄像头155(可以捕捉动态数字视频图像)和外部USB端口125。其中,可选地,和I/O接口115相连接的接口可以是USB接口。
其中,处理器103可以是任何传统处理器,包括精简指令集计算(“RISC”)处理器、复杂指令集计算(“CISC”)处理器或上述的组合。可选地,处理器可以是诸如专用集成电路(“ASIC”)的专用装置。可选地,处理器103可以是神经网络处理器或者是神经网络处理器和上述传统处理器的组合。
可选地,在本文所述的各种实施例中,计算机***101可位于远离自动驾驶车辆的地方,并且可与自动驾驶车辆无线通信。在其它方面,本文所述的一些过程在设置在自动驾驶车辆内的处理器上执行,其它由远程处理器执行,包括采取执行单个操纵所需的动作。
计算机***101可以通过网络接口129和软件部署服务器149通信。网络接口129是硬件网络接口,比如,网卡。网络127可以是外部网络,比如因特网,也可以是内部网络,比如以太网或者虚拟私人网络(VPN)。可选地,网络127还尅是无线网络,比如WiFi网络,蜂窝网络等。
硬盘驱动接口和***总线105耦合。硬件驱动接口和硬盘驱动器相连接。***内存135和***总线105耦合。运行在***内存135的数据可以包括计算机101的操作***137和应用程序143。
操作***包括Shell 139和内核(kernel)141。Shell 139是介于使用者和操作***之内核(kernel)间的一个接口。shell是操作***最外面的一层。shell管理使用者与操作***之间的交互:等待使用者的输入,向操作***解释使用者的输入,并且处理各种各样的操作***的输出结果。
内核141由操作***中用于管理存储器、文件、外设和***资源的那些部分组成。直接与硬件交互,操作***内核通常运行进程,并提供进程间的通信,提供CPU时间片管理、中断、内存管理、IO管理等等。
应用程序143包括数据处理相关程序147以及控制汽车自动驾驶相关的程序。其中,数据处理相关程序147用于分别对多个ECU的数据进行管理。计算机***101通过执行数据处理相关程序147,可以实现图2所述的控制器的功能,即对多个ECU的数据进行管理,例如删除某个ECU中所存储的数据。
控制汽车自动驾驶相关的程序例如可以包括管理自动驾驶的汽车和路上障碍物交互的程序,控制自动驾驶汽车路线或者速度的程序,控制自动驾驶汽车和路上其他自动驾驶汽车交互的程序。应用程序143也存在于deploying server 149的***上。
传感器153和计算机***101关联。传感器153用于探测计算机***101周围的环境。举例来说,传感器153可以探测动物,汽车,障碍物和人行横道等,进一步传感器还可以探测上述动物,汽车,障碍物和人行横道等物体周围的环境,比如:动物周围的环境,例如,动物周围出现的其他动物,天气条件,周围环境的光亮度等。
以上介绍了本申请实施例提供的进程间通信方法的应用场景,以下将详细介绍本申请实施例提供的进程间通信方法的执行流程。可以参阅图5,图5为本申请实施例提供的一种进程间通信方法500的流程示意图。如图5所示,该进程间通信方法500包括以下的步骤501-505。
步骤501,获取来自于第一进程的第一指令,所述第一指令用于请求获取共享内存的地址,所述共享内存用于进程间通信。
本实施例中,第一进程可以是需要通过共享内存来实现进程间通信的任意一个进程。并且,第一进程也可以是进程间通信的任意一方。例如,第一进程可以为进程间通信的发送方进程,第一进程需要向接收方进程发送通信数据;第一进程也可以为进程间通信的接收方进程,第一进程需要接收发送方进程所发送的通信数据。
示例性地,在智能驾驶场景中,第一进程可以是传感器进程,负责获取传感器数据并将传感器数据发送给处理进程;第一进程也可以是处理进程,负责接收传感器数据通过共享内存传输的传感器数据,并根据传感器数据执行相应的处理操作。
在处理器为第一进程分配通信用的共享内存之后,处理器可以获取到来自于第一进程的第一指令,所述第一指令用于请求获取共享内存的地址,以便于第一进程往共享内存中写入数据或者读取共享内存中的数据。
可选的,在第一进程生成第一指令之前,第一进程可以请求分配共享内存,并且获得所分配的共享内存的信息。这样,第一进程可以基于所分配的共享内存的信息生成第一指令,以请求获取用于通信的共享内存的地址。
示例性地,假设第一进程需要与第二进程进行通信,处理器可以获取来自于所述第一进程的第四指令,所述第四指令用于请求分配用于进行进程间通信的内存。然后,处理器根据所述第四指令为所述第一进程分配所述共享内存,并向所述第一进程返回所述共享内存的标识。具体地,处理器可以根据所述第四指令在内存中指定一个内存段为共享内存,并为该共享内存分配一个唯一的标识,再将该共享内存的标识返回给第一进程和第二进程。这样,第一进程可以基于处理器所返回的共享内存的标识,生成第一指令,所述第一指令包括所述共享内存的标识,以请求获取所述共享内存的地址。
步骤502,根据所述第一指令向所述第一进程返回第一地址,并将所述第一地址添加至所述第一进程对应的过滤表中,所述第一地址为所述共享内存中的地址,所述过滤表用于存放第一进程能够访问的共享内存的地址。
在获取到来自于第一进程的第一指令之后,处理器则根据所述第一指令获取共享内存中的第一地址,并向所述第一进程返回所述第一地址,以供第一进程使用所述第一地址所对应的内存段来进行进程间通信。其中,所述第一地址可以为一个地址范围,用于指示共享内存中的一个内存段所对应的地址段。所述第一地址对应的内存段即为用于供第一进程进行进程间通信的内存。
示例性地,所述第一地址可以包括起始地址和结束地址,所述起始地址用于表示第一地址对应的内存段的起始地址,所述结束地址用于表示第一对应的内存段的结束地址;所述第一地址也可以是包括起始地址和地址偏移,所述地址偏移用于表示第一地址对应的内存段的起始地址和结束地址之间的地址长度。
此外,处理器在获取到第一地址之后,处理器还将所述第一地址添加至第一进程对应的过滤表中。其中,所述过滤表是由处理器在第一进程需要进行进程间通信时所建立的,所述过滤表用于记录第一进程能够访问的地址,且所述过滤表中所记录的地址均为共享内存中的地址。即,对于过滤表中所记录的地址,第一进程具有访问过滤表中所记录的地址的权限;对于过滤表中没有记录的共享内存的地址,第一进程则不具有访问权限。
一般来说,假设第一进程与第二进程进行进程间通信,处理器为第一进程和第二进程所分配的共享内存通常会分为多个内存段,以供第一进程和第二进程同时访问共享内存中不同的内存段。因此,通过建立过滤表,并在过滤表中添加第一进程所请求的共享内存中的地址,可以记录第一进程具有访问权限的共享内存的地址。
步骤503,获取来自于所述第一进程的第二指令,所述第二指令包括所述第一地址,所述第二指令用于请求使用所述第一地址对应的存储空间。
在第一进程获取到处理器所返回的第一地址之后,第一进程则根据通信需要,生成第二指令。其中,所述第二指令包括所述地址,所述第二指令用于请求使用所述第一地址对应的存储空间,以基于所述第一地址对应的存储空间来实现进程间通信。
具体地,在第一进程为进程间通信的不同角色时,所述第二指令可以是具有不同作用的指令。
示例性地,在第一进程为发送方进程,第二进程为接收方进程的情况下,第一进程需要向第二进程传输数据,因此所述第二指令还包括第一数据,所述第二指令用于指示向所述第一地址对应的存储空间写入所述第一数据,所述第一数据为待传输给第二进程的数据。也就是说,第一进程在获取到第一地址之后,则基于所述第一地址和待传输给第二进程的第一数据,生成第二指令,以请求向共享内存中写入所述第一数据。
示例性地,在第一进程为接收方进程,第二进程为发送方进程的情况下,所述第一进程需要接收第二进程所传输的数据,因此所述第二指令具体用于指示读取所述第一地址对应的存储空间中的第二数据,所述第二数据为第二进程向所述第一进程传输的数据。也就是说,第一进程在获取到第一地址之后,基于第一地址生成用于请求访问第一地址对应的存储空间的第二指令,以读取第二进程通过第一地址对应的存储空间所传输的第二数据。
步骤504,基于所述第二指令中的第一地址为共享内存的地址,触发查询所述过滤表,并根据所述第一地址位于所述过滤表中,执行所述第二指令。
在处理器获取到第二指令之后,处理器可以识别到第二指令中的第一地址为用于进程间通信的共享内存中的地址。因此,为了避免第一进程踩踏到其他进程正在使用的内存段,处理器触发查询所述过滤表,通过判断第二指令中的第一地址是否位于过滤表中来确认第一进程是否具有访问第一地址的权限。
也就是说,在处理器在获取到访问某一个地址的指令并确定该地址为共享内存中的地址时,处理器则触发查询过滤表,以确定该地址是否位于过滤表中。如果该地址位于过滤表中,则代表进程具有访问该地址的权限;如果该地址不位于过滤表中,则代表进程不具有访问该地址的权限。
由于所述第一地址位于所述过滤表中,因此处理器可以确定所述第一进程具有访问所述第一地址的权限,处理器执行来自于所述第一进程的第二指令。
示例性地,在第一进程为发送方进程,第二进程为接收方进程的情况下,所述第二指令中还包括第一数据,处理器根据所述第二指令向所述第一地址对应的存储空间写入所述第一数据,以便于第二进程从所述第一地址对应的存储空间获取第一进程所传输的第一数据。
示例性地,在第一进程为接收方进程,第二进程为发送方进程的情况下,所述处理器根据所述第二指令读取所述第一地址对应的存储空间中的第二数据,并向所述第一进程返回所述第二数据,以使得第一进程能够获取到第二进程所传输的第二数据。
步骤505,在执行所述第二指令后,在所述过滤表中删除所述第一地址。
在处理器执行完所述第二指令之后,处理器已经实现向第一地址对应的存储空间写入第一数据或者读取第一地址对应的存储空间中的第二数据,即第一进程已成功传输第一数据或读取第二数据,第一进程不需要再访问第一地址对应的存储空间。因此,处理器在执行完第二指令之后,将过滤表中的所述第一地址删除,从而使得第一进程不再具有访问第一地址的权限。
示例性地,处理器也可以是获取来自于所述第一进程的第五指令,所述第五指令用于指示所述第一地址对应的存储空间使用完毕。处理器根据所述第五指令,将所述过滤表中的第一地址删除。
这样一来,在过滤表中的第一地址被删除之后,如果第一进程由于bug或者受到攻击的原因而继续请求访问第一地址时,处理器可以根据过滤表中不具有第一地址而拒绝第一进程的请求,从而有效地避免第一进程踩踏其他进程正在使用的第一地址对应的存储空间。
本实施例中,需要基于共享内存进行通信的第一进程通过指令来获取共享内存的地址,并由该指令触发将获取的共享内存的地址加入过滤表中;在第一进程访问共享内存的地址时,触发查询过滤表,以确定第一进程是否具有访问共享内存的权限。并且,在第一进程成功访问共享内存后,在过滤表中释放第一进程的访问权限,从而保证进程不会因为软件错误或受到攻击而踩踏另一个进程正在使用的共享内存。
基于本实施例的方案,能够保证在软件发生错误或受到恶意攻击时,通信中的进程无法访问其他进程正在使用的内存段,从而避免出现共享内存中数据受到破坏而导致***宕机的现象,保证了***的正常运行。
简单来说,基于本实施例中所提供的过滤表过滤机制,处理器能够拒绝访问进程不具有访问权限的共享内存的地址,从而避免进程踩踏其他进程正在使用的共享内存中的内存段。
示例性地,在第一进程出现bug或者受到恶意攻击时,处理器获取来自于所述第一进程的第三指令,所述第三指令包括第二地址,所述第三指令用于请求使用所述第二地址对应的存储空间。其中,所述第二地址为所述共享内存中的地址,所述第二地址与所述第一地址可以为相同的地址,所述第二地址与所述第一地址也可以为不同的地址。并且,所述第二地址并不位于过滤表中。即,处理器可以是并没有触发将第二地址添加至过滤表中;处理器也可以是在第一进程失去访问第二地址的访问权限之后,将第二地址从过滤表中删除。
基于所述第三指令中的第二地址为共享内存的地址,处理器触发查询所述过滤表,并根据所述第二地址不位于所述过滤表中,拒绝执行所述第三指令。
也就是说,在第一进程所请求访问的第二地址属于共享内存中的地址,且所述第二地址不位于所述过滤表时,处理器可以拒绝执行第一进程请求访问第二地址的指令,从而保证第一进程无法使用第二地址对应的存储空间,避免出现第一进程踩踏其他进程正在使用的存储空间的现象。
可选的,在步骤504中,为了使得处理器能够识别到第二指令中的第一地址为共享内存的地址,本实施例通过在页表项中添加标记,来指示属于共享内存中的地址。
由于进程所使用的地址均为虚拟地址,因此通常需要通过查找页表来将虚拟地址转换为内存空间中的物理地址,才能够确定虚拟地址所对应的真实的内存地址。其中,页表是一种特殊的数据结构,放在***空间的页表区,存放虚拟地址与物理地址的对应关系。每一个进程都拥有一个对应的页表。在页表中,一段虚拟地址与其对应的物理地址称为一个页表项。通过在页表项中添加标记,可以指示页表项中的虚拟地址属于共享内存中的地址。
示例性地,可以参阅图6,图6为本申请实施例提供的一种页表项的结构示意图。如图6所示,页表项中包括保留位(reserved),该保留位的长度为10位。此外,页表项中还包括其他的位,分别用于指示页表项中的虚拟地址、物理地址以及物理地址的读写权限等信息。在实际应用中,处理器可以通过将页表项的保留位中的某一位或者多位置位,来实现标记的添加。也就是说,对于某一个虚拟地址来说,如果该虚拟地址的页表项中的保留位的一位或多位被置位,则处理器可以确定该虚拟地址属于共享内存的地址。
具体地,在上述的方法500中,处理器可以在所述第一进程对应的页表项中添加标记,所述标记用于指示所述第一地址为用于进程间通信的共享内存的地址,所述页表项用于指示所述第一地址与所述第一地址对应的物理地址之间的映射关系,所述第一地址为虚拟地址。
其中,处理器可以是在为第一进程分配了所述共享内存之后,则在所述共享内存所包括的所有地址对应的页表项上添加标记,以指示所述共享内存中的地址是用于进程间通信的特定地址。处理器也可以是在获取到来自于第一进程的第一指令后,再在第一地址对应的页表项中添加标记,以指示第一地址是用于进程间通信的特定地址。
在获取到第二指令之后,处理器可以基于所述第二指令中的第一地址查找所述页表项,并根据所述页表项中的标记,确定所述第二指令中的第一地址为共享内存的地址。
也就是说,处理器在获取到一个地址之后,可以查找该地址的页表项,并通过确认该地址的页表项中的保留位是否被置位,来判断该地址是否为共享内存的地址。如果该地址的页表项中的保留位被置位,则处理器可以确定该地址属于共享内存的地址;如果该地址的页表项中的保留位没有被置位,则处理器可以确定该地址不属于共享内存的地址。
可以理解的是,在第一进程与第二进程建立通信时,处理器会为第一进程和第二进程分配通信用的共享内存。在第一进程为发送方进程的情况下,在第一进程需要向第二进程传输数据时,第一进程则向处理器请求共享内存中的一段内存段的地址,以基于所请求的内存段来实现数据的传输。在第一进程为接收方进程的情况下,第一进程则需要向处理器请求共享内存中的一段内存段的地址,以读取第二进程写入至该内存段中的数据。
因此,为了使得处理器在获取到请求获取共享内存中的地址的指令时,处理器能够向进程返回共享内存中空闲的内存段的地址,本实施例中引入了用于记录共享内存使用情况的描述符。通过采用描述符来实时记录共享内存的使用情况,可以使得处理器能够在获取到请求获取共享内存中的地址的指令时,获知共享内存的使用情况,从而向进程返回有效的内存段的地址。
示例性地,在处理器为第一进程分配共享内存之后,第一进程生成的所述第一指令中包括所述共享内存的标识,所述第一指令用于请求获取所述共享内存的地址。处理器可以根据所述第一指令中的所述标识获取所述共享内存对应的描述符。其中,所述描述符可以是处理器在为所述第一进程分配所述共享内存之后建立的,所述描述符用于记录所述共享内存的使用情况。简单来说,处理器每次为需要进行通信的两个进程分配共享内存之后,则为所分配的共享内存建立一个描述符,以记录该共享内存的使用情况。
在获取到所述共享内存对应的描述符之后,处理器可以根据所述描述符的内容确定所述第一地址,并向所述第一进程返回所述第一地址。所述第一地址对应的存储空间为所述共享内存中待写入或待读取的存储空间。
也就是说,在第一进程为发送方进程时,处理器向第一进程返回第一地址,所述第一地址对应的存储空间为所述共享内存中待写入数据的存储空间。在第一进程为接收方进程时,处理器向第一进程返回第一地址,所述第一地址对应的存储空间则为所述共享内存中待读取数据的存储空间。
为了便于理解,以下将结合附图详细介绍描述符所记录的内容。
本实施例中,处理器为第一进程所分配的所述共享内存包括多个内存块,所述多个内存块被组织成用于供进程读写的环形队列。其中,所述共享内存对应的描述符对所述多个内存块中的每个内存块的状态进行记录与管理。具体地,所述描述符包括写入指针和读取指针,所述写入指针用于指示所述多个内存块中待写入的内存块在所述环形队列中的位置,所述读取指针用于指示所述多个内存块中待读取的内存块在所述环形队列中的位置。基于所述描述符中的写入指针以及读取指针,处理器可以快速确定用于供写入数据的内存块的地址以及用于供读取数据的内存块的地址。
示例性地,可以参阅图7,图7为本申请实施例提供的一种描述符的结构示意图。如图7所示,处理器所分配的共享内存被分为16个内存块,该16个内存块分别为内存块0-内存块15。并且,该16个内存块被组织成环形队列,以供进程循环地写入数据或读取数据。
该共享内存对应的描述符中包括内存块大小、内存块数量、发送方虚拟地址、接收方虚拟地址、写入指针以及读取指针等内容。其中,共享内存所划分的16个内存块的大小是一样的,描述符中所记录的内存块大小例如可以为4千字节(Kilobyte,kB)。内存块数量则指示描述符对应的共享内存中所划分的内存块的数量,例如16。发送方虚拟地址与写入指针对应,写入指针指示了当前待写入数据的内存块在环形队列中的位置,发送方虚拟地址则指示了该待写入数据的内存块的地址,即发送方虚拟地址指示了处理器需要向发送方进程返回的虚拟地址。接收方虚拟地址与读取指针对应,读取指针指示了当前待读取数据的内存块在环形队列中的位置,接收方虚拟地址则指示了该待读取数据的内存块的地址,即读取方虚拟地址指示了处理器需要向读取方进程返回的虚拟地址。
例如,在图7中,写入指针指向了内存块3所在的位置,即指示了环形队列中当前待写入数据的内存块为内存块3;当发送方进程请求获取共享内存的地址时,处理器则可以向发送方进行返回内存块3的虚拟地址。此外,读取指针指向了内存块0所在的位置,即指示了环形队列中当前待读取数据的内存块为内存块0。
通过将共享内存中的多个内存块组织成环形队列,采用描述符记录环形队列中的内存块的状态,可以使得通信中的双方进程能够异步工作,即发送方进程和接收方进程同时访问共享内存中不同的内存块。
例如,发送方进程可以先依次往内存块0、内存块1和内存块2中写入需要传输给接收方进程的数据。然后,在发送方进程往内存块3写入数据的同时,接收方进程可以访问内存块0,以获取发送方进程写入至内存块0中的数据。这样,发送方进程按照环形队列中内存块的顺序依次写入数据,接收方进程则同样按照环形队列中内存块的顺序依次读取数据,从而实现发送方进程和接收方进程异步工作,提高通信的效率。此外,由于共享内存中的多个内存块被组织成环形队列,发送方进程可以循环地在环形队列中写入数据,从而实现共享内存的循环利用,节省通信开销。
可选的,在处理器执行完进程请求写入数据或读取数据的指令之后,处理器可以是更新描述符中的写入指针或读取指针,以便于在进程请求共享内存的地址时处理器能够向进程返回有效的地址。
示例性地,在第一进程为发送方进程的情况下,处理器在执行请求写入数据的所述第二指令后,更新所述描述符中的所述写入指针,以更新所述多个内存块中待写入的内存块在所述环形队列中的位置。同时,在写入指针更新的情况下,与写入指针对应的发送方虚拟地址也相应地进行更新。
在第一进程为接收方进程的情况下,处理器在执行请求读取数据的所述第二指令后,更新所述描述符中的所述读取指针,以更新所述多个内存块中待读取的内存块在所述环形队列中的位置。同时,在读取指针更新的情况下,与读取指针对应的接收方虚拟地址也相应地进行更新。
以图7为例,发送方进程请求获取共享内存的地址,处理器根据描述符的内容向发送方进程返回内存块3的地址;然后,处理器获取到来自于发送方进程的数据写入指令,并根据该数据写入指令向内存块3中写入数据。在处理器执行完该数据写入指令之后,处理器则更新描述符中的写入指针,将写入指针指向内存块4所在的位置,即指示了环形队列中当前待写入数据的内存块为内存块4。
又例如,接收方进程请求获取共享内存的地址,处理器根据描述符的内容向接收方进程返回内存块0的地址;然后,处理器获取到来自于接收方进程的数据读取指令,并根据该数据读取指令读取内存块0中的数据。在处理器执行完该数据读取指令之后,处理器则更新描述符中的读取指针,将读取指针指向内存块1所在的位置,即指示了环形队列中当前待读取数据的内存块为内存块1。
这样一来,处理器通过在进程请求共享内存的地址时,根据描述符中的写入指针或读取指针返回相应的地址,并且在执行完数据写入指令或数据读取指令之后,更新描述符中的写入指针或读取指针,则能够保证进程有序地在环形队列的多个内存块中写入数据或读取数据。
可选的,由于一个进程可能同时与多个其他的进程建立通信,因此该进程被分配有多个不同的共享内存,且每个共享内存均有对应的描述符。因此,为了便于对同一个进程对应的多个描述符进行管理,本实施例可以通过描述符表来存放同一个进程所对应的多个描述符的地址。
示例性地,在第一进程第一次与其他进程建立通信时,处理器可以为第一进程生成描述符表。这样,在第一进程与任意一个进程建立通信时,处理器则将第一进程与该进程对应的共享内存的描述符的地址添加至描述符表中。此外,描述符表中还可以包括描述符与共享内存的标识之间的对应关系,以便于后续处理器能够根据共享内存的标识确定相应的描述符。
例如,在处理器获取到来自于第一进程的第四指令时,处理器则根据所述第四指令生成所述共享内存对应的描述符,并将所述描述符的地址添加至所述第一进程对应的描述符表中。其中,用于请求分配用于进行进程间通信的内存。在处理器根据第四指令为第一进程分配共享内存之后,处理器还可以将该共享内存的标识添加至描述符表中,以建立所述描述符的地址与所述共享内存的标识之间的对应关系。
在处理器获取到包括有共享内存的标识的第一指令时,处理器可以根据所述第一指令中的标识,在第一进程对应的描述符表中获取所述标识对应的描述符的地址,所述描述符表用于存储所述第一进程对应的一个或多个描述符的地址。然后,处理器根据所述描述符的地址获取所述描述符。
例如,在第一进程对应的描述符表中包括4个描述符,分别为描述符0、描述符1、描述符2和描述符3;其中,描述符0、描述符1、描述符2和描述符3对应的共享内存的标识分别为标识0、标识1、标识2和标识3。那么,在处理器从第一进程获取到包括标识2的第一指令时,处理器则可以根据标识2在描述符表中确定描述符2的地址,从而获取到描述符2。
以上详细介绍了通过将进程所请求的共享内存的地址加入过滤表,并在进程访问完共享内存后在过滤表中删除该共享内存的地址来实现对进程的访问控制。为了便于理解,以下将从发送方进程和接收方进程的角度,详细介绍如何通过指令来触发将共享内存的地址加入过滤表以及从过滤表中删除共享内存的地址。
本实施例中,通过在进程通信的过程中引入了新的四条指令来支持进程间的通信,并使得进程访问共享内存的行为能够得到控制,保证通信中的进程无法访问其他进程正在使用的内存段,从而避免出现共享内存中数据受到破坏而导致***宕机的现象。
可以参阅图8,图8为本申请实施例提供的一种进程间通信方法800的流程示意图。如图8所示,该进程间通信方法800包括以下的步骤801-806。
步骤801,发送方进程生成请求(Acquire)指令。
在处理器为发送方进程和接收方进程分配了共享内存之后,发送方进程生成Acquire指令,以请求获取共享内存的地址。
在处理器获取到Acquire指令之后,处理器则向发送方进程返回共享内存中空闲的内存块的地址,并将该内存块的地址添加至发送方进程对应的过滤表中。也就是说,通过由发送方进程生成Acquire指令,来触发将发送方要访问的内存块的地址加入过滤表中,从而赋予发送方进程访问该内存块的地址的权限。
其中,在上述实施例中的第一进程为发送方进程的情况下,Acquire指令例如可以为上述实施例所述的第一指令。
步骤802,发送方进程生成数据写入指令。
在获取到处理器所返回的内存块的地址之后,发送方进程则生成包括该内存块的地址的数据写入指令,以指示向该内存块写入待传输给接收方进程的数据。
在处理器获取到数据写入指令之后,处理器根据数据写入指令中的地址为共享内存的地址,触发查询过滤表。并且,处理器根据数据写入指令中的地址位于过滤表中,执行该数据写入指令,从而将数据写入至内存块中。
其中,在上述实施例中的第一进程为发送方进程的情况下,数据写入指令例如可以为上述实施例所述的第二指令。
步骤803,发送方进程生成推进(Push)指令。
在数据写入指令执行完毕之后,发送方进程所传输的数据成功写入至共享内存的内存块中,因此发送方进程生成Push指令,以指示撤销发送方进程对该内存块的访问权限。
处理器根据Push指令,将发送方进程对应的过滤表中的所述内存块的地址删除,从而撤销发送方进程对该内存块的访问权限。
其中,在上述实施例中的第一进程为发送方进程的情况下,Push指令例如可以为上述实施例所述的第五指令。
步骤804,接收方进程生成弹出(Pop)指令。
在发送方进程将数据写入至共享内存的内存块之后,接收方进程生成Pop指令,以请求获取共享内存的地址。
在处理器获取到Pop指令之后,处理器则向接收方进程返回共享内存中已写入数据的内存块的地址,并将该内存块的地址添加至接收方进程对应的过滤表中。也就是说,通过由接收方进程生成Pop指令,来触发将接收方要访问的内存块的地址加入过滤表中,从而赋予接收方进程访问该内存块的地址的权限。
其中,在上述实施例中的第一进程为接收方进程的情况下,Pop指令例如可以为上述实施例所述的第一指令。
步骤805,接收方进程生成数据读取指令。
在获取到处理器所返回的内存块的地址之后,接收方进程则生成包括该内存块的地址的数据读取指令,以指示向读取该内存块中由发送方进程所写入的数据。
在处理器获取到数据读取指令之后,处理器根据数据读取指令中的地址为共享内存的地址,触发查询过滤表。并且,处理器根据数据读取指令中的地址位于过滤表中,执行该数据读取指令,从而读取内存块中的数据并将所读取的数据返回给接收方进程。
其中,在上述实施例中的第一进程为接收方进程的情况下,数据读取指令例如可以为上述实施例所述的第二指令。
步骤806,接收方进程生成释放(Release)指令。
在数据读取指令执行完毕之后,接收方进程成功读取共享内存的内存块中的数据,因此接收方进程生成Release指令,以指示撤销接收方进程对该内存块的访问权限。
处理器根据Release指令,将接收方进程对应的过滤表中的所述内存块的地址删除,从而撤销接收方进程对该内存块的访问权限。
其中,在上述实施例中的第一进程为接收方进程的情况下,Release指令例如可以为上述实施例所述的第五指令。
总的来说,对于发送方进程,本实施例中通过Acquire指令来赋予发送方进程访问共享内存中内存块的权限,并通过Push指令来撤销发送方进程的访问权限。对于接收方进程,本实施例中通过Pop指令来赋予接收方进程访问共享内存中内存块的权限,并通过Release指令来撤销接收方进程的访问权限。
可以参阅图9,图9为本申请实施例提供的一种共享内存中的内存块的状态变化示意图。如图9所示,对于共享内存中的内存块,在数据未写入的情况下,内存块的状态为空闲(Free)状态。
在发送方进程生成Acquire指令之后,表示发送方进程要往内存块中写入数据,因此内存块的状态变化为发送活跃(TxActive)状态。
在发送方进程生成Push指令时,表示发送方进程已经成功将数据写入内存块,内存块中存储了发送方进程需要传输给接收方进程的数据,因此内存块的状态变化为忙碌(Busy)状态。
在接收方进程生成Pop指令时,表示接收方进程要读取内存块中的数据,因此内存块的状态变化为接收活跃(RxActive)状态。
在接收方进程生成Release指令时,表示接收方进程已经成功读取内存块中的数据,内存块中所存储的数据已经成功传输给接收方进程,因此内存块的状态变化为空闲(Free)状态。
也就是说,在内存块的状态再次变化为空闲状态之后,发送方进程可以继续往内存块中写入待传输的数据,并由接收方进程读取内存块中的数据,以此循环,实现进程间的通信。
为了便于理解,以下将结合具体例子详细介绍本申请实施例提供的进程间通信方法。
可以参阅图10,图10为本申请实施例提供的一种进程间通信的***架构示意图。
在硬件设置上,用于处理进程的处理器上包括两个寄存器以及内存管理单元(Memory Management Unit,MMU),且MMU中包括过滤器。
处理器中的一个寄存器用于存储描述符表在内存中的地址,处理器可以基于该寄存器的值获取到存储于内存中的描述符表;另一个寄存器则用于存储过滤表在内存中的地址,处理器可以基于该寄存器的值获取到存储于内存中的过滤表。
MMU是负责处理处理器的内存访问请求的计算机硬件。MMU的功能主要包括虚拟地址到物理地址的转换,即将进程请求访问的虚拟地址转换为内存中的物理地址。MMU中的过滤器则用于在获取到来自于进程的共享内存访问请求时,根据过滤表中的地址来确定进程是否具有访问共享内存中的地址的权限。如果进程具有访问共享内存中的地址的权限,则执行该进程的共享内存访问请求;如果进程不具有访问共享内存中的地址的权限,则拒绝执行该进程的共享内存访问请求,并上报异常。
在内存中,存储有每个进程对应的描述符表、过滤表以及描述符,并分配有供进程通信用的共享内存。其中,每个进程对应有一个描述符表,该描述符表用于存储该进程对应的所有描述符的地址;每个进程可以建立有一个或多个通信,每个通信均有对应的描述符,即每个进程对应有一个或多个描述符。并且,通信中的两个进程对应于同一个描述符。每个进程还对应有一个过滤表,该过滤表记录了该进程能够访问的共享内存的地址。
示例性地,可以参阅图11A,图11A为本申请实施例提供的一种描述符表的结构示意图。如图11A所示,描述符表寄存器1中存储了进程A的描述符表的地址,处理器基于描述符表寄存器1的值可以获取到进程A的描述符表。描述符表寄存器2中存储了进程B的描述符表的地址,处理器基于描述符表寄存器2的值可以获取到进程B的描述符表。
在进程A的描述符表中,记录了进程A对应的多个描述符的地址。并且,在进程A对应的多个描述符中,进程可以是作为通信中的发送方进程,也可以是作为通信中的接收方进程。例如,在进程A的描述符表中第0个描述符地址指示了进程A与进程B之间的通信所对应的描述符。
在进程B的描述符表中,同样记录了进程B对应的多个描述符的地址。并且,在进程B对应的多个描述符中,进程可以是作为通信中的发送方进程,也可以是作为通信中的接收方进程。例如,在进程B的描述符表中第2个描述符地址指示了进程A与进程B之间的通信所对应的描述符。
可以参阅图11B,图11B为本申请实施例提供的一种描述符的结构示意图。如图11A所示,过滤表中记录了多个虚拟地址,例如虚拟地址1、虚拟地址2和虚拟地址3。其中,每个虚拟地址均指示了一个虚拟地址的空间范围,即指示了一段内存段所对应的地址范围。
具体地,以下将介绍智能驾驶场景下的***架构。可以参阅图12,图12为本申请实施例提供的一种智能驾驶场景下的***架构示意图。
如图12所示,智能驾驶场景的***架构包括发送方处理器、接收方处理器和物理内存。其中,发送方处理器是指运行发送方进程的处理器,接收方处理器是指运行接收方进程的处理器。
在发送方处理器中,包括MMU1、寄存器1和寄存器2。MMU1负责将来自于发送方进程的数据写入请求中的虚拟地址转换为物理地址。寄存器1中存储了发送方进程对应的描述符表1在物理内存中的地址。寄存器2中存储了发送方进程对应的过滤表1在物理内存中的地址。
在接收方处理器中,包括MMU2、寄存器3和寄存器4。MMU2负责将来自于接收方进程的数据读取请求中的虚拟地址转换为物理地址。寄存器3中存储了接收方进程对应的描述符表2在物理内存中的地址。寄存器4中存储了接收方进程对应的过滤表2在物理内存中的地址。
在物理内存中,分别存储了发送方进程对应的描述符表1和过滤表1,接收方进程对应的描述符表2和过滤表2,以及发送方进程和接收方进程共同对应的共享内存和描述符。其中,描述符表1和描述符表2中均指示了描述符的地址。描述符中则记录了共享内存中的多个内存块的使用情况。
可以参阅图13,图13为本申请实施例提供的一种进程间通信方法1300的流程示意图。如图13所示,该进程间通信方法1300包括以下的步骤1301-1316。
步骤1301,发送方处理器获取来自于发送方进程的Acquire指令。
在发送方处理器为发送方进程分配共享内存之后,发送方处理器将共享内存的标识存放于源寄存器1中。发送方进程可以基于源寄存器1中的共享内存的标识生成Acquire指令。该Acquire指令中包括共享内存的标识,该Acquire指令用于请求获取共享内存中的地址。
步骤1302,发送方处理器向发送方进程返回共享内存中目标内存块的地址。
发送方处理器根据描述符表寄存器获取到描述符表的物理地址,从而获取到发送方进程对应的描述符表。然后,发送方进程根据Acquire指令中共享内存的标识,确定描述符表中相应的描述符的地址,以获取到发送方进程对应的描述符。发送方进程再根据描述符中的写入指针确定目标内存块的地址,并将目标内存块的地址存放于目标寄存器中,以实现向发送方进程返回共享内存中目标内存块的地址。其中,该目标内存块即为共享内存中待写入数据的内存块。
步骤1303,发送方处理器将目标内存块的地址添加至过滤表1中。
发送方处理器根据过滤表寄存器获取到过滤表1的物理地址,从而获取到发送方进程对应的过滤表1。然后,发送方处理器将目标内存块的地址添加至过滤表1中。
步骤1304,发送方处理器获取来自于发送方进程的数据写入指令,该数据写入指令中包括目标内存块的地址以及待写入的数据。
步骤1305,发送方处理器根据数据写入指令中的地址为共享内存的地址,触发查询过滤表1,并且确认数据写入指令中的地址位于过滤表1中。
由于在发送方处理器为发送方进程分配共享内存时,发送方处理器将发送方进程中共享内存的地址所对应的页表项中的保留位置位,以指示共享内存的地址是专门用于进程间通信的。因此,发送方处理器根据数据写入指令中的地址对应的页表项被置位,即可确定数据写入指令中的地址为共享内存的地址,从而触发查询过滤表1。并且,发送方处理器可以确认数据写入指令中的地址位于过滤表1中。
步骤1306,发送方处理器执行数据写入指令,向共享内存中的目标内存块写入数据。
步骤1307,发送方处理器获取来自于发送方进程的Push指令。
在数据写入指令执行完毕之后,发送方进程所传输的数据成功写入至共享内存的内存块中,因此发送方进程生成Push指令,以指示撤销发送方进程对目标内存块的访问权限。
步骤1308,发送方处理器删除过滤表1中的目标内存块的地址。
此外,发送方处理器更新描述符中的写入指针,以使得写入指针指向目标内存块的下一个内存块。
步骤1309,接收方处理器获取来自于接收方进程的Pop指令。
在为发送方进程和接收方进程分配共享内存之后,接收方处理器将共享内存的标识存放于源寄存器2中。接收方进程可以基于源寄存器2中的共享内存的标识生成Pop指令。该Pop指令中包括共享内存的标识,该Pop指令用于请求获取共享内存中的地址。
步骤1310,接收方处理器向接收方进程返回共享内存中目标内存块的地址。
接收方处理器根据描述符表寄存器获取到描述符表的物理地址,从而获取到接收方进程对应的描述符表。然后,接收方进程根据Pop指令中共享内存的标识,确定描述符表中相应的描述符的地址,以获取到接收方进程对应的描述符。接收方进程再根据描述符中的读取指针确定目标内存块的地址,并将目标内存块的地址存放于目标寄存器中,以实现向接收方进程返回共享内存中目标内存块的地址。其中,该目标内存块即为共享内存中待读取数据的内存块。
步骤1311,接收方处理器将目标内存块的地址添加至过滤表2中。
接收方处理器根据过滤表寄存器获取到过滤表2的物理地址,从而获取到接收方进程对应的过滤表2。然后,接收方处理器将目标内存块的地址添加至过滤表2中。
步骤1312,接收方处理器获取来自于接收方进程的数据读取指令,该数据写入指令中包括目标内存块的地址。
步骤1313,接收方处理器根据数据读取指令中的地址为共享内存的地址,触发查询过滤表2,并且确认数据读取指令中的地址位于过滤表2中。
由于在接收方处理器为接收方进程分配共享内存时,接收方处理器将接收方进程中共享内存的地址所对应的页表项中的保留位置位,以指示共享内存的地址是专门用于进程间通信的。因此,接收方处理器根据数据写入指令中的地址对应的页表项被置位,即可确定数据读取指令中的地址为共享内存的地址,从而触发查询过滤表2。并且,接收方处理器可以确认数据读取指令中的地址位于过滤表2中。
步骤1314,接收方处理器执行数据读取指令,读取共享内存中的目标内存块中的数据。
步骤1315,接收方处理器获取来自于接收方进程的Release指令。
在数据读取指令执行完毕之后,接收方进程已经成功读取共享内存的内存块中的数据,因此接收方进程生成Push指令,以指示撤销接收方进程对目标内存块的访问权限。
步骤1316,接收方处理器删除过滤表2中的目标内存块的地址。
此外,接收方处理器更新描述符中的读取指针,以使得读取指针指向目标内存块的下一个内存块。
在图1至图13所对应的实施例的基础上,为了更好的实施本申请实施例的上述方案,下面还提供用于实施上述方案的相关设备。
具体可以参阅图14,图14为本申请实施例提供的一种电子设备1400的结构示意图,该电子设备1400包括:获取单元1401、处理单元1402和发送单元1403;所述获取单元1401,用于获取来自于第一进程的第一指令,所述第一指令用于请求获取共享内存的地址,所述共享内存用于进程间通信;所述发送单元1403,用于根据所述第一指令向所述第一进程返回第一地址,并将所述第一地址添加至所述第一进程对应的过滤表中,所述第一地址为所述共享内存中的地址,所述过滤表用于存放第一进程能够访问的共享内存的地址;所述获取单元1401,还用于获取来自于所述第一进程的第二指令,所述第二指令包括所述第一地址,所述第二指令用于请求使用所述第一地址对应的存储空间;所述处理单元1402,用于基于所述第二指令中的第一地址为共享内存的地址,触发查询所述过滤表,并根据所述第一地址位于所述过滤表中,执行所述第二指令;所述处理单元1402,还用于在执行所述第二指令后,在所述过滤表中删除所述第一地址。
在一种可能的实现方式中,所述第二指令还包括第一数据,所述第二指令用于指示向所述第一地址对应的存储空间写入所述第一数据,所述第一数据为待传输给第二进程的数据;所述处理单元1402,具体用于向所述第一地址对应的存储空间写入所述第一数据。
在一种可能的实现方式中,所述第二指令用于指示读取所述第一地址对应的存储空间中的第二数据,所述第二数据为第二进程向所述第一进程传输的数据;所述处理单元1402,具体用于读取所述第一地址对应的存储空间中的第二数据,并向所述第一进程返回所述第二数据。
在一种可能的实现方式中,所述获取单元1401,还用于获取来自于所述第一进程的第三指令,所述第三指令包括第二地址,所述第三指令用于请求使用所述第二地址对应的存储空间,所述第二地址为所述共享内存中的地址;所述处理单元1402,具体用于基于所述第三指令中的第二地址为共享内存的地址,触发查询所述过滤表,并根据所述第二地址不位于所述过滤表中,拒绝执行所述第三指令。
在一种可能的实现方式中,所述处理单元1402,还用于在所述第一进程对应的页表项中添加标记,所述标记用于指示所述第一地址为用于进程间通信的地址,所述页表项用于指示所述第一地址与所述第一地址对应的物理地址之间的映射关系,所述第一地址为虚拟地址;所述处理单元1402,具体用于:基于所述第二指令中的第一地址查找所述页表项;根据所述页表项中的标记,确定所述第二指令中的第一地址为共享内存的地址。
在一种可能的实现方式中,所述第一指令包括所述共享内存的标识;所述处理单元1402,具体用于根据所述标识获取描述符,所述描述符用于记录所述共享内存的使用情况;所述发送单元1403,具体用于根据所述描述符确定所述第一地址,并向所述第一进程返回所述第一地址,所述第一地址对应的存储空间为所述共享内存中待写入或待读取的存储空间。
在一种可能的实现方式中,所述处理单元1402,具体用于:根据所述标识,在第一进程对应的描述符表中获取所述标识对应的描述符的地址,所述描述符表用于存储所述第一进程对应的一个或多个描述符的地址;根据所述描述符的地址获取所述描述符。
在一种可能的实现方式中,所述共享内存包括多个内存块,所述多个内存块构成用于供进程读写的环形队列;所述描述符包括写入指针和读取指针,所述写入指针用于指示所述多个内存块中待写入的内存块在所述环形队列中的位置,所述读取指针用于指示所述多个内存块中待读取的内存块在所述环形队列中的位置。
在一种可能的实现方式中,所述处理单元1402,具体用于:在执行所述第二指令后,更新所述描述符中的所述写入指针,以更新所述多个内存块中待写入的内存块在所述环形队列中的位置;或,在执行所述第二指令后,更新所述描述符中的所述读取指针,以更新所述多个内存块中待读取的内存块在所述环形队列中的位置。
在一种可能的实现方式中,所述获取单元1401,还用于获取来自于所述第一进程的第四指令,所述第四指令用于请求分配用于进行进程间通信的内存;所述处理单元1402,还用于根据所述第四指令为所述第一进程分配所述共享内存,并向所述第一进程返回所述共享内存的标识。
在一种可能的实现方式中,所述处理单元1402,还用于根据所述第四指令生成所述共享内存对应的描述符,并将所述描述符的地址添加至所述第一进程对应的描述符表中。
在一种可能的实现方式中,所述获取单元1401,还用于获取来自于所述第一进程的第五指令,所述第五指令用于指示所述第一地址对应的存储空间使用完毕;所述处理单元1402,还用于根据所述第五指令,将所述过滤表中的第一地址删除。
本申请实施例提供的进程间通信方法具体可以由电子设备中的芯片来执行,该芯片包括:处理单元和通信单元,处理单元例如可以是处理器,通信单元例如可以是输入/输出接口、管脚或电路等。该处理单元可执行存储单元存储的计算机执行指令,以使电子设备内的芯片执行上述图1至图13所示实施例描述的进程间通信方法。可选的,存储单元为芯片内的存储单元,如寄存器、缓存等,存储单元还可以是无线接入设备端内的位于芯片外部的存储单元,如只读存储器(read-only memory,ROM)或可存储静态信息和指令的其他类型的静态存储设备,随机存取存储器(random access memory,RAM)等。
可以参阅图15,本申请还提供了一种计算机可读存储介质,在一些实施例中,上述图5所公开的方法可以实施为以机器可读格式被编码在计算机可读存储介质上或者被编码在其它非瞬时性介质或者制品上的计算机程序指令。
图15示意性地示出根据这里展示的至少一些实施例而布置的示例计算机可读存储介质的概念性局部视图,示例计算机可读存储介质包括用于在计算设备上执行计算机进程的计算机程序。
在一个实施例中,计算机可读存储介质1500是使用信号承载介质1501来提供的。信号承载介质1501可以包括一个或多个程序指令1502,其当被一个或多个处理器运行时可以提供以上针对图5描述的功能或者部分功能。因此,例如,参考图5中所示的实施例,步骤501-505的一个或多个特征可以由与信号承载介质1501相关联的一个或多个指令来承担。此外,图15中的程序指令1502也描述示例指令。
在一些示例中,信号承载介质1501可以包含计算机可读介质1503,诸如但不限于,硬盘驱动器、紧密盘(CD)、数字视频光盘(DVD)、数字磁带、存储器、ROM或RAM等等。
在一些实施方式中,信号承载介质1501可以包含计算机可记录介质1504,诸如但不限于,存储器、读/写(R/W)CD、R/W DVD、等等。在一些实施方式中,信号承载介质1501可以包含通信介质1505,诸如但不限于,数字和/或模拟通信介质(例如,光纤电缆、波导、有线通信链路、无线通信链路、等等)。因此,例如,信号承载介质1501可以由无线形式的通信介质1505(例如,遵守IEEE 802.15标准或者其它传输协议的无线通信介质)来传达。
一个或多个程序指令1502可以是,例如,计算机可执行指令或者逻辑实施指令。在一些示例中,计算设备的计算设备可以被配置为,响应于通过计算机可读介质1503、计算机可记录介质1504、和/或通信介质1505中的一个或多个传达到计算设备的程序指令1502,提供各种操作、功能、或者动作。
应该理解,这里描述的布置仅仅是用于示例的目的。因而,本领域技术人员将理解,其它布置和其它元素(例如,机器、接口、功能、顺序、和功能组等等)能够被取而代之地使用,并且一些元素可以根据所期望的结果而一并省略。另外,所描述的元素中的许多是可以被实现为离散的或者分布式的组件的、或者以任何适当的组合和位置来结合其它组件实施的功能实体。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的***,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的***,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器、随机存取存储器、磁碟或者光盘等各种可以存储程序代码的介质。

Claims (15)

1.一种进程间通信方法,其特征在于,包括:
获取来自于第一进程的第一指令,所述第一指令用于请求获取共享内存的地址,所述共享内存用于进程间通信;
根据所述第一指令向所述第一进程返回第一地址,并将所述第一地址添加至所述第一进程对应的过滤表中,所述第一地址为所述共享内存中的地址,所述过滤表用于存放第一进程能够访问的共享内存的地址;
获取来自于所述第一进程的第二指令,所述第二指令包括所述第一地址,所述第二指令用于请求使用所述第一地址对应的存储空间;
基于所述第二指令中的第一地址为共享内存的地址,触发查询所述过滤表,并根据所述第一地址位于所述过滤表中,执行所述第二指令;
在执行所述第二指令后,在所述过滤表中删除所述第一地址。
2.根据权利要求1所述的方法,其特征在于,所述第二指令还包括第一数据,所述第二指令用于指示向所述第一地址对应的存储空间写入所述第一数据,所述第一数据为待传输给第二进程的数据;
所述执行所述第二指令,包括:
向所述第一地址对应的存储空间写入所述第一数据。
3.根据权利要求1所述的方法,其特征在于,所述第二指令用于指示读取所述第一地址对应的存储空间中的第二数据,所述第二数据为第二进程向所述第一进程传输的数据;
所述执行所述第二指令,包括:
读取所述第一地址对应的存储空间中的第二数据,并向所述第一进程返回所述第二数据。
4.根据权利要求1-3任意一项所述的方法,其特征在于,所述方法还包括:
获取来自于所述第一进程的第三指令,所述第三指令包括第二地址,所述第三指令用于请求使用所述第二地址对应的存储空间,所述第二地址为所述共享内存中的地址;
基于所述第三指令中的第二地址为共享内存的地址,触发查询所述过滤表,并根据所述第二地址不位于所述过滤表中,拒绝执行所述第三指令。
5.根据权利要求1-4任意一项所述的方法,其特征在于,所述方法还包括:
在所述第一进程对应的页表项中添加标记,所述标记用于指示所述第一地址为用于进程间通信的地址,所述页表项用于指示所述第一地址与所述第一地址对应的物理地址之间的映射关系,所述第一地址为虚拟地址;
所述基于所述第二指令中的第一地址为共享内存的地址,包括:
基于所述第二指令中的第一地址查找所述页表项;
根据所述页表项中的标记,确定所述第二指令中的第一地址为共享内存的地址。
6.根据权利要求1-5任意一项所述的方法,其特征在于,所述第一指令包括所述共享内存的标识;
所述根据所述第一指令向所述第一进程返回第一地址,包括:
根据所述标识获取描述符,所述描述符用于记录所述共享内存的使用情况;
根据所述描述符确定所述第一地址,并向所述第一进程返回所述第一地址,所述第一地址对应的存储空间为所述共享内存中待写入或待读取的存储空间。
7.根据权利要求6所述的方法,其特征在于,所述根据所述标识获取描述符,包括:
根据所述标识,在第一进程对应的描述符表中获取所述标识对应的描述符的地址,所述描述符表用于存储所述第一进程对应的一个或多个描述符的地址;
根据所述描述符的地址获取所述描述符。
8.根据权利要求6或7所述的方法,其特征在于,所述共享内存包括多个内存块,所述多个内存块构成用于供进程读写的环形队列;
所述描述符包括写入指针和读取指针,所述写入指针用于指示所述多个内存块中待写入的内存块在所述环形队列中的位置,所述读取指针用于指示所述多个内存块中待读取的内存块在所述环形队列中的位置。
9.根据权利要求8所述的方法,其特征在于,所述方法还包括:
在执行所述第二指令后,更新所述描述符中的所述写入指针,以更新所述多个内存块中待写入的内存块在所述环形队列中的位置;
或,在执行所述第二指令后,更新所述描述符中的所述读取指针,以更新所述多个内存块中待读取的内存块在所述环形队列中的位置。
10.根据权利要求6-9任意一项所述的方法,其特征在于,所述方法还包括:
获取来自于所述第一进程的第四指令,所述第四指令用于请求分配用于进行进程间通信的内存;
根据所述第四指令为所述第一进程分配所述共享内存,并向所述第一进程返回所述共享内存的标识。
11.根据权利要求10所述的方法,其特征在于,所述方法还包括:根据所述第四指令生成所述共享内存对应的描述符,并将所述描述符的地址添加至所述第一进程对应的描述符表中。
12.根据权利要求1-11任意一项所述的方法,其特征在于,所述在执行所述第二指令后,在所述过滤表中删除所述第一地址,包括:
获取来自于所述第一进程的第五指令,所述第五指令用于指示所述第一地址对应的存储空间使用完毕;
根据所述第五指令,将所述过滤表中的第一地址删除。
13.一种电子设备,其特征在于,包括存储器和处理器;所述存储器存储有代码,所述处理器被配置为执行所述代码,当所述代码被执行时,所述电子设备执行如权利要求1至12任一项所述的方法。
14.一种计算机可读存储介质,其特征在于,包括计算机可读指令,当所述计算机可读指令在计算机上运行时,使得所述计算机执行如权利要求1至12中任一项所述的方法。
15.一种计算机程序产品,其特征在于,包括计算机可读指令,当所述计算机可读指令在计算机上运行时,使得所述计算机执行如权利要求1至12任一项所述的方法。
CN202111155635.5A 2021-09-29 2021-09-29 一种进程间通信方法及相关装置 Pending CN115878343A (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN202111155635.5A CN115878343A (zh) 2021-09-29 2021-09-29 一种进程间通信方法及相关装置
PCT/CN2022/122061 WO2023051591A1 (zh) 2021-09-29 2022-09-28 一种进程间通信方法及相关装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111155635.5A CN115878343A (zh) 2021-09-29 2021-09-29 一种进程间通信方法及相关装置

Publications (1)

Publication Number Publication Date
CN115878343A true CN115878343A (zh) 2023-03-31

Family

ID=85756534

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111155635.5A Pending CN115878343A (zh) 2021-09-29 2021-09-29 一种进程间通信方法及相关装置

Country Status (2)

Country Link
CN (1) CN115878343A (zh)
WO (1) WO2023051591A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN118113495A (zh) * 2024-04-29 2024-05-31 山东乾云启创信息科技股份有限公司 一种安全的基于共享内存的进程间数据识别方法及***

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116107762A (zh) * 2023-04-11 2023-05-12 远江盛邦(北京)网络安全科技股份有限公司 内存分配方法、装置、电子设备和存储介质
CN116233520B (zh) * 2023-05-06 2023-07-25 海马云(天津)信息技术有限公司 传递和获取视频数据的方法及装置、服务器设备和存储介质
CN117762658A (zh) * 2024-01-03 2024-03-26 北京火山引擎科技有限公司 进程间数据传输方法、装置、电子设备及存储介质

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107704325B (zh) * 2016-08-08 2021-08-27 北京百度网讯科技有限公司 用于进程间传输消息的方法和装置
CN110858162B (zh) * 2018-08-24 2022-09-23 华为技术有限公司 内存管理方法及装置、服务器
US20200364100A1 (en) * 2019-05-14 2020-11-19 Microsoft Technology Licensing, Llc Memory abstraction for lock-free inter-process communication
CN112035272A (zh) * 2019-06-03 2020-12-04 华为技术有限公司 进程间通信的方法、装置以及计算机设备
CN111914284B (zh) * 2020-09-30 2021-03-19 杭州未名信科科技有限公司 操作***中进程地址空间隔离保护方法、装置及设备

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN118113495A (zh) * 2024-04-29 2024-05-31 山东乾云启创信息科技股份有限公司 一种安全的基于共享内存的进程间数据识别方法及***

Also Published As

Publication number Publication date
WO2023051591A1 (zh) 2023-04-06

Similar Documents

Publication Publication Date Title
WO2022056894A1 (zh) 车辆通信方法和通信装置
CN115878343A (zh) 一种进程间通信方法及相关装置
WO2021212379A1 (zh) 车道线检测方法及装置
WO2021143190A1 (zh) 消息通信方法、计算机***及代理装置
CN114779790B (zh) 识别障碍物方法、装置、车辆、服务器、存储介质及芯片
JP2024513679A (ja) 無線ota技術に基づいてファイルを取得するための方法および関連デバイス
CN115330923B (zh) 点云数据渲染方法、装置、车辆、可读存储介质及芯片
CN114691346A (zh) 一种算力资源的配置方法及设备
US20220309806A1 (en) Road structure detection method and apparatus
EP4346187A1 (en) Ota upgrade method and device, and computer-readable storage medium
CN113859265B (zh) 一种驾驶过程中的提醒方法及设备
WO2022052881A1 (zh) 一种构建地图的方法及计算设备
WO2023202096A1 (zh) 一种车辆中数据的处理方法以及相关设备
WO2021217646A1 (zh) 检测车辆可通行区域的方法及装置
CN115297461B (zh) 数据交互方法、装置、车辆、可读存储介质及芯片
CN114937351B (zh) 车队控制方法、装置、存储介质、芯片、电子设备及车辆
CN115145246B (zh) 控制器的测试方法、装置、车辆、存储介质及芯片
WO2022068643A1 (zh) 多任务部署的方法及装置
CN115334109A (zh) 用于交通信号识别的***架构、传输方法,车辆,介质及芯片
EP4383110A1 (en) Data processing method and related apparatus
CN115334111A (zh) 用于车道识别的***架构、传输方法,车辆,介质及芯片
WO2021159397A1 (zh) 车辆可行驶区域的检测方法以及检测装置
CN115237630B (zh) 数据处理方法、装置、车辆、存储介质及芯片
WO2024108380A1 (zh) 自动泊车方法及装置
CN115203483B (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