具体实施方式
本发明提出了一种用于DCF的新的公平分组调度算法。在DCF的Ad-hoc模式下没有节点做集中式调度,因此本发明提出的公平分组调度算法要求系统能够维护一个全局虚拟时钟。各节点不仅要维护自身的虚拟时钟,还要更新其维护的全局虚拟时钟。公平分组调度主要保证了系统的加权公平性(weighted fairness)。调度算法的目标是保证各个节点能有相同的归一化吞吐量,而这个度量就是虚拟时钟。虚拟时钟代表了节点的归一化吞吐量。每个节点可以在数据分组中携带发送自己的虚拟时钟。每个节点在接收到其它节点发送的数据分组之后,可以更新自己的全局虚拟时钟,从而使得系统能够维护一个全局的虚拟时钟。全局的虚拟时钟代表了目前系统中传输速率最快的节点的归一化吞吐量。
各节点的虚拟时钟的初始值为0,全局虚拟时钟的初始值也为0。为节点单独设置虚拟时钟的目的是使节点能够与系统中目前传输速率最高的虚拟时钟同步。
一种可选的接入控制方法如图2所示。
节点需要发送数据时,首先监听信道(步骤21),如果信道忙或空闲的时间小于DIFS,则继续监听信道,当信道持续空闲的时间达到DIFS后,计算退避间隔(步骤22),然后启动退避计数器进入退避过程(步骤23)。如果在退避时间内信道仍然保持空闲,则在退避计数器的值递减为0后发送分组(步骤24),发送RTS分组。
其中,计算退避间隔的算法有很多,无论采用何种算法,需要满足如下要求:
802.11系统DCF采用指数退避的算法。该算法造成大量的冲突。因此新的退避间隔的计算。
1、在用户数较多,负载较高的时候,降低冲突率,减少系统的时延;
2、原则上每次应该挑选虚拟时钟最小的节点进行接入,这种原则可以称为最小虚拟时钟优先(Smallest vitural Finish time First,SFF)原则。
由于分布式情形下,没有集中式调度器,也就无法知道各个节点队首的虚拟时钟,而只能采用分布式策略来近似。比如给虚拟时钟小的节点分配小的退避间隔,使得该节点具有更高的优先级接入信道。可以看出,退避间隔的作用是保证节点按照集中式调度的算法顺序来服务,也就是拥有最小虚拟时钟的节点最先进行接入。退避间隔的数值主要起到一个参考调度作用。因此,只要能达到调度的目的,尽量的减少退避间隔的值来实现整个系统更小的时延代价。
对于系统中第i个节点,如果该节点最近一次收到的其它节点发送的虚拟时钟为Fj,本次发送分组的虚拟时钟为Fi k,其维护的全局虚拟时钟为Vi,构造这样一个退避间隔的计算函数,其输入参数包括所述虚拟时钟Fj、Fi k和全局虚拟时钟Vi。
系统的调度原则是首先服务最小的虚拟时钟,所以可以定义一个单调递增函数的映射函数f(x),典型的,可以采用通过线性映射或者指数等映射方式,将差值
映射到一个非负整数空间Z,从而得到退避间隔。当Delta>0时,节点在系统中处于领先的位置,其状态为lead;当Delta≤0时,节点在系统中处于落后的位置,其状态为lag。当节点为lead状态时,根据其领先的程度映射到不同的退避间隔值。当节点为lag状态时,给出较小的退避间隔值。一种可选的映射方式如(1)式:
其中,K为初始值,M为映射等级,P为配置的DATA分组长度,m、n为正整数,Random(h,l)表示在[h,l]内随机取一个数值。
在发送RTS分组时,可以在MAC头中新增加一个域或利用空闲的域携带发送本节点本次虚拟时钟Fi k。
某一节点收到其它节点发送的RTS分组后,解开MAC头,可以获得其它节点的虚拟时钟Fi,如果该节点维护的全局虚拟时钟小于虚拟时钟Fi,则更新全局虚拟时钟为虚拟时钟Fj;否则,保持全局虚拟时钟不变。
系统中第i个节点进行第k组数据接入时,通过计算
可以获得该节点本次发送分组的虚拟时钟F
i k。其中,F
i k-1为本节点前次成功发送分组后的虚拟时钟,L
k为本次发送的DATA分组的长度,r
i为本节点的权重。
该节点首次发送分组的虚拟时钟
其中,V
i为该节点维护的全局虚拟时钟。
这里,每个节点都会被分配一个权重值r
k,为保证系统提供的带宽,所有节点的权重值应该满足
其中,r为系统带宽,N为系统中激活节点的数量。
另外,也可以在发送DATA分组时,携带发送本次发送分组的虚拟时钟Fi k。收到ACK后,将虚拟时钟Fi k与维护的全局虚拟时钟进行比较。如果虚拟时钟Fi k大于全局虚拟时钟,则更新全局虚拟时钟为Fi k,否则保持全局虚拟时钟不变。
在基本的发送分组流程中,退避计数器的值递减到0后发送DATA分组。发送DATA分组时,携带发送本次发送分组的虚拟时钟Fi k。收到ACK后,将虚拟时钟Fi k与维护的全局虚拟时钟进行比较。如果虚拟时钟Fi k大于全局虚拟时钟,则更新全局虚拟时钟为Fi k,否则保持全局虚拟时钟不变。
在分布式WLAN中,采用上述实施例所述的方法进行调度,不仅可以保证系统调度的公平性,尤其在用户数较多、系统负载较高时,还可以有效地降低节点之间发生冲突的概率,从而减少系统的时延。
图3示出了另一种接入控制方法的流程。
需要发送数据时,首先监听信道(步骤31),如果信道忙或空闲的时间小于DIFS,则继续监听信道,当信道持续空闲的时间达到DIFS后,计算退避间隔(步骤32),然后启动退避计数器进入退避过程(步骤33)。在退避的时间内检测信道是否变忙(步骤34),如果信道变忙,则停止退避计数器递减(步骤35),在下一次检测到一个DIFS的信道空闲时间后,重新计算退避计数器的退避间隔的值(步骤36),再次启动退避计数器并从重新计算的退避间隔开始递减。如果在退避过程中,又检测到信道忙,则再次停止退避计数器递减。如此反复,直到退避计数器的值递减为0,发送RTS分组(步骤37)。
如果在规定时间内没有CTS分组返回,则认为发生了冲突。重新计算退避计数器的退避间隔的值,启动退避计数器进入退避过程。如果在规定时间内接收到CTS分组,则等待一个SIFS,然后发送DATA分组。
在发送RTS分组时,或在发送DATA分组时,携带发送本次发送分组的虚拟时钟Fi k。
在基本的接入流程中,退避计数器的值递减到0后,发送DATA分组。如果在规定时间内没有ACK分组返回,则认为发生了冲突。重新计算退避计数器的退避间隔的值,启动退避计数器进入退避过程。发送DATA分组时,携带发送本节点本次发送分组的虚拟时钟Fi k。
图4示出了另一种接入控制方法的流程。
需要发送数据时,首先监听信道(步骤41),如果信道忙或空闲的时间小于DIFS,则继续监听信道,当信道持续空闲的时间达到DIFS后,计算退避间隔(步骤42),然后启动退避计数器进入退避过程(步骤43)。在退避的时间内检测信道是否变忙(步骤44)。如果信道变忙,则停止退避计数器递减(步骤45),在下一次检测到一个DIFS的信道空闲时间后,判断本节点的状态是否发生变化(步骤46)。如果本节点的状态发生变化,例如:本节点的状态由lead变为lag,或由lag变为lead,则启动退避计数器按剩余值Tbackof_left继续进行退避计数。如果本节点的状态未发生变化,则判断本节点的当前状态(步骤47)。
如果本节点的当前状态为lead,则重新计算退避间隔Tbackoff(步骤48);如果本节点的当前状态为lag,则对退避计数的剩余值Tbackof_left进行微调(步骤49)。
其中,一种对退避计数的剩余值Tbackof_left进行微调的可选方式是:
判断Tbackof_left是否小于第一设定值;
如果小于,则Tbackoff=Random(0,x);
否则,Tbackoff=Tbackof_left+Random(0,y)。
为保证系统稳定,对退避计数的剩余值Tbackof_left进行微调后的值如果大于门限值,则重新计算退避间隔Tbackoff。
再次启动退避计数器开始递减,如果在退避过程中又检测到信道忙,则再次停止退避计数器递减。如此反复,直到退避计数器的值递减为0,发送RTS分组(步骤410)。
如果在规定时间内没有CTS分组返回,则认为发生了冲突,重新计算退避计数器的退避间隔的值,启动退避计数器进入退避过程。如果在规定时间内接收到CTS分组,则等待一个SIFS并发送DATA分组。
在基本的接入流程中,退避计数器的值递减到0后,发送DATA分组。如果在规定时间内没有ACK分组返回,则认为发生了冲突,重新计算退避计数器的退避间隔的值,启动退避计数器进入退避过程。
以下是另一种接入控制方法的流程。
需要发送数据时,首先监听信道,如果信道忙或空闲的时间小于DIFS,则继续监听信道,当信道持续空闲的时间达到DIFS后,计算退避间隔,然后启动退避计数器进入退避过程。在退避的时间内检测信道是否变忙。如果信道变忙,则停止退避计数器递减,在下一次检测到一个DIFS的信道空闲时间后,重新计算退避间隔Tbackoff。判断本节点的状态是否发生变化。如果本节点的状态发生变化,则启动退避计数器按剩余值Tbackof_left继续进行退避计数。如果本节点的状态未发生变化,则判断本节点的当前状态。
如果本节点的当前状态为lead,则按重新计算的退避间隔Tbackoff进行退避计数;如果本节点的当前状态为lag,则对退避计数的剩余值Tbackof_left进行微调后进行退避计数。
如果在退避过程中又检测到信道忙,则再次停止退避计数器递减。如此反复,直到退避计数器的值递减为0,发送RTS分组。
如果在规定时间内没有CTS分组返回,则认为发生了冲突,重新计算退避计数器的退避间隔的值,启动退避计数器进入退避过程。如果在规定时间内接收到CTS分组,则等待一个SIFS并发送DATA分组。
在基本的接入流程中,退避计数器的值递减到0后,发送DATA分组。如果在规定时间内没有ACK分组返回,则认为发生了冲突,重新计算退避计数器的退避间隔的值,启动退避计数器进入退避过程。
图5示出了一种用于分布式WLAN的接入控制装置。该装置500包括退避计数器S51,还包括第一单元S52、接入单元S53和控制单元S54。
第一单元S52用于计算退避间隔Tbackoff,退避计数器S51按第一单元S52计算的退避间隔Tbackoff进行退避计数。退避计数器S51计数到零后,接入单元S53发送分组。控制单元S54用于在信道持续空闲的时间达到DIFS后,启动第一单元S52计算退避间隔Tbackoff。
节点需要发送数据时,首先监听信道,如果信道忙或空闲的时间小于DIFS,则继续监听信道,当信道持续空闲的时间达到DIFS后,控制单元S54启动第一单元S52计算退避间隔。然后,退避计数器S51启动进入退避过程。如果在退避时间内信道仍然保持空闲,则在退避计数器的值递减为0后接入单元S53发送分组。
节点在退避的时间内如果检测到信道变忙,则控制单元S54停止退避计数器S51递减,在下一次检测到一个DIFS的信道空闲时间后,控制单元S54重新启动第一单元S52计算退避计数器S51的退避间隔的值。再次启动退避计数器S51,从第一单元S52重新计算的退避间隔开始递减。如果在退避过程中又检测到信道忙,则再次停止退避计数器S51递减。如此反复,直到退避计数器S51的值递减为0,接入单元S53才发送分组。
如果在规定时间内没有CTS分组返回,则认为发生了冲突,控制单元S54重新启动第一单元S52计算退避计数器S51的退避间隔的值,然后启动退避计数器S51进入退避过程。如果在规定时间内接收到CTS分组,则节点等待一个SIFS并发送DATA分组。
节点可以在发送DATA分组时,通过接入单元S53在MAC头携带发送本节点本次发送分组的虚拟时钟Fi k。收到ACK后,控制单元S54将虚拟时钟Fi k与维护的全局虚拟时钟进行比较。如果虚拟时钟Fi k大于全局虚拟时钟,则更新全局虚拟时钟为Fi k,否则保持全局虚拟时钟不变。
某一节点收到其它节点发送的DATA分组后,解开MAC头,可以获得其它节点的虚拟时钟Fj,如果全局虚拟时钟V小于该虚拟时钟Fj,则更新全局虚拟时钟V为该虚拟时钟Fj;否则,保持全局虚拟时钟V不变。
在基本的接入流程中,如果在规定时间内没有ACK分组返回,则认为发生了冲突,控制单元S54重新启动第一单元S52计算退避计数器S51的退避间隔的值,然后启动退避计数器S51进入退避过程。
在分布式WLAN中,采用上述实施例所述的装置进行调度,不仅可以保证系统调度的公平性,尤其在用户数较多、系统负载较高时,还可以有效地降低节点之间发生冲突的概率,从而减少系统的时延。
所述装置的另一个应用:
节点需要发送数据时,首先监听信道,如果信道忙或空闲的时间小于DIFS,则继续监听信道,当信道持续空闲的时间达到DIFS后,控制单元S54启动第一单元S52计算退避间隔。然后,退避计数器S51启动进入退避过程。如果在退避时间内信道仍然保持空闲,则在退避计数器的值递减为0后接入单元S53发送分组。
节点在退避的时间内如果检测到信道变忙,则控制单元S54停止退避计数器S51递减,在下一次检测到一个DIFS的信道空闲时间后,控制单元S54判断本节点的状态是否发生变化。如果本节点的发生状态变化,则启动退避计数器S51按退避计数的剩余值Tbackof_left继续进行退避计数。如果本节点的状态未发生变化,则判断本节点的当前状态。如果本节点的当前状态为lead,则启动第一单元S52重新计算退避间隔Tbackoff;如果本节点的当前状态为lag,则对退避计数器S51的剩余值Tbackof_left进行微调。
其中,一种可选的方式是通过计算Tbackoff=Tbackof_left+Random(0,y),对退避计数的剩余值Tbackof_left进行微调,获得微调后的退避间隔。为保证系统稳定,对退避计数的剩余值Tbackof_left进行微调后的值如果大于门限值,则重新计算退避间隔Tbackoff。
控制单元S54再次启动退避计数器S51开始递减。如果在退避过程中又检测到信道忙,则再次停止退避计数器递减。如此反复,直到退避计数器S51的值递减为0,接入单元S53才发送分组。
如果在规定时间内没有CTS分组返回,则认为发生了冲突,控制单元S54重新启动第一单元S52计算退避计数器S51的退避间隔的值,启动退避计数器S51进入退避过程。如果在规定时间内接收到CTS分组,则节点等待一个SIFS并发送DATA分组。
节点可以在发送DATA分组时,通过接入单元S53在MAC头携带发送本节点本次发送分组的虚拟时钟Fi k。节点收到ACK后,控制单元S54将虚拟时钟Fi k与维护的全局虚拟时钟进行比较。如果虚拟时钟Fi k大于全局虚拟时钟,则更新全局虚拟时钟为Fi k,否则保持全局虚拟时钟不变。
在基本的接入流程中,如果在规定时间内没有ACK分组返回,则认为发生了冲突,控制单元S54重新启动第一单元S52计算退避计数器S51的退避间隔的值,启动退避计数器S51进入退避过程。
所述装置的另一个应用:
节点需要发送数据时,首先监听信道,如果信道忙或空闲的时间小于DIFS,则继续监听信道,当信道持续空闲的时间达到DIFS后,控制单元S54启动第一单元S52计算退避间隔。然后,退避计数器S51启动进入退避过程。如果在退避时间内信道仍然保持空闲,则在退避计数器的值递减为0后接入单元S53发送分组。
节点在退避的时间内如果检测到信道变忙,则控制单元S54停止退避计数器S51递减,在下一次检测到一个DIFS的信道空闲时间后,控制单元S54重新启动第一单元S52计算退避间隔Tbackoff。控制单元S54判断本节点的状态是否发生变化。如果本节点的发生状态变化,则启动退避计数器S51按剩余值Tbackof_left继续进行退避计数。如果本节点的状态未发生变化,则判断本节点的当前状态。
如果本节点的当前状态为lead,则启动退避计数器S51按第一单元S52重新计算的退避间隔Tbackoff进行退避计数;如果本节点的当前状态为lag,则对退避计数器S51的剩余值Tbackof_left进行微调,然后启动退避计数器S51按微调后的值进行退避计数。
如果在退避过程中又检测到信道忙,则再次停止退避计数器递减。如此反复,直到退避计数器S51的值递减为0,接入单元S53才发送分组。
如果在规定时间内没有CTS分组返回,则认为发生了冲突,控制单元S54重新启动第一单元S52计算退避计数器S51的退避间隔的值,启动退避计数器S51进入退避过程。如果在规定时间内接收到CTS分组,则节点等待一个SIFS并发送DATA分组。
节点可以在发送DATA分组时,通过接入单元S53在MAC头携带发送本节点本次发送分组的虚拟时钟Fi k。收到ACK后,控制单元S54将虚拟时钟Fi k与维护的全局虚拟时钟进行比较。如果虚拟时钟Fi k大于全局虚拟时钟,则更新全局虚拟时钟为Fi k,否则保持全局虚拟时钟不变。
在基本的接入流程中,如果在规定时间内没有ACK分组返回,则认为发生了冲突,控制单元S54重新启动第一单元S52计算退避计数器S51的退避间隔的值,启动退避计数器S51进入退避过程。
本领域技术人员可以明白,这里结合所公开的实施例描述的各种示例性的方法步骤和装置单元均可以电子硬件、软件或二者的结合来实现。为了清楚地示出硬件和软件之间的可交换性,以上对各种示例性的步骤和单元均以其功能性的形式进行总体上的描述。这种功能性是以硬件实现还是以软件实现依赖于特定的应用和整个系统所实现的设计约束。本领域技术人员能够针对每个特定的应用,以多种方式来实现所描述的功能性,但是这种实现的结果不应解释为倒是背离本发明的范围。
利用通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或者其它可编程的逻辑器件、分立门或者晶体管逻辑、分立硬件组件或者他们之中的任意组合,可以实现或执行结合这里公开的实施例描述的各种示例性的单元。通用处理器可能是微处理器,但是在另一种情况中,该处理器可能是任何常规的处理器、控制器、微控制器或者状态机。处理器也可能被实现为计算设备的组合,例如,DSP和微处理器的组合、多个微处理器、一个或者更多结合DSP核心的微处理器或者任何其他此种结构。
结合上述公开的实施例所描述的方法的步骤可直接体现为硬件、由处理器执行的软件模块或者这二者的组合。软件模块可能存在于RAM存储器、闪存、ROM存储器、EPROM存储器、EEPROM存储器、寄存器、硬盘、移动磁盘、CD-ROM或者本领域熟知的任何其他形式的存储媒质中。一种典型存储媒质与处理器耦合,从而使得处理器能够从该存储媒质中读信息,且可向该存储媒质写信息。在替换实例中,存储媒质是处理器的组成部分。处理器和存储媒质可能存在于一个ASIC中。该ASIC可能存在于一个用户站中。在一个替换实例中,处理器和存储媒质可以作为用户站中的分立组件存在。
根据所述公开的实施例,可以使得本领域技术人员能够实现或者使用本发明。对于本领域技术人员来说,这些实施例的各种修改是显而易见的,并且这里定义的总体原理也可以在不脱离本发明的范围和主旨的基础上应用于其他实施例。以上所述的实施例仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。