Alien

View on GitHub

页帧分配器和物理内存分配器

页帧分配器在malloc前完成,物理内存由slab分配器实现。一次物理内存分配的过程如下:

graph LR
K(kmalloc) 
S(slab) 
B(buddy_system_allocator)
V(vmalloc)
B-- 物理页帧 -->S--物理内存块-->K
S--物理内存块-->K
B-- 物理页帧--> V

页帧分配器

类型: buddy_system_allocator bitmap

bitmap

使用位图结构保存页面信息

优点:

缺点:

伙伴系统

可以用来分配内存,也可以分配物理页帧,这里按照linux的方式,将伙伴系统用来分配物理页帧。其将所有的可用物理内存组织为连续的物理页帧,并按照2的幂次记录连续物理页帧的使用情况。每次请求只能按照2的幂次进行分配,如果当前幂次的连续页帧不存在,则向下一个幂次进行请求,直到无法请求成功。

Slab分配器

由于伙伴系统只分配页帧,因此需要一个分配器分配不同大小的物理内存需求。