掌桥专利:专业的专利平台
掌桥专利
首页

基于共享内存的核间通信方法、装置、存储介质及终端

文献发布时间:2024-04-18 20:01:30


基于共享内存的核间通信方法、装置、存储介质及终端

技术领域

本申请涉及通信领域,特别是涉及一种基于共享内存的核间通信方法、装置、存储介质及终端。

背景技术

在多核处理器中,不同核心之间需要进行通信和协调,以实现任务的划分和协同工作。核间通信涉及到数据传输、同步机制、共享资源等方面的设计和实现,以确保多个核心之间的协同工作和数据一致性。同时,有效提升优化多核处理器之间的通信机制可以有效提高多核处理器的性能、可扩展性核效率。

采用核间中断的方法进行核间通信是一种常见的多核通信技术。其具体过程包括中断触发、中断处理、数据传输、中断响应以及中断返回。核间中断技术中常采用的方案包括:通过信号量实现基于固定内存块的通信系统;在不存在固定的共享内存区域的情况下,使用带有消息指针的消息队列的方法实现动态内存数据的通信;使用包括标识号、信号表、占用状态、事件、读写状态记录区、状态监测区、复位控制器等等大量辅助操作进行共享内存的管理。虽然上述方法对现有技术具有一定的提升,但仍存在不足之处。

具体地,使用核间通断时,多核之间需要相互等待,且管理过程复杂不适用于实时操作系统。在数据传输的过程中,每次的读写操作均需要遍历所有的内存块,从而导致所占用的CPU(Central Processing Unit,中央处理器)资源较多。此外,现有技术中没有设置线程阻塞的操作,从而导致当内存资源不够时系统不会自动等待资源的释放,而是直接操作给用户进行处理,从而提升了数据传输过程中对人工的依赖程度。同时,现有技术无法实现全双工的通信,从而导致通信效率低下、延迟增加、容量受限且不适用于并行处理。最后,现有技术中并没有针对不同的场景在管理进行不同的处理,例如在共享内存区域较小的情况下,未能对管理方法进行适当的优化。

发明内容

鉴于以上所述现有技术的缺点,本申请的目的在于提供,用于解决现有技术不适用于实时操作系统、传输信息读写过程中占用核心资源较多,没有线程阻塞操作,无法实现全双工通信且无法在内存较小的情况下对管理方法进行优化的问题。

为实现上述目的及其他相关目的,本申请的第一方面提供一种基于共享内存的核间通信方法,基于第一核心处理器和第二核心处理器进行读写操作,其中,所述第一核心处理器和第二核心处理器同时作为接收者和发送者,当所述第一核心处理器为接收者,第二核心处理器为发送者时,所述方法包括: 将共享内存区域划分为一或多块子内存区域;每块子内存区域中存储有循环队列;所述循环队列中排布有一或多个数据块; 对所述多块子内存区域中的任意两个子内存区域进行读写配合操作,其包括:第一核心处理器基于第一子内存区域所对应的第一预设信号量及预设写入数量,执行写入操作以触发中断请求,更新写位置索引并发送至第二核心处理器;所述第二核心处理器响应于所述中断请求,基于第二子内存区域所对应的第二预设资源数量及预设读取数量,执行读取操作,更新读位置索引并返回至所述第一核心处理器。

于本申请的第一方面的一些实施例中,所述第一核心处理器执行写入操作的过程包括: 基于所述第一子内存区域的数据块个数,所述第一核心处理器将写信号量初始化,并获取互斥锁;提取所述第一子内存区域所对应的第一预设资源数量及预设写入数量中的较小值作为写入数据的个数,所述第一核心处理器基于所述写入数据的个数更新所述写信号量;基于更新后的所述写信号量,执行写入操作,并在写入操作完成后释放互斥锁;所述第一核心处理器生成第一消息数据,更新所述第一消息数据中包含的第一子内存区域的写位置索引,并将所述写位置索引同步至本地内存,其中,所述第一消息数据的低位表示所述第一子内存区域的写位置索引,所述第一消息数据的高位表示所述第二子内存区域的读位置索引;所述第一核心处理器触发中断请求,将所述第一消息数据发送至所述第二核心处理器;所述第二核心处理器响应于中断请求,基于所述写位置索引,释放预设数量的读信号量,并将所述第一消息数据中所包含的第一子内存区域的写位置索引保存至本地内存。

