一种数据传送方法

文档序号:7601249阅读:161来源:国知局
专利名称:一种数据传送方法
技术领域
本发明涉及数据传输领域,具体涉及一种数据传送方法。
背景技术
目前,服务通用分组无线业务(GPRS,General Packet Radio Service)网络和外部网络之间的数据通信非常频繁,网关GPRS支持节点(GGSN,GatewayGPRS Support Node)设备是GPRS网络和外部网络之间的网关设备,它可以看成是可以访问GPRS网络内部所有移动用户的一个路由器网关。GGSN设备汇聚GPRS网络内部的用户数据再转发到外部网络或者将外部网络数据转发给GPRS内部用户,所以GGSN的数据转发能力将影响用户的上网速度。
GGSN设备需要完成用户上下文的创建、用户数据的转发、计费等功能。由于GGSN设备支持的用户数量很多,一般在几十万,甚至上百万,即使每个用户的数据流量都很小,但汇聚到GGSN设备上后数据流量也会很大,因此,对于GGSN设备来说,如何提供更多的服务又尽量小的影响现在的数据转发速度是一个亟待解决的问题。
通常,GGSN设备采用网络处理器(NP,Net Processor)处理转发数据,采用通用处理器(CPU,Central Processing Unit)控制数据的转发速度。NP和通用CPU之间要经过两次数据传送NP和通用CPU的底层驱动之间以及通用CPU的底层驱动和通用CPU的应用模块之间。实际是通过NP-网络处理器支持(NPS,Net Processor Service)-控制节点(CP,Control Point)的过程实现的,CP是通用CPU在网络中所处的位置,NPS应用在通用CPU上,同时可以访问NP。
具体步骤如下步骤1NPS将NP传来的数据拷贝到NP和CP共享的接收缓冲区(Rbuf,Receive Buffer)中。该过程可看作是NP和通用CPU的底层驱动之间的数据传送过程。
NP和CP共享Rbuf即为NP和CP都可以访问Rbuf。
在数据传送过程中,NPS向虚拟操作系统(VOS,Visual Operation System)发起内存申请,VOS在其管理的内存范围内根据内存页面查找空闲内存,即在一个内存空闲链表中查找空闲内存,查找到空闲内存后进行内存块的常规检查,包括该段地址是否被破坏等,最后VOS将内存的控制信息填入申请到的内存即Rbuf前面,实际申请内存将大于用户输入的内存大小。然后VOS将内存指针返回给申请者NPS。
Rbuf在数据到来之前必须预先申请好,否则,数据将会丢失。
步骤2NPS将数据从Rbuf拷贝到支持多个分片处理的缓冲区(Mbuf,Multipartite Buffer)。
该过程可看作是通用CPU的底层驱动和通用CPU的应用模块之间的数据传送。
数据从Rbuf发送出去后,NPS向VOS发送Rbuf内存释放请求。同样,Mbuf在数据到来之前必须预先申请好,否则,数据将会丢失。
上层模块使用了Mbuf数据后,也要释放Mbuf。
采用这种方法进行数据转发,虽然NP与通用CPU的底层驱动之间的数据传送速度很快,但是由于频繁的申请和释放内存过程导致大量的通用CPU资源消耗,使得通用CPU的底层驱动到应用模块之间的数据传送速率降低,底层驱动和应用模块之间的数据传送速率就成为系统瓶颈。

发明内容
有鉴于此,本发明的主要目的在于提供一种数据传送方法,以避免数据处理过程中的内存申请和释放过程,实现提高数据传送效率的目的。
为达到上述目的,本发明的技术方案是这样实现的一种数据传送方法,该方法包括
A、根据传送的数据报的大小,通用处理器的底层驱动在底层驱动和应用模块共享的存储空间内申请空闲内存;B、底层驱动将外部发送来的数据拷贝到自身申请的空闲内存中,并将该内存的标识传送给应用模块,应用模块接收到内存标识后,根据此标识访问对应的内存。
所述步骤A在底层驱动申请空闲内存之后,进一步包括,应用模块在底层驱动和应用模块共享的存储空间内申请空闲内存,和,所述步骤B之后进一步包括,应用模块对内存中的数据进行处理,之后,将该内存作为应用模块自身的空闲内存。
所述步骤B之后进一步包括,应用模块将自身申请的空闲内存标识交给底层驱动,底层驱动将该应用模块的空闲内存作为自身的空闲内存。
所述步骤A之后、步骤B之前进一步包括A1、底层驱动对其申请的空闲内存进行分块,并将分块后的空闲内存设置为空闲内存链表进行维护,和,步骤B所述底层驱动将外部发送来的数据拷贝到的空闲内存为自身维护的空闲内存链表的第一个内存块。
所述步骤A1之后、步骤B之前进一步包括,底层驱动记录申请到的空闲内存的总存储空间,并顺序记录各内存块的存储空间,和,所述步骤B之后进一步包括,底层驱动从总存储空间里减去步骤B所述存储数据的内存块的存储空间,底层驱动判断剩余的总存储空间是否小于预设值,若是,底层驱动给应用模块发送一个指令,应用模块接收到该指令后将自身的空闲内存标识交给底层驱动;否则,不作处理。
所述步骤A之后、步骤B之前进一步包括,应用模块对其申请的空闲内存进行分块,并将分块后的空闲内存设置为空闲内存链表进行维护,和,所述应用模块取出其申请的空闲内存标识为其维护的空闲内存链表的第一个内存块的标识。
步骤B所述内存的标识为内存的指针或内存地址偏移。
与现有技术相比,本发明所提供的方法通过通用CPU的底层驱动在底层驱动和应用模块共享的存储空间内预先申请一定大小的空闲内存,底层驱动将外部发送来的数据首先拷贝到自身申请的空闲内存,然后将该存储有数据的内存的标识传送到应用模块,本发明避免了数据处理过程中的内存申请和释放过程,减少了内存管理的开销,虽然部分内存被长期占用,但是提高了系统的总体运行速率。


