一种IEC61850带缓冲报告的内存管理方法技术

技术编号:2825123 阅读:289 留言:0更新日期:2012-04-11 18:40
本发明专利技术公开了一种IEC61850带缓冲报告的内存管理方法,当生成报告进行缓存时,从空闲缓冲区的低地址开始连续分配内存,如果空间不足,循环以下两个过程,(1)如果空闲空间不是位于缓冲区的尾部,释放缓冲区中最先进入的报告,循环该过程,直至条件不成立执行(2);(2)如果空闲空间位于缓冲区的尾部,这部分空间合并到当前最新的报告中,合并后空闲缓冲区大小为0,继续从(1)循环执行;如果(2)的条件不满足,则判定此时空闲空间的大小能满足要缓存报告的大小。从根本上杜绝了内存碎片的发生;内存利用率高。当客户端要求清理报告缓冲区时,只是一些变量的重新初始化,并不牵扯到已有报告的内存释放。

【技术实现步骤摘要】

本专利技术涉及一种IEC 61850带缓冲报告的内存管理方法,属电力系统自动化领域。
技术介绍
IEC 61850是数字化变电站的系统通信标准,带缓冲报告是IEC61850提供的一种重要服务模型。根据IEC 61850标准,带缓冲报告控制块生成的报告应进行缓冲,以支持客户端通过对应的服务让服务器端进行报告重传。在装置里对带缓冲的报告进行有效的管理,对系统的功能、安全和效率都有很大的影响。目前对带缓冲报告的内存管理主要有以下几种方式:(1)采用一定数量的固定长缓冲区,每个缓冲区的大小以能容下系统使用的最大长度的报告为上限。这种方式虽然不会产生内存碎片,但其内存的浪费是很大的。根据IEC 61850标准,带缓冲报告控制块生成的报告其长度变化范围很大,从包括全体数据集成员的总召和周期报告,到某个数据集成员发生变化,这么大的动态范围不适合采用固定长缓冲区。(2)采用内存分片的方法。确定内存分片的基本尺寸,分配一定数量的内存分片,一个报文有可能在一个分片中就能放下,也可能需要多个内存分片才能放下。这种方法存在效率低的缺点,需要考虑对一个报文进行分片存储以及发送前对一个报文进行拼装,比较麻烦。需要指出的是这种方法的内存分片是指内存管理范畴的,不同于报文过长超过客户端和服务器端之间的协商值这种情况。(3)采用多尺寸固定长缓冲区的方法。缓冲区分为多个不同的尺寸,每个尺寸都有一定数量的缓冲区组成一个池,先根据报文的长度确定一个合适尺寸-->的缓冲区池,然后从该缓冲区池中分配一个缓冲区。这种方法一定程度上能减少内存的浪费,但是当已缓存的报告超过了系统预定的容量时,需要释放最先缓存的报告,而此时释放的缓冲区其尺寸未必就是现在需要的,需要继续释放缓冲区,因此这种方法很难取得实际效果。(4)采用变长缓冲区的方法。这种方法使用系统的内存池,虽然内存的利用率高,但是极易产生内存碎片。这些方法在清理已缓冲的报告时,需要依次释放缓冲区,在有大量缓冲报告的情况下,耗时比较明显。因此,需要根据IEC 61850带缓冲报告模型的特点提出一种新的缓存报告的方法。
技术实现思路
本专利技术所要解决的技术问题是,提供一种IEC 61850带缓冲报告的内存管理方法,在缓存带缓冲报告控制块生成的报告时,内存的管理既不浪费内存,也不会产生内存碎片;当已缓存的报告超过了系统预设的最大容量时,能够有效地通过释放缓冲区中最先进入的报告来获得空间从而缓存最新的报告;当客户端要求清理已缓存的报告时,能够迅速完成,避免大量的内存释放等内存管理工作。为了解决上述问题,本专利技术采用了以下技术方案。一种IEC 61850带缓冲报告的内存管理方法,其特征是:首先,根据系统配置参数分配一块用于存放报告的缓冲区,其大小要至少放下一个系统允许的最大报告长度;当生成报告进行缓存时,从空闲缓冲区的低地址开始连续分配内存,如果空间不足,循环以下两个过程,直至内存空间满足当前的报告大小:(1)如果空闲空间不是位于缓冲区的尾部,释放缓冲区中最先进入的报告,用以增大空闲空间的大小,循环该过程,直至条件不成立执行(2);-->(2)如果空闲空间位于缓冲区的尾部,这部分空间合并到当前最新的报告中,以后该报告变成最先进入缓冲区的报告需要释放时,这部分内存空间又成为空闲空间从而可以再利用,合并后空闲缓冲区大小为0,继续从(1)循环执行;如果(2)的条件不满足,则判定此时空闲空间的大小能满足要缓存报告的大小。当客户端要求清理报告缓冲区时,将已发送报告链表头指针及其报告计数、未发送报告链表头指针及其报告计数清空,重置空闲缓冲区大小为预设最大值,重置空闲缓冲区指针为缓冲区起始位置。本专利技术的积极效果在于:报告的控制部分含有该报告的总长度数据成员,与报告数据区长度数据成员相区别。本专利技术的方法有一个重要的特点,即空闲缓冲区只有一块,这就从根本上杜绝了内存碎片的发生。另外,每个报告在缓冲区中都是连续存放的,内存利用率高。空闲缓冲区的合并是唯一暂时没有利用的内存,但是以后能够变为可用。当客户端要求清理报告缓冲区时,只是一些变量的重新初始化,并不牵扯到已有报告的内存释放。附图说明图1是本专利技术寻找空闲缓冲区的流程图。具体实施方式下面结合附图,进一步说明本专利技术的实现方法。参见图1,根据系统配置参数分配一块用于存放报告的缓冲区,其大小要至少放下一个系统允许的最大报告长度,当生成报告进行缓存时,从空闲缓冲区的低地址开始连续分配内存,如果空间不足,循环以下两个过程,直至内存空间满足当前的报告大小:(1)如果空闲空间不是位于缓冲区的尾部,释放缓冲区中最先进入的报告,用以增大空闲空间的大小。被释放的缓冲区和空闲空间缓冲区是相邻的,-->从而保证了释放缓冲区能够直接增加空闲缓冲区大小的要求。循环该过程,直至条件不成立执行(2)。(2)如果空闲空间位于缓冲区的尾部,这部分空间应合并到当前最新的报告中,以后该报告变成最先进入缓冲区的报告需要释放时,这部分内存空间又成为空闲空间从而可以再利用。这部分空间如果不进行合并,可能导致缓冲区总长度越来越小。合并后空闲缓冲区大小为0,继续从(1)循环执行。如果(2)的条件不满足,那么此时空闲空间的大小必定能满足要缓存报告的大小,因为缓冲区的大小能至少放下一个系统允许的最大报告长度。当客户端要求清理报告缓冲区时,只需将已发送报告链表头指针及其报告计数、未发送报告链表头指针及其报告计数清空,重置空闲缓冲区大小为预设最大值,重置空闲缓冲区指针为缓冲区起始位置。以下是与报告内存管理相关的主要数据结构。(1)报告的组织形式。报告由两部分组成,即控制部分和报告数据区部分,主要包括双向链表结构体、报告总长度、报告的ID、报告数据区指针、报告数据区长度、报告数据区,其中双向链表结构体位于首部。(2)带缓冲报告控制块中与内存管理相关的主要数据成员包括:缓冲区的大小、缓冲区的起始指针、空闲缓冲区的大小、空闲缓冲区的起始指针、已发送报告链表头指针、已发送报告的计数、待发送报告链表头指针、待发送报告的计数。当生成一个报告时将其加入到待发送报告链表尾部;当发送完一个报告时将其移入到已发送报告链表尾部;发送报告时从待发送报告链表首部摘取。实现过程如下:(1)系统初始创建带缓冲报告控制块时,根据配置参数分配报告缓冲区,-->初始缓冲区的大小、缓冲区的起始指针、空闲缓冲区的大小、空闲缓冲区的起始指针,此时空闲缓冲区的大小、空闲缓冲区的起始指针等同于缓冲区的大小、缓冲区的起始指针。已发送报告链表头指针、待发送报告链表头指针置空,已发送报告的计数、待发送报告的计数置0。(2)当生成报告需要存放时,确定报告实际需要占用的空间大小,包括报告控制部分、报告数据区部分以及对齐需要补充的字节。报告打头的部分是控制结构,里面含有指针,因此对齐规则应按4的倍数执行。(3)如果空闲空间不够,并且空闲空间不是位于缓冲区的尾部,并且已发送链表不为空,释放已发送链表所指的首缓冲区,用以增大空闲空间的大小。循环该过程,直至条件不成立执行(4)。(4)如果空闲空间不够,并且空闲空间不是位于缓冲区的尾部,并且待发送链表不为空,释放待发送链表所指的首缓冲区,用以增大空闲空间的大小。循环该过程,直至条件不成立执行(5)。(5)如果空闲空间不够,并且空闲空间是位于本文档来自技高网
...

