一种基于嵌入式平台的核间通信方法及系统与流程

文档序号:24194113发布日期:2021-03-09 16:07阅读:115来源:国知局
一种基于嵌入式平台的核间通信方法及系统与流程

1.本发明属于计算机嵌入式系统领域,具体涉及一种基于嵌入式平台的核间通信方法及系统。


背景技术:

2.在物联网时代,嵌入式终端设备数量日渐增长,嵌入式系统应用场景也逐渐丰富。从诞生之初的简单工业控制、通信设备,到如今的智能车、智能手机、智惠城市,嵌入式应用领域日益广泛,嵌入式产品也不断渗透到社会生产、人类日常生活的各方各面。在通讯、网络、工控、医疗、电子等领域,嵌入式发挥着越来越重要的作用。与方兴未艾的大数据、人工智能技术的结合,更是让嵌入式产业焕发出新的生命力。《国家集成电路产业发展推进纲要》已经将“智能卡、智能电网、智能交通、卫星导航、工业控制、金融电子、汽车电子、医疗电子等关键集成电路及嵌入式软件”,列为主要任务和发展重点。嵌入式技术已成为推动人类社会进步、国家经济发展的重要动力。
3.随着应用场景复杂性的增加,嵌入式设备要处理的数据规模也日渐增大,嵌入式计算任务对处理器的性能要求越来越高。为了获得更高的算力,目前嵌入式系统已经由单核结构向多核结构迈进,从同构系统向异构系统发展。
4.市场应用的需求推动了多核处理器技术的发展,但是许多技术尚未臻于完善。其中就包括了直接影响到多核系统性能的核间通信技术。是否能让不同核的不同任务进程之间,以较低的开销进行高效、鲁棒的通信,是能否发挥多核处理器高性能的重要保证。中国发明专利cn200510087321.0中,提供了一种嵌入式实时操作系统中多核处理器的核间通信方法。该方法使用核间消息队列提升了核间通信的效率,通过采用共享消息池和地址拷贝的方法使得每次传输消息的长度不受限制。但同时,消息池的引入带来了核间锁的开销,从而影响了核间通信的效率,缺少掉线检测机制使得鲁棒性不能得到充分保证。


技术实现要素:

