linux内存管理 -- Slab

一、外部碎片/内部碎片

碎片即一个完整的东西被打碎,零散的分布着。这就像内存,如果不加以管理,就会有很多未被使用的碎片,造成内存的浪费。
在linux中,内存是以页(page)来管理的,一page一般为4KB,而外部/内部碎片就是以page为界线划分的。

内部碎片就是指被内核分配出去但是不能被利用的内存,而外部碎片是指由于频繁地申请和释放页框而导致的某些小的连续页框,比方只有一个页框,无法分配给需要大的连续页框的进程而导致的内存碎片。

如一个page的前后都被分配了出去,没有其他page与之相连,这个page就成了外部碎片。这时候buddy system就会把这些碎片联系起来,上层使用vmalloc即可申请使用。
在这里插入图片描述

如在一个页中前半部分page被使用了,但后后半部分的page却是空的,这就是内部碎片。内部碎片使用slab/slub/slob来管理,可以使用kmalloc来申请调佣。
linux内存管理 -- Slab_第1张图片
linux内存管理 -- Slab_第2张图片

二、slab

slab是用来管理内部碎片的,使用的是对象(object)的概念来管理内存。
这里的对象

你可能感兴趣的:(arm,linux,从入门到精通,linux,嵌入式硬件)