一种嵌入式设备图像内存管理方法及装置制造方法及图纸

技术编号:6953706 阅读:198 留言:0更新日期:2012-04-11 18:40
本发明专利技术实施例公开了一种嵌入式设备图像内存管理方法,本发明专利技术实施例还公开了相应的装置。本方法通过从图像内存链表中获取节点,然后判断该节点对应的内存块中是否有有效数据,如果没有有效数据,则再判断该节点的前一个节点对应的内存块中是否有有效数据,如果有有效数据,则再判断该有效数据是否可移动,如果可移动,则将两个节点所描述的内存块信息进行交换,并且将前一个节点对应的内存块中存储的有效数据移动至该节点对应的内存块中;通过上述方式,本发明专利技术能够将空闲的内存块整理为一个大的内存块,从而在空闲的内存的总大小大于需要分配的内存但是单独的空闲的内存块都小于需要分配的内存的情况下,大大提高应用程序分配到需要的内存的概率。

【技术实现步骤摘要】

本专利技术涉及计算机领域,特别是涉及一种嵌入式设备图像内存管理方法及装置
技术介绍
DirectFB是一个在嵌入式系统中广泛应用的函数库。是针对嵌入式设备的特殊需求环境,为图形加速和图形增强支持开发的一个小巧、强大和易于使用的技术。DirectFB的函数利用链表来实现图像内存(video memory)的管理。初始状态时, 链表只有一个空闲节点(free memory node),记录整个内存池的起始地址和末地址。当应用程序需要从内存池中分配一块内存时,DirectFB的内存管理器遍历链表中的所有free memory node,找出最匹配的free memory node返回给应用程序。如果找不到大小正好匹配的free memory node,则从最接近所需内存大小的free memory node中分配,并在链表中插入一个新的内存节点来记录新分配的内存块信息,并且该新的内存节点被标示为已分配状态。在链表中相邻的内存节点所描述的内存块在物理上也是邻近的。现有技术中,DirectFB管理内存的方式为当应用程序释放内存块时,记录该内存块信息的节点会被置为空闲状态,如果与该空闲节点相邻的节点也是空闲状态,则会完成节点合并,将两个节点所记录的空闲内存块合并成一个更大的空闲内存块,如图1所示 block4与block5合并为block4。在上述内存管理的方式下,在物理上连续的内存块,如果其生命周期不一样,就会出现内存碎片。于是出现这样一种状况虽然可用的空闲内存的总量大于所需要分配的内存,但是所有的空闲节点都小于所需要分配内存的大小,于是内存管理器会出现分配内存失败的情况。如何在空闲的内存大于需要分配的内存的情况下,确保能使应用程序分配到需要的内存是目前需要解决的问题。
技术实现思路
本专利技术主要解决的技术问题是提供一种嵌入式设备图像内存管理方法及装置,能够在空闲的内存的总大小大于需要分配的内存但是单独的空闲的内存块都小于需要分配的内存的情况下,大大提高应用程序分配到需要的内存的概率。为解决上述技术问题,本专利技术采用的一个技术方案是提供一种嵌入式设备图像内存管理方法,包括从图像内存链表中获取节点;判断该节点对应的内存块中是否有有效数据;如果该节点对应的内存块中没有有效数据,则判断该节点的前一个节点对应的内存块中是否有有效数据;如果该前一个节点对应的内存块中有有效数据,则判断该有效数据是否可移动;如果该前一个节点对应的内存块中存储的有效数据可移动,则将该节点所描述的内存块信息与前一个节点所描述的内存块信息进行交换,并且将该前一个节点对应的内存块中存储的有效数据移动至该节点对应的内存块中。为解决上述技术问题,本专利技术采用的另一个技术方案是提供一种嵌入式设备图像内存管理装置,包括第一获取模块,用于从图像内存链表中获取节点;第一判断模块,用于判断获取模块获取的节点对应的内存块中是否有有效数据;第二判断模块,用于当第一判断模块判断出第一获取模块获取的节点对应的内存块中没有有效数据时,再判断该节点的前一个节点对应的内存块中是否有有效数据;第三判断模块,用于当第二判断模块判断出前一个节点对应的内存块中有有效数据时,再判断该有效数据是否可移动;交换模块,用于当第三判断模块判断出前一个节点对应的内存块中存储的有效数据可移动时,将前该节点所描述的内存块信息与前一个节点所描述的内存块信息进行交换,并且将前一个节点对应的内存块中存储的有效数据移动至该节点对应的内存块中。本专利技术通过从图像内存链表获取节点,如果检测到非空闲节点对应的内存块中存储的有效数据是可以移动的,则通过将空闲节点描述的内存块信息和非空闲节点所描述的内存块信息进行交换,然后将非空闲节点对应的内存块的有效数据移动到空闲节点对应的内存块中,将空闲节点往链表的起始方向移动,将非空闲节点往链表末尾方向移动,最后移动后的空闲内存块将位于图像内存的起始位置;通过对图像内存的内存碎片进行管理,将多个内存碎片都移动至图像内存的起始位置,形成一个大的并且在物理上连续的空闲内存块,从而当应用程序需要申请较大的内存块时,能够满足申请要求。附图说明图1是现有技术中相邻的空闲内存块合并的示意图;图2是本专利技术实施例图像内存管理方法的数据流程图;图3是本专利技术实施例图像内存管理方法的应用场景示意图;图4是本专利技术实施例图像内存管理方法在实际应用中的数据流程图;图5是本专利技术实施例图像内存管理装置的逻辑结构示意图。具体实施例方式参阅图2,本专利技术嵌入式设备图像内存管理方法的实施例包括201、获取图像内存链表中的倒数第一个节点;从图像内存链表的倒数第一个节点开始获取节点,首先获取倒数第一个节点;202、判断该节点是否为空;每获取一个节点,首先判断该节点是否是空节点,如果是空节点,则说明上一个获取的节点是本图像内存链表的倒数最后一个节点;如果节点为空节点,则执行步骤203 ;如果节点不为空节点,则执行步骤204 ;203、结束;如果步骤202中判断出节点为空节点,说明已经将整个图像内存链表整理完了, 则流程结束;204、判断该节点对应的内存块中是否有有效数据;判断该节点对应的内存块中是否有有效数据,如果有有效数据,则执行步骤205 ; 如果没有有效数据,则执行步骤206 ;205、获取前一个节点;如果步骤204中判断出该节点对应的内存块中有有效数据,则获取该节点的前一个节点,然后返回步骤202,判断本步骤中获取的节点是否为空,如果不为空,则再执行步骤 204判断该节点对应的内存块中是否有有效数据,依次循环,直至转到步骤206,获取到对应的内存块中没有有效数据的节点;206、获取前一个节点;如果步骤204中判断出该节点对应的内存块中没有有效数据,则获取该节点的前一个节点;207、判断该节点是否为空;判断步骤206中获取的前一个节点是否是空节点,如果是空节点,则说明上一个获取的节点是本图像内存链表的倒数最后一个节点,执行步骤203,结束流程;如果判断出节点不为空节点,则执行步骤208 ;208、判断该节点对应的内存块中是否有有效数据;判断该节点对应的内存块中是否有有效数据,如果有有效数据,则执行步骤210 ; 如果没有有效数据,则执行步骤209 ;209、合并;将步骤201中获取的节点或者步骤205中获取的节点,与步骤206中获取的节点合并,具体的将步骤201中获取的节点或者步骤205中获取的节点的起始地址改为步骤206中获取的节点的起始地址,并将步骤201中获取的节点或者步骤205中获取的节点指向前一个节点的指针改为指向步骤206中获取的节点的前一个节点,并删除步骤206中获取的节点。或者,合并的步骤还可以为将步骤206中获取的节点的结束地址改为步骤201中获取的节点或者步骤205中获取的节点的结束地址,并将步骤206中获取的节点指向下一个节点的指针改为指向步骤 201中获取的节点或者步骤205中获取的节点的后一个节点,并删除步骤201中获取的节点或者步骤205中获取的节点。210、判断该节点对应的内存块是否为layer surface ;判断步骤206中获取的节点对应的内存块是否为layer surface,如果是layer surface,说明该节点对应的内存块中存储的有效数据是不能移动的,则返回步骤20本文档来自技高网
...

