CN1690967A - 在通信队列管理中通过发送事件触发队列管理的方法 - Google Patents
在通信队列管理中通过发送事件触发队列管理的方法 Download PDFInfo
- Publication number
- CN1690967A CN1690967A CN 200410038827 CN200410038827A CN1690967A CN 1690967 A CN1690967 A CN 1690967A CN 200410038827 CN200410038827 CN 200410038827 CN 200410038827 A CN200410038827 A CN 200410038827A CN 1690967 A CN1690967 A CN 1690967A
- Authority
- CN
- China
- Prior art keywords
- data
- descriptor
- pointed
- formation
- data descriptor
- 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.)
- Granted
Links
Images
Landscapes
- Communication Control (AREA)
Abstract
本发明公开了一种在通信队列管理中通过发送事件触发队列管理的方法,以解决在通信队列管理过程中存在影响***效率的问题。该方法为:使用第一指针指向可以用于封装发送数据的数据描述符,使用第二指针指向发送队列中已封装数据的数据描述符;发送数据的控制单元在发送数据前先检查第二指针指向的数据描述符,如果该数据描述符中数据已发送完毕则释放数据描述符,然后再使用第一指针指向的数据描述符封装需要发送的数据并入发送队列;以及更新第一指针和第二指针,使第一指针指向下一个可以用于封装发送数据的数据描述符,使第二指针指向下一个已封装数据的数据描述符。
Description
技术领域
本发明涉及通信技术,尤其涉及一种在通信队列管理中通过发送事件触发队列管理的方法。
背景技术
目前,大多数通信单元(通信芯片,以下简称CU)与CPU之间的数据交互,都会采用队列方式进行管理。队列管理的优劣直接影响CPU的处理性能。CU都具有数据接收和发送的特性,因此CU与CPU之间常使用两个队列进行数据交互-发送队列和接收队列。相对于CPU而言,发送队列指CPU传递数据给CU的通道,而接收队列则是指CU传递数据给CPU的通道;发送队列和接收队列都是相对的,相对于CU而言,发送队列则是指经由CU传递到CPU的数据通道(下文所提到的“发送队列”都是相对于CPU而言的)。
数据在队列中传递时,常常会被封装在数据描述符(简称BD)中,BD中除了包含数据外,还会包含其他的控制信息和描述信息(以下使用BD来表示数据及其控制信息)。
BD不会凭空的产生,也不会凭空的消失,因此CPU将BD放入发送队列后,需要等待CU进行处理,只有待CU完成对BD的处理后,CPU才能将BD释放,以便将来再次使用。现有技术中,CPU释放BD的方法有两种,中断触发方式和定时查询方式。
1、中断触发方式,是指CU在完成对BD的处理后,CU产生中断请求给CPU,CPU在未屏蔽该中断的情况下,对中断进行响应。然后由操作***运行中断处理函数或者其他任务,完成对BD的释放。
由于中断触发方式,需要CPU响应CU的中断。然而,CPU响应中断的过程对操作***的影响是惊人的,包括分析中断、响应中断、进行中断与任务间的切换等操作,这一部分时间已经远远超过了CPU释放BD所需要的时间。因此,使用中断触发方式,将会严重影响CPU有效使用率,大大降低***性能。
一项统计显示,在VXWORKS(由Wind River公司设计的嵌入式实时操作***)嵌入式实时操作***环境中,使用750MHz的CPU,如果每秒中那产生148k次中断,CPU将会使用16%的时间去完成中断响应和中断与任务间的切换操作。然而,CPU却只需要不到1%的时间去完成148k次BD的释放工作。
2、定时查询方式,是指CPU启动定时器,在定时结束时,触发CPU去查询发送队列,释放发送队列中被处理后的BD。从软件角度阐述,则是指基于CPU运行的操作***,启动一个软件定时器,定时触发一个任务去查询发送队列,释放发送队列中被处理后的BD。
该方法存在以下缺点:
(1)如果在定时期间,并没有BD在发送队列中,那么定时结束后,CPU查询发送队列的操作则是空操作,因此会影响***的效率。
(2)定时查询方式与中断触发方式一样,CPU除了要释放发送队列中的BD外,还要花费很多时间去处理定时器中断,任务切换等操作,这样会大大降低***的性能。
(3)如果定时器的精度不够,那么在定时结束前,如果队列已经溢出,则会造成大量的通信数据丢失,损失更大;如果定时器精度过高,则会造成上述(1)和(2)中大量的***资源被消耗的情况。
发明内容
本发明提供一种在通信队列管理中通过发送事件触发队列管理的方法,以解决现有技术在通信队列管理过程中存在影响***效率和性能的问题。
为解决上述问题,本发明提供以下技术方案:
一种在通信队列管理中通过发送事件触发队列管理的方法,所述队列用于传递控制单元之间的交互数据,队列中的数据采用数据描述符封装;该方法为:
(1)使用第一指针指向可以用于封装发送数据的数据描述符,使用第二指针指向发送队列中已封装数据的数据描述符;
(2)发送数据的控制单元在发送数据前先检查第二指针指向的数据描述符中的数据是否发送完毕;如果是则进行步骤(3),否则停止此次数据发送;
(3)释放第二指针指向的数据描述符,使用第一指针指向的数据描述符封装需要发送的数据并放入发送队列;以及
(4)更新第一指针和第二指针,使第一指针指向下一个可以用于封装发送数据的数据描述符,使第二指针指向下一个已封装数据的数据描述符。
其中:
所述队列为固定长度的环形队列或动态可变长度的队列。
第二指针指向的数据描述符是已封装数据的数据描述符中最先发送数据的数据描述符。
当所述队列采用固定长度的环形队列时:第一指针指向发送队列中可以用于封装发送数据的数据描述符;第一指针和第二指针在队列中的位置之间始终保持一个或多个可以用于封装发送数据的数据描述符的间距;在队列初始化时,除了第一指针指向的数据描述符外,为队列中其他所有数据描述符填充发送数据,并且数据描述符中设定这些数据已经发送完成。
当所述队列采用动态可变长度的队列时:第一指针指向数据描述符资源池中可以用于封装发送数据的数据描述符,待封装数据后,数据描述符及其数据被压入数据队列;第二指针指向的数据描述符被释放后,放入所述的数据描述符资源池。
采用本发明,控制单元(如CPU等)在发送数据时,只需要通过判断已封装数据的数据描述符是否发送完毕即可,不仅能够避免中断对控制单元产生的额外负荷,还可以减少操作***进行任务切换时的额外负荷和冗余开销;从而大幅度提高控制单元的有效利用率,提高整个***性能。
附图说明
图1A、图1B为CPU与CU之间使用发送队列通信的示意图;
图2为固定长度的环形发送队列初始化状态示意图;
图3为固定长度的环形发送队列运行状态示意图;
图4为固定长度的环形发送队列即将溢出的状态示意图。
图中,N-表示发送数据描述符中不包含发送数据,处于空闲状态;Y-表示发送数据描述符中包含发送数据;Y.F-表示发送数据描述符中的数据已完成发送,可以释放;Y.U-表示发送数据描述符中的数据未完成发送,不能释放。
具体实施方式
在两个控制单元之间,如中央处理器(CPU)与通信单元(CU)之间,使用队列进行数据交互时,发送侧将数据入队列,并能即时通知接收侧进行数据接收处理。但是如果发送的数据资源需要回收释放,那么发送侧就需要等待数据发送完毕后,才能进行数据资源回收释放。本发明采用发送事件触发方式来使发送侧获知数据已发送完毕。
本实施例以CPU与CU之间的数据交互为例进行说明,下文提及的发送队列是指数据经由CPU到CU的队列通道。
由于CPU使用发送队列与CU进行通信而将发送数据压入发送队列时,需要将数据封装在发送队列使用的数据描述符(简称TxBD)中,因此在发送队列处理过程中,TxBD是一个基本的处理单元,数据是否发送完毕,都可以从TxBD的状态得到反馈。
发送事件触发方式是指CPU在每次发送数据时,检查并释放发送队列中已经发送完毕的TxBD,对于已经发送完毕的TxBD,可以通过TxBD的状态字或状态位来判断,TxBD的状态字或状态位由TxBD的结构定义所限定。
使用发送事件触发方式管理发送队列时,要求发送队列包含两个管理指针即第一指针和第二指针,第一指针(以下称InsertPointer)用于标注当前可用于数据发送的TxBD;第二指针(以下称FreePointer)用于标注已封装数据并将要释放的TxBD。当CPU发送数据时,首先检查FreePointer指向的TxBD是否发送完毕,如果发送完毕,则释放FreePointer指向的TxBD,并将FreePointer指向下一个已封装数据并将要释放的TxBD,然后使用InsertPointer指向的TxBD封装发送数据并执行数据发送。如果FreePointer指向的TxBD仍处于使用状态,则停止发送过程,返回队列溢出信息。
参阅图1A所示,CPU与CU之间使用可变长度的发送队列通信,这种队列类似一个管道(pipe),CPU使用InsertPointer从发送数据描述符资源池中取出一个发送数据描述符并封装需要发送的数据,然后压入发送队列,如果这是第一个压入发送队列的数据描述符,那么CPU的FreePointer就指向该数据描述符。CU则使用自己的指针CU.pointer从发送队列中读取最新的发送描述符进行发送。在下一次CPU发送数据时,则会判断FreePointer指向的数据描述符的状态是否为已经发送完成,如果发送完成则将该数据描述符释放回资源池。
参阅图1B所示,CPU与CU之间使用固定长度的环形发送队列通信。这种队列在初始化时,已经包含了若干个发送数据描述符,这些发送数据描述符相互串连,形成环形队列。CPU使用InsertPointer指向的数据描述符来封装需要发送的数据,判断FreePointer指向的数据描述符是否完成发送,完成发送则释放发送描述符中的封装数据。CU则使用自己的指针CU.pointer从发送队列中读取发送数据描述符,如果发送数据描述符中封装的数据正在等待发送,则将其中的数据发送出去。
如图2所示,发送队列初始化时,发送队列中所有的TxBD都是空闲状态,空闲状态也可以视为发送完毕状态,即TxBD中的数据已经完成发送。空闲状态的TxBD才可以再次被用于封装发送数据。而发送队列管理使用的两个指针InsertPointer和FreePointer,位置如图2所示,FreePointer指针指向的TxBD是InsertPointer指针指向TxBD的下一个单元。在运行过程中,FreePointer指针与InsertPointer指针始终保持这样的相对位置关系。
在初始化发送队列时,需要为队列中除了InsertPointer指向的TxBD外其余所有的TxBD填充发送数据并且指定发送数据描述符的状态为已经发送完成(即CU无需发送这些数据)。这些数据不是为了发送,而是为了释放。因为,在发送队列初始化状态下,如果发送数据,则需要释放FreePointer指向的TxBD,如果此TxBD中没有可以释放的数据,则会产生异常。InsertPointer指向的TxBD不能填充数据是因为InsertPointer指向的TxBD必须处于空闲而且已经释放的状态,该TxBD需要用来填充待发送的新数据。
初始化发送队列时,从队列索引方向上,FreePointer指针在InsertPointer指针前面,两个指针之间的间距大于等于1个TxBD单元。而且,在发送过程中,InsertPointer指针与FreePointer指针之间始终保持固定的间距,以确保InsertPointer指针指向的TxBD是空闲状态;
发送队列在初始化状态下,CPU发送数据时首先检查FreePointer指向的TxBD,判断此TxBD是处于空闲状态,即此TxBD中的数据已经发送完毕,如果是,CPU则释放FreePointer指向的TxBD,释放的内容和过程则是根据使用者的实际应用而定(释放的内容和过程并不是重点,因为本发明描述的重点是触发释放事件,具体的释放操作,或者其他相关操作则由应用者决定)。完成FreePointer指向TxBD的释放后,需要及时更新FreePointer指针,即将FreePointer指向下一个已封装数据并将要释放的TxBD。
成功释放了FreePointer指针指向的TxBD后,就可以进行此次数据发送。CPU随后便可以使用InsertPointer指向的TxBD封装待发送的数据,然后通知CU执行发送,并更新InsertPointer指向下一个可用于数据发送的TxBD。
当进行了若干次数据发送后,发送队列中各TxBD的状态如图3所示,CPU判断FreePointer指向的数据描述符已经完成发送,则释放该数据描述符中封装的数据,此数据描述符进入“N”状态,FreePointer向前移动一个位置。CPU再使用InsertPointer指向的数据描述符封装需要发送的数据,这个数据描述符则从状态“N”变成了状态“Y.U”,即等待CU发送,InsertPointer也向前移动一个位置。CU从发送队列中读取待发送的数据描述符后,完成发送,设置发送描述符的状态为“Y.F”,说明这个发送描述符中的数据可以释放。
在运行过程中,可以看到FreePointer指针与InsertPointer指针始终保持这种相对状态,即FreePointer指针与InsertPointer指针始终保持同步更新。
FreePointer指针与InsertPointer指针之间的这种相对关系,可以保证InsertPointer指针指向的TxBD始终是处于空闲状态,可以用于封装将要发送的数据。CPU无需再次判断InsertPointer指针指向的TxBD状态,只需要通过判断FreePointer指针指向的TxBD是否发送完毕即可。
如果CPU发送数据时,检查FreePointer指针指向的TxBD,发现此TxBD中的数据仍未完成发送,则表示此时发送队列即将溢出,不能再填充新的发送数据。此时,发送队列中各TxBD的状态如图4所示。
当发送队列处于即将溢出状态时,FreePointer指针指向的TxBD中的数据还没有发送完毕,因此这时如果CPU再次发送数据,CPU检查FreePointer指针时,就要返回错误,即停止此次数据发送并返回发送队列溢出状态的信息。虽然此时InsertPointer指针指向的TxBD处于空闲状态,但是为了保证InsertPointer指向的TxBD始终保持空闲状态,此时就不能使用InsertPointer指向的TxBD封装待发送数据,必须等待CU完成一个数据发送后,CPU才能再次发送一个数据。
图4中,环形发送队列即将溢出的原因是CPU向发送队列中填充数据的速度大大超过了CU从发送队列中读取并发送数据的速度,造成发送数据队列中除了InsertPointer指向的数据描述符外,其他的数据描述符都封装了待发送的数据,即其他的发送数据描述符都处于“Y.U”状态,包括FreePointer指向的数据描述符。如果此时CPU仍需要继续发送数据,判断FreePointer指向的数据描述符状态时,发现其中的数据没有完成发送,发送队列已经将要溢出,CPU就需要停止发送。
当采用动态可变长度的队列时,第一指针InsertPointer指向数据描述符资源池中可以用于封装发送数据的数据描述符,待封装数据后,数据描述符及其数据被压入数据队列。第二指针FreePointer指向的数据描述符被释放后,放入所述的数据描述符资源池。队列初始化时可以没有任何的数据描述符,即设置为空队列。其实现与上述采用固定长度的发送队列实现同理。
本发明使用发送事件触发式,对发送队列进行管理,不仅仅局限于释放发送队列中的数据,还可以应用于队列的其他管理,或相关统计,如数据交互的成功/失败次数统计等等。
本发明所提及的“发送队列”和“接收队列”具有泛指含义,所有使用队列进行数据交互的应用中,都会由“发送队列”和“接收队列”的概念。而且“发送队列”与“接收队列”是一组可以相互转化的概念,例如,CPU的“接收队列”实际上可以视为CU的“发送队列”。因此,凡是可以使用“发送队列”这个概念的场合,均可以使用本发明的方法。
Claims (10)
1、一种在通信队列管理中通过发送事件触发队列管理的方法,所述队列用于传递控制单元之间的交互数据,队列中的数据采用数据描述符封装;其特征在于包括步骤:
(1)使用第一指针指向可以用于封装发送数据的数据描述符,使用第二指针指向发送队列中已封装数据的数据描述符;
(2)发送数据的控制单元在发送数据前先检查第二指针指向的数据描述符中的数据是否发送完毕;如果是则进行步骤(3),否则停止此次数据发送;
(3)释放第二指针指向的数据描述符,使用第一指针指向的数据描述符封装需要发送的数据并压入发送队列;以及
(4)更新第一指针和第二指针,使第一指针指向下一个可以用于封装发送数据的数据描述符,使第二指针指向下一个已封装数据的数据描述符。
2、如权利要求1所述的方法,其特征在于,所述队列为固定长度的环形队列或动态可变长度的队列。
3、如权利要求1或2所述的方法,其特征在于,第二指针指向的数据描述符是已封装数据的数据描述符中最先发送数据的数据描述符。
4、如权利要求3所述的方法,其特征在于,当所述队列采用固定长度的环形队列时,第一指针指向发送队列中可以用于封装发送数据的数据描述符。
5、如权利要求4所述的方法,其特征在于,当所述队列采用固定长度的环形队列时,第一指针和第二指针在队列中的位置之间始终保持一个或多个可以用于封装发送数据的数据描述符的间距。
6、如权利要求3所述的方法,其特征在于,当所述队列采用固定长度的环形队列时,在队列初始化时,除了第一指针指向的数据描述符外,为队列中其他所有数据描述符填充发送数据,并且在数据描述符中设定这些数据已经发送完成。
7、如权利要求3所述的方法,其特征在于,当所述队列采用动态可变长度的队列时,第一指针指向数据描述符资源池中可以用于封装发送数据的数据描述符,待封装数据后,数据描述符及其数据被压入数据队列。
8、如权利要求7所述的方法,其特征在于,第二指针指向的数据描述符被释放后,放入所述的数据描述符资源池。
9、如权利要求7所述的方法,其特征在于,在可变长度的队列初始化时设置为空队列。
10、如权利要求1所述的方法,其特征在于,在步骤(2)中,停止该次数据发送后返回队列溢出信息并等待再次发送。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2004100388278A CN1311350C (zh) | 2004-04-30 | 2004-04-30 | 在通信队列管理中通过发送事件触发队列管理的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2004100388278A CN1311350C (zh) | 2004-04-30 | 2004-04-30 | 在通信队列管理中通过发送事件触发队列管理的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1690967A true CN1690967A (zh) | 2005-11-02 |
CN1311350C CN1311350C (zh) | 2007-04-18 |
Family
ID=35346427
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2004100388278A Expired - Fee Related CN1311350C (zh) | 2004-04-30 | 2004-04-30 | 在通信队列管理中通过发送事件触发队列管理的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN1311350C (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102984086A (zh) * | 2012-11-29 | 2013-03-20 | 迈普通信技术股份有限公司 | 数据通信中的数据发送方法和装置 |
CN111147126A (zh) * | 2019-12-26 | 2020-05-12 | 中国人民解放军空军勤务学院 | 北斗卫星短报文通信数据拆包传输方法 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030037096A1 (en) * | 1995-04-07 | 2003-02-20 | Ruey Kao | Method and apparatus for the management of queue pointers by multiple processors in a digital communications network |
SE506955C2 (sv) * | 1995-07-06 | 1998-03-09 | Ericsson Telefon Ab L M | ATM-flödesstyrning |
US6044418A (en) * | 1997-06-30 | 2000-03-28 | Sun Microsystems, Inc. | Method and apparatus for dynamically resizing queues utilizing programmable partition pointers |
JP2003152813A (ja) * | 2001-11-15 | 2003-05-23 | Toshiba Corp | データ伝送装置 |
US6779084B2 (en) * | 2002-01-23 | 2004-08-17 | Intel Corporation | Enqueue operations for multi-buffer packets |
-
2004
- 2004-04-30 CN CNB2004100388278A patent/CN1311350C/zh not_active Expired - Fee Related
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102984086A (zh) * | 2012-11-29 | 2013-03-20 | 迈普通信技术股份有限公司 | 数据通信中的数据发送方法和装置 |
CN102984086B (zh) * | 2012-11-29 | 2015-10-28 | 迈普通信技术股份有限公司 | 数据通信中的数据发送方法和装置 |
CN111147126A (zh) * | 2019-12-26 | 2020-05-12 | 中国人民解放军空军勤务学院 | 北斗卫星短报文通信数据拆包传输方法 |
CN111147126B (zh) * | 2019-12-26 | 2021-11-23 | 中国人民解放军空军勤务学院 | 北斗卫星短报文通信数据拆包传输方法 |
Also Published As
Publication number | Publication date |
---|---|
CN1311350C (zh) | 2007-04-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP2552081B1 (en) | Interrupt management | |
CN101281458A (zh) | 一种垃圾回收的装置、***及方法 | |
CN1312577C (zh) | 一种实现通信过程零拷贝消息队列的方法 | |
CN101202707A (zh) | 高速单板传输报文的方法、现场可编程门阵列及高速单板 | |
CN101079811A (zh) | 飞机与地面***数据传输方法及*** | |
CN1159657C (zh) | 总线***和其数据传输方法 | |
CN1317640C (zh) | 实时操作***环境下多任务应用软件模块的管理方法 | |
CN1270732A (zh) | 计算机 | |
CN1967486A (zh) | 用于在处理环境中促进处理的方法和*** | |
CN102446144A (zh) | 一种串口资源调度方法及装置、*** | |
CN1311350C (zh) | 在通信队列管理中通过发送事件触发队列管理的方法 | |
CN1925453A (zh) | 报文转发方法和装置 | |
CN1659834A (zh) | 用于扩展光纤信道链路的性能范围的流量控制管理 | |
CN1908925A (zh) | 提高pci通信可靠性及效率的方法 | |
CN1617525A (zh) | 一种保证通用路由封装隧道传输可靠的方法 | |
CN1524220A (zh) | 发生故障通知抑制设备和发生故障通知抑制方法 | |
CN1411217A (zh) | 利用缓存技术提高ip报文转发速度的方法 | |
CN1225105C (zh) | 一种适用于应用服务器的呼叫处理方法 | |
US7853713B2 (en) | Communication interface device and communication method | |
CN1955890A (zh) | 一种提高hid设备通讯速度的方法 | |
CN1286277C (zh) | 网络处理器中核心处理器与微引擎之间的通信方法 | |
CN1300661C (zh) | 计算机***及电源管理状态切换方法 | |
CN101631353B (zh) | 一种状态分组数据单元的管理方法和装置 | |
CN1901724A (zh) | 一种移动通讯***软件版本升级的调度方法 | |
CN1266883C (zh) | 一种网口流量控制的方法 |
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: 20070418 Termination date: 20150430 |
|
EXPY | Termination of patent right or utility model |