一、外部碎片/内部碎片
碎片即一个完整的东西被打碎,零散的分布着。这就像内存,如果不加以管理,就会有很多未被使用的碎片,造成内存的浪费。
在linux中,内存是以页(page)来管理的,一page一般为4KB,而外部/内部碎片就是以page为界线划分的。
内部碎片就是指被内核分配出去但是不能被利用的内存,而外部碎片是指由于频繁地申请和释放页框而导致的某些小的连续页框,比方只有一个页框,无法分配给需要大的连续页框的进程而导致的内存碎片。
如一个page的前后都被分配了出去,没有其他page与之相连,这个page就成了外部碎片。这时候buddy system就会把这些碎片联系起来,上层使用vmalloc即可申请使用。
如在一个页中前半部分page被使用了,但后后半部分的page却是空的,这就是内部碎片。内部碎片使用slab/slub/slob来管理,可以使用kmalloc来申请调佣。