一种使用处理器实现多处理器间通信的方法与流程

文档序号:16530833发布日期:2019-01-05 10:44阅读:205来源:国知局
一种使用处理器实现多处理器间通信的方法与流程

本发明涉及处理器技术领域,具体的说是一种使用处理器实现多处理器间通信的方法。



背景技术:

随着现在多核处理器系统的普及,多核间的通信成为影响多核间协同工作的主要问题。目前多核间通信方法有:

(1)工作在不同处理器上的应用程序,作为操作系统的进程或线程,各个进程或线程间的通信交由处理器核上运行的操作系统通过线程进程间的信息传递和数据交换来实现的。这种方法的问题是,对于那些没有操作系统的特定多核系统或某些专用领域,实现多核间通信就不适用。

(2)利用软件来实现队列(例如先入先出队列)来实现多处理器核间的通信。这种方法往往具备方向性,例如生产者——消费者模式。一个处理器充当生产者,当队列不满或符合指定条件时往队列中写入;另一个处理器充当消费者,当队列不空或符合指定条件时读取队列。这种方法的问题是,通过软件来实现多核间通信速度慢;同时不支持中断,消费者处理器只能通过查询的方式来获取队列中的数据存放信息。

(3)利用星型、总线型等拓扑结构的片上网络或总线,加一个核心调度处理器及其它处理器和硬件ip核总成的多核间通信系统。在这网络中要放置核心调度处理器,由核心调度处理器来实现各个处理器之间通信的消息传递。这种结构的缺点是为了实现多核间通信占用了大量硬件资源,需要1个专门的处理器作为核心调度处理器,这个处理器不能用作其它用途;对多核片上系统架构的限制过于严格,必须要使用该技术对应的片上网络或总线。

(4)也有些厂商设计了基于硬件的多核间通信模块,但是这些模块不具备通用性,只在该厂商特定的处理器核间使用。例如ti公司的多核dsp产品,就采用了专门的核间通信寄存器等组件来实现通信。

(5)而且这种基于硬件的多核间通信模块,一旦芯片设计出来后就固定了,难以根据实际应用场景改变。因为在多核系统,处理器核数目比较多,所以需要集成的通信模块也会比较多,有可能需要2个,3个,4个,8个等等。一旦芯片生产后,通信模块的个数就固定了,对于处理器核数在几个,几十个内的多核系统,在设计芯片时,队列数目是可以大致评估的。但对于大型多核系统,例如单芯片上集成几百个处理器核,这时在设计芯片时难以评估芯片在应用时需要的通信模块数目。加入大量通信模块会导致浪费,加入少量又担心不足。



技术实现要素:

针对上述现有技术不足,本专利提供一种使用系统中一个处理器实现多处理器间通信的方法。在一个多核系统中,如果能用其中1个处理器来作为各个处理器之间的信息通信桥梁灵活性大大提高。此处理器上能支持根据多核程序需求搭建大量或少量的通信队列,同时对于那些不需要队列的应用,则此处理器也可以用作其它用途。

本发明提供的一种使用处理器实现多处理器间通信的方法是通过以下技术方案实现的:

一种使用处理器实现多处理器间通信的方法,包括:

使用一个处理器和一个存储器来搭建通信队列实现各处理器间的通信。所述存储器必须能被系统中参与通信的各个处理器都能访问到。所述通信队列由队列控制字和队列中存放消息的消息存储区构成,所述队列控制字存放于队列控制字存储区;

当系统集成多个通信队列时,将多个通信队列组成队列堆;

队列控制字存储区第一个单元存放队列新建锁,第二个单元存放队列个数;

一个队列控制字包括7个:

(1)队列状态字state:存放本队列运行状态的说明信息。,包括队列状态st,队列编号id;st、id的位宽可以根据实际情况灵活设定;队列状态st指示本队列的状态,用于队列需求方和通信处理器之间的握手和通信;

(2)写指针控制字wptr:记录消息写入方当前在存储器中的写入地址,此地址是下一个要写的单元地址;每当写入方完成写操作后会更新此寄存器;

(3)读指针控制字rptr:记录消息读取方当前在存储器中的读取地址,此地址是下一个要读的单元地址;每当读取方完成读操作后会更新此控制字;

(4)有效单元数控制字validnum:记录当前已经写入但还未被读取的单元个数;此控制字的数值是由消息控制器内部逻辑电路计算完成,不需要外部处理器干预;此控制字可供消息写入方和读取方读取;

(5)中断上报控制控制字intctrl:控制是否要向消息读取方发出中断,以及有效单元数达到多少时才会向消息读取方发出中断;

(6)存储器基址控制字qbase:队列中存放的消息数据是存放在一块存储器中的;存储器基址控制字qbase用于记录此存储器在系统存储空间中的首地址;

(7)队列容量控制字qsize:记录消息存放存储区域的容量;

写入方在写入时要计算“wvalid=qsize-validnum”,wvalid即为最多能写入的队列单元个数。判断wvalid数值是否大于等于本次要写入的数据量,如果大于等于则可写入,并更新wptr,否则则不能写入,继续等待;