5.针对现有技术中存在的技术问题,本发明提供了一种基于嵌入式平台的核间通信方法及系统,能够让多核系统中,处于不同核上的不同任务进程之间,进行低开销、高效率和高鲁棒性通信。
6.为了解决上述技术问题,本发明通过以下技术方案予以实现:
7.一种基于嵌入式平台的核间通信方法,包括以下步骤:
8.a)源核对接收到的请求任务参数进行合法性检查和消息的封装,得到内部格式的消息;
9.b)源核查询任务注册表得到能够执行请求任务的目的核列表,使用负载均衡的方法,从目的核列表中选择进行任务处理的目的核,并在内部格式的消息中加入选择结果;
10.c)源核根据选择结果,将内部格式的消息放入对应的消息通道队列;
11.d)目的核从消息通道队列中取出相应的消息,进行任务处理。
12.进一步地,步骤a)之前还包括:
13.任务注册表的写入,从共享存储区开辟源核至目的核的消息通道队列。
14.进一步地,步骤a)中:
15.所述请求任务参数包括请求任务编号、任务输入参数和任务输出参数;
16.所述内部格式消息包括请求任务编号、虚拟通道编号、任务输入参数和任务输出参数;
17.所述合法性检查包括检查请求任务编号的有效性,具体检查方法为:若请求任务编号在任务注册表中有定义,则判定为合法,否则判定为不合法。
18.进一步地,虚拟通道为源核上运行的某个进程与目的核上运行的某个进程之间通信的数据管道,属于逻辑概念,实际物理空间上使用的是源核与目的核之间的消息通道队列;
19.所述虚拟通道编号为该虚拟通道的编号,用于区分不同的虚拟通道。
20.进一步地,所述任务注册表包括三个表项,分别是任务编号、任务对应执行函数地址的映射和可以执行该任务的目的核的编号;
21.所述消息通道队列包括队列头区域和队列体区域;所述队列头区域包括虚拟通道索引和空闲通道索引;所述队列体区域用于存放具体的内部格式消息项。
22.进一步地,步骤b)中:
23.所述选择结果表现为目的核的编号。
24.进一步地,步骤c)具体为:
25.源核根据内部格式的消息中指定的目的核,确定使用的消息通道队列;
26.源核根据内部格式的消息中指定的虚拟通道编号,确定使用的虚拟通道;
27.源核根据消息通道队列头区域中存储的虚拟通道索引,将内部格式的消息放入消息通道队列中,维护虚拟通道索引和空闲通道索引位置的正确指向。
28.进一步地,步骤b)与步骤c)之间,还包括:
29.源核对消息通道队列中已处理的内部格式消息项的回收。
30.进一步地,步骤d)具体为:
31.目的核从对应的消息通道队列中取出内部格式消息项,维护消息通道队列的队列头区域中对应虚拟通道索引的指向,并执行内部格式消息项中指定的任务。
32.一种基于嵌入式平台的核间通信系统,包括:api接口模块、任务模块、路由模块和通道模块:
33.所述api接口模块,用于提供核间消息发送接口,该api接口模块对外提供统一的api接口,其中,一旦用户调用api接口发送核间任务请求,用户参数将被任务模块接收处理;
34.所述任务模块,用于实现对接收到的请求任务参数进行合法性检查和消息的封装,得到内部格式的消息,并将内部格式的消息传递给路由模块;
35.所述路由模块,用于实现查询任务注册表得到能够执行任务的目的核列表,使用负载均衡的方法,从目的核列表中选择进行任务处理的目的核,并在内部格式的消息中加入选择结果,具体为,在内部格式的消息中指定目的核编号,将内部格式的消息转交给通道模块处理;
36.所述通道模块,用于实现消息通道队列和虚拟通道的定位;用于将内部格式的消息填充进对应的虚拟通道的队列体区域中;用于回收已读消息项;用于检测消息接收程序是否掉线;用于维护虚拟通道的队列头区域中的对应索引;用于触发目的核虚拟通道绑定的中断;用于通知目的核读取消息和执行任务。
37.与现有技术相比,本发明至少具有以下有益效果:本发明提供的基于嵌入式平台的核间通信方法,双核之间单向收发消息使用一条消息通道队列,运行于双核上的不同任务使用的虚拟通道在物理空间上都依托于这条消息通道队列。消息通道队列使用环形队列实现,占用的空间大小与任务数量无关,保证了空间效率;核之间无锁,保证了时间效率,具有高效性。对于共用公共物理空间的虚拟通道而言,虚拟通道之间空间上无耦合依赖关系,保持独立,不会相互干扰,虚拟通道之间不会形成相互阻塞的条件,具有高效性。对于已经收到的消息项,能够保证精确记录和及时回收,最大程度降低队列拥堵、空间浪费的可能,具有高效性。当使用虚拟通道接收消息的进程掉线后,发送方能及时感知到,停止消息发送避免造成拥堵;而掉线的进程重连后,又能恢复通信状态,继续接收消息,使双方通信恢复正常,具有鲁棒性。不同任务可以注册到不同核上,由任务注册表记录,收发任务消息时,只需要关注任务本身,而关于具体使用哪个核的底层细节被隐藏,并且任务注册表可以更改,具有灵活性。
38.综上所述,由于具有通道队列,从而能够对核间任务的消息进行存储,从而实现了嵌入式平台的多核任务间的消息通信。另外,由于虚拟通道共用消息通道队列的设计,本方法在空间效率上与任务数量无关,具有很高的空间利用率。另外,基于通道消息通信的核与核之间不需要使用锁;同一个核上的不同虚拟通道虽然共用消息通道队列,但在物理空间上又能够保持独立,不会相互干扰;对于接收完成的消息能够准确记录和回收;以上几点,最大程度地保障了时间效率。另外,关于接收进程掉线后重连的设计,提供了鲁棒性的保证。另外,关于任务注册表的引入,使通信面向任务,隐藏了与核相关的细节,保证了易用性与灵活性。通过本发明的核间通信方法,可以应用在同构或异构的嵌入式soc多核系统,从而使得这些系统中的处理器能够高效通信、最大程度发挥多核性能。
39.为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
40.为了更清楚地说明本发明具体实施方式中的技术方案,下面将对具体实施方式描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
41.图1是本发明实施例中多核通信的系统架构图。
42.图2是本发明实施例中通道实现的结构框图。
具体实施方式
43.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合附图对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是
全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
44.作为本发明的某一具体实施方式,一种基于嵌入式平台的核间通信方法,包括以下步骤:
45.a)源核对接收到的请求任务参数进行合法性检查和消息的封装,得到内部格式的消息。
46.具体的,请求任务参数包括请求任务编号、任务输入参数和任务输出参数。
47.内部格式消息包括请求任务编号、虚拟通道编号、任务输入参数和任务输出参数;虚拟通道为源核上运行的某个进程与目的核上运行的某个进程之间通信的数据管道,属于逻辑概念,实际物理空间上使用的是源核与目的核之间的消息通道队列;虚拟通道编号为该虚拟通道的编号,用于区分不同的虚拟通道。
48.合法性检查包括检查请求任务编号的有效性,具体检查方法为:若请求任务编号在任务注册表中有定义,则判定为合法,否则判定为不合法。
49.b)源核查询任务注册表得到能够执行请求任务的目的核列表,使用负载均衡的方法,从目的核列表中选择进行任务处理的目的核,并在内部格式的消息中加入选择结果,具体的,选择结果表现为目的核的编号。
50.任务注册表包括三个表项,分别是任务编号、任务对应执行函数地址的映射和可以执行该任务的目的核的编号。
51.消息通道队列包括队列头区域和队列体区域;所述队列头区域包括虚拟通道索引和空闲通道索引;所述队列体区域用于存放具体的内部格式消息项。
52.c)源核根据选择结果,将内部格式的消息放入对应的消息通道队列。
53.具体的,源核根据内部格式的消息中指定的目的核,确定使用的消息通道队列。
54.源核根据内部格式的消息中指定的虚拟通道编号,确定使用的虚拟通道。
55.源核根据消息通道队列头区域中存储的虚拟通道索引,将内部格式的消息放入消息通道队列中,维护虚拟通道索引和空闲通道索引位置的正确指向。
56.d)目的核从消息通道队列中取出相应的消息,进行任务处理,具体为:
57.目的核从对应的消息通道队列中取出内部格式消息项,维护消息通道队列的队列头区域中对应虚拟通道索引的指向,并执行内部格式消息项中指定的任务。
58.在上述实施方式的基础上,优选的,步骤a)之前还包括:任务注册表的写入,从共享存储区开辟源核至目的核的消息通道队列。
59.优选的,步骤b)与步骤c)之间,还包括:源核对消息通道队列中已处理的内部格式消息项的回收。
60.本发明一种基于嵌入式平台的核间通信系统,包括:api接口模块、任务模块、路由模块和通道模块:
61.api接口模块,用于提供核间消息发送接口,该api接口模块对外提供统一的api接口,其中,一旦用户调用api接口发送核间任务请求,用户参数将被任务模块接收处理;
62.任务模块,用于实现对接收到的请求任务参数进行合法性检查和消息的封装,得到内部格式的消息,并将内部格式的消息传递给路由模块;
63.路由模块,用于实现查询任务注册表得到能够执行任务的目的核列表,使用负载
均衡的方法,从目的核列表中选择进行任务处理的目的核,并在内部格式的消息中加入选择结果,具体为,在内部格式的消息中指定目的核编号,将内部格式的消息转交给通道模块处理;
64.通道模块,用于实现消息通道队列和虚拟通道的定位;用于将内部格式的消息填充进对应的虚拟通道的队列体区域中;用于回收已读消息项;用于检测消息接收程序是否掉线;用于维护虚拟通道的队列头区域中的对应索引;用于触发目的核虚拟通道绑定的中断;用于通知目的核读取消息和执行任务。
65.随着多核技术在嵌入式领域的广泛应用,各大处理器厂商提出了各种多核架构,如ibm的cell broad-band engine,arm的big.little,ti的keystone架构等。
66.本发明就是在基于多核架构的嵌入式平台下,利用消息传递的方式,通过建立虚拟通道的概念和共用消息通道队列的原则,实现多核之间的高效通信,并对通信的鲁棒性做出保证。该通信方法可以实现高效稳定的核间通信,保障多核系统中消息传递与任务交互的实时性与可靠性,为实现多核任务的调度与并行提供基础。
67.对于多核任务的开发人员来说,本发明为他们提供了核与核交互的手段,简化了多核任务、并行任务的编程。
68.为了使本发明实现的技术手段、创作特征、达成目的与功效易于明白了解,以下结合实施例及附图对本发明作具体阐述。
69.实施例
70.本实施例中的系统运行可在包括同构与异构结构的任何嵌入式多核平台实现。
71.如图1所示,多核通信系统100包括api接口模块1、任务模块2、路由模块3、通道模块4。
72.本实施例中,多核通信系统100采用基于消息的通信。
73.与共享内存的方式相比,基于消息的通信避免了核与核之间锁的使用,从而使得运行在不同核的进程之间,经过任务模块2、路由模块3、通道模块4收发消息时相互独立,从而提高了通信的效率。
74.核上运行不同的任务进程,使用虚拟通道与对端另一个核上运行的任务进程进行通信。具体而言,该核可指某嵌入式多核系统中的任意核。
75.本实施例中,核上运行的任务进程调用api接口模块1,发出任务请求,在任务模块2接收到任务请求后,会对该请求解析并生成内部格式的消息,同时根据任务注册表对该任务请求进行合法性判断。如果任务请求为非法请求,则直接对该非法请求进行响应(例如,拒绝、报警等);如果合法性满足要求,内部格式的消息将被进一步转交给路由模块3处理。路由模块3通过查找任务注册表,在注册了该请求任务的核中进行选择。具体的选择策略可采用负载均衡的方法,选择任务负载最低的核来进行请求任务的处理。
76.本实施例中,用户与多核通信系统100的主要交互方式就是通过在核上运行调用发送任务请求接口的进程。例如,用户进程中通过api接口模块1,调用任务请求接口,指定用户参数,包括请求任务编号、任务输入参数、任务输出参数,发送一个计算任务请求给多核通信系统100。一旦任务请求接口函数执行,进入任务模块2,任务模块2接收到该计算请求任务,就会对用户参数进行合法性检查。如果合法性检查通过,则将该请求封装成特定内部格式的消息,交给路由模块3处理。
77.路由模块3对接收到的内部格式的消息进行识别,根据任务注册表选取所有注册了该请求任务的核中负载最低的核,指定该核接收并处理任务请求。
78.本实施例中,路由模块3在接收到任务模块2发送的内部格式的消息时,对任务请求进行记录。然后通过查找任务注册表,在注册了该请求任务的所有核中进行选择。选择策略可以是负载均衡的方法,即选择当前任务负载最低的一个核,将消息进一步封装(指定消息发送核与消息接收核的编号),交给通道模块4。
79.通道模块4用于对核间消息的收发进行管理。该通道模块4的主要功能是实现对核间消息通道队列的读写、对已读消息项的回收,保证核间通信的正确性、高效性和可靠性。本实施例中,为了兼顾时间效率、空间效率及鲁棒性,通道模块4采用了基于消息通道队列复用方式的通道设计。
80.本实施例中,通道模块4为每对核之间的双向通信维护了两条消息通道队列,每条消息通道队列的消息流动为单向,整体对外表现为全双工。具体某条消息通道队列的实现如消息通道队列200所示。
81.对于消息通道队列200,需要实现通道读、通道写、通道已读项回收、消息接收端掉线重连的功能。消息通道队列的结构设计中,包含消息通道队列头区域1和消息通道队列体区域2两部分。消息通道队列头区域1中为每条隶属于该通道队列的虚拟通道维护了三个索引:vx_head虚拟通道头索引,vx_tail虚拟通道尾索引,vx_recover虚拟通道恢复标记索引(x代表虚拟通道号,如0号虚拟通道的虚拟通道头索引记为v0_head),用于共同管理一条虚拟通道;同时,维护了free_head、free_tail两个索引记录空闲队列的头和尾,维护了recycle_start记录已读消息项的回收起始位置,recycle_start到free_tail之间为需要回收的消息项。队列体2由item消息项组成,消息项中包含消息的具体内容(如请求任务编号、请求任务输入参数、请求任务输出参数),和next字段。其中next字段指明该消息项之后的下一个消息项在消息通道队列中的索引下标。
82.对于消息通道队列200,初始时:vx_head、vx_tail、vx_recover的初始值都为-1,代表隶属于该消息通道队列的所有虚拟通道所使用的虚拟通道都为空;free_head指向消息通道队列中第一个item、free_tail指向消息通道队列中最后一个item、item通过next字段顺序串联,代表所有item都属于空闲队列;recycle_start指向消息通道队列中最后一个item(与free_tail保持一致),代表无消息项需要回收。
83.对于消息通道队列200,当虚拟通道0写入两个消息项、虚拟通道1再写入一个消息项、虚拟通道0又写入一个消息项后,消息通道队列状态如下:v0_head指向item0、v0_tail指向item3,代表虚拟通道0对应的虚拟通道中包含起始于item0、结束于item3、中间以next字段串联的所有消息项(item0、item1、item3);v1_head和v1_tail都指向item1,代表虚拟通道1对应的虚拟通道中包含起始于item1、结束于item1、中间以next字段串联的所有消息项(item1);free_head指向item4、free_tail指向最后一项,代表空闲队列中包含起始于item4、结束于最后一项、中间以next字段串联的所有消息项。
84.对于消息通道队列200,虚拟通道写入消息项前,对recycle_start到free_tail之间的消息项进行回收,每回收一个消息项,将recycle_start指向被回收消息项的下一项;写入消息项时,将free_head指向的消息项挂入vx_tail指向的消息项之后,并维护free_head和vx_tail,使之指向下一消息项。消息项的指向更改操作通过修改next值实现。
85.对于消息通道队列200,虚拟通道读取消息项时,获得vx_head指向的消息项,当对消息项的消费完成后,将该消息项挂入free_tail指向的消息项之后,并维护vx_head和free_tail,使之指向下一消息项。同时,维护vx_recover,使vx_recover与vx_tail保持一致。这样做的目的在于,消息发送方可以通过比较vx_recover和vx_tail的值,及时感知到是否对应消息接收端是否掉线:当一定时间窗口之内,消息发送方发现vx_recover和vx_tail的值都不一致且虚拟通道中存在数据未读时,可以认为消息接收方已经掉线,无法及时读取数据,此时可做相应处理(如关闭消息发送端,或停止发送数据、等待消息接收端重连)。
86.以下,对本发明实施例中多核通信系统100的流程作具体阐述:
87.本实施例中,多核通信系统100的入口为核上运行的用户进程。用户进程通过api接口模块1调用任务请求接口,指定任务编号、任务输入参数、任务输出参数,将任务请求发送给任务模块2处理。任务模块2收到请求后对请求进行合法性检查,若为非法请求则直接对该非法请求进行响应;若为合法请求则生成相应格式的消息并发送给路由模块3。路由模块3对收到的内部消息进行进一步封装,根据注册表注册情况和各核负载情况,选择其中一个核作为任务处理者,并将封装好的消息交给通道模块4。通道模块4根据消息中指定的发送者和接收者,将消息写入对应的消息通道队列中的虚拟通道,并维护队列中的各个索引。
88.本实施例中,消息的接收使用中断触发的方式。对于中断方式而言,虚拟通道编号与中断向量号绑定,当通道模块4写入消息时,会触发一个属于消息接收核的中断。中断到达后,中断处理程序中,路由模块3根据中断向量号,确定需要接收消息的虚拟通道的编号,通过调用物理模块4提供的接口,在对应消息通道队列的虚拟通道中,收取消息。路由模块3对收取到的消息进行合法性检查,若为非法请求则直接对该非法请求进行响应;若为合法请求则生成相应格式的消息并发送给任务模块2。任务模块2将收到的任务进行解析,并进行合法性检查,若为非法请求则直接对该非法请求进行响应;若为合法请求则对任务进行处理。任务处理完成后,再将结果依次通过路由模块3、通道模块4返回。
89.在实际应用中,第三方应用可以将本实施例的多核通信系统100部署在嵌入式同构或异构多核系统中,并通过多核通信系统100提供的api接口模块1,调用任务请求接口,请求位于其他核上的服务,使得第三方应用便捷、快速地实现多核通信、多核rpc调用等功能。如arm和dsp组成的异构多核系统,可以通过部署本实施例的多核通信系统100,实现arm对dsp的算子调用功能。
90.本实施例提供的基于嵌入式平台的多核通信方法,由于通道模块采用了基于消息通道队列复用的虚拟通道设计,使虚拟通道逻辑上独立、空间上连续,具有空间高效性;核间访问通道队列无锁,具有时间高效性;虚拟通道采用恢复标志的设计,可以做到接收端掉线检测,具有鲁棒性。另外,由于任务层与路由层的存在,提供了对底层细节的封装和抽象,具有可配置性和灵活易用性,兼备安全性检查、流量负载均衡等特点。
91.最后应说明的是:以上所述实施例,仅为本发明的具体实施方式,用以说明本发明的技术方案,而非对其限制,本发明的保护范围并不局限于此,尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使
相应技术方案的本质脱离本发明实施例技术方案的精神和范围,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1