于本申请的第一方面的一些实施例中,所述第二核心处理器响应于中断请求,执行读取操作的过程包括: 基于所述第二子内存区域的数据块个数,第二核心处理器将读信号量初始化;提取所述第二子内存区域所对应的第二预设资源数量及预设读取数量中的较小值作为读取数据的个数,所述第二核心处理器基于所述读取数据的个数更新所述读信号量;基于更新后的所述读信号量,执行读取操作; 所述第二核心处理器生成第二消息数据,更新所述第二消息数据中包含的所述第一子内存区域的读位置索引,并将所述读位置索引更新至所述本地内存其中,所述第二消息数据的低为表示所述第二子内存区域的写位置索引,所述第二消息数据的高位表示所述第一子内存区域的读位置索引;所述第二核心处理器触发中断请求,将所述第二消息数据发送至所述第一核心处理器;所述第一核心处理器响应于中断请求,基于读位置索引,释放预设数量的写信号量,并将所述第二消息数据中包含的所述第一子内存区域的读位置索引保存至本地内存。

于本申请的第一方面的一些实施例中,若所述读写操作中,所述第一子内存区域的循环队列中排布有单个数据块时,所述方法的读写操作包括如下过程:基于所述第一子内存区域的数据块个数,所述第一核心处理器将写信号量初始化,并获取互斥锁;所述第一核心处理器在执行写入操作后,对写入次数进行更新,并将所述写入次数同步至本地内存;所述第一核心处理器触发中断请求,并将所述写入次数发送至第二核心处理器;第二核心处理器响应于所述中断请求,判断本地内存中所保存的写入次数与所述第一核心处理器发送的写入次数是否相等,若不相等则释放读信号量,并将所述写入次数同步至本地内存;所述第二核心处理器在执行读取操作后,更新读取次数,将更新后的所述读取次数同步至本地内存,并将更新后的所述读取次数发送至所述第一核心处理器;所述第一核心处理器在接收到所述第二核心处理器发回的更新后的所述读取次数后,判断本地内存所保存的所述读取次数与所述第二核心处理器发送的所述读取次数是否相等,若不相等则释放写信号量,并将所述写入次数同步至本地内存;所述第一核心处理器在完成全部的写入操作后释放互斥锁。

于本申请的第一方面的一些实施例中,若所述读写操作中,所述第一子内存区域的循环队列中排布有两个数据块时,所述方法的读写操作包括如下过程: 基于所述第一子内存区域数据块个数,所述第一核心处理器将写信号量和写位置索引初始化,并获取互斥锁;所述第一核心处理器在执行写入操作后,对所述写位置索引进行更新,并将所述写位置索引同步至本地内存;所述第一核心处理器触发中断请求,并将所述写位置索引发送至第二核心处理器;第二核心处理器响应于所述中断请求,判断本地保存的写位置索引与所述第一核心处理器发送的写位置索引是否相等,若不相等则释放读信号量,并将所述写位置索引同步至本地内存; 第二核心处理器将更新后的读位置索引发送至所述第一核心处理器,所述第二核心处理器执行读取操作;所述第一核心处理器在接收到所述第二核心处理器发回的更新后的读位置索引后,判断本地内存所保存的读位置索引与所述第二核心处理器发送的读位置索引是否相等,若不相等,则释放写信号量,并将所述读位置索引同步至本地内存;所述第一核心处理器在完成全部的写入操作后释放互斥锁。

于本申请的第一方面的一些实施例中,执行写入操作的过程和所述读取操作的过程还包括: 若未能在预设时间内完成所述写入操作,则判定通信超时发送错误报告;若未能在预设时间内完成所述读取操作,则判定通信超时发送错误报告。

于本申请的第一方面的一些实施例中,所述数据块预留有若干个字节,用于表征数据块中包含的有效数据的长度。

为实现上述目的及其他相关目的,本申请的第二方面提供一种基于共享内存的核间通信装置,基于第一核心处理器和第二核心处理器进行读写操作,其中,所述第一核心处理器和第二核心处理器同时作为接收者和发送者,当所述第一核心处理器为接收者,第二核心处理器为发送者时,包括:传输数据配置模块:用于将共享内存区域划分为一或多块子内存区域;每块子内存区域中存储有循环队列;所述循环队列中排布有一或多个数据块;读写操作模块:用于对所述多块子内存区域中的任意两个子内存区域进行读写配合操作,其包括:第一核心处理器基于第一子内存区域所对应的第一预设信号量及预设写入数量,执行写入操作以触发中断请求,更新写位置索引并发送至第二核心处理器;所述第二核心处理器响应于所述中断请求,基于第二子内存区域所对应的第二预设资源数量及预设读取数量,执行读取操作,更新读位置索引并返回至所述第一核心处理器。

为实现上述目的及其他相关目的,本申请的第三方面提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现所述基于共享内存的核间通信方法。

