Slab 算法

        作为一种出名的设计及算法 Slab 已经很早就出现在各大系统中了,Linux 也实现了 Slab,那 Slab 一般作什么用途?解决了什么问题?如何实现?为什么要这样实现?这就是今天要讨论的内容了。
        我们知道 Buddy 系统解决了物理内存分配的外碎片问题,但由于粒度太大,都是以页为单位,显然用起来有些浪费,当如果要申请一些小的内存,并且会频繁的申请相同数据结构的内存来存储一些内核中的数据时,这时 Slab 便应运而生了。在内核中,经常会使用一些链表,链表中会申请许多相同结构的结构体,比如文件对象,进程对象等等,如果申请比较频繁,那么为它们建立一个内存池,内存池中都是相同结构的结构体,当想申请这种结构体时,直接从这种内存池中取一个结构体出来,想必是有用且速度极快的。一个物理页就可以作用这种内存池的载体,进而进行充分利用,减少了内碎片的产生。
        所以,首先,Slab 相当于内存池是思想,且是为了解决内碎片而产生的。

        我们看一下 Slab 算法的结构图。


        即使是专有结构的内存池,所以一个高速缓存即 kmem_cache ,就代表一个结构体的内存池,它有一个每 CPU 数据 array, 进一

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值