linux的slub算法原理,图解slub
时间: 2023-11-21 15:13:26 浏览: 100
Slub(SLOB的升级版)是Linux内核中的一种内存分配算法,Slub是一种基于伙伴系统技术的内存分配器,也是一种快速高效的内存分配器。
Slub通过三个链表来管理空闲对象,它们是slab链表、partial链表和full链表。
Slab链表存储着所有的slab,每个slab是一个内存页,用于存储相同大小的对象。Slab链表中的每个slab都被分成了若干个大小相同的空闲对象,每个空闲对象都有一个管理结构体,其中包含了指向下一个空闲对象的指针。当空闲对象被分配出去时,指向它的指针会被清空。
Partial链表存储着部分被使用的slab,这些slab中的一些空闲对象已经被分配出去,但还剩余一些空闲对象。
Full链表存储着所有已经被使用完的slab,这些slab中已经没有可用的空闲对象。
当需要分配一个对象时,Slub会先查找Partial链表,如果找到了一个有空闲对象的slab,就从该slab中分配一个空闲对象出去。如果Partial链表中没有找到可用的slab,则从Slab链表中获取一个新的slab,并从中分配一个空闲对象出去。如果Slab链表中也没有可用的slab,则从Full链表中找到一个已经使用完的slab,将其中所有的对象都移动到Slab链表中,并从其中分配一个空闲对象出去。
当一个对象被释放时,Slub会将它的管理结构体中的指针保存下来,然后将该对象加入到slab的空闲对象链表中,如果该slab的空闲对象链表已满,则将该slab从Partial链表中移动到Full链表中。
总的来说,Slub算法通过预先分配内存页的方式来提高内存分配的效率,同时通过三个链表来管理内存的分配和回收,从而保证了内存的高效使用。
阅读全文