2018年(14)
发布时间:2018-11-23 08:58:38
思考问答在系统启动时,ARM Linux内核如何知道系统中有多大的内存空间?在32bit Linux内核中,用户空间和内核空间的比例通常是3:1,可以修改成2:2吗?物理内存页面如何添加到伙伴系统中,是一页一页添加,还是以2的几次幂来加入呢?内核的一级页表存放在什么地方?二级页表又存放在什.........【阅读全文】
发布时间:2018-11-19 19:45:49
上一篇回收slab对象时,先考虑放入local cache,当local cache已超过上限时,尝试放入shared cache。否则从local cache中批量释放batch_count对象放入slab三链。当slab三链的空闲对象超过上限,并且待释放的slab对象对应的slab中已经没有正在使用的对象时,将slab直接释放掉。释放slab对应的函数是slab_destroy,下面分.........【阅读全文】
发布时间:2018-11-19 19:45:46
我们的分析顺序是初始化、创建cache、申请对象、申请对象时会涉及创建slab、释放对象、释放对象时会涉及释放slab、销毁cache。前面已经介绍到了创建slab,本节分析一下释放对象,有两个入口kfree和kmem_cache_free,由于两者实现的本质相同只是对外体现为了两个API,这里放在一起梳理一下,下面分析一下代码。.........【阅读全文】
发布时间:2018-11-19 19:45:42
在前文分析kmalloc时,首先从local cache中获取,没有空闲对象时再从shared local cache中获取,再从slab的三个链表中获取。当链表中也没有空闲对象时,则需要调用cache_grow函数来创建slab了。实际上刚开始创建cache时里面是没有slab对象的,真正使用时才进行slab的创建。下面分析一下cache_grow的实现。点.........【阅读全文】
发布时间:2018-11-19 19:45:38
上文分析了普通对象的申请过程,kmalloc。现在看一下针对专用对象的申请kmem_cache_alloc函数。点击(此处)折叠或打开/** * kmem_cache_alloc - Allocate an object * @cachep: The cache to allocate from. * @flags: See kmalloc().........【阅读全文】