为实现上述目的及其他相关目的,本申请的第四方面提供一种电子终端,包括:处理器及存储器;所述存储器用于存储计算机程序,所述处理器用于执行所述存储器存储的计算机程序,以使所述终端执行所述基于共享内存的核间通信方法。

如上所述,本申请的通信领域的一种基于共享内存的核间通信方法、装置、存储介质及终端,具有以下有益效果:本发明通过循环队列、信号量以及互斥锁的方式对共享内存空间进行了管理,使本申请提供的核间通信方式适用于实时操作系统,且不易产生数据错乱。同时通过将信号量的个数与资源个数进行绑定的方式,使得在进行核间通信时可以直接从读写位置索引的地址就可进行读写操作,降低了读写操作的复杂度。同时本发明支持线程阻塞,降低了对人工的依赖性,实现了全双工通信。最后针对不同的使用场景进行了核间通信管理方法的优化,提高了核心的处理效率及核间通信效率。

附图说明

图1显示了本申请基于共享内存的核间通信方法一实施例中的流程示意图。

图2显示了本申请基于共享内存的核间通信方法一实施例中共享内存划分结构示意图。

图3显示了本申请基于共享内存的核间通信方法一实施例中写入操作的流程示意图。

图4显示了本申请基于共享内存的核间通信方法一实施例中消息数据的结构示意图。

图5显示了本申请基于共享内存的核间通信方法一实施例中写位置更新的流程示意图。

图6显示了本申请基于共享内存的核间通信方法一实施例中读位置更新的流程示意图。

图7显示了本申请基于共享内存的核间通信方法一实施例中单数据块读取操作的流程示意图。

图8显示了本申请基于共享内存的核间通信方法一实施例中双数据块读写操作的流程示意图。

图9显示了本申请基于共享内存的核间通信方法一实施例中另一读写操作的流程示意图。

图10显示了本申请基于共享内存的核间通信装置一实施例的结构示意图。

图11显示了本申请基于共享内存的核间通信的电子终端一实施例的结构示意图。

实施方式

以下通过特定的具体实例说明本申请的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本申请的其他优点与功效。本申请还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本申请的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。

需要说明的是,在下述描述中,参考附图,附图描述了本申请的若干实施例。应当理解,还可使用其他实施例,并且可以在不背离本申请的精神和范围的情况下进行机械组成、结构、电气以及操作上的改变。下面的详细描述不应该被认为是限制性的,并且本申请的实施例的范围仅由公布的专利的权利要求书所限定。这里使用的术语仅是为了描述特定实施例,而并非旨在限制本申请。空间相关的术语,例如“上”、“下”、“左”、“右”、“下面”、“下方”、“下部”、“上方”、“上部”等,可在文中使用以便于说明图中所示的一个元件或特征与另一元件或特征的关系。

在本申请中,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”、“固定”等术语应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本申请中的具体含义。

再者,如同在本文中所使用的,单数形式“一”、“一个”和“该”旨在也包括复数形式,除非上下文中有相反的指示。应当进一步理解,术语“包含”、“包括”表明存在所述的特征、操作、元件、组件、项目、种类、和/或组,但不排除一个或多个其他特征、操作、元件、组件、项目、种类、和/或组的存在、出现或添加。此处使用的术语“或”和“和/或”被解释为包括性的,或意味着任一个或任何组合。因此,“A、B或C”或者“A、B和/或C”意味着“以下任一个:A;B;C;A和B;A和C;B和C;A、B和C”。仅当元件、功能或操作的组合在某些方式下内在地互相排斥时,才会出现该定义的例外。

为解决上述背景技术中的问题,本发明提供基于共享内存的核间通信方法、装置、存储介质及终端,旨在解决现有技术不适用于实时操作系统、传输信息读写过程中占用核心资源较多,没有线程阻塞操作,无法实现全双工通信且无法在内存较小的情况下对管理方法进行优化的问题。与此同时,为了使本发明的目的、技术方案及优点更加清楚明白,通过下述实施例并结合附图,对本发明实施例中的技术方案的进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定发明。

在对本发明进行进一步详细说明之前,对本发明实施例中涉及的名词和术语进行说明,本发明实施例中涉及的名词和术语适用于如下的解释:

<1>核间通信:指的是在多核处理器系统中,不同核之间进行数据传输和通信的过程。

<2>共享内存区域:指的是多个进程或线程可以共同访问的一块内存空间,用于实现进程或线程间的数据共享和通信。

<3>全双工通信:指的是在通信过程中,双方可以同时进行发送和接收数据的方式,实现双向的通信。

<4>通信数据块(Block):指的是在通信过程中传输的数据的单位,可以是一个字节、一个数据包或者一个数据帧等。

