您当前的位置:五五电子网电子知识单片机-工控设备嵌入式系统-技术基于嵌入式设备浏览器内存管理策略研究 正文
基于嵌入式设备浏览器内存管理策略研究

基于嵌入式设备浏览器内存管理策略研究

点击数:7341 次   录入时间:03-04 12:03:00   整理:http://www.55dianzi.com   嵌入式系统-技术

www.55dianzi.com
    (2)管理策略二:具有ComPACtion机制的Vector分配策略。在Browser中,除了结构大小固定的对象频繁分配和归还外,经常有大量大小不同的对象分配和归还,目前,这种现象主要出现在处理TextBox这一块内容上,这些大小不向的对象具有如下特点:其一是对象的分配和归还是随机发生的;其二是对象可以在其生命过程中改变自身大小。如果直接利用系统函数进行分配和释放,在总内存比较小的嵌入式系统中会造成过多的碎片,从而浪费了大量内存空间。具有Compaction机制的Vector通过移动“继续在用对象”来移除“继续在用对象”之间的“已经废弃不用的对象”,从而把“继续在用对象”移成连续排列,而“已经废弃不用的所有对象”所占用的空间解放出来放到地址空间的某一端,对它们进行循环使用,移动对象,最富有挑战的问题在于保证原来对内存空间的引用都被正确更新。当某个对象移往一个新位置,所有指向原地址的指针都将失效。虽然技术上有可能找出每一个移动对象的原有指针并更新之,但通常引入一个额外的间接层会使问题更简单:用户引用的是指向对象表中一个项目栏内对象的“handle”,而不再直接指向对象地址,“handle”是指向某对象真实地址的“惟一”指针,对象表中一个项目栏内有代表handle的addr、有表示对象所占空间的大小size和用于标志对象所占空间是否为“继续在用对象”还是“已经废弃不用的对象”的标志位mark。图4表示了对象引用、对象表和实际对象的三者关系。当内存中移动“继续在用对象”的时候,只需要更新对象表中相对应项目栏中代表handle的addr,使它指向对象的新地址,其他所有引用都可以继续正确地访问该对象。这里返回给用户的引用是对象表的索引,用户再通过索引获得相对应的handle指针addr,为了使用户快速获取可用索引,建立了50个可用索引的buffer。

a.jpg


    如果对许多对象执行Compaction,那么整个Compaction过程是比较费时的,因此,什么时候执行Compaction将对一个应用程序的执行效率有着重大影响。原则是:在内存空间和可用索引能够满足分配的情况下,能不要Compaction就不要执行Compaction。因此建立了两个执行Compaction的触发点,一个触发点是当用完了预分配1 000个索引值时;另一个触发点是当没有可用内存空间用于分配时触发。结果,在许多情况下避开了Compaction过程。对于管理索引值问题,采用了如下简单算法:先取前50个索引值放到Index Buffer中,用完50个索引值以后,再取50个索引值放入Buffer中,直到预分配的1 000个索引值用完为止,这时执行Compaction,然后按顺序搜索对象表,如果对象表表项标志为可以重复利用,则把这个对象表表项的索引加入到Index Buffer之中,直到填满Index Buffer为止;如果1 000个索引值已经全部用完,则按100为单位动态增加索引值。在Vector中,存放对象表需要一些额外的空间,大量对象的Compaction会占用比较多的时间,从而降低时间效率。

3 Browser内存管理的性能分析
    Browser分别调用自己应用程序级的内存管理的接口与系统级的内存管理的接口进行运行比较,结论是应用程序级的内存管理效率比系统级的内存管理效率要高,网页越大,体现出来的效率越高。
3.1 池式分配内存使用情况
    对于Browse中各种固定大小的结构(这种结构称谓thing),分别用相对应的一个内存池(pool)进行管理,各个pool形成一条pool链,内存管理器在执行一段时间后会按照各个pool的调用频率高低对pool链进行排序,从而提高了查找pool的效率。用小网页、中等大小网页和大网页对pool链中的各个pool进行测试,得到如图5所示的结果。

d.JPG



www.55dianzi.com
3.2执行ComPACtion前后Vector中的内存使用情况
    首先我们察看在打开网页的过程中在没有执行Compaction的情况下,Vector中的内存使用情况,如图6所示,由图可知,标志为蓝颜色区域是正在使用的内存空间,白颜色表示已经废弃不用的内存空间。在没有Compaction以前,已经废弃不用的区域占用了大量的内存空间,在执行Compaction以后,所有正在使用的区域都会整齐地排列在内存的高端,从而提高了内存的使用效率。

e.JPG


3.3 内存总体使用情况及与调用系统内存管理接口性能的比较
    首先从系统堆中分配出4 MB的内存,然后对这4 MB的内存进行应用程序级的内存管理,为了测试应用程序级的内存管理的各项性能指标,使用小、中和大三种网页对总体内存使用情况进行了统计,并且做了与调用系统内存分配和释放接口进行性能比较。表1是实验网页文件大小以及性能占用数据表,图7是运行一个大网页的时候,所有内存池占用空间和Vec-tor所占用空间的比例图,图8是针对一段关键上下文,
调用应用程序级的内存管理接口和调用系统级的内存管理接口对三种大小不一的网页在执行这段上下文的时候所用平均时间的比较。从图8中可以看出,网页越大,内存管理的性能越优于直接运用系统的内存管理。

g.JPG

h.JPG

 



4 结语
    本文主要在对嵌入式操作系统μCLinux内存管理进行分析和小结的基础之上,根据Browser实际运行情况,提出了运行在嵌入式设备上浏览器的内存管理池式分批和Vector分配策略,并分析了这种策略的特点和性能。最后通过实验数据来分析并得出浏览器分别调用应用程序级的内存管理的接口与系统级的内存管理的接口进行运行比较,得出应用程序级的内存管理效率比系统级的内存管理效率要高。



上一页  [1] [2] 


本文关键字:嵌入式  浏览器  嵌入式系统-技术单片机-工控设备 - 嵌入式系统-技术