发明内容
鉴于以上所述现有技术的缺点,本发明的目的在于提供一种多核间的通信系统、基于该系统的通信控制方法及服务器,用于解决现有技术中CPU构架无法满足多核间通信的需求,CPU之间的通信速率出现瓶颈,无法实现双通信的实时性的问题。
为实现上述目的及其他相关目的,本发明一方面提供一种多核间的通信系统,应用于集成有多个运算核的处理器;所述多核间的通信系统包括:共享内存,用于为所述运算核的各个进程提供操作通信数据的访问空间;中间层,位于所述处理器与所述共享内存之间,用于提供进程间操作所述访问空间的接口,且在两个运算核之间传递通信数据;所述中间层包括用于传递所述通信数据的消息内容结构体、和与所述消息内容结构体匹配的消息标志结构体,其中,所述消息标志结构体用于控制所述多个运算核中至少两运算核的各个进程对同一访问空间的访问冲突。
于本发明的一实施例中,每一所述数据空间配置有一内存地址;所述中间层还用于为所述共享内存指定起始地址和内存大小;所述中间层通过所述起始地址,以获取共享内存中各个访问空间的内存地址。
于本发明的一实施例中,所述中间层包含进入区、临界区、退出区、及剩余区;其中,所述进程在所述进入区检查是否可进入所述临界区;若是,设置用于防止其他进程进入所述临界区的访问标志。
于本发明的一实施例中,所述消息标志结构体包括读变量、写变量、正在操作的标识变量、及同步信号量;当读变量和写变量等于0时,表示读操作,和写操作都可以访问所述消息内容结构体对应的访问空间;当读变量等于1时,表示读方有读取所述访问空间中通信数据的需求;当写变量等于1时,表示写方有将通信数据写入所述访问空间的需求;正在操作的标识变量,表示读方或写方正在操作所述访问空间,阻止同时发生读取和写入;同步信号量,表示该访问空间是处于已写入通信数据还是已读取其中通信数据。
于本发明的一实施例中,当多个运算核中任意两运算核需对共享内存中的同一访问空间进行访问时,所述标志控制体通过采用用于实现互斥的并发程序设计算法来控制两运算核之间对同一访问空间的访问冲突。
于本发明的一实施例中,所述进入区具有状态变量flag[0]和flag[1],用于表示临界区状态及哪个进程正在占用临界区;其中,若一进程已进入临界区,该进程设置flag[0]为真,则另一进程不能进入临界区;如果另一进程进入临界区,那么flag[1]为真,一进程被阻塞不能进入临界区;若一进程和另一进程都想进入所述临界区,则先设置正在操作的标识变量的进程可以先进入。
本发明另一方面提供一种基于所述的多核间的通信系统的通信控制方法,所述通信控制方法包括以下步骤:获取共享内存中各个访问空间的内存地址;当多个运算核中任意两运算核的各个进程对同一访问空间的访问时,根据该同一访问空间的内存地址查看该访问空间是否可用;若是,则对该访问空间进行相应操作。
于本发明的一实施例中,若一运算核的进程需对该访问空间进行读取该访问空间中通信数据,另一运算核的进程需对将通信数据写入该通信数据时,根据该同一访问空间的内存地址查看该访问空间是否可用,若是,一运算核的进程通过中间层及采用用于实现互斥的并发程序设计算法排斥另一运算核的进程对将通信数据写入该访问空间的写入操作,对该访问空间中通信数据进行读取操作。
于本发明的一实施例中,根据该同一访问空间的内存地址查看该访问空间是否可用,若是,另一运算核的进程通过中间层及采用用于实现互斥的并发程序设计算法排斥一运算核的进程读取该访问空间中通信数据的读取操作。
本发明最后一方面提供一种服务器,所述服务器包括所述的多核间的通信系统。
如上所述,本发明的多核间的通信系统,基于该系统的通信控制方法及服务器,具有以下有益效果:
本发明所述的多核间的通信系统,基于该系统的通信控制方法及服务器满足了多核间通信的需求,实现了基于共享内存的稳定高效的消息传递策略,突破了传统的通讯速率的瓶颈,极大的提高了实时性。
实施例一
本实施例提供一种多核间的通信系统,应用于集成有多个运算核的处理器;所述多核间的通信系统包括:
共享内存,用于为所述运算核的各个进程提供操作通信数据的访问空间;
中间层,位于所述处理器与所述共享内存之间,用于提供进程间操作所述访问空间的接口,且在各运算核之间传递通信数据;所述中间层包括用于传递所述通信数据的消息内容结构体、及与所述消息内容结构体匹配的消息标志结构体,其中,所述消息标志结构体用于控制所述多个运算核中至少两个运算核的各个进程以避免对同一访问空间的访问冲突。
以下将结合图示对本实施例所提供的多核间的通信系统进行详细描述。本实施例所述的多核间的通信系统应用于集成有多个运算核的处理器。请参阅图1,显示为应用于处理器的多核间的通信系统于一实施例中的原理结构示意图。如图1所示,所述处理器1集成有双核,即运算核11和运算核12,运算核11运行着运动控制系统,它需要获得来自于外部编码器的位置数据;运算核12则负责处理并计算外部的编码器数据。
继续参阅图1,所述多核间的通信系统2包括共享内存21和中间层22。
所述共享内存21用于为所述运算核的各个进程提供操作通信数据的访问空间。该访问空间可用于缓存通信数据,每一访问空间具有对应的内存地址。请参阅图2,显示为共享内存的原理结构示意图。如图2所示,共享内存21分为多个访问空间,例如,访问空间211,访问空间212,访问空间213,访问空间214;所述共享内存21具有起始内存地址,并根据起始内存地址为访问空间211,访问空间212,访问空间213,访问空间214映射分配内存地址。在本实施例中,所述共享内存的内存大小为64K,可以满足核间通信的所有数据。如果要传输的通信数据很大,可以将该通信数据分段分次的写入共享内存。
所述中间层22是对核间/进程间通信机制的,可以使得核间/进程间通过共享内存传递通信数据,即用于同一运算核的进程间进行高效通信。在本实施例中,采用C语言编写中间层,在编译之前需要为所述共享内存指定起始地址和内存大小。所述中间层通过所述起始地址,以获取共享内存21中各个访问空间的内存地址。
位于所述处理器1与共享内存21之间的所述中间层22用于提供进程间操作所述访问空间的接口,且在两个运算核之间传递通信数据。原理如下:1)通过接口获得共享内存中各个访问空间的内存地址;2)当对访问空间进行操作时,通过中间层到共享内存的内存地址进行读写操作;3)共享内存的同步互斥通过peterson算法实现。
具体地,所述中间层22由全局数据结构体构成,而所述全局数据结构体包括若干用于传递所述通信数据的消息内容结构体、和与所述消息内容结构体匹配的,用于控制多个运算核中任意两运算核的各个进程对同一访问空间的访问冲突的消息标志结构体。
在本实施例中,所述全局数据结构体定义如下:
Typedef struct
{
…
a_item;
a_item_flag;
b_item;
b_item_flag;
…
}SharedMem;
在全局数据结构体中,a_item做为其中一个要传递的消息内容结构体,a_item_flag是与所述消息内容结构体a_item匹配的,用于控制多个运算核中任意两运算核的各个进程对同一访问空间的访问冲突,即实现双核同步互斥的消息标志结构体。在本实施例中,每一个消息内容结构体都会伴随着一个消息标志结构体。
具体地,所述消息标志结构体如下:
typedef struct
{
unsigned int read;
unsinged int write;
unsigned int turn;
unsigned int latest;
}AccessFlag;
所述消息标志结构体包括读变量read,写变量write,正在操作的标识变量turn,及同步信号量latest。
其中,当读变量和写变量等于0时,表示读操作,和写操作都可以访问所述消息内容结构体对应的访问空间;
当读变量read等于1时,表示读方,即运算核或运算核中的进程有读取所述访问空间中通信数据的需求;
当写变量write等于1时,表示写方,即运算核或运算核中的进程有将通信数据写入所述访问空间的需求;
正在操作的标识变量turn,表示读方或写方正在操作所述访问空间,阻止同时发生读取和写入;
同步信号量latest,表示该访问空间是处于已写入通信数据还是已读取其中通信数据。
在本实施例中,所述中间层包含进入区、临界区、退出区、及剩余区;其中,所述进程在所述进入区检查是否可进入所述临界区;若是,设置用于防止其他进程进入所述临界区的访问标志。本实施例中,共享内存21做为临界资源,一次仅允许一个进程使用。为了解决对临界资源的竞争问题,引入了临界区概念,对临界资源竞争的每个进程中有一个代码段称为临界区,当一个进程在临界区内执行时,其他程序不允许在临界区执行。在本实施例中,进入区为进程先在进入区检查是否可进入临界区,如果可以,设置访问标志以防止其他进程进入临界区。临界区为进程中访问临界资源的代码。在退出区将访问标志清除。剩余区为其他代码。
具体地,当多个运算核中任意两运算核需对共享内存中的同一访问空间进行访问时,所述标志控制体通过采用用于实现互斥的并发程序设计算法(Peterson算法)来控制两运算核之间对同一访问空间的访问冲突。所述进入区具有状态变量flag[0]和flag[1],用于表示临界区状态及哪个进程正在占用临界区;其中,若一进程已进入临界区,该进程设置flag[0]为真,则另一进程不能进入临界区;如果另一进程进入临界区,那么flag[1]为真,一进程被阻塞不能进入临界区;若一进程和另一进程都想进入所述临界区,则先设置正在操作的标识变量的进程可以先进入,先到先得。
在本实施例中,所述Peterson算法满足了同步互斥机制的四准则:
空闲让进:当无进程处于临界区内时,必须让一个要求进入临界区的进程立即进去,有效利用临界资源。
忙则等待:当已有进程处于临界区时,其他试图进入临界区的进程必须等待,以保证它们互斥的进入临界区。
有限等待:对要求进入临界区的进程,应在有限时间内使之进入,以免“死等”。
让权等待:对于等待进入临界区的进程,它必须立即释放处理器,以免“忙等”。
以下提供通过中间层和用于实现互斥的并发程序设计算法(Peterson算法)基于上述的多核间的通信系统的通信控制方法。
所述多核间的通信系统1具体应用于双核处理器,即A核和B核。A核运行着运动控制系统,需要获得来自于外围设备的通信数据;B核则用于处理并计算外围设备的通信数据。所以实施例中涉及A核的一进程到共享内存的一访问空间读取通信数据的读取操作,和B核的另一进程将通信数据写入共享内存的该访问空间的写入操作。
请参阅图3,显示为基于多核间的通信系统的通信控制方法的一种实施流程示意图。如图3所示,所述通信控制方法包括以下几个步骤:
S31,A核和/或B核获取共享内存中各个访问空间的内存地址。在本实施例中,通过中间层,获取共享内存中各个访问空间的内存地址。
S32,当多个运算核中任意两运算核的各个进程对同一访问空间的访问时,根据该同一访问空间的内存地址查看该访问空间是否可用;若是,则执行步骤S33,即对该访问空间进行相应操作;若否,则执行步骤S34,即进入等待该访问空间为可用的等待状态。
在本实施例中,步骤S33具体包括:
根据该同一访问空间的内存地址查看该访问空间是否可用,若是,一运算核的进程通过中间层及采用用于实现互斥的并发程序设计算法(Peterson算法)排斥另一运算核的进程对将通信数据写入该访问空间的写入操作,对该访问空间中通信数据进行读取操作。
或根据该同一访问空间的内存地址查看该访问空间是否可用,若是,另一运算核的进程通过中间层及采用用于实现互斥的并发程序设计算法(Peterson算法)排斥一运算核的进程读取该访问空间中通信数据的读取操作。
在本实施例中,A核和B核对共享内存中同一访问空间的访问冲突由Peterson算法控制,满足同步互斥的原则:“空闲让进”、“忙则等待”、“有限等待”、“让权等待”。
在本实施例中,处理器的传输1G bytes,每次读写的数据为2k bytes,总耗时1.66s。说明CPU之间的通信速率可达622M bytes/s(5Gbps),这是工业以太网等传统总线都无法达到的传输速率,这样就保证了双通信的实时性,进而保证了运动控制器和伺服控制器的实时性。
本实施例所述的多核间的通信系统,及基于该系统的通信控制方法满足了多核间通信的需求,实现了基于共享内存的稳定高效的消息传递策略,突破了传统的通讯速率的瓶颈,极大的提高了实时性。