<5>读/写位置索引:指的是在共享内存区域中,用于记录当前读取或写入数据的位置的索引,以保证数据的正确读写。

<6>消息MSG(Message):指的是在通信过程中传输的一段信息或数据。

<7>核间中断:指的是在多核处理器系统中,一个核发出中断信号,通知其他核进行相应的处理。

<8>低16位/高16位:指的是一个32位消息数据的低16位和高16位,用于表示消息数据的不同部分。

<9>互斥锁:指的是一种用于多线程编程中的同步机制,用于保证多个线程对共享资源的互斥访问,避免数据竞争和冲突。

<10>线程阻塞:线程阻塞是指在某个线程执行过程中,由于某种原因导致线程无法继续执行,进入等待状态,直到满足特定条件或者等待时间到达后才能继续执行的状态。在线程阻塞期间,该线程会暂停执行并释放CPU执行权,让其他线程有机会执行。线程阻塞可以是主动的,通过调用特定的方法使线程进入阻塞状态,也可以是被动的,由于某些条件无法满足而导致线程阻塞。常见的线程阻塞的情况包括等待锁的释放、等待条件的满足、等待输入/输出操作完成等。

本发明实施例提供一种基于共享内存的核间通信方法、基于共享内存的核间通信方法的系统、以及存储用于实现基于共享内存的核间通信方法的可执行程序的存储介质。就基于共享内存的核间通信方法的实施而言,本发明实施例将对基于共享内存的核间通信的示例性实施场景进行说明。

如图1所示,展示了本发明实施例中的一种基于共享内存的核间通信方法的流程示意图。本实施例中的基于共享内存的核间通信方法主要包括如下各步骤:

步骤S11:将共享内存区域划分为一或多块子内存区域;每块子内存区域中存储有循环队列;所述循环队列中排布有一或多个数据块。

在本发明一实施例中,如图2所示,为了实现双核(即CPUa和CPUb)之间的全双工通信,把共享内存区域划分为两块。分别为M0和M1。其中M0由CPUa进行写入操作,由CPUb执行读取操作。其中M1由CPUb进行写入操作,由CPUa执行读取操作。值得说明的是,本发明的保护范围并不限于将内存区域仅划分为两块,本发明还可将共享内存区域划分为多块。如图2中所示,当共享内存区域划分为多块M0、M1…以及Mn等时,写入操作和读取操作可在多块子内存区域中的任意两个子内存区域进行读写配合操作,以提升本发明的可扩展性。

步骤S12:对所述多块子内存区域中的任意两个子内存区域进行读写配合操作,其包括:第一核心处理器基于第一子内存区域所对应的第一预设信号量及预设写入数量,执行写入操作以触发中断请求,更新写位置索引并发送至第二核心处理器;所述第二核心处理器响应于所述中断请求,基于第二子内存区域所对应的第二预设资源数量及预设读取数量,执行读取操作,更新读位置索引并返回至所述第一核心处理器。

值得说明的是,上述读写配合操作的过程是基于每块子内存区域循环队列中的数据块循环进行的(未图示),且写/读信号量的初始化也是基于数据块的个数而进行的。当预设信号量小于写/读数量时,此时当前子内存区域中的数据块能够一次完成全部的读写操作。然而当预设信号量大于写/读信号量时,当前子内存区域中的数据块个数小于用户需要写入/读取的数据块个数,则先使用空闲的数据块执行写入操作,先使用有效的数据块执行读取操作。针对剩余的待写入/读取数据块在获取到写/读信号量时,循环地利用当前子内存区域中的空闲数据块执行写入操作,同时循环地利用当前子内存区域中的有效数据块执行读取操作。

具体地,当预设信号量大于写/读信号量时,会等待释放写/读信号量,若获取到写/读信号量,则会循环地利用当前子内存区域中的空闲数据块执行写入操作,并利用子内存区域中的有效数据块执行读取操作。否则,则产生线程阻塞,并且等待通过核间中断释放获取信号量。其中,本发明还为线程阻塞在预设时间范围内进行了超时设置,若等待时间超过了该预设时间则会向用户报错。