读取方可以通过设置中断上报控制字,通过中断引发中断处理程序完成消息读取操作,可以通过直接查询的方式;当通过查询的方式时,要判断validnum是否大于等于本次要读取的数据量,如果大于等于则读取,并更新rptr,否则继续等待。

所述队列状态字其包含的状态有:

(7)队列无效:说明本队列无效且是最后1个队列。由于各个队列的控制字是连续存放的,无效队列永远是位于最后1个,这也说明队列控制字区域的结束;当然当其他处理器需要新增队列时,则需修改st数值为“队列建立请求”,这样通信处理器就会新增7个控制字,6个是本队列的控制字,最后1个是下一个队列的状态字。下一个队列的状态字的st继续设置为无效;

(8)队列建立请求:通信处理器如果检测到最后1个队列状态字为“队列建立请求”,则会新建队列,并把新建队列的下一个队列的状态字的st设置为无效;

(9)队列正常:指示本队列可以正常操作;

(10)队列删除请求:当队列的使用方不再需要此队列时,设置为此状态。通信处理器会回收本队列。回收本队列时,队列控制字不会回收,但其消息存储区可以回收,也可以不回收;如果不回收则留给未来其它通信使用。;

(11)队列删除确认:通信处理器已经确认了队列删除请求,并把该队列加入了通信处理器内部维护的“可使用队列编号组”;“可使用队列编号组”用于记录已经删除的队列编号,当需要新建队列时,通信处理器优先把“可使用队列编号组”中记录的队列分配给使用方,并从“可使用队列编号组”删除分配出去的队列;如果“可使用队列编号组”中没有队列记录,则会新建队列;

(12)队列无效但队列id有效:这种状态出现在如下情况下:当队列需求方发出队列新建请求,即将最后1个队列状态字的st设置为队列建立请求时,如果通信处理器的“可使用队列编号组”中有之前回收的可再使用的队列,则会把最后1个队列状态字设为本状态数值,同时把“可使用队列编号组”中要分配给队列需求方使用队列的id写入最后1个队列的状态字的id字段;队列需求方发现最后1个队列状态字的st处于此状态时,读取最后1个队列的状态字的id字段,将最后1个队列状态字的st设置为队列无效,并使用读到的id指定的队列;状态字id字段说明队列的编号。

所述validnum的计算方法是:当wptr>=rptr时,validnum=wptr-rptr(此情况下,写指针在队列前面,读指针在队列后面,已经写入但未被读走的有效单元是在2个指针之间);当wptr<rptr时,validnum=qsize-rptr+wptr(此情况下,写指针在队列后面,读指针反倒在队列前面,已经读取而未被写入的无效单元是在2个指针之间,有效单元数就是队列容量减去无效单元个数),这一计算过程是通信处理器完成的;

队列的尾地址qend=qbase+qsize。读写指针数值必须在首地址和尾地址之间(含首地址,不含尾地址)。写入方和读取方在更新wptr和rptr,如果wptr或rptr等于qend,则要将wptr或rptr更新为qbase,即从存储器首地址再开始。

所述队列控制字是连续存放的。

所述新建队列的步骤为:

a、写队列处理器读取写指针,有效单元个数,存储器基址和存储容量,然后判断是否可写,如果写入后再更新写指针。更新后如果系统约定采用中断的方式,向通信处理器发送中断,以启动通信处理器更新队列控制字。

b、读队列处理器读取读指针,中断上报控制,有效单元个数,存储器基址和存储容量,然后判断是否可读,如果可读则读取后再更新读指针。也可以对中断上报控制进行修改,以开启或关闭中断上报,及设置上报阈值。更新后如果系统约定采用中断的方式,也会向通信处理器发送中断,以启动通信处理器更新队列控制字。

c、通信处理器可以逐个查询每个队列的读写指针是否有更新,如果有更新则重新计算validnum;也可以通过中断的方式,当某一个队列的读写指针有变化时会引起通信处理器的中断。这个中断触发可以是读写队列处理器通过事件触发的,也可以由系统设计人员加入专门逻辑实现。如果系统约定采用中断通知的方式,通信处理器也会检查是否符合中断上报条件,如果符合会向读队列处理器或写队列处理器发送中断。

本发明的有益效果是:

(1)通用性强。即便是不加入专门的硬件逻辑电路,使用一个处理器和一块存储空间也可以实现多处理器间通信;

(2)更加灵活。如果不实现这种方法,通信处理器可以用作其他用途,不会浪费处理器资源;如果实现的队列个数较少时,通信处理器仍然可以有一部分负载做其他用途。实现方式也比较灵活,可以采用中断或查询的方式。通过查询方式可以减轻处理器上程序难度,但是会占用处理器运行时间;而通过中断方式,处理器处理的响应速度提高;同时处理器主程序可以做其它事情,当符合条件时才会处理,提高了处理器的利用效率;

(3)对队列的种类没有限制,包括但不限于先入先出队列,先入后出队列。队列的种类可根据应用场景选取。

