H04L12/56(2006.01)
1、一种数据传送方法,其特征在于,该方法包括:
A、根据传送的数据报的大小,通用处理器的底层驱动在底层驱动和应 用模块共享的存储空间内申请空闲内存;
B、底层驱动将外部发送来的数据拷贝到自身申请的空闲内存中,并将 该内存的标识传送给应用模块,应用模块接收到内存标识后,根据此标识访 问对应的内存。
2、如权利要求1所述的方法,其特征在于,所述步骤A在底层驱动申请空 闲内存之后,进一步包括,应用模块在底层驱动和应用模块共享的存储空间内 申请空闲内存,和,
所述步骤B之后进一步包括,应用模块对内存中的数据进行处理,之后, 将该内存作为应用模块自身的空闲内存。
3、如权利要求1所述的方法,其特征在于,所述步骤B之后进一步包括, 应用模块将自身申请的空闲内存标识交给底层驱动,底层驱动将该应用模块的 空闲内存作为自身的空闲内存。
6、如权利要求3所述的方法,其特征在于,所述步骤A之后、步骤B之 前进一步包括,应用模块对其申请的空闲内存进行分块,并将分块后的空闲内 存设置为空闲内存链表进行维护,和,
所述应用模块取出其申请的空闲内存标识为其维护的空闲内存链表的第一 个内存块的标识。
4、如权利要求1所述的方法,其特征在于,所述步骤A之后、步骤B之 前进一步包括:
A1、底层驱动对其申请的空闲内存进行分块,并将分块后的空闲内存设置 为空闲内存链表进行维护,和,
步骤B所述底层驱动将外部发送来的数据拷贝到的空闲内存为自身维护的 空闲内存链表的第一个内存块。
5、如权利要求4所述的方法,其特征在于,所述步骤A1之后、步骤B之前 进一步包括,底层驱动记录申请到的空闲内存的总存储空间,并顺序记录各内 存块的存储空间,和,
所述步骤B之后进一步包括,底层驱动从总存储空间里减去步骤B所述存储 数据的内存块的存储空间,底层驱动判断剩余的总存储空间是否小于预设值, 若是,底层驱动给应用模块发送一个指令,应用模块接收到该指令后将自身的 空闲内存标识交给底层驱动;否则,不作处理。
7、如权利要求1所述的方法,其特征在于,步骤B所述内存的标识为内 存的指针或内存地址偏移。
技术领域
本发明涉及数据传输领域,具体涉及一种数据传送方法。
背景技术
目前,服务通用分组无线业务(GPRS,General Packet Radio Service)网络 和外部网络之间的数据通信非常频繁,网关GPRS支持节点(GGSN,Gateway GPRS 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。
具体步骤如下:
步骤1:NPS将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在数据到来之前必须预先申请好,否则,数据将会丢失。
步骤2:NPS将数据从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字节的内存块,当然, 也可以根据实际数据报传送的大小将内存块定为其他大小。
在这里,底层驱动和应用模块各自申请到的内存大小可不一样,他们对各 自的内存分块后每个内存块的大小也可不相同。
步骤102:NP将数据发送给通用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的底层驱动和应用模块分别在他们共享的存储空间中预 先申请一定大小的内存并对该内存进行分块,分块后的每块内存称为内存块, 并将申请到的分块后的内存做成空闲内存链表进行维护;同时,底层驱动记录 自身申请到的空闲内存的总存储空间大小并从链表头到链表尾顺序记录每个内 存块的大小。
步骤302:NP将数据发送给通用CPU的底层驱动。
步骤303:底层驱动从其空闲内存链表中取出第一个内存块D1,并将数1据 拷贝到D1中。
步骤304:底层驱动将D1的指针传送给应用模块,同时,底层驱动从总存 储空间中减去D1的存储空间,用得到的差值更新原来的总存储空间。
步骤305:底层驱动判断总存储空间是否小于预设值,若是,执行步骤306; 否则,执行步骤307。
步骤306:底层驱动给应用模块发送一个指令,应用模块收到该指令后,从 其空闲内存链表中取出若干个内存块的指针交给底层驱动,底层驱动将与指针 对应的内存块作为自身维护的空闲内存链表尾。
在这里,底层驱动也可将内存块作为自身维护的内存块的空闲内存链表头 或空闲内存链表的其他位置。
步骤307:应用模块处理完D1中的数据后,将D1作为自身维护的空闲内存。
在这里,应用模块可将D1作为自身维护的内存块的空闲内存链表尾、链表 头或空闲内存链表的其他位置。
从以上过程可以看出,本发明方法在实现NP和通用CPU之间数据转发过程 中,通过在通用CPU的底层驱动和应用模块中分别预先申请内存块构造空闲内 存链表,底层驱动将外部传送来的数据拷贝到空闲内存中,然后传送到应用模 块的过程,避免了内存申请、内存释放的过程,提高了底层驱动到应用模块的 数据传送速率,从而达到了系统整体数据传送效率的提高。
本发明适用于任何已知大小的数据到通用CPU的传送。
以上所述仅为本发明的过程及方法实施例,并不用以限制本发明,凡在 本发明的精神和原则之内所做的任何修改、等同替换、改进等,均应包含在 本发明的保护范围之内。
本文发布于:2023-04-14 14:00:58,感谢您对本站的认可!
本文链接:https://patent.en369.cn/patent/3/86656.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |