一种基于有限深度的先进先出报文队列管理方法及装置的制作方法

文档序号:7889116阅读:142来源:国知局
专利名称:一种基于有限深度的先进先出报文队列管理方法及装置的制作方法
技术领域
本发明涉及计算机通信领域,具体的说,是涉及一种基于有限深度的先进先出报文队列的管理方法及管理装置。
背景技术
在有限深度(队列深度可以是队列能够缓存的最大报文数或者字节数)的FIFO (First in,First out,先进先出)报文队列管理中,现有技术中的通用处理方法为:入队任务的优先级低于出队任务的优先级,入队任务将报文入队后,出队任务将会被立即唤醒,进行报文出队处理。因此,不会出现因为队列满而丢弃报文的情形,但这样每处理一个报文都将引起入队任务和出队任务之间切换一次,而操作系统中任务切换的开销是比较大的,因此,这样的队列管理方法的效率并不高。而如果把入队任务和出队任务的优先级设置成一样,入队任务连续将大量报文入队时,入队任务虽然每入队一个报文有唤醒出队任务的动作,但不能立即唤醒出队任务,当连续入队的报文个数大于队列的最大深度时,必然导致队列满而丢弃部分报文。如果在队列缓存的报文个数还没有达到队列的最大深度时就强制操作系统调度出队任务,出队任务被调度后连续对多个报文进行出队处理,则可以解决上述因为队列满而丢报文的问题,同时也解决了频繁的入队任务和出队任务切换影响系统性能的问题。

发明内容
本发明所要 解决的技术问题是:提出一种基于有限深度的先进先出报文队列管理方法及装置,在队列缓存的报文个数还没有达到队列的最大深度时就强制操作系统调度出队任务对报文进行出队处理,解决传统技术中可能因为队列满而丢弃报文及入队任务、出队任务频繁切换而影响系统性能的问题。本发明解决上述技术问题所采用的方案是:一种基于有限深度的先进先出报文队列管理方法,包括以下步骤:a.系统生成有限深度的先进先出报文队列、一个出队任务及至少一个入队任务,设置强制调度出队任务的缓存报文阈值,所述出队任务和入队任务具有相同优先级;b.当某个入队任务将报文入队时,首先计算当前报文队列中缓存的报文个数,若判断报文队列中有空闲则将报文入队,否则将报文丢弃;c.所述入队任务唤醒出队任务;d.所述入队任务判断当前报文队列中缓存的报文个数是否大于缓存报文阈值,如是,则进入步骤e,否则结束本流程;e.将所述入队任务放入对应优先级的就绪任务队列的队尾。进一步,所述缓存报文阈值大于所述报文队列深度的一半,小于所述报文队列深度的四分之三经验值。进一步,所述方法还包括步骤:
f.当出队任务得到调度时,对报文队列中的多个报文进行出队处理。进一步,所述入队任务的个数小于所述报文队列的深度。本发明的另一个目的是提供一种基于有限深度的先进先出报文队列管理装置,包括:队列管理模块,用于生成有限深度的先进先出报文队列,并设置用于调度出队任务的缓存报文阈值;任务管理模块,用于根据业务情况生成一个出队任务及至少一个入队任务,并设置所述出队任务和入队任务具有相同优先级;并在某个入队任务将报文入队时,计算当前报文队列中缓存的报文个数,当判断报文队列中有空闲时将报文入队,否则将报文丢弃;当判断当前报文队列中缓存的报文个数大于缓存报文阈值时,将所述入队任务放入对应优先级的就绪任务队列的队尾;任务调度模块,用于调度就绪任务队列中的任务。本发明的有益效果是:将出队任务和入队任务设置为同一优先级,在处理大量报文的情况下,避免在入队任务和出队任务之间的频繁切换,而影响系统性能;同时,设置调度出队任务的缓存报文阈值,对报文队列中的缓存报文个数进行监控,一旦超出阈值,立即加快出队任务的调度,避免因为队列满而丢弃报文的情况。


