分层多核处理器核间可靠通信方法与流程

文档序号:11261874阅读:456来源:国知局
分层多核处理器核间可靠通信方法与流程

本发明涉及通信技术领域,具体涉及一种分层多核处理器核间可靠通信方法。



背景技术:

随着多核架构的不断发展,单芯片上集成的核心数目不断增多,促使了处理器设计范式由以计算为中心向以通信为中心的转移。传统的处理器核间通信方案,如基于总线的通信、基于点到点的通信和基于交叉开关的通信能够实现少量处理器核间的通信。然而这些方案均存在不足之处:共享总线的通信方案具有复杂的硬件架构,程序设计难度大,难以实现全局同步;点到点的通信方案则难以实现通信信号的全局广播,限制了其在多核架构下的应用;基于交叉开关的通信方案则存在硬件芯片面积不易缩减,功耗较大的问题。

2011年第2期出版的《智能计算机与应用》中李静梅、王军锋、张歧发表的“一种适应多核处理器核间通信机制的设计”提供了多核处理器核间通信的方法。通过分析多核运行任务特点,根据处理核上运行任务功能的不同,将处理核分成两类:控制核和计算核。根据对核的分类,提出了一种新的核间通信模型,该模型提供了三种不同的通信通道。运用这三条通道,把应用程序的输入输出部分从计算核迁移到控制核来提高多核的利用率。

文献“一种适应多核处理器核间通信机制的设计”所提出的核间通信机制,在将任务进行划分时仅粗粒度地分为计算型与控制型任务,不能涵盖所有的应用需求。设计的三种通信通道具有一定应用局限性,不能较好地适应多种硬件场合,可扩展性与可移植性较差,且没有提出统一的上层应用抽象接口,不利于用户使用。此外,对通信可靠性没有进行充分验证,可能会存在通信数据不完整的情况。



技术实现要素:

(一)要解决的技术问题

本发明要解决的技术问题是:如何实现多核处理器环境下的可靠核间通信。

(二)技术方案

为了解决上述技术问题,本发明提供了一种分层多核处理器核间可靠通信方法,包括以下步骤:

第一步:将多核通信系统从下至上分为五个层次:

链接层:用于为上层的传输层提供多种物理链接方式;

传输层:用于进行链接管理,针对链接层的不同链接方式提供不同的管理服务;

会话层:用于提供统一的会话层管理,实现会话层的连接管理与监督、通信任务命名服务、通信地址发布与确认,以及为上层api层提供地址解析的服务;

api层:用于利用下层会话层所提供的地址解析服务,构建统一的传输接口与核间通信管理接口;

应用层:作为用户利用下层api层所提供的传输接口与管理接口;

第二步:执行核间通信初始化流程:

步骤21:首先对会话层的链接管理进行初始化,其次完成传输层的链接管理控制初始化,然后完成传输层数据传输管理的初始化;

步骤22:创建cdma对象,获取传输层调用接口;创建连接控制对象,获取会话层对象;创建会话层管理对象,建立远端逻辑连接;

步骤23:判断连接建立是否完成,如果未完成,则返回步骤22重新执行初始化过程,否则核间通信初始化过程结束;

第三步:执行通信目标查找流程:

步骤31:查找调用者线程向通信守护线程发送查找请求信号;通信守护线程是整个通信过程中一直存在的一个守护线程,用于处理通信过程中的各类请求;

步骤32:通信守护线程调用名字查找函数扫描普通的本地线程和当前已知的远端线程的本地代理线程;如果查找结果信号非空,则向查找调用者线程发送查找结果信号,并查找名字匹配的线程,如果未找到名字匹配的线程,则会将查找请求放入操作系统的查找队列,并判断通信目标名字中是否包含“/”,如果包含,表示通信目标是远程通信目标,则调用远程查找请求函数,如果不包含,表示通信目标是本地通信目标,则在本地实现通信,本地通信过程为现有技术;如果找到名字匹配的线程,则将名字匹配结果通过信号发送给查找调用者线程,如果查找结果信号为空,则直接向查找调用者线程发送查找返回信号,告知查找调用者线程未在本地找到目标线程;

所述远程查找请求函数扫描操作系统注册的链接处理队列,比较链接处理的名字和“/”之前的那部分是否一致,如果一致,则向该链接处理发送链接查找请求信号,向该链接处理转发链接查找请求,链接处理调用链接查找请求函数进行处理,该链接查找请求函数向远端发送名字查询消息,请求远端查找对应线程,如果远端找到对应线程,则调用代理线程创建函数为该线程创建本地代理线程,并在创建后向通信守护线程发送新线程构建信号,由通信守护线程重新扫描查找队列,如果发现对应线程则向查找调用者线程发送指定的信号进行通知,如果未发现,通知查找调用者线程未找到对应线程;如果不一致,则结束;

