用于终端无线通信系统分组业务传输链路的数据处理方法
技术领域
本发明涉及一种用于终端无线通信系统分组业务数据传输链路的数据处理方法,具体地说,本发明涉及终端实现的无线通信系统协议软件中分组业务传输链路的内存管理和数据传递方法。
背景技术
无线通信系统包括了GSM/GPRS/EGPRS系统,TD-SCDMA系统以及WCDMA等系统。分组业务数据指IP数据报文。
现有技术中主要以GSM系统中的GPRS协议为例(EGPRS在协议架构上同GPRS相同)进行具体描述,对于其他无线通信系统也同样适用本发明。通用分组无线业务(GPRS)在数据业务链路上进行了分层。协议层数据链路在物理层(Layer1)之上划分为SNDCP(Subnetwork DependentConvergence Protocol,子网汇聚依赖协议)层(GSM04.65),LLC(LogicalLink Control,逻辑链路控制)层(GSM04.64),RLC(Radio Link Control,无线链路控制)层和MAC(Medium Access Control,媒体接入控制)层(GSM04.60)。TD-SCDMA以及WCDMA系统同样把用户面数据业务链路分为了PDCP(Packet Data Convergence Protocol,包数据汇聚协议)层、RLC层和MAC层。分层的目的是为了更好在逻辑上对数据链路进行划分,在不同层上实现不同的功能,使协议更容易被理解和实现。各层之间的原语和实现的功能在协议中都有详细的描述。
终端实现的GPRS协议栈中SNDCP层在发送时负责对收到的上层IP数据报文进行压缩,并对压缩后的数据进行分段;在接收时负责对接收的网络侧数据报文分段进行重组,压缩过的协议控制信息和数据进行解压缩;从控制功能来看负责把一个或者多个网络层实体数据复用到相应的LLC层连接上,并建立、释放和重建端对端的LLC层连接。经过SNDCP层的处理,通信协议可以节约空中接口带宽,更充分利用无线信道,并适应下层LLC的最大传输单元。
LLC层的功能主要是为无线终端和网络侧SGSN设备之间提供高可靠性的逻辑链路,可独立于下层的无线接口协议,保证了在引入新的无线传输技术时,对GPRS网络子系统的改动最小。LLC层支持可变长度的信息帧,支持端到端数据传送,可以以确认模式和非确认模式来传输数据,允许在同一物理资源上对一个SGSN和多个移动终端间进行信息传输。
RLC层负责对发送和接收数据队列的管理,其重要功能是在发送时将上层传递下来的分组数据单元分段为大小相等的RLC数据块,然后将分段成功的数据块按照一定的发送模式和滑动窗口流量控制方法发送到网络的对等层。同时在接收时对从MAC层接收到的数据块进行重组,将重组成功的分组数据单元发送到LLC层。
MAC层完成无线分组业务流的控制功能。当终端处于数据传输态的时候,MAC层会和Layer1层进行信道指派、释放、测量等消息交互。如果无线信道存在PCCCH(Packet Common Control Channels,包公共控制信道)信道,MAC层需要接收Layer1收到的系统消息和小区信息,并通知上层的无线资源管理层进行小区测量同步,小区转换等。MAC层还负责控制建立和释放TBF(Temporary Block Flow,临时块流)。
GPRS协议架构上划分的逻辑层次比较多,虽然对协议设计来说更加清晰,逻辑更合理,但协议实现的时候需要考虑数据在各层之间传递时的内存拷贝开销。数据业务进行的时候,大量并且高速数据在终端和无线网络之间传递,终端软件内部的数据在协议各层任务间流量很大,如果频繁进行层间的内存拷贝操作,必然会降低嵌入式终端有限的CPU和存储资源,造成其他任务的运行调度困难,并直接降低整个嵌入式终端协议栈运行的速度。
现有技术中,以拨号上网典型数据业务过程为例,GPRS数据业务典型的上行和下行过程描述如下:
上行发送数据处理过程中,从PC侧来的数据通过串口发送到终端的DTE(Data Terminal Equipment,数据终端设备)模块。在PPP(Point to PointProtocol,点对点协议)协议建链的过程完成后,DTE模块收到数据解析为PPP帧后分配初始内存存放数据,并发消息通知PPP层处理;PPP层还原IP数据报文,发送消息给SNDCP层;SNDCP层收到消息后,按照需要对IP数据包进行分段,然后发送消息通知LLC层。LLC层收到SNDCP层的消息信号后,会先动态申请一块内存,填写好LLC层头信息,再从消息中拷贝数据的内容,然后加上LLC层尾信息,创建信号发送给RLC层,并释放SNDCP层传过来的数据块。数据传递到RLC层后,RLC层分配内存拷贝消息中LLC层数据,并根据需要将数据块分段。最后将数据交给RLC层与Layer1层之间的RLC数据块缓冲区,由Layer1层将数据发送出去。
可以看出,上行数据传递过程中数据块在SNDCP层与LLC层,LLC层与RLC层以及RLC层与Layer1层之间进行了三次拷贝。
下行接收数据处理过程中,Layer1层收到无线系统网络侧数据块后,首先将数据块拷贝到Layer1层中给RLC层的消息体里,然后以消息的方式发送给RLC层;RLC层将消息体中数据块内容拷贝到自己的数据块内存区,进行重组,如果形成一个完整LLC数据单元则传递给LLC层;SNDCP层将LLC层发送过来的数据拷贝到自己的缓冲区中,进行段重组,然后交给PPP层处理。
可以看到下行数据传递过程中数据块在Layer1和RLC层,RLC层与LLC层,以及LLC层与SNDCP层之间进行了三次拷贝。
很明显,这些内存拷贝操作带来了大量系统资源和时间的开销,在高速无线数据业务中会带来较大额外开销,而且由于频繁申请、释放内存也会导致操作系统内存碎片增多。这些都会造成嵌入式终端协议栈系统软件运行效率降低,直接结果是终端在GPRS等系统数据业务运行时的速率降低,无法达到设计要求。因此终端无线通信协议软件的内存管理和拷贝模式必须进行优化,这样协议栈才能达到更高效率。
发明内容
本发明所要解决的技术问题在于提供一种用于终端无线通信系统分组业务数据传输链路的数据处理方法,以解决在设计实现终端协议栈软件时,如何尽量减少这种数据链路各层间的拷贝操作,达到的最优效果是只在上下行数据链路上分配和释放内存一次,并使协议数据链路各层间数据拷贝次数为零。
为了解决上述问题,本发明提供了一种用于终端无线通信系统分组业务数据传输链路的发送数据处理方法,应用于无线通信系统中终端设备上,其特征在于,包括以下步骤:
(1)所述终端设备收到来自终端上层应用层的数据或者PC侧的数据,将其分配到所述终端设备中协议层的共享内存池的一个内存区中,如果收到的是PPP帧数据则还原为IP数据报文,发送给协议层处理,如果收到的是IP数据报文则直接发送给协议层处理;
(2)所述终端设备的协议层中各层通过传递指向该IP数据报文在共享内存池的内存区中数据块的指针来读取该IP数据报文进行处理,并通过消息在协议层中各层之间传递对内存区中该IP数据报文加入的协议头尾信息和相应控制信息;
(3)由所述终端设备的物理层从协议层接收处理后的该IP数据报文的数据块,并将其发送出去。
本发明所述的方法,其中,所述协议层中各层,包括:
子网依赖的收敛协议层、逻辑链路控制层、无线链路控制层和介质访问控制层。
上述方法,其中,进一步包括:
(4)当所述无线链路控制层使用确认模式传输时,只有当所述无线链路控制层收到完整的该IP数据报文的数据块的应答后,所述终端设备的协议层才释放为该IP数据报文分配的共享内存池中的内存;
当所述无线链路控制层使用非确认模式传输时,所述终端设备的物理层成功完成该IP数据报文的发送后通知协议层,则所述协议层立即释放为该IP数据报文分配的共享内存池中的内存。
为了解决上述问题,本发明还提供了一种用于终端无线通信系统分组业务数据传输链路的接收数据处理方法,应用于无线通信系统中终端设备上,其特征在于,包括以下步骤:
(1)当所述终端设备的物理层接收到IP数据报文的数据块后,直接将该IP数据报文的数据块存放到共享内存池中已分配给所述终端设备中协议层的一个内存区中;
(2)所述协议层中各层通过传递指向该IP数据报文在共享内存池的内存区中数据块的指针来读取该IP数据报文进行重组处理,并通过消息在协议层中各层之间传递对内存区中该IP数据报文解析的协议头尾信息和相应控制信息;
(3)所述协议层输出一个重组后完整的IP数据报文发送给终端设备的上层应用层或者发送给PC侧对端。
本发明所述的方法,其中,所述步骤(3)进一步包括:
当发送成功后,所述终端设备的协议层释放该IP数据报文在共享内存池中对应的数据块内存。
本发明所述的方法,其中,所述协议层中各层,包括:
子网依赖的收敛协议层、逻辑链路控制层、无线链路控制层和介质访问控制层。
上述方法,其中,所述步骤(1)包括:
当所述终端设备的物理层接收到IP数据报文的数据块后,直接将该IP数据报文的数据块存放到共享内存池中已分配给所述终端设备的协议层中无线链路控制层数据块内存区中;
所述步骤(2)包括:
所述协议层中各层通过传递指向该IP数据报文在共享内存池的无线链路控制层数据块内存区中数据块的指针来读取该IP数据报文进行重组处理,并通过消息在协议层中各层之间传递对无线链路控制层数据块内存区中该IP数据报文解析的协议头尾信息和相应控制信息。
采用本发明所述方法,终端运行的无线通信系统协议软件中分组业务数据在不同协议层间传递时的拷贝次数可以为零,减少了层间拷贝带来的内存和CPU时钟消耗,显著提高了终端无线分组数据传送的能力和速度。
附图说明
图1是本发明实施中现有技术的GPRS协议栈终端和网络侧之间的协议层结构图,其中,Layer1表示物理层,MAC表示媒体接入控制层,RLC表示无线链路控制层,LLC表示逻辑链路控制层,SNDCP表示子网汇聚依赖协议层,MS表示移动台,Network表示无线通信网络,Um表示移动台和无线通信网络之间的空中接口;
图2是本发明实施例所述的终端无线通信系统分组业务数据传输链路的上行数据发送过程具体流程图;
图3是本发明实施例所述的终端无线通信系统分组业务数据传输链路的下行数据接收过程具体流程图。
具体实施方式
本发明为了解决传统技术方案存在的弊端,通过以下具体实施例进一步阐述本发明所述的一种用于终端无线通信系统分组业务数据传输链路的数据处理方法,以下对具体实施方式进行详细描述,但不作为对本发明的限定。
如图1所示,为GPRS协议栈终端和网络侧之间协议层示意图,其中101为移动台(Mobile Station,MS),即无线终端设备;102所示Um为终端与无线通信网络之间的空中接口;103为无线通信网络,这里以GPRS通信系统为例;104为协议栈物理层(Layer1);105为协议栈MAC层;106为协议栈RLC层;107为协议栈LLC层;108为协议栈SNDCP层。层间的箭头连线表示终端和无线网络之间有逻辑或者物理连接存在。
如图2所示,是本发明所述方法中上行数据发送的过程,这里以GPRS系统为例描述本发明内容,其他无线通信系统的处理方法同GPRS系统类似。结合附图1,应用于无线终端设备中,其中,协议栈数据链路层包括:RLC层(无线链路控制层)、LLC层(逻辑链路控制层)、SNDCP层(子网汇聚依赖协议层),具体实施步骤如下:
步骤201,无线终端设备的DTE(数据终端设备)模块从串口收到来自一个PC(个人计算机)侧的数据,并解析为PPP层(点对点协议)的数据帧,即PPP帧后,分配终端设备中协议栈数据链路层的共享内存池中内存块存放该数据;
步骤202,所述PPP层对该数据还原为IP数据报文后,发送相应的消息给SNDCP层;
步骤203,所述SNDCP层按需要对该IP数据报文数据包进行分段,该IP数据报文的控制信息和该IP数据报文在共享内存数据的指针通过消息通知给LLC层;
步骤204,所述LLC层产生该IP数据报文的协议头尾信息,并在消息中传递该IP数据报文在共享内存数据的指针给RLC层;
步骤205,所述RLC层根据需要将该IP数据报文的数据块分段,将所述RLC层中的数据块交给物理层(Layer1)层发送出去;
步骤206,判断所述RLC层是否使用确认模式传输,如果是,则执行步骤207;如果否,则执行步骤208;
步骤207,如果步骤206中判断RLC为确认模式传输,则当RLC层收到网络侧发来的一个完整的该IP数据报文所有数据块的应答后,所述RLC层释放为该IP数据报文分配的共享内存池中的内存;
步骤208,如果步骤206中判断RLC为非确认模式传输,则当物理层(Layer1)通知成功完成一个该IP数据报文的所有数据块发送后,所述RLC层立即释放为该IP数据报文分配的共享内存池中的内存。
这里以拨号上网典型数据业务过程为例,本发明实施例所述方法中上行数据链路处理的方法描述如下:
上行发送数据处理过程中,当终端GPRS协议栈中的DTE模块从串口收到一个PC侧来的数据,并将其还原为IP数据报文后,协议栈程序只由所述DTE模块在系统的各协议层任务间的共享内存池中申请一次内存,以后各协议层在传输数据时只传递指向该IP数据报文在共享内存数据的指针,系统通过消息传递各协议层在原始的该IP数据报文上加入的必要头尾协议层信息和相应控制信息,直到传递给物理层(Layer1),交给并由物理层(Layer1)将处理好的数据块发送出去;各协议层在任务间通信过程的消息结构中都以数据的指针来指向实际数据单元,队列只保存必要的控制信息;
上行数据链路当RLC层使用确认模式传输时,在收到网络侧发来的一个完整IP数据报文的所有RLC数据块的应答后,则释放为该IP数据报文分配的共享内存池中的内存;当RLC层使用非确认模式传输时,物理层(Layer1)通知成功完成一个IP数据报文的发送后,则立即释放为该IP报文分配的共享内存池中的内存。
本发明所述方法的上行数据发送过程在协议栈数据链路各层之间只需要进行一次内存分配和释放操作。GPRS协议栈从PPP层到RLC层之间数据操作实现了内存零拷贝,IP数据报文在DTE模块中申请共享内存,最后在RLC层进行释放,这样就大大降低了内存操作带来的额外开销,提高了系统性能。
如图3所示,是本发明所述方法中下行数据接收的过程,这里以GPRS系统为例描述本发明内容,其他无线通信系统的处理方法同GPRS系统类似。结合附图1,应用于无线终端设备中,其中,协议栈数据链路层包括:RLC层(无线链路控制层)、LLC层(逻辑链路控制层)、SNDCP层(子网汇聚依赖协议层),具体实施步骤如下:
步骤301,物理层(Layer1)接收到IP数据报文的数据块放到在共享内存池中申请分配给RLC层数据块的内存区中,并发消息通知所述RLC层;
步骤302,所述RLC层重组该IP数据报文的数据块为LLC数据单元,然后发消息通知所述LLC层,并在消息中附加共享内存中该数据块的指针和控制信息;
步骤303,所述LLC层解析头尾协议层信息,并在消息中传递共享内存中该数据块的指针和控制信息给SNDCP层;
步骤304,所述SNDCP层管理分段控制信息队列进行段重组,完成该IP数据报文重组后通过消息通知PPP层处理;
步骤305,所述PPP层将数据封装为PPP帧,然后交给所述终端的DTE模块处理;
步骤306,所述终端的DTE模块通过串口成功将该数据发送给PC侧对端后,然后所述DTE模块释放共享内存池中对应的数据块内存。
这里在以拨号上网典型数据业务过程为例,本发明实施例所述方法中下行数据链路处理的方法描述如下:
下行接收数据处理过程中,物理层(Layer1)的数据块不再拷贝到消息结构中传递给RLC层,所有接收到的数据块都直接放到为RLC层数据块在各协议层任务间共享内存池中申请分配的内存区中去;这样下行接收数据过程同上行一样,只在所述RLC层从共享内存池中申请一次内存;各协议层之间通过消息传递该数据块的指针来读取数据内容,并在消息中传递必要的各协议层控制信息;当SNDCP层重组并完成一个完整的IP数据报文后,通过消息通知PPP层将该数据封装为PPP帧;所述PPP层发消息通知所述终端的DTE模块,所述终端的DTE模块通过串口成功将该数据发送给PC侧对端后,释放共享内存池中对应的数据块内存。
本发明的下行数据接收过程在协议栈各层之间只进行一次内存分配和释放操作。IP数据报文的数据块在RLC层申请内存,最后在终端的DTE模块进行释放。
本发明的内存零拷贝方案有效减少了终端协议软件各协议层中任务模块间频繁的申请、释放内存和拷贝数据操作,大大提高了嵌入式终端协议栈系统的效率。同时通过上行发送数据时在DTE模块控制为IP数据报文申请内存的块数来限制数据业务流量,实现了一定程度的流量控制,从而避免系统内存资源耗尽而重启或者死机,达到了很好的效果。
综上所述,本发明采用的内存零拷贝管理方法针对终端协议栈系统目前上下行数据链路层间内存拷贝次数多的缺点,达到了在各层之间数据传递不需要进行多余内存拷贝的目的,大大降低了大量终端系统开销。同时通过上行发送数据时控制为IP数据报文申请内存的块数来达到限制数据业务流量的目的,在一定程度上实现了无线通信系统数据业务流量控制的目的,从而避免因为数据流量过大导致终端嵌入式系统内存资源耗尽而重启或者死机。本发明成功实现了终端无线通信协议软件在各协议层之间的内存拷贝次数为零,达到了IP数据报文内存只进行一次对应的申请和释放操作;实际效果表明该方法增加了协议栈软件运行效率,大大提高了数据链路的数据传输速率。
当然,本发明还可有其他多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员可根据本发明做出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。