无论是上层应用还是操作系统内核开发,内存问题都是我们所需要关注的。
我们来看看Linux内核管理和分配机制。
伙伴算法
伙伴算法从物理连续的大小固定的段上进行分配。从这个段上分配内存,采用 2 的幂分配器来满足请求分配单元的大小为 2 的幂(4KB、 8KB、16KB 等)。请求单元的大小如不适当,就圆整到下一个更大的 2 的幂。例如,如果请求大小为 11KB,则按 16KB 的段来请求。
内核使用struct page的结构体来描述每个物理页,也叫做页框。在系统里分配了多少个物理页就会有对应多少个struct page结构体。
slab机制
slab是针对小内存管理的机制,是分配内核内存的第二种策略,每个 slab 由一个或多个物理连续的页面组成,每个 cache 由一个或多个 slab 组成,每个内核数据结构都有一个 cache。