一种机顶盒的数据存储管理方法

文档序号:6420827阅读:204来源:国知局
专利名称:一种机顶盒的数据存储管理方法
技术领域
本发明涉及一种数据存储管理方法,尤其是一种应用于数字电视机顶盒的数据存储管理方法,属于数字电视技术领域。
背景技术
在数字电视机顶盒中,数据的存储以及对数据存储的管理是非常重要的环节。在数字电视机顶盒中数据的存储分为两种内存存储和记忆存储。由于数字电视机顶盒存储器的容量非常有限,如不对其进行有效地管理,很容易出现存储空间不够的情况。
在数字电视机顶盒中,现有的存储空间分配机制是由操作系统根据存储空间申请的先后次序,以最先匹配原则,依次进行分配。按照这样的分配机制,随着系统运行期间可能出现的频繁的存储空间的分配和释放,会在整个存储空间中形成大量的、不连续的碎片。在申请大量的连续存储空间时,尽管剩余存储空间总量并未超出总的可用存储空间总数,但由于连续的存储空间不足而无法满足分配要求,导致系统的存储资源枯竭。如果能够采取一种方法,尽量减少存储空间碎片的产生,对存储空间的利用效率会有很大的提高。

发明内容
本发明要解决的技术问题是一种机顶盒的数据存储的管理办法,减少碎片,提高存储空间的使用效率。
一种机顶盒的数据存储管理办法,包括如下步骤步骤一、系统初始化,经常使用的占用大量存储空间的数据分配存储空间;步骤二、当请求使用的存储空间的数据为经常使用的占用大量存储空间的数据时,直接使用在系统初始化时分配的存储空间,结束存储空间的分配;步骤三、当请求使用的存储空间的数据为非常用的、占用少量存储空间的数据时,从包括多个大小相同存储单元的缓冲池中分配一个存储单元,该存储单元用完后,归还缓冲池。
本发明通过对经常使用的占用大块存储空间的数据,固定分配;对非常用的、小块的存储空间,采用缓冲池内多次使用的方法来分配,即根据所申请的存储空间的大小和使用频繁程度,做不同的分配和处理,减少了存储空间出现的碎片,提高存储空间的使用效率;并且可以通过一些调试函数以及统计函数,更好地监测系统中存储空间的使用情况。