【技术保护点】
1.一种嵌入式设备图像内存管理方法,其特征在于,包括:从图像内存链表中获取节点;判断所述节点对应的内存块中是否有有效数据;如果所述节点对应的内存块中没有有效数据,则判断所述节点的前一个节点对应的内存块中是否有有效数据;如果所述前一个节点对应的内存块中有有效数据,则判断所述有效数据是否可移动;如果所述前一个节点对应的内存块中存储的有效数据可移动,则将所述节点所描述的内存块信息与所述前一个节点所描述的内存块信息进行交换,并且将所述前一个节点对应的内存块中存储的有效数据移动至所述节点对应的内存块中。

【技术特征摘要】
1.一种嵌入式设备图像内存管理方法,其特征在于,包括从图像内存链表中获取节点;判断所述节点对应的内存块中是否有有效数据;如果所述节点对应的内存块中没有有效数据,则判断所述节点的前一个节点对应的内存块中是否有有效数据;如果所述前一个节点对应的内存块中有有效数据,则判断所述有效数据是否可移动;如果所述前一个节点对应的内存块中存储的有效数据可移动,则将所述节点所描述的内存块信息与所述前一个节点所描述的内存块信息进行交换,并且将所述前一个节点对应的内存块中存储的有效数据移动至所述节点对应的内存块中。2.根据权利要求1所述的方法,其特征在于,所述从图像内存链表中获取节点的步骤具体为从图像内存链表中倒数第一个节点开始获取节点。3.根据权利要求1所述的方法,其特征在于,所述判断所述节点对应的内存块中是否有有效数据的步骤之后还包括如果所述节点描述的内存块中有有效数据,则继续获取所述节点的前一个节点,然后执行判断所述前一个节点对应的内存块中是否有有效数据的步骤,直至所述图像内存链表的第一个节点。4.根据权利要求3所述的方法,其特征在于,所述判断所述前一个节点对应的内存块中存储的有效数据是否可移动的步骤之后还包括如果所述前一个节点对应的内存块中存储的有效数据不可移动,则继续获取所述前一个节点的前一个节点,并执行判断该获取的节点对应的内存块中是否有有效数据的步骤, 直至所述图像内存链表的第一个节点。5.根据权利要求4所述的方法,其特征在于,所述判断前一个节点对应的内存块中存储的有效数据是否可移动的步骤包括判断所述前一个节点对应的内存块是否为层面(layer surface),如果所述前一个节点对应的内存块为layer surface,则所述前一个节点对应的内存块中存储的有效数据不能移动;如果所述前一个节点对应的内存块不是layer surface,则再判断所述前一个节点对应的内存块是否处于锁定状态,如果所述前一个节点对应的内存块处于锁定状态,则所述前一个节点对应的内存块中存储的有效数据不能移动。6.根据权利要求5所述的方法,其特征在于,所述方法还包括如果所述前一个节点对应的内存块没处于锁定状态,则再判断所述前一个节点对应的内存块是否于最近一次被图形处理器GPU访问过,如果所述前一个节点对应的内存块最近一次被GPU访问过,则等待GPU访问完成后,执行所述将该节点所描述的内存块信息与所述前一个节点所描述的内存块信息进行交换,并且将所述前一个节点对应的内存块中存储的有效数据移动至所述节点对应的内存块中的步骤。7.根据权利要求6所述的方法,其特征在于,所述判断所述前一个节点是否有有效数据的步骤之后还包括如果所述前一个节点没有有效数据,则将所述节点和所述前一个节点合并。8.根据权利要求7所述的方法,其特征在于,所述将该节点和所述前一个节点合并的步骤包括将所述节点的起始地址改为所述前一个节点的起始地址,并将所述节点指向前一个节点的指针改为指向所述前一个节点的前一个节点,并删除所述前一个节点。9.根据权利要求7所述的方法,其特征在于,所述将该节点和所述前一个节点合并的步骤包括将所述前一个节点的结束地址改为所述节点的结束地址,并将所述前一个节点指向下一个节点的指针改为指向所述节点的下一个节点,并删除所述节点。10.一种嵌入...

【专利技术属性】
技术研发人员:何虎
申请(专利权)人:晨星软件研发深圳有限公司晨星半导体股份有限公司
类型:发明
国别省市:94

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

1