如图3展示了本发明一实施例中执行写入操作的流程示意图。所述第一核心处理器执行写入操作的过程包括:基于所述第一子内存区域的数据块个数,所述第一核心处理器将写信号量初始化,并获取互斥锁;提取所述第一子内存区域所对应的第一预设资源数量及预设写入数量中的较小值作为写入数据的个数,所述第一核心处理器基于所述写入数据的个数更新所述写信号量;基于更新后的所述写信号量,执行写入操作,并在写入操作完成后释放互斥锁;所述第一核心处理器生成第一消息数据,更新所述第一消息数据中包含的第一子内存区域的写位置索引,并将所述写位置索引同步至本地内存,其中,所述第一消息数据的低位表示所述第一子内存区域的写位置索引,所述第一消息数据的高位表示所述第二子内存区域的读位置索引;所述第一核心处理器触发中断请求,将所述第一消息数据发送至所述第二核心处理器;所述第二核心处理器响应于中断请求,基于所述写位置索引,释放预设数量的读信号量,并将所述第一消息数据中所包含的第一子内存区域的写位置索引保存至本地内存。

值得说明的是,本实施例针对所述第一子内存区域的数据块个数大于2的情况,当第一子内存区域的数据块个数大于2时,需保证写入数据时不能够将所有的数据块写满,以保证第二核心处理器在执行读取操作的时候能够将写入的数据全部读出。同时为了避免在进行内存拷贝时对无效数据进行操作从而降低传输效率,本发明用每个数据块的前4个字节用于表示当前数据块中存在的有效数据长度。

进一步地,所述第一核心处理器与第二核心处理器在进行数据传输时,除了采用核间中断的方式,还在第一核心处理器和第二核心处理器中设置寄存器或内存区域,以用于承担消息数据的传输。其中消息数据的长度可进行预设,示例性地,消息数据的长度可为4个字节。

需要注意的是,本发明采用读写位置索引更新的方法进行两个CPU的同步,因此一个中断信号可与多个读写内存块及用于记录执行状态的结构体进行绑定。当作为接收端的第二核心处理器响应于作为发送端的第一核心处理器的中断信号时,仅需对当前中断信号中所携带的读写位置索引进行判断,即可获取发送端处理器执行读写操作的数据块信息。

在本发明一实施例中,如图4展示了消息数据的结构示意图,当消息数据所发送的消息共包含32位时,对于第一核心处理器而言,采用低16位用于表示第一子内存区域的写位置索引,高16位用于表示第二子内存区域的读位置索引。而对于第二核心处理器而言,采用低16位用于表示第二子内存区域的写位置索引,高16位用于表示第一子内存区域的读位置索引。

在本发明一实施例中,同时对于每个内存区域,第一核心处理器和第二核心处理器均需要在本地内存中保存当前情况下的读写位置索引。由发送方主动更新写位置索引,并通过核间通断同步给接收方;接收方主动更新读位置索引,并通过核间通断同步给发送方。值得说明的是,由于读写位置索引的状态的同步是累积的,因为本发明适用于消息数据的高速传输,当同时具有多个读取时,可以有效避免读位置索引被覆盖的情况。

具体地,如图5和图6展示了本发明一实施例中,读位置索引和写位置索引同步过程的流程示意图。图5展示了第一核心处理器同步写位置索引的示意图,其中,上方表示同步写位置索引前第一子内存区域中的循环队列示意图,下方表示同步写位置索引后的第一子内存区域中的循环队列示意图,其中虚线箭头表示同步前的写位置索引,实线箭头表示同步后的写位置索引。图6展示了第二核心处理器同步读位置索引的示意图。其中,上方表示同步读位置索引前第一子内存区域中的循环队列示意图,下方表示同步读位置索引后第一子内存区域中的循环队列示意图,虚线箭头表示同步后的读位置索引,实线箭头表示同步前的读位置索引。其中len表示所述数据块所预留的若干个字节,用于表征数据块中包含的有效数据的长度。

值得说明的是,考虑到在实际核间通信的过程中,写数据的接口可能会被多个用户同时调用,因此为了避免执行写入操作的时候因多个用户同时调用产生的写入数据被覆盖的问题,本发明特意在执行写入操作时设置互斥锁,以避免数据覆盖。

在本发明一实施例中,针对第一数据处理器所发送的数据块的个数大于第一子内存区域中队列的长度的情况,本发明提取所述第一子内存区域所对应的第一预设资源数量及预设写入数量中的较小值作为写入数据的个数,并基于写入数据个数执行写入操作,并更新写位置索引,并通过带有写位置索引的第一消息数据,以核间中断的方式发送至第二核心处理器。其中,所述第一消息数据中包含有以更新低16位的写位置索引信息。

进一步地,当第二核心处理器触发中断请求后,基于第一消息数据中的写位置索引,释放相应数量的读信号量。若此时第一核心处理器还有剩余的数据块未被发送完成,则需要等待第二核心处理器触发接收中断并释放写信号量。

