linux内存管理 -- Slab

本文介绍了Linux内存管理中的Slab机制,主要用于解决内部碎片问题。Slab通过高速缓存(cache)管理和对象(object)分配,分为普通和专用缓存。每个cache包含不同类型的object,每个object对应不同大小的内存块。slab由页(page)组成,通过slab_list进行管理。此外,文章还提及了Slab相关的shell命令和函数,如kmem_cache_create、kmalloc等,以及如何通过kzalloc分配内存。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、外部碎片/内部碎片

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

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

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

如在一个页中前半部分page被使用了,但后后半部分的page却是空的,这就是内部碎片。内部碎片使用slab/slub/slob来管理,可以使用kmalloc来申请调佣。
在这里插入图片描述
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嘭噗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值