Linux
发布时间:2015-01-18 23:22:56
上一篇回收slab对象时,先考虑放入local cache,当local cache已超过上限时,尝试放入shared cache。否则从local cache中批量释放batch_count对象放入slab三链。当slab三链的空闲对象超过上限,并且待释放的slab对象对应的slab中已经没有正在使用的对象时,将slab直接释放掉。释放slab对应的函数是slab_destroy,下面分.........【阅读全文】
发布时间:2015-01-18 22:09:14
我们的分析顺序是初始化、创建cache、申请对象、申请对象时会涉及创建slab、释放对象、释放对象时会涉及释放slab、销毁cache。前面已经介绍到了创建slab,本节分析一下释放对象,有两个入口kfree和kmem_cache_free,由于两者实现的本质相同只是对外体现为了两个API,这里放在一起梳理一下,下面分析一下代码。.........【阅读全文】
发布时间:2015-01-18 18:28:01
在前文分析kmalloc时,首先从local cache中获取,没有空闲对象时再从shared local cache中获取,再从slab的三个链表中获取。当链表中也没有空闲对象时,则需要调用cache_grow函数来创建slab了。实际上刚开始创建cache时里面是没有slab对象的,真正使用时才进行slab的创建。下面分析一下cache_grow的实现。点.........【阅读全文】
发布时间:2015-01-18 14:17:19
上文分析了普通对象的申请过程,kmalloc。现在看一下针对专用对象的申请kmem_cache_alloc函数。点击(此处)折叠或打开/** * kmem_cache_alloc - Allocate an object * @cachep: The cache to allocate from. * @flags: See kmalloc().........【阅读全文】
发布时间:2015-01-18 01:02:24
上篇分析了一下cache的创建过程,现在cache已经创建完成,跟踪一下slab对象的申请过程。目前使用的申请方式主要是kmalloc(从general cache中申请)和kmem_cache_alloc(从专用cache中申请)。先看一下kmalloc点击(此处)折叠或打开static __always_inline void *kmalloc(size_t size, gfp.........【阅读全文】