如图7所示,展示了本发明一实施例中执行读取操作的流程示意图。所述第二核心处理器响应于中断请求,执行读取操作的过程包括: 基于所述第二子内存区域的数据块个数,第二核心处理器将读信号量初始化;提取所述第二子内存区域所对应的第二预设资源数量及预设读取数量中的较小值作为读取数据的个数,所述第二核心处理器基于所述读取数据的个数更新所述读信号量;基于更新后的所述读信号量,执行读取操作; 所述第二核心处理器生成第二消息数据,更新所述第二消息数据中包含的所述第二子内存区域的读位置索引,并将所述读位置索引更新至所述本地内存其中,所述第二消息数据的低为表示所述第二子内存区域的写位置索引,所述第二消息数据的高位表示所述第二子内存区域的读位置索引;所述第二核心处理器触发中断请求,将所述第二消息数据发送至所述第一核心处理器;所述第一核心处理器响应于中断请求,基于读位置索引,释放预设数量的写信号量,并将所述第二消息数据中包含的所述第二子内存区域的读位置索引保存至本地内存。

进一步地,考虑到实际的核间通信过程中,读数据的接口通常指会被一个线程调用,因此为了提升通信效率,不再在读取操作过程中设置互斥锁。具体地,第二核心处理器将读信号量的数据初始化为0。

在本发明一实施例中,在将度信号量初始化后,计算用户读取个数和队列有效个数的较小值,即计算所述第二子内存区域所对应的第二预设资源数量及预设读取数量中的较小值作为读取数据的个数,基于该申请读队列的数据个数,第一子内存区域中复制实际的数据,并更新读位置索引,并将第二消息数据发送至第一核心处理器,其中,所述第二消息数据的高16位包含有更新后的读位置索引。

进一步地,当第一核心处理器触发中断请求后,基于第二消息数据中的读位置索引,释放相应数量的写信号量。若此时第一核心处理器还有剩余的数据块未被接收完成,则需要等待第一核心处理器触发发送中断并释放读信号量。

值得说明的,本发明针对共享内存空间较小的场景设计的适应性的扩展方案,分别针对当共享内存空间中的数据块仅能被划分为双块以及单块时的场景进行了设计,下文中将结合图8和图9分别针对共享内存空间中仅包含单个数据块和仅包含两个数据块的场景进行详细说明。

如图8展示了本发明一实施例中具有单个数据块的情况。具体地,若所述读写操作中,所述第一子内存区域的循环队列中排布有单个数据块时,所述方法的读写操作包括如下过程:基于所述第一子内存区域的数据块个数,所述第一核心处理器将写信号量初始化,并获取互斥锁;所述第一核心处理器在执行写入操作后,对写入次数进行更新,并将所述写入次数同步至本地内存;所述第一核心处理器触发中断请求,并将所述写入次数发送至第二核心处理器;第二核心处理器响应于所述中断请求,判断本地内存中所保存的写入次数与所述第一核心处理器发送的写入次数是否相等,若不相等则释放读信号量,并将所述写入次数同步至本地内存; 所述第二核心处理器在执行读取操作后,更新读取次数,将更新后的所述读取次数同步至本地内存,并将更新后的所述读取次数发送至所述第一核心处理器;所述第一核心处理器在接收到所述第二核心处理器发回的更新后的所述读取次数后,判断本地内存所保存的所述读取次数与所述第二核心处理器发送的所述读取次数是否相等,若不相等则释放写信号量,并将所述写入次数同步至本地内存;所述第一核心处理器在完成全部的写入操作后释放互斥锁。

在本实施例中,当共享内存中的循环队列仅能被划分为单块数据块时,作为发送端的第一核心处理器在执行完全部的写入操作后,需要等待作为接收端的第二核心处理器读取完当前的数据再释放互斥锁,以避免第二核心处理器在还没有将数据接收完毕时再次对当前单数据块再次执行写入操作,以产生数据覆盖的问题。特别地,由于此时共享内存空间中进包含单块数据块,此时读写位置索引用于表示读写数据的次数。示例性地,0用于表示第一次读写,1用于表示第二次读写,仅需判断读写数据的次数是否发生变化以表征读写次数的更新。对于同一个CPU核心处理器即可通过判断写入次数值(1或0)以及读取次数值(1或0)即可同时作为接收端和发送端,从而实现全双工通信,即同一个CPU核心处理器可同时作为接受者和发送者。

需要说明的是,判断本地内存中所保存的写入次数与所述第一核心处理器发送的写入次数是否相等,若不相等则释放读信号量的目的在于,判断本地保存的执行过过写入操作的次数与接收到的写入次数是否一致,若不相同则代表第一核心处理器有执行写入操作,此时共享内存空间中存在资源写入,此时释放写信号量;判断本地内存所保存的所述读取次数与所述第二核心处理器发送的所述读取次数是否相等,若不相等则释放写信号量,并将所述写入次数同步至本地内存的目的在于,判断本地保存的执行过的读取操作的此时和接收到的读取操作的次数是否一致,若不一致,则表明第一核心处理器执行过读取操作,此时资源有空闲,此时释放写信号量。

