一种应用于数字电视机顶盒的数据存储管理方法

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

【发明内容】

[0004]为解决上述现有的缺点,本发明的主要目的在于提供一种实用的应用于数字电视机顶盒的数据存储管理方法,减少碎片,提高存储空间的使用效率。
[0005]为达成以上所述的目的,本发明的一种应用于数字电视机顶盒的数据存储管理方法采取如下技术方案:
一种应用于数字电视机顶盒的数据存储管理方法,其特征在于:包括如下步骤:
步骤一、系统初始化,经常使用的占用大量存储空间的数据分配存储空间;
步骤二、当请求使用的存储空间的数据为经常使用的占用大量存储空间的数据时,直接使用在系统初始化时分配的存储空间,结束存储空间的分配;步骤三、当请求使用的存储空间的数据为非常用的、占用少量存储空间的数据时,从包括多个大小相同存储单元的缓冲池中分配一个存储单元,该存储单元用完后,归还缓冲池。
[0006]所述的步骤二中,系统初始化时,为经常使用的占用大量存储空间的数据分配的存储空间在整个机顶盒工作期间一直存在,所述的步骤三中,缓沖池的规格可以为一种以上,不同规格的缓沖池所占的存储空间相同,缓冲池的存储单元大小不同,所述的缓冲池存储单元大小为32字节或64字节或128字节或2n字节,η为自然数,η ^ 8。
[0007]所述的步骤三中,包括如下过程:
步骤3.1、判断是否存在存储单元合适的缓冲池,如果存在,执行步骤3.2 ;否则,执行步骤3.3 ;
步骤3.2、判断缓冲池中的空闲存储单元是否已经用尽,如果缓冲池中的空闲存储单元用尽,执行步骤3.3 ;否则执行步骤3.4 ;
步骤3.3、分配存储空间,建立一个存储单元合适的新缓冲池,执行步骤1 4 ; 步骤3.4、从存储单元合适的缓冲池分配一个存储单元,用完后归还缓冲池;
步骤3.5、如果缓冲池中全部的存储单元已归还,释放缓沖池所占的存储空间。
[0008]所述的步骤三中,步骤3.2判断是否存在存储单元匹配的缓冲池,具体为如下过程:
判断与所需的存储空间大小最接近的,大于或等于所需的存储空间大小的存储单元所在的缓冲池是否包含在已建立的缓冲池中。
[0009]所述的步骤三中,步骤3.3分配存储空间,建立一个存储单元匹配的新缓沖池,具体包括如下步骤:
步骤3.3.1分配建立缓冲池所需的存储空间,存储空间中设定多个大小相同的匹配的存储单元;
步骤3.3.2建立一个空闲链表来管理的空闲存储单元。
[0010]所述的步骤三中,步骤3.4从缓冲池分配存储单元,归还用完的存储单元给缓沖池,具体包括如下过程:
首先,判断缓沖池空闲链表是否为空,如果为空,则分配失败,
返回出错信息;如果不为空,则取出空闲链表第一个节点,重置空闲链表,返回取出的节点的指针;用完后,将该存储单元节点添加到空闲链表最前面,存储单元的实现回收。
[0011]所述的步骤三中,步骤3.5释放缓冲池,从缓沖池链表中删除该缓冲池节点;释放缓冲池结构,释放该存储空间。
[0012]采用如上技术方案的本发明,具有如下有益效果:
本发明对经常使用的占用大块存储空间的数据,固定分配;对非常用的、小块的存储空间,采用缓冲池内多次使用的方法来分配,即根据所申请的存储空间的大小和使用频繁程度,做不同的分配和处理,减少了存储空间出现的碎片,提高存储空间的使用效率;并且可以通过一些调试函数以及统计函数,更好地监测系统中存储空间的使用情况。
【附图说明】
[0013]图1为本发明方法实施例的流程图。
【具体实施方式】
[0014]为了进一步说明本发明,下面结合附图和实施例进一步进行说明:
本实施例的机顶盒数据存储管理方法,如图1所示,包括如下步骤:
步骤一、系统初始化,经常使用的占用大量存储空间的数据分配存储空间;
步骤二、当请求使用的存储空间的数据为经常使用的占用大量存储空间的数据时,直接使用在系统初始化时分配的存储空间,结束存储空间的分配;
步骤三、当请求使用的存储空间的数据为非常用的、占用少量存储空间的数据时,从包括多个大小相同存储单元的缓冲池中分配一个存储单元,该存储单元用完后,归还缓冲池。
[0015]对于程序设计人员来说,什么地方会用到经常使用的占用大量存储空间的数据是清楚的,因此,可以在系统初始化时,先将这部分的数据所需的存储空间分配好,并且使其一直存在,并不释放。
[0016]比如,数字电视的机顶盒对视频信号的解码和还原处理过程中,对于机顶盒处理前后的视频数据的缓冲存储,要占用大量的存储空间,而且整个机顶盒工作期间,这个存储空间一直存在。对于这个存储空间在系统初始化时就可以预先分配好。这也是数字电视的机顶盒存储空间管理不同于普通的存储空间管理之处。
[0017]对常用大块存储空间的这种处理方法,避免了在程序运行过程中存储空间的频繁分配和释放,减少产生碎片的机会。在初始化时,因为没有碎片,对于大的存储块的需求容易得到满足,提高程序可靠性。并且在运行过程中,可以减少因存储空间分配而花费的时间,提闻运彳丁效率。
[0018]本发明的步骤三中,对非经常使用的占用少量存储空间的数据,采用缓冲池内多次使用的分配方法,这样可以减少了直接存储空间分配和释放的次数,从而降低了分配失败的风险,并且以一块较大的缓冲池作为直接存储空间分配的单元,从而减少了存储空间内的碎片。由于一个缓冲池的存储单元是大小相同,同一规格的,所以为了适应不同的需求,把最接近的存储单元分配给调用者,存储单元大小应该不同,因此,产生不同规格的缓沖池。
[0019]存储单元规格为32字节、64字节、128字节或2n字节,η为自然数,η >8。釆用2η字节作为存储单元的规格是由于大多数情况下,系统申请使用的存储空间一般都是2η字节。
[0020]如果调用者需要申请小于30个字节的存储空间,则实际分配的存储空间应该在存储单元规格是32字节的缓冲池内;而大小在32字节和64字节之间的存储空间,则分配在存储单元规格是64字节的缓冲池内,这种以调用者的需要确定所要分配的存储单元,也称为存储单元的匹配过程。
[0021]每个缓冲池的大小是相同的,一般为2Κ或4Κ字节,根据不同的需求而可能有所不同;这样既方便了分配和统计又减少存储空间的碎片和浪费。例如,某个中间的缓冲池由于不再使用而释放了,那么,由于每个缓冲池的大小是相同的,就可以在它空出来的空间里分配新的缓冲池。
[0022]下面是一个具体的缓冲池结构,由以下几部分组成:存储单元大小、缓冲池的大小、已使用的单元数、缓冲池指针、空闲链表、缓冲池链表的前节点指针和后节点指针;具体为
Typcdef struct bufpool;
Size-t cell-size/* 存储单兀大小 */
Size-t bufpool-size /* 缓冲池大小 */
Unisigned short cells-used; /* 已使用的单兀数 */
Void * bufpool-ptr/* 缓冲池的指针 */
Sllist free-list /* 空间链表 */
Struct bufpool * m-prev /*缓冲池链表的前节点指针*/
Struct bufpool * m-next /*缓冲池链表的后节点指针*/
Bufpool-t
每个缓冲池的最前面一块存储空间(大小为32字节)留给缓冲池结构1 Bufpool-t,实际的存储单元紧随其后。
[0023]对所有缓冲池的管理也可以采用一个上述结构的双向链表来完成。系统自动生成一个头节点,每当创建一个新的缓冲池时,都需要将缓冲池的指针添加到缓沖池链表中。向缓沖池链表添加新的节点时采用前向插入法,即总是将新的节点加入到链表的最前面即头节点之后。
[0024]如图1所示,利用缓冲池对非常用的、占用少量的存储空间数据分配存储空间,包括以下步骤:
步骤3.1、判断是否存在存储单元规格匹配的缓冲池,即判断与所需的存储空间大小最接近的,大于或等于所需的存储空间大小的存储单元所在的缓冲池是否包含在已建立的缓冲池中;如果存在,执行步骤3.2 ;否则,执行步骤3.3 ;
步骤3.2、判断缓冲池中的空闲存储
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1