CN1295633C - 一种多cpu通信的方法 - Google Patents
一种多cpu通信的方法 Download PDFInfo
- Publication number
- CN1295633C CN1295633C CNB021589100A CN02158910A CN1295633C CN 1295633 C CN1295633 C CN 1295633C CN B021589100 A CNB021589100 A CN B021589100A CN 02158910 A CN02158910 A CN 02158910A CN 1295633 C CN1295633 C CN 1295633C
- Authority
- CN
- China
- Prior art keywords
- cpu
- buffer zone
- message
- control
- output unit
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Abstract
本发明提供了一种多CPU通信的方法,该方法包括以下步骤:分别设置与CPU相连的可相互访问的外挂内存空间,将待发送的数据报文由发送方CPU写入与接收方CPU相连的内存空间,设置寄存器以产生中断信号给接收方CPU,接收方CPU收到中断信号后,进行数据报文接收;将待发送的控制报文由发送方CPU写入智能输入输出单元的缓冲区,产生智能输入输出单元的中断信号给接收方CPU,接收方CPU收到中断信号后,从智能输入输出单元的缓冲区中取得控制报文。应用本发明,采用不同的中断和传输通道进行数据传输,解决了重要数据的安全问题,提高了数据传输的速度。
Description
技术领域
本发明涉及通信技术领域,特别是指一种多CPU通信的方法。
背景技术
随着计算机及通信技术的发展,单个CPU已经无法满足人们的需求,多CPU技术也就随之应运而生。
图1所示为主从式多CPU结构。将具有强大运算能力的通用处理器作为主CPU,将通信控制器或网络处理器等具有强大的通信控制功能和数据转发能力的CPU作为接口元件互连(PCI:Peripheral ComponentInterconnection)总线上的普通PCI设备,完成和外界通信或数据转发功能。这样,在一块单板上就同时拥有强大的运算能力和快速的数据转发能力,这种结构被称之为主从式多CPU结构。
针对主从式多CPU结构,其CPU间的通信通常采用“共享内存+邮箱协议”的方案。图2所示为共享内存式通信队列。在每个CPU都能访问到的空间中建立两个队列,采用接收指针(Precv)和发送指针(Psend)两个指针来对队列进行管理,Precv指向当前正在读取的缓冲区地址,Psend指向存放下一个待发送数据的缓冲区地址。每个队列由32或64个大小为2KB的缓冲区组成,每个缓冲区存放一个需要传输的数据包。队列0中存放主CPU发给从CPU的数据,从CPU定时来读取,队列1中存放从CPU发给主CPU的数据,而主CPU也是定时来读取。
主从CPU间数据发送的方式是完全相同,下面以主CPU向从CPU发送数据包为例来说明数据传输过程。
主CPU随机地向队列0中写入数据,为防止每个缓冲区中的数据包在没有被取走前,被新的数据改写,设置每个缓冲区的第一个长字为控制位。当有数据需要写入缓冲区时,首先判断缓冲区的第一个长字的内容,若缓冲区的第一个长字为0x5555aaaa,则表示当前缓冲区内的数据包有效,还没有被取走,不能写入新数据;若缓冲区的第一个长字为0xaaaa5555,则表示当前缓冲区内的数据包已经被取走,可以写入新的数据。如果整个队列的每个缓冲区中的数据包全部有效,新来的数据将被丢弃。
从CPU定时地读取队列0中的数据。Precv从队列的头部遍历到队列的尾部,一旦发现某个缓冲区的第一个长字内容为0x5555aaaa,就把该缓冲区的数据读取出来,同时把该缓冲区的第一个长字修改为0xaaaa5555。从CPU读取数据所需时间的设置原则是:假如从CPU把队列0中所有数据包读取完毕需要的时间为T,为防止从CPU一次读取时有数据包被遗漏,则设置从CPU读取所有数据包的时间为1.5T~2T。
为了解决访问冲突问题和防止在数据接收的同时新来的数据被丢弃,在取出队列0头部第一个缓冲区的数据包后,立刻修改指针Psend的指向,使它指到队列0的头部,新来的数据就存放在队列0的头部。并且在所有数据包全部取出后,修改指针Precv的指向,使它指向队列0的头部,以保证从CPU每次都是从缓冲区队列的头部开始读取数据。
从上述实现方式中可以看出,此方法存在以下缺点:
由于传输带宽与传输每个数据包的延迟时间相互矛盾,即传输每个数据包的延迟时间越长,传输带宽也就相对越小,所以,一旦队列长度和读取所有数据包所需的时间确定,传输带宽和传输每个数据包的延迟时间也就随之确定,为保证每次能把数据包全部取走避免遗漏,每次读取所有数据所需的时间应该足够长,而该时间增大就意味着传输每个数据包的延迟时间增大,这对于实时性很强的业务来说是不能允许的。
CPU间传输的数据很多,各种数据的优先级和重要程度都不同,有的数据包允许被丢弃,而有的数据包一旦被丢弃,将造成系统工作异常。在上述现有技术方案中,无论是普通的数据报文还是重要的控制报文,所有的数据包都是通过同一个通道同一方式进行传输,无法保证重要数据的可靠性。
对于每个队列来说,数据的写入是随机的,而数据的读取是定时的,访问冲突的问题很难彻底避免和解决。
由于依靠接收指针和发送指针来对队列进行管理,且主从CPU都有一套维护指针的软件代码,增加了软件设计的复杂度。
发明内容
有鉴于此,本发明提供了一种多CPU通信的方法,在增加传输带宽的同时大大减少传输每个数据包的延迟时间,降低系统的丢包率;同时,彻底解决重要数据的可靠性问题;并且可以完全避免访问冲突,防止由于访问冲突而引起的数据异常。
为达到上述目的,本发明的技术方案是这样实现的:
一种多CPU通信的方法,该方法包括以下步骤:
分别设置与CPU相连的可相互访问的外挂内存空间,在各内存空间内,分别建立一固定大小的缓冲区,作为接收对方数据报文的目的地址;
发送方CPU申请本方缓冲区的动态空间并存放待发送的数据报文;之后,将本方缓冲区动态空间中的数据报文写入接收方缓冲区的目的地址;然后,设置寄存器以产生中断信号给接收方CPU,接收方CPU收到中断信号后,进行数据报文接收处理;
发送方CPU将待发送的控制报文分割为控制帧,将分割后的控制帧写入智能输入输出单元的缓冲区,产生智能输入输出单元的中断信号给接收方CPU,接收方CPU收到中断信号后,从智能输入输出单元的缓冲区中取得控制帧,得到控制报文。
较佳地,所述设置外挂内存空间步骤进一步包括:在每个与CPU相连的外挂内存空间内的缓冲区中,增设控制该缓冲区是否可写入消息的控制位。
较佳地,在数据报文的传输过程中,
所述发送方CPU申请本方缓冲区动态空间的过程包括以下步骤:发送方CPU判断本方控制位是否为可写入消息状态,如果是,则申请本方缓冲区的动态空间,否则等待一定时间后,强制把该控制位设置为可写入消息状态,再申请本方缓冲区的动态空间;
所述发送方CPU将本方缓冲区动态空间中的数据报文写入接收方缓冲区的目的地址后,进一步包括:将本方控制位设置为禁止写入消息状态;
所述接收方CPU处理完收到的数据报文后,进一步包括:将发送方的控制位修改为可写入消息状态。
较佳地,所述发送方CPU将分割后的控制帧写入CPU内的智能输入输出单元的缓冲区的过程包括以下步骤:
发送方CPU根据智能输入输出单元中的缓冲区尾指针得到空闲消息帧头指针的地址,然后向该指针所指的缓冲区中写入待传送的控制帧,每写一帧,尾指针指向该缓冲区的下一个空闲消息帧,直到该待传送控制报文的所有帧写入完毕,将该缓冲区计数器的值加一;
所述接收方CPU从智能输入输出单元的缓冲区中取得控制帧的过程包括以下步骤:
接收方CPU接到中断信号后,在智能输入输出单元的寄存器中,得到发送方CPU发来的控制帧所在地址的指针,然后从该指针指向的缓冲区空间处取得控制帧,每取一帧,缓冲区头指针指向该缓冲区中的下一个消息帧所在的地址,直到取完该待传送控制报文的所有控制帧后,缓冲区计数器的值减一。
较佳地,发送方为从CPU,接收方为主CPU,其中从CPU包括内核和微引擎两部分;
所述从CPU将本方缓冲区动态空间中的数据报文以直接存取控制方式写入与主CPU相连的缓冲区的目的地址;
所述从CPU的微引擎接收到主CPU返回的硬件信号通知后,将本方的控制位设置为禁止写入消息状态,产生中断通知从CPU的内核;
所述从CPU的内核通过控制门铃寄存器发中断信号给主CPU;
所述主CPU收到中断信号后,进行数据报文的接收处理包括:读取本方缓冲区中的数据,将其封装并发送给上层软件。
较佳地,发送方为主CPU,接收方为从CPU,其中从CPU包括内核和微引擎两部分;
所述主CPU将本方缓冲区动态空间中的数据报文以字节拷贝方式或直接存取控制方式写入与从CPU相连的缓冲区的目的地址;
所述主CPU设置从CPU的门铃寄存器发中断信号给从CPU的内核;
所述从CPU的内核设置本方的内部线程中断寄存器,使从CPU的微引擎产生中断;
所述从CPU的微引擎收到中断信号后,进行数据报文的接收处理包括:转发本方缓冲区中的数据报文;
由所述从CPU的微引擎将主CPU的控制位设置为可写入消息状态。
较佳地,所述的固定大小的缓冲区中,只存放一个包括报头和报文的数据报文。
较佳地,发送方为从CPU,接收方为主CPU;
所述发送方CPU根据智能输入输出单元中的缓冲区尾指针得到空闲消息帧头指针的地址的方式为:从CPU根据本方智能输入输出单元中的发送缓冲区尾指针得到指向发送缓冲区的空闲消息帧头指针的地址,所述发送缓冲区尾指针指向发送缓冲区的下一个空闲消息帧;
所述接收方CPU在智能输入输出单元的寄存器中,得到发送方CPU发来的控制帧所在地址的指针的方式为:主CPU在从CPU的发送缓冲区中的先进先出寄存器中得到从CPU发来的控制报文的数据指针所在的地址。
较佳地,发送方为主CPU,接收方为从CPU;
所述发送方CPU根据智能输入输出单元中的缓冲区尾指针得到空闲消息帧头指针的地址的方式为:主CPU读取从CPU的智能输入输出单元中的接收缓冲区中的先进先出寄存器,从该寄存器中得到接收缓冲区尾指针,并根据该尾指针得到从CPU接收缓冲区的空闲消息帧的头指针地址,所述接收缓冲区尾指针指向接收缓冲区的下一个空闲消息帧;
所述接收方CPU在智能输入输出单元的寄存器中,得到发送方CPU发来的控制帧所在地址的指针的方式为:从CPU根据本方接收缓冲区头指针处得到主CPU发送来的控制报文的数据指针所在的地址。
较佳地,在发送控制报文的过程中,所述智能输入输出单元为发送方CPU内的智能输入输出单元;或接收方CPU内的智能输入输出单元。
应用本发明,利用中断来进行数据传输,在增加传输带宽的同时大大减少了每个数据包的延迟时间,降低了系统的丢包率;并依靠中断解决了访问冲突,从而防止了由于访问冲突引起的数据异常。在传输普通的数据报文和重要的控制报文时,分别采用不同的中断和传输通道,避免了数据报文和控制报文在同一通道内相互干扰的问题,彻底解决了重要数据的安全性问题,在数据传输的效率,可靠性和传输带宽等方面有很大的提高,同时,充分利用芯片本身的功能,避免了复杂的软件设计,大大减少了软件设计、维护的工作量。
附图说明
图1为现有技术的主从式多CPU结构图;
图2为现有技术的共享内存式通信队列;
图3为主从式CPU的系统结构图;
图4为数据报文传输模型;
图5为IXP1200向MPC750发送控制报文的图解;
图6为MPC750向IXP1200发送控制报文的图解。
具体实施方式
为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明做进一步详细说明。
在本实施例中,以MPC750(Motorola公司PPC系列的通用处理器)和IXP1200(Intel公司的Strong ARM系列的网络处理器)为例,针对主从式多CPU结构详细说明本发明的技术方案。
图3所示为主从式CPU的系统结构图。MPC750具有强大的运算能力,在此作为主CPU使用;IXP1200具有强大的数据转发能力,它包括内核(CORE)和微引擎(uE)两部分,CORE是一个精简指令集计算机(RISC:Reduced Instruction System Computer)结构的通用处理器,uE的作用是进行数据的处理和转发,这两部分共同集成在一个芯片中,在此作为从CPU使用。设置两个外挂的内存(SDRAM)分别与MPC750和IXP1200相连,而且MPC750和IXP1200可以相互访问对方的SDRAM空间。
数据报文的流量一般较大,其主要是指IXP1200的uE将自身无法处理的数据报文上报给MPC750进行处理和MPC750将处理后的数据信息下发给IXP1200的uE,在进行数据报文的传输时,是通过主从CPU各自外挂的SDRAM空间来完成的,并且通过中断方式通知对方接收;而控制报文是指MPC750下发给IXP1200的各种控制命令和IXP1200上报给MPC750的状态信息,在进行控制报文的传输时,是通过IXP1200自带的I2O(Intelligent Inputand Output)单元来完成的,并且控制报文的数据传输也采用中断方式通知对方接收,但该中断和数据报文所使用的中断不是同一个中断。这就使数据报文和控制报文分别采用了不同的传输通道,因而避免了数据报文和控制报文采用同一通道相互干扰的问题。MPC750内部也有I2O单元,可以用来作为控制报文的传输通道,在本实施例中,控制报文的传输只使用IXP1200的I2O单元。
图4所示为数据报文传输模型。数据报文传输机制的实现过程如下:
1、在IXP1200和MPC750的SDRAM内各建立一个2KB的固定缓冲区,作为双方向对方传输数据的目的地址,这样每次数据传输的源地址是动态申请的,而目的地址是固定的;
2、为了简化设计,2KB的缓冲区中只存放一个数据报文,它既包括数据报文的报头也包括数据报文的具体数据内容,每次只传输一个数据报文,等对方接收完该报文后,再传输下一个;
3、传输的数据报文长度在40~1500字节之间,而且以60字节长度为主,由于MPC750的直接存取控制器(DMA:Direct Memory Access)在处理较大的数据报文或者DMA链表时,其性能比较明显,而在处理较小的数据报文时,其性能不能很好的体现出来,所以为了简化设计,本实施例采用的方案是:MPC750发给IXP1200的数据报文用字节拷贝(bcopy)方式处理,而IXP1200发给MPC750的数据报文用DMA方式处理;
4、为了防止缓冲区内的数据报文来不及取走就被下一个数据报文刷新,另外增加控制位来表示哪个CPU控制当前的数据报文,在2KB的缓冲区旁设置8字节控制位,初始化时把缓冲区内的控制位都设置为1。发送前发现本方的控制位为1时才能发送,否则等待,如果等待很长时间控制位还是0,就把该控制位强制设为1。例如:如IXP1200要向MPC750发送一个数据报文,发送前发现本方SDRAM中的控制位为1,就用DMA方式将要发送的数据报文写到MPC750的SDRAM里,随后uE把本方的控制位置为0,当MPC750在中断服务程序里把该数据报文从MPC750的SDRAM缓冲区读出来后,再把IXP1200的控制位修改为1,这样当IXP1200发现本方的控制位为1时,就可以发送下一个数据报文。MPC750向IXP1200发送数据报文的原理相同。
5、利用每个设备的PCI配置空间内的门铃(DoorBell)寄存器,实现PCI总线上的主从CPU之间中断方式的通信。如果IXP1200作为PCI总线的目标(Target)设备设置该寄存器,就产生一个中断送给MPC750,如果MPC750作为PCI总线的主机(HOST)处理器设置该寄存器,就产生一个中断送给IXP1200。
下面具体说明主从CPU之间数据报文的传输过程。
IXP1200发送数据报文给MPC750:
1、初始化时IXP1200和MPC750各自把本方的控制位写为1,当IXP1200有数据报文要发送时,先读取本方缓冲区的控制位,如果控制位为1就可以继续执行发送数据报文的操作,否则就等待,直至等待的时间大于发送一个数据报文所需时间的20倍,就强制把该控制位设置为1;
2、如果控制位为1,uE申请本方SDRAM中的动态空间存放待发送的数据报文;
3、通过uE的PCI DMA指令,uE用DMA方式把该待发送的数据报文写入MPC750的SDRAM内;
4、MPC750收到该数据后,返回一个硬件信号通知uE,uE此时先把本方的控制位写为0,然后产生一个中断信号通知CORE,CORE再执行相应中断服务程序,在此中断服务程序中只需设置本方的Doorbell寄存器发外部中断给MPC750,CORE执行完此操作后退出该中断服务程序;
5、MPC750收到该中断后,从缓冲区中读取IXP1200发送来的数据报文,并将之封装完毕后送给上层软件处理,并把IXP1200的控制位写为1。
MPC750发送数据报文给IXP1200:
1、初始化时IXP1200和MPC750各自把本方的控制位写为1,当MPC750有数据报文要发送时,先读取本方缓冲区的控制位,如果控制位为1就可以继续执行发送数据报文的操作,否则就等待,直至等待的时间大于发送一个数据报文所需时间的20倍,就强制把该控制位设置为1;
2、如果控制位为1,MPC750先申请本方SDRAM中的动态空间存放待发送的数据报文,再用bcopy的方式把数据报文写入到IXP1200的SDRAM内,写入完成后把本方的控制位写为0;
3、MPC750设置IXP1200的Doorbell寄存器以产生相应中断信号给IXP1200的CORE,CORE再执行相应中断服务程序,在此中断服务程序中,只需要设置IXP1200中CORE上的内部线程中断(INTER_THD_SIG)寄存器,使uE产生中断并转发MPC750发送来的数据报文,CORE执行完此操作后退出该服务程序;
4、uE收到中断后将MPC750的控制位改为1。
控制报文传输机制的实现过程:
相对于数据报文,控制报文的流量较少,但是它要求的传输可靠性很高,数据报文在流量过大时允许丢包,但是控制报文要尽量避免这种情况。为了满足这种高可靠性的需求,将一个控制报文分为若干个控制帧,并采用I2O单元来实现控制报文的传输,I2O为挂在PCI总线上的设备之间进行通信提供了一个标准、可靠的消息传递机制,它包含了四个位于本地SDRAM中的先进先出缓冲区(FIFOs):即
Inbound free list FIFO:接收缓冲区中的空闲队列;
Inbound post list FIFO:接收缓冲区中已经被占用的队列;
Outbound free list FIFO:发送缓冲区中的空闲队列;
Outbound post list FIFO:发送缓冲区中已经被占用的队列。
MPC750和IXP1200各有一个I2O单元,可以使用各自的I2O单元实现两者间的通信,为了更好的支持多CPU的结构,在本实施例中只使用IXP1200的接收缓冲区和发送缓冲区,即只使用IXP1200提供的I2O单元,不使用MPC750的该单元。
IXP1200发送控制报文给MPC750:
为了程序设计的方便,使用OUT_MFA_HEAD_PTR和out_mfa_tail_ptr分别表示发送缓冲区中已被占用队列的头指针和尾指针,由于该队列和空闲队列共用一段连续的内存的空间,所以发送缓冲区的空闲队列的头指针和尾指针也可以知道,即发送缓冲区中已被占用队列的头指针和尾指针就是发送缓冲区的空闲队列的尾指针和头指针。同时,用发送缓冲区计数器(OUT_BOUND_CNT)记录发送缓冲区中需要发送的数据报文的个数。
图5所示为IXP1200向MPC750发送控制报文的图解。首先IXP1200根据out_mfa_tail_ptr得到指向发送缓冲区的空闲消息帧的头指针的地址,然后向该指针所指的内存处依次写入待发送的控制帧,每写一帧,out_mfa_tail_ptr就下移一帧,直到所有控制帧写完后,out_mfa_tail_ptr指向发送缓冲区的下一个空闲消息帧,以便下次发送控制报文使用,OUT_BOUND_CNT的值加一。只要OUT_BOUND_CNT的值不等于0,IXP1200就会产生PCI中断,上报给MPC750。
MPC750收到中断后,从IXP1200的发送缓冲区先进先出寄存器(OUTBOUND_FIFO)中得到IXP1200发来的控制帧所在地址的指针,然后从该指针所指地址的内存空间处取得待传送的控制帧,每取一帧,OUT_MFA_HEAD_PTR就指向发送缓冲区的下一个控制帧所在的地址,待所有控制帧取完后,OUT_BOUND_CNT的值减一。
MPC750发送控制报文给IXP1200:
为了程序设计的方便,使用IN_MFA_TAIL_PTR和in_mfa_head_ptr分别表示接收缓冲区中已被占用队列的尾指针和头指针,由于该队列和空闲队列共用一段连续的内存的空间,所以接收缓冲区的空闲队列的头指针和尾指针也可以知道,即接收缓冲区中已被占用队列的尾指针和头指针就是接收缓冲区的空闲队列的头指针和尾指针。同时,用接收缓冲区计数器(IN_BOUND_CNT)记录接收缓冲区中已经接收的数据报文的个数。
图6所示为MPC750向IXP1200发送控制报文的图解。MPC750向IXP1200发送控制报文时,MPC750先读IXP1200的接收缓冲区先进先出寄存器(INBOUND_FIFO),根据IN_MFA_TAIL_PTR得到IXP1200接收缓冲区的空闲消息帧的头指针的地址,然后向该指针所指的内存处依次写入待发送的控制帧,每写一帧,IN_MFA_TAIL_PTR就下移一帧,直到所有控制帧写完后,IN_MFA_TAIL_PTR指针指向接收缓冲区的下一个空闲消息帧,以便下次发送控制报文使用,IN_BOUND_CNT的值加一。只要IN_BOUND_CNT的值不等于0,MPC750就会产生I2O中断上报给IXP1200。
IXP1200接到I2O中断后,在in_mfa_head_ptr处得到MPC750发来的控制帧所在地址的指针,再从该指针所指地址的内存处取得待传送的控制帧,每取一帧,in_mfa_head_ptr就指向接收缓冲区的下一个控制帧所在地址,待所有控制帧取完后,IN_BOUND_CNT的值减一。
在本实施例中,MPC750和IXP 1200进行数据传输时,MPC750是采用bcopy方式把数据发送给IXP 1200的,如果数据量很大,MPC750也可以采用DMA的方式把数据发送给IXP 1200,数据传输速度会更快,而且CPU的占用率也会降低。
以上实施例只介绍了主CPU和一个从CPU的通信情况,该通信方法同样适用于主CPU和两个或两个以上从CPU同时通信的情况。同时,对于其它系列有类似结构的CPU,该通信方法同样适用。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1、一种多CPU通信的方法,其特征在于,该方法包括以下步骤:
分别设置与CPU相连的可相互访问的外挂内存空间,在各内存空间内,分别建立一固定大小的缓冲区,作为接收对方数据报文的目的地址;
发送方CPU申请本方缓冲区的动态空间并存放待发送的数据报文;之后,将本方缓冲区动态空间中的数据报文写入接收方缓冲区的目的地址;然后,设置寄存器以产生中断信号给接收方CPU,接收方CPU收到中断信号后,进行数据报文接收处理;
发送方CPU将待发送的控制报文分割为控制帧,将分割后的控制帧写入智能输入输出单元的缓冲区,产生智能输入输出单元的中断信号给接收方CPU,接收方CPU收到中断信号后,从智能输入输出单元的缓冲区中取得控制帧,得到控制报文。
2、根据权利要求1所述的多CPU通信的方法,其特征在于,所述设置外挂内存空间步骤进一步包括:
在每个与CPU相连的外挂内存空间内的缓冲区中,增设控制该缓冲区是否可写入消息的控制位。
3、根据权利要求2所述的多CPU通信的方法,其特征在于,在数据报文的传输过程中,
所述发送方CPU申请本方缓冲区动态空间的过程包括以下步骤:发送方CPU判断本方控制位是否为可写入消息状态,如果是,则申请本方缓冲区的动态空间,否则等待一定时间后,强制把该控制位设置为可写入消息状态,再申请本方缓冲区的动态空间;
所述发送方CPU将本方缓冲区动态空间中的数据报文写入接收方缓冲区的目的地址后,进一步包括:将本方控制位设置为禁止写入消息状态;
所述接收方CPU处理完收到的数据报文后,进一步包括:将发送方的控制位修改为可写入消息状态。
4、根据权利要求1所述的多CPU通信的方法,其特征在于,所述发送方CPU将分割后的控制帧写入CPU内的智能输入输出单元的缓冲区的过程包括以下步骤:
发送方CPU根据智能输入输出单元中的缓冲区尾指针得到空闲消息帧头指针的地址,然后向该指针所指的缓冲区中写入待传送的控制帧,每写一帧,尾指针指向该缓冲区的下一个空闲消息帧,直到该待传送控制报文的所有帧写入完毕,将该缓冲区计数器的值加一;
所述接收方CPU从智能输入输出单元的缓冲区中取得控制帧的过程包括以下步骤:
接收方CPU接到中断信号后,在智能输入输出单元的寄存器中,得到发送方CPU发来的控制帧所在地址的指针,然后从该指针指向的缓冲区空间处取得控制帧,每取一帧,缓冲区头指针指向该缓冲区中的下一个消息帧所在的地址,直到取完该待传送控制报文的所有控制帧后,缓冲区计数器的值减一。
5、根据权利要求3所述的多CPU通信的方法,其特征在于,发送方为从CPU,接收方为主CPU,其中从CPU包括内核和微引擎两部分;
所述从CPU将本方缓冲区动态空间中的数据报文以直接存取控制方式写入与主CPU相连的缓冲区的目的地址;
所述从CPU的微引擎接收到主CPU返回的硬件信号通知后,将本方的控制位设置为禁止写入消息状态,产生中断通知从CPU的内核;
所述从CPU的内核通过控制门铃寄存器发中断信号给主CPU;
所述主CPU收到中断信号后,进行数据报文的接收处理包括:读取本方缓冲区中的数据,将其封装并发送给上层软件。
6、根据权利要求3所述的多CPU通信的方法,其特征在于,发送方为主CPU,接收方为从CPU,其中从CPU包括内核和微引擎两部分;
所述主CPU将本方缓冲区动态空间中的数据报文以字节拷贝方式或直接存取控制方式写入与从CPU相连的缓冲区的目的地址;
所述主CPU设置从CPU的门铃寄存器发中断信号给从CPU的内核;
所述从CPU的内核设置本方的内部线程中断寄存器,使从CPU的微引擎产生中断;
所述从CPU的微引擎收到中断信号后,进行数据报文的接收处理包括:转发本方缓冲区中的数据报文;
由所述从CPU的微引擎将主CPU的控制位设置为可写入消息状态。
7、根据权利要求1所述的多CPU通信的方法,其特征在于:所述的固定大小的缓冲区中,只存放一个包括报头和报文的数据报文。
8、根据权利要求4所述的多CPU通信的方法,其特征在于,发送方为从CPU,接收方为主CPU;
所述发送方CPU根据智能输入输出单元中的缓冲区尾指针得到空闲消息帧头指针的地址的方式为:从CPU根据本方智能输入输出单元中的发送缓冲区尾指针得到指向发送缓冲区的空闲消息帧头指针的地址,所述发送缓冲区尾指针指向发送缓冲区的下一个空闲消息帧;
所述接收方CPU在智能输入输出单元的寄存器中,得到发送方CPU发来的控制帧所在地址的指针的方式为:主CPU在从CPU的发送缓冲区中的先进先出寄存器中得到从CPU发来的控制报文的数据指针所在的地址。
9、根据权利要求4所述的多CPU通信的方法,其特征在于发送方为主CPU,接收方为从CPU;
所述发送方CPU根据智能输入输出单元中的缓冲区尾指针得到空闲消息帧头指针的地址的方式为:主CPU读取从CPU的智能输入输出单元中的接收缓冲区中的先进先出寄存器,从该寄存器中得到接收缓冲区尾指针,并根据该尾指针得到从CPU接收缓冲区的空闲消息帧的头指针地址,所述接收缓冲区尾指针指向接收缓冲区的下一个空闲消息帧;
所述接收方CPU在智能输入输出单元的寄存器中,得到发送方CPU发来的控制帧所在地址的指针的方式为:从CPU根据本方接收缓冲区头指针处得到主CPU发送来的控制报文的数据指针所在的地址。
10、根据权利要求1所述的多CPU通信的方法,其特征在于,在发送控制报文的过程中,所述智能输入输出单元为发送方CPU内的智能输入输出单元;或接收方CPU内的智能输入输出单元。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB021589100A CN1295633C (zh) | 2002-12-26 | 2002-12-26 | 一种多cpu通信的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB021589100A CN1295633C (zh) | 2002-12-26 | 2002-12-26 | 一种多cpu通信的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1512373A CN1512373A (zh) | 2004-07-14 |
CN1295633C true CN1295633C (zh) | 2007-01-17 |
Family
ID=34237228
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB021589100A Expired - Fee Related CN1295633C (zh) | 2002-12-26 | 2002-12-26 | 一种多cpu通信的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN1295633C (zh) |
Families Citing this family (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100538690C (zh) * | 2006-04-10 | 2009-09-09 | 中国科学院研究生院 | 一种多cpu系统及cpu之间消息传递的方法 |
CN100458696C (zh) * | 2006-05-08 | 2009-02-04 | 华为技术有限公司 | 实现多cpu加载的系统及方法 |
CN1964286B (zh) * | 2006-12-13 | 2012-02-29 | 杭州华三通信技术有限公司 | 具有双cpu的主控设备 |
CN101620551B (zh) * | 2009-05-07 | 2013-03-06 | 曙光信息产业(北京)有限公司 | 一种面向多虚拟机应用的网卡中断控制方法 |
WO2012169037A1 (ja) * | 2011-06-09 | 2012-12-13 | 三菱電機株式会社 | プログラマブルコントローラシステム |
CN102624734A (zh) * | 2012-03-15 | 2012-08-01 | 汉柏科技有限公司 | Ike报文协商过程中的nat设备发现处理方法 |
CN102866971B (zh) * | 2012-08-28 | 2015-11-25 | 华为技术有限公司 | 传输数据的装置、系统及方法 |
CN103853692B (zh) * | 2014-03-12 | 2017-03-15 | 四川九洲空管科技有限责任公司 | 一种基于中断判断机制的多处理器数据通讯方法 |
CN104065545B (zh) * | 2014-06-27 | 2017-12-22 | 浙江大学 | 基于Modbus协议的RS485总线通讯方法及基于该通讯方法的电力电子系统 |
CN107634916B (zh) * | 2016-07-19 | 2020-11-03 | 大唐移动通信设备有限公司 | 一种数据通信方法和装置 |
CN109299033A (zh) * | 2017-07-25 | 2019-02-01 | 中车株洲电力机车研究所有限公司 | 一种处理器接口装置以及处理器数据处理方法 |
CN111190840A (zh) * | 2018-11-15 | 2020-05-22 | 北京大学 | 基于现场可编程门阵列控制的多方中央处理器通信架构 |
CN110046115B (zh) * | 2019-04-03 | 2023-09-01 | 超越科技股份有限公司 | 一种基于大数据量高速异步传输的发送终端,接收终端,方法及系统 |
CN111008164A (zh) * | 2019-12-04 | 2020-04-14 | 天津七一二通信广播股份有限公司 | 一种基于存储映射类总线的节点间多缓存式通信方法 |
CN116455849B (zh) * | 2023-06-15 | 2023-08-11 | 中国人民解放军国防科技大学 | 一种面向众核处理器的并发通信方法、装置、设备和介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5675736A (en) * | 1995-05-24 | 1997-10-07 | International Business Machines Corporation | Multi-node network with internode switching performed within processor nodes, each node separately processing data and control messages |
CN1168731A (zh) * | 1994-10-17 | 1997-12-24 | 艾利森电话股份有限公司 | 信号数据处理系统及方法以及包括信号数据处理系统的通信系统 |
-
2002
- 2002-12-26 CN CNB021589100A patent/CN1295633C/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1168731A (zh) * | 1994-10-17 | 1997-12-24 | 艾利森电话股份有限公司 | 信号数据处理系统及方法以及包括信号数据处理系统的通信系统 |
US5675736A (en) * | 1995-05-24 | 1997-10-07 | International Business Machines Corporation | Multi-node network with internode switching performed within processor nodes, each node separately processing data and control messages |
Also Published As
Publication number | Publication date |
---|---|
CN1512373A (zh) | 2004-07-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1295633C (zh) | 一种多cpu通信的方法 | |
US8549204B2 (en) | Method and apparatus for scheduling transactions in a multi-speed bus environment | |
EP1896965B1 (en) | Dma descriptor queue read and cache write pointer arrangement | |
CN111651377B (zh) | 一种用于片内报文处理的弹性共享缓存器 | |
CN107124286B (zh) | 一种海量数据高速处理、交互的系统及方法 | |
US20050132089A1 (en) | Directly connected low latency network and interface | |
CN1859325A (zh) | 基于链表的进程间消息传递方法 | |
US8521930B1 (en) | Method and apparatus for scheduling transactions in a host-controlled packet-based bus environment | |
US20110208891A1 (en) | Method and apparatus for tracking transactions in a multi-speed bus environment | |
CN1627728A (zh) | 在计算机服务器中共享以太网适配器的方法和装置 | |
CN1881934A (zh) | 微处理器、网络系统和通信方法 | |
CN107257329A (zh) | 一种数据分段卸载发送方法 | |
US7603488B1 (en) | Systems and methods for efficient memory management | |
CN109992543A (zh) | 一种基于zyzq-7000的pci-e数据高效传输方法 | |
CN1925453A (zh) | 报文转发方法和装置 | |
CN1788261A (zh) | 具有用于传送描述符的存储器的usb主机控制器 | |
CN100351824C (zh) | 总线系统和用于连接到总线的总线接口 | |
CN1658176A (zh) | 数据通信的方法及设备 | |
CN1292568C (zh) | 一种多队列数据分组连续转发的装置和方法 | |
US9176912B2 (en) | Processor to message-based network interface using speculative techniques | |
CN1881936A (zh) | 一种路由器虚拟驱动模块的动态加载与控制方法 | |
US20200348989A1 (en) | Methods and apparatus for multiplexing data flows via a single data structure | |
US9137167B2 (en) | Host ethernet adapter frame forwarding | |
US11176064B2 (en) | Methods and apparatus for reduced overhead data transfer with a shared ring buffer | |
CN116471242A (zh) | 基于rdma的发送端、接收端、数据传输系统及方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20070117 Termination date: 20141226 |
|
EXPY | Termination of patent right or utility model |