图9展示了本发明一实施例中具有两个数据块的情形。具体地,若所述读写操作中,所述第一子内存区域的循环队列中排布有两个数据块时,所述方法的读写操作包括如下过程: 基于所述第一子内存区域数据块个数,所述第一核心处理器将写信号量和写位置索引初始化,并获取互斥锁;所述第一核心处理器在执行写入操作后,对所述写位置索引进行更新,并将所述写位置索引同步至本地内存;所述第一核心处理器触发中断请求,并将所述写位置索引发送至第二核心处理器;第二核心处理器响应于所述中断请求,判断本地保存的写位置索引与所述第一核心处理器发送的写位置索引是否相等,若不相等则释放读信号量,并将所述写位置索引同步至本地内存; 第二核心处理器将更新后的读位置索引发送至所述第一核心处理器,所述第二核心处理器执行读取操作;所述第一核心处理器在接收到所述第二核心处理器发回的更新后的读位置索引后,判断本地内存所保存的读位置索引与所述第二核心处理器发送的读位置索引是否相等,若不相等,则释放写信号量,并将所述读位置索引同步至本地内存;所述第一核心处理器在完成全部的写入操作后释放互斥锁。

在本实施例中,当共享内存区域的数据块包含双块时,需要让作为发送端的第一核心处理器在第一块数据块中执行完写入操作后,等待作为接收端的第二核心处理器将更新后的读位置索引发回,即可继续在第二块数据块中执行写入操作,而无需等等接收端执行完全部的读取操作。从而实现当发送端在写入第一块内存时,接收端可以读取第二块内存,无需相互等待。

在本发明一实施例中,执行写入操作的过程和所述读取操作的过程还包括: 若未能在预设时间内完成所述写入操作,则判定通信超时发送错误报告;若未能在预设时间内完成所述读取操作,则判定通信超时发送错误报告。当进行写入操作或读取操作时,若用户还有剩余的数据块没有写入完毕或读取完毕,则通过设置的timeout超时时间进行判断,且仅在超过预设的timeout超时时间后才返回错误状态,从而避免因频繁报错提升人工维护成本。

在本发明一实施例中,所述数据块预留有若干个字节,用于表征数据块中包含的有效数据的长度。示例性地,将所述数据块中的前4个字节用于表征所述数据块中存在的有效数据长度,以避免在进行拷贝内存时对无效数据进行操作。

如图10所示,展示了本发明实施例中的一种基于共享内存的核间通信装置800的结构示意图。本实施例中,基于共享内存的核间通信装置800包括:

传输数据配置模块801:用于将共享内存区域划分为一或多块子内存区域;每块子内存区域中存储有循环队列;所述循环队列中排布有一或多个数据块。

读写操作模块802:用于对所述多块子内存区域中的任意两个子内存区域进行读写配合操作,其包括:第一核心处理器基于第一子内存区域所对应的第一预设信号量及预设写入数量,执行写入操作以触发中断请求,更新写位置索引并发送至第二核心处理器;所述第二核心处理器响应于所述中断请求,基于第二子内存区域所对应的第二预设资源数量及预设读取数量,执行读取操作,更新读位置索引并返回至所述第一核心处理器。

需要说明的是:上述实施例提供的基于共享内存的核间通信装置在进行基于共享内存的核间通信时,仅以上述各程序模块的划分进行举例说明,实际应用中,可以根据需要而将上述处理分配由不同的程序模块完成,即将装置的内部结构划分成不同的程序模块,以完成以上描述的全部或者部分处理。另外,上述实施例提供的基于共享内存的核间通信装置与基于共享内存的核间通信方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。

本发明实施例提供的基于共享内存的核间通信方法可以采用终端侧或服务器侧实施,就基于共享内存的核间通信终端的硬件结构而言,请参阅图11,为本发明实施例提供的基于共享内存的核间通信终端900的一个可选的硬件结构示意图,该终端900可以是移动电话、计算机设备、平板设备、个人数字处理设备、工厂后台处理设备等。基于共享内存的核间通信终端900包括:至少一个处理器901、存储器902、至少一个网络接口904和用户接口906。装置中的各个组件通过总线系统905耦合在一起。可以理解的是,总线系统905用于实现这些组件之间的连接通信。总线系统905除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图11中将各种总线都标为总线系统。

