小块内存动态缓存分配机制
大部分实时操作系统内存分配机制并未对大块内存和小块内存的分配做出不同的算法设计,然而在实际分配过程中,很难用一种分配算法兼顾大小内存的高效分配。针对动态分区内存管理机制中对小块内存分配的局限性,提出了小块内存动态缓存机制。该机制在继承了动态分区管理机制优良性能的同时,优化了小块内存的管理,对内存管理的实时性和高效性都有一定提高。系统中同时存在2种内存数据结构,分别为小块内存和大块内存设计。大块内存依旧采取动态分区内存管理机制,而小块内存采取动态缓存分配。小块内存数据结构如图4所示。

假设小块内存最小为1字节,并以2的指数递增,最大为512字节。这也就意味着当系统需要分配或释放小于或等于512字节的内存时,会执行小块内存操作。图5和图6分别是小块内存的分配和回收流程(图中j代表需操作的小块内存对应的缓存号,若申请120字节则j对应为8;min代表小块内存最大的缓存号,如图中min=9)。

图7是对小块内存操作算法的简单模拟。小块内存缓存区从上到下依次缓存512~64字节的内存块。有4个操作过程:分配64字节→分配128字节→回收64字节→回收128字节。

①分配64字节。初始状态小块内存缓存区为空,此时将会执行大块内存分配操作并将1 KB内存分割缓存到小块内存缓存区。在分配64字节内存时,系统自动探测到了128字节、256字节和512字节处的缓存区已经处于饥饿状态,因此也将会分配其缓存区1块内存。
②分配128字节。由于系统存在该大小的缓存,因此直接获取并返回。
③回收64字节。由于释放后,系统中64字节大小的内存块可以合并,因此合并后链入上一级缓存区。
④回收128字节。内存块再次进行合并操作,最终调用大块内存释放操作,从而回到原始态。
图7所示的内存操作只是一个非常简单的模拟,实际系统内存的分配和回收是非常复杂和不确定的,而小块内存动态缓存分配机制的性能在这种情况下表现得尤为突出。总体而言其具有以下几点优势:
①快速性。因为使用了缓存机制,所以在大部分情况下,小块内存释放后依旧在缓存区中,当系统再次分配该大小的内存块时就极为快速。
②自适应性。在分配小块内存的过程中,算法能检测出处于饥饿状态的内存块大小,并依次为它们所在的缓存区分配1块相应大小的内存块。
③动态性。在小块内存的回收过程中,该算法将对内存块进行合并重组。假若某时刻先前从大块内存中分配的1 KB内存块全部被小内存块释放,其经过重组后必定能重新添加到大内存块存储区。
小块内存动态缓存分配机制
大部分实时操作系统内存分配机制并未对大块内存和小块内存的分配做出不同的算法设计,然而在实际分配过程中,很难用一种分配算法兼顾大小内存的高效分配。针对动态分区内存管理机制中对小块内存分配的局限性,提出了小块内存动态缓存机制。该机制在继承了动态分区管理机制优良性能的同时,优化了小块内存的管理,对内存管理的实时性和高效性都有一定提高。系统中同时存在2种内存数据结构,分别为小块内存和大块内存设计。大块内存依旧采取动态分区内存管理机制,而小块内存采取动态缓存分配。小块内存数据结构如图4所示。

假设小块内存最小为1字节,并以2的指数递增,最大为512字节。这也就意味着当系统需要分配或释放小于或等于512字节的内存时,会执行小块内存操作。图5和图6分别是小块内存的分配和回收流程(图中j代表需操作的小块内存对应的缓存号,若申请120字节则j对应为8;min代表小块内存最大的缓存号,如图中min=9)。

图7是对小块内存操作算法的简单模拟。小块内存缓存区从上到下依次缓存512~64字节的内存块。有4个操作过程:分配64字节→分配128字节→回收64字节→回收128字节。

①分配64字节。初始状态小块内存缓存区为空,此时将会执行大块内存分配操作并将1 KB内存分割缓存到小块内存缓存区。在分配64字节内存时,系统自动探测到了128字节、256字节和512字节处的缓存区已经处于饥饿状态,因此也将会分配其缓存区1块内存。
②分配128字节。由于系统存在该大小的缓存,因此直接获取并返回。
③回收64字节。由于释放后,系统中64字节大小的内存块可以合并,因此合并后链入上一级缓存区。
④回收128字节。内存块再次进行合并操作,最终调用大块内存释放操作,从而回到原始态。
图7所示的内存操作只是一个非常简单的模拟,实际系统内存的分配和回收是非常复杂和不确定的,而小块内存动态缓存分配机制的性能在这种情况下表现得尤为突出。总体而言其具有以下几点优势:
①快速性。因为使用了缓存机制,所以在大部分情况下,小块内存释放后依旧在缓存区中,当系统再次分配该大小的内存块时就极为快速。
②自适应性。在分配小块内存的过程中,算法能检测出处于饥饿状态的内存块大小,并依次为它们所在的缓存区分配1块相应大小的内存块。
③动态性。在小块内存的回收过程中,该算法将对内存块进行合并重组。假若某时刻先前从大块内存中分配的1 KB内存块全部被小内存块释放,其经过重组后必定能重新添加到大内存块存储区。
举报