(4)对多核系统架构限制较小,不仅仅适用于多核片上系统,也能适用于多个处理器芯片互联组成的板上系统;

(5)各个处理器都可通过总线或网络对队列读写,队列本身没有规定方向性。同一个处理器对此队列先写入消息再读出消息也可以。这样做是为了提高通用性,同一个处理器上运行多个进程或线程的时候会出现这种情况。另外如果实现的是先入后出队列,同一个处理器也可以把这个队列作为堆栈使用。

附图说明

图1是本发明实施例1结构示意图;

图2是本发明实施例2结构示意图;

图3是队列控制字的读写方向以及控制字存储区结构示意图;

图4为新建队列的步骤图。

具体实施方式

下面将通过实施例对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

实施例1

一种使用处理器实现多处理器间通信的方法,包括:使用一个处理器和一个存储器来搭建通信队列实现各处理器间的通信。所述存储器必须能被系统中参与通信的各个处理器都能访问到。所述通信队列由队列控制字和队列中存放消息的消息存储区构成,所述队列控制字存放于队列控制字存储区;

如图1所示,处理器0的程序放在程序存储器0中,数据存放在数据存储器0中。处理器1的程序放在程序存储器1中,数据存放在数据存储器1中。同理处理器2和3。但这些4个程序存储器和4个数据存储器都能被这4个处理器访问到。

实施例2

如图2所示,存储器0和1为系统中的各个处理器的共享存储器,能被各个处理器访问到。

实施例3

当系统集成多个通信队列时,将多个通信队列组成队列堆;采用处理器组建队列堆,就是用处理器和处理器上运行的程序来实现各个队列的控制功能。队列的控制字和消息存储区放到系统中各个处理器都能访问到的区域。队列的组织方式包括先入先出,先入后出等。队列中的最小单元位宽可以是字节(8位),半字(16位),字(32位)等。队列中的单元个数是灵活可配的。

实施例4

队列控制字存储区第一个单元存放队列新建锁,第二个单元存放队列个数。由于队列控制字存储区首地址是系统中约定的,这样通过首地址和队列个数,各个处理器都能计算出队列控制字最后一个队列状态字的地址。同时由于每个队列控制字长度总是7个控制字,所以只要知道队列的id编号,就能知道队列的控制字存放地址。

“队列新建锁”是为了避免多个处理器同时新建队列时引发的冲突。由于在多核系统中会出现多个处理器同时写最后1个队列控制字以发出新建队列请求,所以加入这个控制字,起到互斥访问的作用。队列新建锁无效时可以是某一数值,例如0xffffffff。在多核系统中,每个处理器都有自己的处理器id,当处理器要发出新建队列请求时,首先读取队列新建锁,如果队列新建锁中数值不是无效,则继续等待;如果队列新建锁中数值为无效,则将自己的id写入队列新建锁。写入后开始写入最后1个队列控制字以发出新建队列请求。注意这个过程中处理器对这个队列新建锁控制字的“读—写”操作必须是原子操作,即顺序不可以被打乱,也不可以被切割而只执行其中的一部分,将整个操作视作一个整体。原子操作可以使用处理器自身提供的原子操作指令来实现。

等完成队列新建后,队列新建锁会被重新设置为无效。这时其它处理器可以继续发出队列新建请求。

实施例5

如图4所示,所述新建队列的步骤为:

a、写队列处理器读取写指针,有效单元个数,存储器基址和存储容量,然后判断是否可写,如果写入后再更新写指针。更新后如果系统约定采用中断的方式,向通信处理器发送中断,以启动通信处理器更新队列控制字。

b、读队列处理器读取读指针,中断上报控制,有效单元个数,存储器基址和存储容量,然后判断是否可读,如果可读则读取后再更新读指针。也可以对中断上报控制进行修改,以开启或关闭中断上报,及设置上报阈值。更新后如果系统约定采用中断的方式,也会向通信处理器发送中断,以启动通信处理器更新队列控制字。

c、通信处理器可以逐个查询每个队列的读写指针是否有更新,如果有更新则重新计算validnum;也可以通过中断的方式,当某一个队列的读写指针有变化时会引起通信处理器的中断。这个中断触发可以是读写队列处理器通过事件触发的,也可以由系统设计人员加入专门逻辑实现。如果系统约定采用中断通知的方式,通信处理器也会检查是否符合中断上报条件,如果符合会向读队列处理器或写队列处理器发送中断。

所述处理器之间的中断触发要借助于系统中的中断控制器以及相关中断寄存器;处理器一般不会直接向另外一个处理器发送中断;常见的实现2个处理器之间中断通信的方法例如:处理器a会写入中断控制器中或系统中的一个寄存器某一位b,位b被写入后会触发了处理器c的中断信号线变化,从而引起处理器c的中断。

以上所述实施例仅表示本发明的实施方式,其描述较为具体和详细,但并不能理解为对本发明范围的限制。应当指出的是,对于本领域的技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明保护范围。

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