其中,用户接口906可以包括显示器、键盘、鼠标、轨迹球、点击枪、按键、按钮、触感板或者触摸屏等。

可以理解,存储器902可以是易失性存储器或非易失性存储器,也可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(ROM,Read Only Memory)、可编程只读存储器(PROM,Programmable Read-Only Memory),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的RAM可用,例如静态随机存取存储器(SRAM,StaticRandom Access Memory)、同步静态随机存取存储器(SSRAM,Synchronous Static RandomAccess Memory)。本发明实施例描述的存储器旨在包括但不限于这些和任意其它适合类别的存储器。

本发明实施例中的存储器902用于存储各种类别的数据以支持基于共享内存的核间通信终端900的操作。这些数据的示例包括:用于在基于共享内存的核间通信终端900上操作的任何可执行程序,如操作系统9021和应用程序9022;操作系统9021包含各种系统程序,例如框架层、核心库层、驱动层等,用于实现各种基础业务以及处理基于硬件的任务。应用程序9022可以包含各种应用程序,例如媒体播放器(Media Player)、浏览器(Browser)等,用于实现各种应用业务。实现本发明实施例提供的基于共享内存的核间通信方法可以包含在应用程序9022中。

上述本发明实施例揭示的方法可以应用于处理器901中,或者由处理器901实现。处理器901可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器901中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器901可以是通用处理器、数字信号处理器(DSP,Digital Signal Processor),或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。处理器901可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器901可以是微处理器或者任何常规的处理器等。结合本发明实施例所提供的配件优化方法的步骤,可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于存储介质中,该存储介质位于存储器,处理器读取存储器中的信息,结合其硬件完成前述方法的步骤。

在示例性实施例中,基于共享内存的核间通信终端900可以被一个或多个应用专用集成电路(ASIC,Application Specific Integrated Circuit)、DSP、可编程逻辑器件(PLD,Programmable Logic Device)、复杂可编程逻辑器件(CPLD,Complex ProgrammableLogic Device),用于执行前述基于共享内存的核间通信方法。

本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过计算机程序相关的硬件来完成。前述的计算机程序可以存储于一计算机可读存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。

于本申请提供的实施例中,所述计算机可读写存储介质可以包括只读存储器、随机存取存储器、EEPROM、CD-ROM或其它光盘存储装置、磁盘存储装置或其它磁存储设备、闪存、U盘、移动硬盘、或者能够用于存储具有指令或数据结构形式的期望的程序代码并能够由计算机进行存取的任何其它介质。另外,任何连接都可以适当地称为计算机可读介质。例如,如果指令是使用同轴电缆、光纤光缆、双绞线、数字订户线(DSL)或者诸如红外线、无线电和微波之类的无线技术,从网站、服务器或其它远程源发送的,则所述同轴电缆、光纤光缆、双绞线、DSL或者诸如红外线、无线电和微波之类的无线技术包括在所述介质的定义中。然而,应当理解的是,计算机可读写存储介质和数据存储介质不包括连接、载波、信号或者其它暂时性介质,而是旨在针对于非暂时性、有形的存储介质。如申请中所使用的磁盘和光盘包括压缩光盘(CD)、激光光盘、光盘、数字多功能光盘(DVD)、软盘和蓝光光盘,其中,磁盘通常磁性地复制数据,而光盘则用激光来光学地复制数据。

综上所述,本申请提供基于共享内存的核间通信方法、装置、终端及介质,本发明提供了一种提高基于共享内存的核间通信效率的方法,通过使用循环队列,读写信号量以及互斥锁的方式对共享内存空间进行管理,以适配于实时操作系统,同时信号量的操作会自动关闭中断,以避免中断和线程同时进行修改造成数据错乱的问题。通过将信号量个数和资源量个数相绑定的方式,使得可以从读写位置索引对对应位置直接进行读写操作,以避免读写过程中遍历所有的内存块,从而占用大量CPU内存的问题。针对线程阻塞进行相关设置,以降低人工的维护成本。且可在内存空间大小不同的情况下均可实现全双工通信。本发明还可同时对多个数据块进行读写操作,以避免频发中断而影响CPU的处理效率。所以,本申请有效克服了现有技术中的种种缺点而具高度产业利用价值。

上述实施例仅例示性说明本申请的原理及其功效,而非用于限制本申请。任何熟悉此技术的人士皆可在不违背本申请的精神及范畴下,对上述实施例进行修饰或改变。因此,举凡所属技术领域中具有通常知识者在未脱离本申请所揭示的精神与技术思想下所完成的一切等效修饰或改变,仍应由本申请的权利要求所涵盖。

技术分类

06120116561895