如果远端没有找到对应线程,则将查找请求重新放入操作系统的查找队列,后面再创建新线程、新链接时重新扫描查找队列;创建新线程时,如果有名字匹配的新线程,则将向调用者线程发送查找结果信号;而创建新链接时,则向对应的新链接处理发送查找请求信号,进而查找远端,如果无名字匹配的新线程,则继续等待,直到有名字匹配的新线程;

第四步:执行通信信号发送流程:

首先获取内核信号结构体并判断目标线程的类型,若目标线程为普通的本地线程,则将待发送的信号插入目标线程的信号链表中,最后通过唤醒目标线程以通知其接收信号;若目标线程为远端线程的本地代理线程,则先判断发送钩子函数是否为空,所述发送钩子函数是用于向本地代理线程发送信号的函数;

若针对代理线程的发送钩子函数为空,表示尚无用于当前本地代理线程的钩子函数,则重定向到链接管理守护线程,并通过链接管理守护线程调用下层传输层的传输函数将信号发送到目标线程;链接管理守护线程是会话层进行链接管理中定义的一个守护线程,用于为用户实现会话层的逻辑链接;若针对代理线程的发送钩子函数非空,则通过调用相应的钩子函数以实现调用下层传输层的传输函数将信号发送到目标线程;

第五步:执行通信信号接收流程:

首先从信号链表中获取信号,若信号链表为空,则表示当前并无信号发送至本线程,本线程将进入等待唤醒状态,在下次唤醒后重新检查信号链表;若信号链表非空,则获取信号链表表头并判断该信号与目标信号是否匹配,如果不匹配则跳转到下一个信号重新匹配;如果匹配则将信号从链表中移除,并接收该信号。

优选地,所述多种物理链接方式包括不可靠介质链接方式、可靠介质链接方式、共享内存链接方式,以及mcapi链接方式。

优选地,对于不可靠介质链接方式实现数据序列化或者重传功能;对于可靠介质链接方式提供数据分段功能;对于共享内存和mcapi链接方式直接进行连接管理与监督。

(三)有益效果

本发明根据对多核系统核间通信过程中各个阶段特点的分析,将整个核间通信划分为五个层级进行设计,各个层级分别负责不同的核间通信任务。实现了统一的上层用户核间通信接口与灵活的底层硬件连接;克服了现有核间通信机制中,上层应用程序接口不统一,下层硬件适用范围狭窄的缺陷。满足了多核处理器环境下进行可靠核间通信的需求。

附图说明

图1为本发明的通信系统功能框图;

图2为通信方法初始化流程图;

图3为通信目标查找流程图;

图4为通信信号发送流程图;

图5为通信信号接收流程图。

具体实施方式

为使本发明的目的、内容、和优点更加清楚,下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。

如图1所示,本发明提供了一种分层多核处理器核间可靠通信方法,包括以下步骤:

第一步:将多核通信系统从下至上分为五个层次:

(1)链接层

链接层为上层的传输层提供了多种物理链接方式,既可以选用不可靠介质,如以太网、udp,又可选用可靠介质,如srio、tcp。同时还有共享内存、mcapi等方式可供选择,适用于各种多核处理器的应用环境。链接层的设计使得本发明技术具有更强灵活性和广泛的适应性。

(2)传输层

传输层则负责进行连接管理,针对不同的链接层链接方式提供不同的管理服务。对于不可靠介质,能够实现数据序列化或者重传功能,保证数据的完整性;对于可靠介质,则提供数据分段功能以适用于数据量较大的应用场合。而对于共享内存和mcapi则直接进行连接管理与监督。通过功能的细分,为底层不同传输介质提供了相应的传输方法。

(3)会话层

会话层能够提供统一的会话层管理,主要实现会话层的连接管理与监督、通信任务命名服务、通信地址发布与确认,以及为上层api层提供地址解析的服务。

(4)api层

api层利用下层会话层所提供的地址解析服务,构建了统一的传输接口与核间通信管理接口。使得用户通过应用层可以透明地实现多核处理器间的核间通信,而不需要考虑其他层的具体实现细节,易于用户的使用。

(5)应用层

用户利用下层api层所提供的传输接口与管理接口,能够便捷地设计与实现自己的应用程序,完成多核处理器的核间通信。

第二步:通信初始化:

图2是分层核间通信进行初始化的流程图。共分为三个步骤:

步骤一:首先是对会话层的快速链接管理进行初始化,其次完成传输层的链接管理控制初始化,然后完成传输层数据传输管理的初始化(硬件相关);

步骤二:创建cdma对象,获取传输层调用接口;创建连接控制对象,获取会话层对象;创建会话层管理对象,建立远端逻辑连接;

步骤三:判断连接建立是否完成,如果未完成,则返回步骤二重新执行初始化过程,否则核间通信初始化过程结束。