【技术保护点】
一种IEC61850带缓冲报告的内存管理方法,其特征是:首先,根据系统配置参数分配一块用于存放报告的缓冲区,其大小要至少放下一个系统允许的最大报告长度;当生成报告进行缓存时,从空闲缓冲区的低地址开始连续分配内存,如果空间不足 ,循环以下两个过程,直至内存空间满足当前的报告大小:(1)如果空闲空间不是位于缓冲区的尾部,释放缓冲区中最先进入的报告,用以增大空闲空间的大小,循环该过程,直至条件不成立执行(2);(2)如果空闲空间位于缓冲区的尾部,这部分 空间合并到当前最新的报告中,以后该报告变成最先进入缓冲区的报告需要释放时,这部分内存空间又成为空闲空间从而可以再利用,合并后空闲缓冲区大小为0,继续从(1)循环执行;如果(2)的条件不满足,则判定此时空闲空间的大小能满足要缓存报告的 大小。

【技术特征摘要】
1、一种IEC 61850带缓冲报告的内存管理方法,其特征是:首先,根据系统配置参数分配一块用于存放报告的缓冲区,其大小要至少放下一个系统允许的最大报告长度;当生成报告进行缓存时,从空闲缓冲区的低地址开始连续分配内存,如果空间不足,循环以下两个过程,直至内存空间满足当前的报告大小:(1)如果空闲空间不是位于缓冲区的尾部,释放缓冲区中最先进入的报告,用以增大空闲空间的大小,循环该过程,直至条件不成立执行(2);(2)如果空闲空间位于缓冲区的尾部,这部分空间合并到当前最...

【专利技术属性】
技术研发人员:韩明峰李小滨刘世明郑永志
申请(专利权)人:烟台东方电子信息产业股份有限公司
类型:发明
国别省市:37[中国|山东]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1