图1为利用本发明实现NP和通用CPU之间数据转发的具体实施方式
一的流程图;图2为利用本发明实现通用CPU的底层驱动和应用模块之间数据传送的具体实施方式
一的过程示意图;图3为利用本发明实现NP和通用CPU之间数据转发的具体实施方式
二的流程图。
具体实施例方式
本发明的核心思想是根据传送的数据报大小,通用CPU的底层驱动在底层驱动和应用模块共享的存储空间内申请一定大小的空闲内存;当底层驱动接收到外部传送来的数据后,将数据拷贝到自身申请到的空闲内存,然后将该内存的标识传送给应用模块。
在实际应用过程中,为了避免在底层驱动的空闲内存全部用完之后,外部传送来的数据因没有内存存储,从而导致数据传送失败情况的发生,因此,应用模块也可以预先在底层驱动和应用模块共享的存储空间内申请一定大小的内存,并且在每一次接收到底层驱动传送的数据后,或者每隔一段时间,或者在底层驱动的空闲内存就要用完时,将自身的空闲内存标识传送给底层驱动,底层驱动接收到这些空闲内存标识后,将与标识对应的空闲内存作为自身的空闲内存。
内存标识可以是表示内存位置的指针、地址偏移等,应用模块接收到底层驱动传送来的内存标识后,可根据此标识访问到对应的内存,从而对内存中的数据进行处理。
下面结合附图及具体实施方式
一和具体实施方式
二对本发明再作进一步详细的说明。
图1为利用本发明实现NP和通用CPU之间数据转发的具体实施方式
一的流程图,如图1所示,其具体步骤如下步骤101通用CPU的底层驱动和应用模块分别在他们共享的存储空间中预先申请一定大小的内存并对该内存进行分块,分块后的每块内存称为内存块,并将申请到的分块后的内存做成空闲内存链表进行维护。
由于NP和通用CPU之间的数据报交换大小一般在3096字节以内,所以可以将底层驱动和应用模块申请到的内存分为大小至少为3096字节的内存块,当然,也可以根据实际数据报传送的大小将内存块定为其他大小。
在这里,底层驱动和应用模块各自申请到的内存大小可不一样,他们对各自的内存分块后每个内存块的大小也可不相同。
步骤102NP将数据发送给通用CPU的底层驱动。
步骤103底层驱动从其空闲内存链表中取出第一个内存块D1,并将数据拷贝到D1中。
步骤104底层驱动将D1的指针传送给应用模块。
步骤105应用模块从其空闲内存链表中取出第一个内存块S1,将S1的指针交给底层驱动,底层驱动将S1作为自身维护的空闲内存链表尾。
S1的大小可与D1的大小相同,也可以不同。
在这里,底层驱动也可将S1作为自身维护的内存块的空闲内存链表头或空闲内存链表的其他位置。
另外,应用模块也可以每隔一段时间才从其自身维护的空闲内存链表中取出若干个空闲内存块的指针交给底层驱动,底层驱动接收到这些指针后,将与指针对应的内存块作为自身维护的空闲内存链表尾或空闲内存链表的其他位置。
步骤106应用模块处理完D1中的数据后,将D1作为其维护的空闲内存链表尾。
在这里,应用模块也可将D1作为自身维护的内存块的空闲内存链表头或空闲内存链表的其他位置。
图2是利用本发明实现通用CPU的底层驱动和应用模块之间数据传送的具体实施方式
一的过程示意图,图中的D1、D2、D3为底层驱动维护的空闲内存链表,S1、S2、S3为应用模块维护的空闲内存链表,图中的201与图1中的步骤103对应,图中的202、203与图1中的步骤105对应,图中的204与图1中的步骤106对应。从图2可以明显看出,数据从底层驱动传送到应用模块的过程,实际上是一个底层驱动的内存块D1和应用模块的内存块S1相互交换的过程。
图3为利用本发明实现NP和通用CPU之间数据转发的具体实施方式
二的流程图,如图3所示,其具体步骤如下步骤301通用CPU的底层驱动和应用模块分别在他们共享的存储空间中预先申请一定大小的内存并对该内存进行分块,分块后的每块内存称为内存块,并将申请到的分块后的内存做成空闲内存链表进行维护;同时,底层驱动记录自身申请到的空闲内存的总存储空间大小并从链表头到链表尾顺序记录每个内存块的大小。
步骤302NP将数据发送给通用CPU的底层驱动。
步骤303底层驱动从其空闲内存链表中取出第一个内存块D1,并将数1据拷贝到D1中。
步骤304底层驱动将D1的指针传送给应用模块,同时,底层驱动从总存储空间中减去D1的存储空间,用得到的差值更新原来的总存储空间。
步骤305底层驱动判断总存储空间是否小于预设值,若是,执行步骤306;否则,执行步骤307。
步骤306底层驱动给应用模块发送一个指令,应用模块收到该指令后,从其空闲内存链表中取出若干个内存块的指针交给底层驱动,底层驱动将与指针对应的内存块作为自身维护的空闲内存链表尾。
在这里,底层驱动也可将内存块作为自身维护的内存块的空闲内存链表头或空闲内存链表的其他位置。
步骤307应用模块处理完D1中的数据后,将D1作为自身维护的空闲内存。
在这里,应用模块可将D1作为自身维护的内存块的空闲内存链表尾、链表头或空闲内存链表的其他位置。
从以上过程可以看出,本发明方法在实现NP和通用CPU之间数据转发过程中,通过在通用CPU的底层驱动和应用模块中分别预先申请内存块构造空闲内存链表,底层驱动将外部传送来的数据拷贝到空闲内存中,然后传送到应用模块的过程,避免了内存申请、内存释放的过程,提高了底层驱动到应用模块的数据传送速率,从而达到了系统整体数据传送效率的提高。
本发明适用于任何已知大小的数据到通用CPU的传送。
以上所述仅为本发明的过程及方法实施例,并不用以限制本发明,凡在本发明的精神和原则之内所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种数据传送方法,其特征在于,该方法包括A、根据传送的数据报的大小,通用处理器的底层驱动在底层驱动和应用模块共享的存储空间内申请空闲内存;B、底层驱动将外部发送来的数据拷贝到自身申请的空闲内存中,并将该内存的标识传送给应用模块,应用模块接收到内存标识后,根据此标识访问对应的内存。
2.如权利要求1所述的方法,其特征在于,所述步骤A在底层驱动申请空闲内存之后,进一步包括,应用模块在底层驱动和应用模块共享的存储空间内申请空闲内存,和,所述步骤B之后进一步包括,应用模块对内存中的数据进行处理,之后,将该内存作为应用模块自身的空闲内存。
3.如权利要求1所述的方法,其特征在于,所述步骤B之后进一步包括,应用模块将自身申请的空闲内存标识交给底层驱动,底层驱动将该应用模块的空闲内存作为自身的空闲内存。
4.如权利要求1所述的方法,其特征在于,所述步骤A之后、步骤B之前进一步包括A1、底层驱动对其申请的空闲内存进行分块,并将分块后的空闲内存设置为空闲内存链表进行维护,和,步骤B所述底层驱动将外部发送来的数据拷贝到的空闲内存为自身维护的空闲内存链表的第一个内存块。
5.如权利要求4所述的方法,其特征在于,所述步骤A1之后、步骤B之前进一步包括,底层驱动记录申请到的空闲内存的总存储空间,并顺序记录各内存块的存储空间,和,所述步骤B之后进一步包括,底层驱动从总存储空间里减去步骤B所述存储数据的内存块的存储空间,底层驱动判断剩余的总存储空间是否小于预设值,若是,底层驱动给应用模块发送一个指令,应用模块接收到该指令后将自身的空闲内存标识交给底层驱动;否则,不作处理。
6.如权利要求3所述的方法,其特征在于,所述步骤A之后、步骤B之前进一步包括,应用模块对其申请的空闲内存进行分块,并将分块后的空闲内存设置为空闲内存链表进行维护,和,所述应用模块取出其申请的空闲内存标识为其维护的空闲内存链表的第一个内存块的标识。
7.如权利要求1所述的方法,其特征在于,步骤B所述内存的标识为内存的指针或内存地址偏移。
全文摘要
本发明公开了一种数据传送方法。本发明提供的方法,首先,根据传送的数据报大小,通用CPU的底层驱动在底层驱动和应用模块共享的存储空间内申请一定大小的空闲内存,当底层驱动接收到外部传送来的数据后,将数据拷贝到自身申请到的空闲内存中,然后将该内存的标识传送给应用模块。本发明避免了数据处理过程中的内存申请和释放过程,减少了内存管理的开销,虽然部分内存被长期占用,但是提高了系统的总体运行速率。
文档编号H04L12/56GK1801769SQ20041010312
公开日2006年7月12日 申请日期2004年12月31日 优先权日2004年12月31日
发明者张涛, 邓哲 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1