图1是本发明方法实施例的流程图。
具体实施例方式
下面结合附图和实施例对本发明的技术方案做详细说明本实施例的机顶盒数据存储管理方法,如图1所示,包括如下步骤步骤一、系统初始化,经常使用的占用大量存储空间的数据分配存储空间;步骤二、当请求使用的存储空间的数据为经常使用的占用大量存储空间的数据时,直接使用在系统初始化时分配的存储空间,结束存储空间的分配;步骤三、当请求使用的存储空间的数据为非常用的、占用少量存储空间的数据时,从包括多个大小相同存储单元的缓冲池中分配一个存储单元,该存储单元用完后,归还缓冲池。
对于程序设计人员来说,什么地方会用到经常使用的占用大量存储空间的数据是清楚的,因此,可以在系统初始化时,先将这部分的数据所需的存储空间分配好,并且使其一直存在,并不释放。
比如,数字电视的机顶盒对视频信号的解码和还原处理过程中,对于机顶盒处理前后的视频数据的缓冲存储,要占用大量的存储空间,而且整个机顶盒工作期间,这个存储空间一直存在。对于这个存储空间在系统初始化时就可以预先分配好。这也是数字电视的机顶盒存储空间管理不同于普通的存储空间管理之处。
对常用大块存储空间的这种处理方法,避免了在程序运行过程中存储空间的频繁分配和释放,减少产生碎片的机会。在初始化时,因为没有碎片,对于大的存储块的需求容易得到满足,提高程序可靠性。并且在运行过程中,可以减少因存储空间分配而花费的时间,提高运行效率。
本发明的步骤三中,对非经常使用的占用少量存储空间的数据,采用缓冲池内多次使用的分配方法,这样可以减少了直接存储空间分配和释放的次数,从而降低了分配失败的风险,并且以一块较大的缓冲池作为直接存储空间分配的单元,从而减少了存储空间内的碎片。
由于一个缓冲池的存储单元是大小相同,同一规格的,所以为了适应不同的需求,把最接近的存储单元分配给调用者,存储单元大小应该不同,因此,产生不同规格的缓冲池。
存储单元规格为32字节、64字节、128字节或2n字节,n为自然数,n≥8。采用2n字节作为存储单元的规格是由于大多数情况下,系统申请使用的存储空间一般都是2n字节。
如果调用者需要申请小于30个字节的存储空间,则实际分配的存储空间应该在存储单元规格是32字节的缓冲池内;而大小在32字节和64字节之间的存储空间,则分配在存储单元规格是64字节的缓冲池内,这种以调用者的需要确定所要分配的存储单元,也称为存储单元的匹配过程。
每个缓冲池的大小是相同的,一般为2K或4K字节,根据不同的需求而可能有所不同;这样既方便了分配和统计又减少存储空间的碎片和浪费。例如,某个中间的缓冲池由于不再使用而释放了,那么,由于每个缓冲池的大小是相同的,就可以在它空出来的空间里分配新的缓冲池。
下面是一个具体的缓冲池结构,由以下几部分组成存储单元大小、缓冲池的大小、已使用的单元数、缓冲池指针、空闲链表、缓冲池链表的前节点指针和后节点指针;具体为<pre listing-type="program-listing">  typedef struct bufPool{  Size_t cell_size; /*存储单元大小*/  Size_t bufPool_size;/*缓冲池大小*/  unsigned short cells_used; /*已使用的单元数*/  void*bufPool_ptr; /*缓冲池的指针*/  SLList free_list; /*空闲链表*/  struct bufPool *m_prev; /*缓冲池链表的前节点指针*/  struct bufPool *m_next;/*缓冲池链表的后节点指针*/  }bufPool_t;</pre>每个缓冲池的最前面一块存储空间(大小为32字节)留给缓冲池结构bufPool_t,实际的存储单元紧随其后。
对所有缓冲池的管理也可以采用一个上述结构的双向链表来完成。系统自动生成一个头节点,每当创建一个新的缓冲池时,都需要将缓冲池的指针添加到缓冲池链表中。向缓冲池链表添加新的节点时采用前向插入法,即总是将新的节点加入到链表的最前面即头节点之后。
如图1所示,利用缓冲池对非常用的、占用少量的存储空间数据分配存储空间,包括以下步骤
步骤3.1、判断是否存在存储单元规格匹配的缓冲池,即判断与所需的存储空间大小最接近的,大于或等于所需的存储空间大小的存储单元所在的缓冲池是否包含在已建立的缓冲池中;如果存在,执行步骤3.2;否则,执行步骤3.3;步骤3.2、判断缓冲池中的空闲存储单元是否已经用尽,如果缓冲池中的空闲存储单元用尽,执行步骤3.3;否则执行步骤3.4;步骤3.3、分配存储空间,建立一个存储单元合适的新缓冲池,执行步骤3.4;步骤3.4、从存储单元规格匹配的缓冲池中分配一个存储单元,用完后,归还缓冲池;步骤3.5、如果缓冲池中全部的存储单元已归还,释放缓冲池所占的存储空间。
选择最为合适的存储单元,可以节约存储空间,减少浪费。如果链表中的空闲存储单元没有了,就再次从系统存储空间中分配一个较大的存储块作为新的缓冲池。新缓冲池与原有的缓冲池所占存储空间大小相同,存储单元与存储单元用尽的缓冲池的存储单元大小相同。如果存储单元用尽的缓冲池的存储单元被归还后,再分配相同大小的存储单元从原有的缓冲池中分配。
存储单元,用完后归还缓冲池,并不释放,大大降低了碎片产生的机会。缓冲池中全部的存储单元已归还,释放缓冲池所占的存储空间,然后就可以在释放的存储空间中再建立新的缓冲池。由于每次建立和释放都是以缓冲池的大小作为单位的,这样也避免了碎片的产生。
下面分别就缓冲池的建立,存储单元的分配,归还和缓冲池的释放进行详细的说明建立缓冲池,具体步骤为
步骤3.3.1、分配建立缓冲池所需的存储空间,存储空间中设定多个大小相同的匹配的存储单元;步骤3.3.2、建立一个空闲链表来管理的空闲存储单元。
获取每个存储单元的地址,然后建立一个链表来管理这些地址,这是一种较好的存储单元的分配和归还的方式,简单而且高效。
空闲链表是用来管理缓冲池中空闲的存储单元的,为一单向链表,其结构很简单,每个节点存放下一个空闲存储单元的地址。每当创建缓冲池后都要建立本缓冲池的空闲链表,首先缓冲池结构中建立了空闲链表的头节点,然后将缓冲池内所有存储单元地址依次添加到空闲链表中,同样,添加时采用前向插入法,即将新的节点加入到链表的最前面即头节点之后,完成后最后一个存储单元应在链表的最前面。这里需要注意,空闲链表的节点信息是存放在这些空闲的存储单元中的。也就是说,在存储单元空闲时需要存放空闲链表的节点信息,一旦被使用,即存放具体数据信息,而此时空闲链表中已不需要该节点,因此不会造成冲突。
创建缓冲池,具体过程说明如下1)为缓冲池分配存储空间,缓冲池所占的存储空间大小是系统默定的(注意要包括缓冲池结构所占用的那部分的存储空间);2)初始化缓冲池结构。包括存储单元大小、缓冲出大小、已使用的单元数(初始为0)、缓冲池指针(即缓冲池存储空间的首地址,也是缓冲池结构的首地址);3)向缓冲池链表中添加该缓冲池节点;4)建立空闲链表,将缓冲池内所有存储单元地址依次添加到空闲链表中;5)返回缓冲池指针。
分配存储空间,输入参数为所需存储空间的大小,输出为分配到的存储单元指针和所在缓冲池的指针,具体过程说明如下步骤1,根据所需存储空间大小确定存储单元大小(判断的原则前面已有介绍);步骤2,从缓冲池链表头节点的下一个节点开始查询,查找空闲链表不为空且存储单元大小与步骤1中确定的存储单元大小相同的缓冲池,直到找到或者缓冲池链表结束,如果没有找到,执行步骤3;如果找到,执行步骤4;步骤3,分配一个新的缓冲池;步骤4,从缓冲池中分配一个存储单元;步骤5,将缓冲池指针和存储单元指针输出给使用者。
从缓冲池中分配一个存储单元,具体过程如下1)判断空闲链表是否为空(空闲链表头节点是否指向NULL),如果为空,分配失败;如果不为空,执行2);2)取出空闲链表第一个节点,重置空闲链表,返回取出的节点的指针。
释放存储空间,其参数为存储单元指针和所在缓冲池的指针,返回成功、失败标志,具体过程说明如下步骤1,将存储单元返还给缓冲池;步骤2,判断该缓冲池的空闲链表是否为空,如果为空,执行步骤3,如果不为空,执行步骤4;步骤3,释放该缓冲池;步骤4,释放完成,返回成功、失败标志。
回收用完的存储单元,返还给缓冲池,具体过程如下1)判断数据单元的内容是否为空闲链表节点信息(也就是缓冲池内某存储单元的地址),从而确定是否为第二次回收;
2)如果不是第二次释放,将该存储单元节点添加到空闲链表最前面(该存储单元中存放下一个存储单元地址),如果是第二次释放,则不再回收。
释放(删除)缓冲池,具体过程说明如下1)从缓冲池链表中删除该缓冲池节点;2)释放缓冲池结构,释放该存储空间。
通过以上的存储空间分配和释放的调试函数以及一些统计功能参量,能够更好地监测系统中存储空间的使用情况。比如,查询缓冲池中存储单元的大小和已使用的单元数就可以了解已使用的存储空间的大小,通过缓冲池的大小,从而计算出未使用的存储空间;计算出所有的缓冲池未使用的存储空间,就可以了解整个机顶盒的存储空间的使用情况。
最后所应说明的是以上实施例仅用以说明而非限制本发明的技术方案,尽管参照上述实施例对本发明进行了详细说明,本领域的普通技术人员应当理解依然可以对本发明进行修改或者等同替换,而不脱离本发明的精神和范围的任何修改或局部替换,其均应涵盖在本发明的权利要求范围当中。
权利要求
1.一种机顶盒的数据存储管理办法,其特征在于包括如下步骤步骤一、系统初始化,经常使用的占用大量存储空间的数据分配存储空间;步骤二、当请求使用的存储空间的数据为经常使用的占用大量存储空间的数据时,直接使用在系统初始化时分配的存储空间,结束存储空间的分配;步骤三、当请求使用的存储空间的数据为非常用的、占用少量存储空间的数据时,从包括多个大小相同存储单元的缓冲池中分配一个存储单元,该存储单元用完后,归还缓冲池。
2.根据权利要求1所述的机顶盒的数据存储管理办法,其特征在于所述的步骤二中,系统初始化时,为经常使用的占用大量存储空间的数据分配的存储空间在整个机顶盒工作期间一直存在。
3.根据权利要求1所述的机顶盒的数据存储管理办法,其特征在于所述的步骤三中,缓冲池的规格可以为一种以上,不同规格的缓冲池所占的存储空间相同,缓冲池的存储单元大小不同。
4.根据权利要求1或3所述的机顶盒的数据存储管理办法,其特征在于所述的缓冲池存储单元大小为32字节或64字节或128字节或2n字节,n为自然数,n≥8。
5.根据权利要求1所述的机顶盒的数据存储管理办法,其特征在于所述的步骤三中,包括如下过程步骤3.1、判断是否存在存储单元合适的缓冲池,如果存在,执行步骤3.2;否则,执行步骤3.3;步骤3.2、判断缓冲池中的空闲存储单元是否已经用尽,如果缓冲池中的空闲存储单元用尽,执行步骤3.3;否则执行步骤3.4;步骤3.3、分配存储空间,建立一个存储单元合适的新缓冲池,执行步骤3.4;步骤3.4、从存储单元合适的缓冲池分配一个存储单元,用完后归还缓冲池;步骤3.5、如果缓冲池中全部的存储单元已归还,释放缓冲池所占的存储空间。
6.根据权利要求5所述的机顶盒的数据存储管理办法,其特征在于所述的步骤三中,步骤3.2判断是否存在存储单元匹配的缓冲池,具体为如下过程判断与所需的存储空间大小最接近的,大于或等于所需的存储空间大小的存储单元所在的缓冲池是否包含在已建立的缓冲池中。
7.根据权利要求5所述的机顶盒的数据存储管理办法,其特征在于所述的步骤三中,步骤3.3分配存储空间,建立一个存储单元匹配的新缓冲池,具体包括如下步骤步骤3.3.1分配建立缓冲池所需的存储空间,存储空间中设定多个大小相同的匹配的存储单元;步骤3.3.2建立一个空闲链表来管理的空闲存储单元。
8.根据权利要求7所述的机顶盒的数据存储管理办法,其特征在于所述的步骤三中,步骤3.4从缓冲池分配存储单元,归还用完的存储单元给缓冲池,具体包括如下过程首先,判断缓冲池空闲链表是否为空,如果为空,则分配失败,返回出错信息;如果不为空,则取出空闲链表第一个节点,重置空闲链表,返回取出的节点的指针;用完后,将该存储单元节点添加到空闲链表最前面,存储单元的实现回收。
9.根据权利要求7所述的机顶盒的数据存储管理办法,其特征在于所述的步骤三中,步骤3.5释放缓冲池,从缓冲池链表中删除该缓冲池节点;释放缓冲池结构,释放该存储空间。
全文摘要
本发明公开了一种机顶盒的数据存储管理办法,首先,判断使用的存储空间的数据;如果为经常使用的占用大量存储空间的数据,直接使用在系统初始化时,为经常使用的占用大量存储空间的数据分配的存储空间,结束存储空间的分配;如果为非常用的、占用少量存储空间的数据,从包括多个大小相同存储单元的缓冲池中分配一个存储单元,用完后归还缓冲池。本发明通过对经常使用的占用大块存储空间的数据,分配固定的存储空间;对非常用的、小块的存储空间,采用缓冲池内多次使用的方法来分配,减少了存储空间出现的碎片,提高存储空间的使用效率;并且可以通过一些统计函数,更好地监测系统中存储空间的使用情况。
文档编号G06F12/08GK1625248SQ20031011695
公开日2005年6月8日 申请日期2003年12月3日 优先权日2003年12月3日
发明者刘新伟 申请人:北京中视联数字系统有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1