第三步:通信目标查找,如图3所示,

(1)执行查找调用者线程,向通信守护线程(是整个通信过程中一直存在的一个守护线程,负责处理通信过程中的各类请求,是一个系统级的线程)发送查找请求信号,并由通信守护线程调用查找请求函数进行处理。

(2)执行通信守护线程,调用名字查找函数扫描普通的本地线程和当前已知的远端线程的本地代理线程。如果查找结果信号非空,则会向请求查找的线程,即查找调用者线程发送查找结果信号,并查找名字匹配的线程,如果未找到名字匹配的线程,则会将查找请求放入操作系统的查找队列,并判断通信目标名字中是否包含“/”(用于区分本地、远程通信目标),如果包含,表示通信目标是远程通信目标,则调用远程查找请求函数,如果不包含,表示通信目标是本地通信目标,则在本地实现通信,本地通信过程为现有技术;如果找到名字匹配的线程,则将名字匹配结果通过信号发送给查找调用者线程。如果查找结果信号为空,则直接向查找调用者线程发送查找返回信号,告知查找调用者线程未在本地找到目标线程。

(3)所述远程查找请求函数扫描操作系统注册的链接处理队列(链表),比较链接处理的名字和“/”之前的那部分是否一致,如果一致,则向该链接处理发送链接查找请求信号,向该链接处理转发链接查找请求。链接处理调用链接查找请求函数进行处理,该链接查找请求函数向远端发送名字查询消息,请求远端查找对应线程,如果远端找到对应线程,则调用代理线程创建函数为该线程创建本地代理线程,并在创建后向通信守护线程发送新线程构建信号,由通信守护线程重新扫描查找队列,如果发现对应线程则向查找调用者线程发送指定的信号进行通知,如果未发现,通知查找调用者线程未找到对应线程;如果不一致,则结束。

(4)如果远端没有找到对应线程,将查找请求重新放入操作系统的查找队列,后面再创建新线程、新链接时重新扫描查找队列;创建新线程时,如果有名字匹配的新线程,则将向调用者线程发送查找结果信号;而创建新链接时,则向对应的新链接处理发送查找请求信号,进而查找远端,如果无名字匹配的新线程,则继续等待,直到有名字匹配的新线程。

第四步:通信信号发送,如图4所示,

发送子系统调用首先获取内核信号结构体并判断目标线程的类型:

(1)若目标线程为普通的本地线程,则将待发送的信号插入目标线程的信号链表中,最后通过唤醒目标线程以通知其接收信号;

(2)若目标线程为远端线程的本地代理线程,则先判断发送钩子函数是否为空。所述发送钩子函数是用于向本地代理线程发送信号的函数;

若针对代理线程的发送钩子函数为空,则表示尚无用于当前本地代理线程的钩子函数,需要重定向到链接管理守护线程(是会话层进行链接管理中定义的一个守护线程,用于为用户实现会话层的逻辑链接),并通过快速链接管理守护线程调用下层传输层的传输函数将信号发送到目标线程;

若针对代理线程的发送钩子函数非空,则通过调用相应的钩子函数以实现调用下层传输层的传输函数将信号发送到目标线程。

第五步:通信信号接收,如图5所示,

(1)接收子系统调用首先从信号链表中获取信号,若信号链表为空,则表示当前并无信号发送至本线程(目标线程),本线程将进入等待唤醒状态,在下次唤醒后重新检查信号链表;

(2)若信号链表非空,则获取信号链表表头并判断该信号与目标信号是否匹配,如果不匹配则跳转到下一个信号重新匹配;如果匹配则将信号从链表中移除,并将信号返回给待接收线程。

可以看出,本发明通过将处理器核间通信过程分层设计,使得通信过程中各个阶段更加概念化,易于用户理解使用并为用户提供了一种可靠的核间通信方法。面向底层所抽象出的链接层,支持可靠的和非可靠连接,支持当前主流的各种传输媒介,使得本发明具有高可重用性;针对上层用户则提供了透明的、统一的系统调用接口,易于用户理解与使用;中间传输层与会话层的设计则起到软硬件衔接作用,可以在不同硬件基础上,为不同的操作系统及用户需求提供可扩展的核间通信服务。

采用本发明所设计的分层多核核间可靠通信的方法,在嵌入式操作系统与多核dsp环境下,按照500字节到4千字节数据量进行通信测试,试验结果表明,所设计的核间通信方法通信耗时能够满足实时性要求,且通信耗时稳定,表明本发明具有较高的通信稳定性;经过反复测试未出现数据丢失情况,表明本发明具有高可靠性。在应用层用户应用程序开发过程中,仅需调用各个系统调用就可构建起整个核间通信过程,易于用户使用,具有高可用性。针对不同的底层硬件,提供多种扩展接口,实现了多种多核系统之间的连接,具有较强的可扩展性。

以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1