图1为本发明中的报文队列管理方法的流程图。图2为本发明中的报文队列管理装置结构框图。
具体实施例方式针对传统技术中对FIFO报文队列的管理方式中存在的可能因队列满而丢弃报文或者由于在入队任务、出队任务之间频繁切换而影响系统性能的弊端,本发明提出了一种基于有限深度的先进先出报文队列管理方法,该方法将出队任务和入队任务设置为同一优先级,在处理大量报文的情况下,避免在入队任务和出队任务之间的频繁切换,而影响系统性能;同时,设置强制调度出队任务的缓存报文阈值,对报文队列中的缓存报文个数进行监控,一旦超出阈值,立即强制调度出队任务,避免因为队列满而丢弃报文的情况。如图1所示,为本发明报文队列管理方法的流程图,包括:a.系统生成有限深度的先进先出报文队列、一个出队任务及至少一个入队任务,设置强制调度出队任务的缓存报文阈值,所述出队任务和入队任务具有相同优先级。本发明中,可以根据经验设置缓存报文阈值大于所述报文队列深度的一半,小于所述报文队列深度的四分之三,例如可以设置为队列深度的一半。b.当某个入队任务将报文入队时,首先计算当前报文队列中缓存的报文个数,若判断报文队列中有空闲则将报文入队,否则将报文丢弃。本步骤中,入队任务首先需要将待入队报文入队,然后再判断是否需要加快调度出队任务;极端情况下如果就绪任务队列中的入队任务比较多时,出队任务一直得不到调度,则报文队列满时则将报文丢弃。c.所述入队任务唤醒出队任务。在本发明中入队任务每调度一次,则入队任务要唤醒出队任务一次,但出队任务是否得到调度要看其在就绪任务队列中的位置。
d.所述入队任务判断当前报文队列中缓存的报文个数是否大于缓存报文阈值,如是,则进入步骤e,否则结束本流程。e.将所述入队任务放入对应优先级的就绪任务队列的队尾。本步骤是加快调度入队任务的关键,即通过将已经调度一次的入队任务放入就绪任务队列的队尾。所以本发明中,要保证所有入队任务的个数小于所述报文队列的深度。当出队任务得到调度时,对报文队列中的多个报文进行出队处理。实施例下面结合附图及实施例对本发明的方案作进一步的描述。以vxWorks操作系统中的实现本发明为例(但其基本思想不限于vxWorks操作系统):报文队列管理系统生成一个FIFO队列Queue,队列深度设置为MAX_QUEUE_NUM个报文(也可以是字节数),多个入队任务和一个出队任务。设置入队任务和出队任务具有相同的优先级为P,并设置调度出队任务的缓存报文个数(也可以是报文字节数)的阈值为schedQThreshold, schedQThreshold 设为报文队列深度的二分之一。设某个时刻FIFO队列中队头指针为QHEAD,队尾指针为QTAIL,则队列中缓存的报文个数为:(MAX_QUEUE_NUM+QTAIL-QHEAD) % MAX_QUEUE_NUM上述公式为队列中缓存报文个数的通用计算方法,在此不再赘述。当某个入队任务进行报文入队时,计算队列Queue中缓存的报文个数,若判断报文队列中有空闲则将报文入队,否则将报文丢弃;同时该入队任务会作唤醒出队任务的操作,但唤醒不一定能够使得出队任务得到调度;判断队列Queue中缓存报个文数大于schedQThreshold时,贝U加快操作系统调度出队任务,特别的,在vxWorks操作系统中则是通知操作操作系统把入队任务放在优先级为P的就绪任务队列的队尾。因为唤醒出队列任务后,出队任务将排在优先级为P的就绪队列中,如果接着将入队任务排在优先级为P的就绪队列末尾,则可以保证出队任务先于该入队任务得到调度。在调度出队任务后,出队任务将对多个报文进行出队处理,极限情形为,出队任务得到调度后将缓存的报文全部出队,这样就避免了系统处理一个报文就发生一次入队任务和出队列任务之间的切换,减少了系统开销。本发明实施例还提供一种实施上述报文队列管理方法的装置,如图2所示为所述装置的结构框图,具体包括:队列管理模块,用于生成有限深度的先进先出报文队列,并设置用于调度出队任务的缓存报文阈值;任务管理模块,用于根据业务情况生成一个出队任务及至少一个入队任务,并设置所述出队任务和入队任务具有相同优先级;并在某个入队任务将报文入队时,计算当前报文队列中缓存的报文个数,当判断报文队列中有空闲时将报文入队,否则将报文丢弃;当判断当前报文队列中缓存的报文个数大于缓存报文阈值时,将所述入队任务放入对应优先级的就绪任务队列的队尾; 任务调度 模块,用于调度就绪任务队列中的任务。由于相关技术细节在上述方法中已经进行详细说明,此处不再赘述。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应 包含在本发明保护的范围之内。
权利要求
1.一种基于有限深度的先进先出报文队列管理方法,其特征在于,包括以下步骤: a.系统生成有限深度的先进先出报文队列、一个出队任务及至少一个入队任务,设置强制调度出队任务的缓存报文阈值,所述出队任务和入队任务具有相同优先级; b.当某个入队任务将报文入队时,首先计算当前报文队列中缓存的报文个数,若判断报文队列中有空闲则将报文入队,否则将报文丢弃; c.所述入队任务唤醒出队任务; d.所述入队任务判断当前报文队列中缓存的报文个数是否大于缓存报文阈值,如是,则进入步骤e,否则结束本流程; e.将所述入队任务放入对应优先级的就绪任务队列的队尾。
2.如权利要求1所述的一种基于有限深度的先进先出报文队列管理方法,其特征在于,所述缓存报文阈值大于所述报文队列深度的一半,小于所述报文队列深度的四分之三。
3.如权利要求1或2所述的一种基于有限深度的先进先出报文队列管理方法,其特征在于,所述方法还包括步骤: f.当出队任务得到调度时,对报文队列中的多个报文进行出队处理。
4.如权利要求1或2所述的一种基于有限深度的先进先出报文队列管理方法,其特征在于,所述入队任务的个数小于所述报文队列的深度。
5.一种基于有限深度的 先进先出报文队列管理装置,其特征在于,包括: 队列管理模块,用于生成有限深度的先进先出报文队列,并设置用于调度出队任务的缓存报文阈值; 任务管理模块,用于根据业务情况生成一个出队任务及至少一个入队任务,并设置所述出队任务和入队任务具有相同优先级;并在某个入队任务将报文入队时,计算当前报文队列中缓存的报文个数,当判断报文队列中有空闲时将报文入队,否则将报文丢弃;当判断当前报文队列中缓存的报文个数大于缓存报文阈值时,将所述入队任务放入对应优先级的就绪任务队列的队尾; 任务调度模块,用于调度就绪任务队列中的任务。
6.如权利要求5所述的一种基于有限深度的先进先出报文队列管理装置,其特征在于,所述缓存报文阈值大于所述报文队列深度的一般,小于所述报文队列深度的四分之三。
7.如权利要求5所述的一种基于有限深度的先进先出报文队列管理装置,其特征在于,所述任务管理模块还用于当出队任务得到调度时,对报文队列中的多个报文进行出队处理。
8.如权利要求5-7任意一项所述的一种基于有限深度的先进先出报文队列管理装置,其特征在于,所述入队任务的个数小于所述报文队列的深度。
全文摘要
本发明涉及计算机通信领域,其公开了一种基于有限深度的先进先出报文队列管理方法,解决传统技术中可能因为队列满而丢弃报文及入队任务、出队任务频繁切换而影响系统性能的问题。其技术方案的要点可概括为将出队任务和入队任务设置为同一优先级,在处理大量报文的情况下,避免在入队任务和出队任务之间的频繁切换,而影响系统性能;同时,设置调度出队任务的缓存报文阈值,对报文队列中的缓存报文个数进行监控,一旦超出阈值,立即加快出队任务的调度,避免因为队列满而丢弃报文的情况。此外,本发明还公开了一种基于有限深度的先进先出报文队列管理装置。本发明适用于对报文的管理。
文档编号H04L12/863GK103248583SQ201210028540
公开日2013年8月14日 申请日期2012年2月9日 优先权日2012年2月9日
发明者何三波 申请人:迈普通信技术股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1