kernel内存管理slub算法原理

kernel内存管理slub算法原理

ID:33402127

大小:1.01 MB

页数:12页

时间:2019-02-25

kernel内存管理slub算法原理_第1页
kernel内存管理slub算法原理_第2页
kernel内存管理slub算法原理_第3页
kernel内存管理slub算法原理_第4页
kernel内存管理slub算法原理_第5页
资源描述:

《kernel内存管理slub算法原理》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、内核管理页面使用了2个算法:伙伴算法和slub算法,伙伴算法以页为单位管理内存,但在大多数情况下,程序需要的并不是一整页,而是几个、几十个字节的小内存。于是需要另外一套系统来完成对小内存的管理,这就是slub系统。slub系统运行在伙伴系统之上,为内核提供小内存管理的功能。slub把内存分组管理,每个组分别包含2八3、2八4、个字节,在4K页大小的默认情况下,另外还有两个特殊的组,分别是96B和192BZ共11组。之所以这样分配是因为如果申请2H2B大小的内存,就可以使用伙伴系统提供的接口直接申请一个完整的页面即可。slub就相

2、当于零售商,它向伙伴系统“批发”内存,然后在零售出去。一下是整个slub系统的框图:kmalloc_caches[l2]—切的一切源于kmalloc_caches[12]这个数组,该数组的定义如下:hwcecMm厂(WfwtI二m_jORQBstructkmem_cachekmalloc_caches[PAGE_SHIFT]cacheline_aligned;每个数组元素对应一种大小的内存,可以把一个kmem_cache结构体看做是—个特定大小内存的零售商,整个slub系统中共有12个这样的零售商,每个“零售商”只'零售”特定大

3、小的内存,例如:有的“零售商”只“零售”8Byte大小的内存,有的只”零售“16Byte大小的内存。每个零售商(kmem_cache)有两个'部门”,—个是“仓库”:kmem_cache_node,_个'营业厅”:kmem_cache_cpu。“营业厅”里只保留一个slab,只有在营业厅(kmem_cache_cpu冲没有空闲内存的情况下才会从仓库中换出其他的slab。所谓slab就是零售商(kmem_cache)批发的连续的整页内存,零售商把这些整页的内存分成许多小内存,然后分别“零售”岀去,一个slab可能包含多个连续的内存

4、页。slab的大小和零售商有关。相关数据结构:物理页按照对象(object)大小组织成单向链表,对象大小时候objsize指定的。例如16字节的对象大小,每个object就是16字节,每个object包含指向下一个object的指针,该指针的位置是每个object的起始地址+offset。每个object示意图如下:sizeoffsetvoid”指向的是下一个空闲的object的首地址,这样object就连成了一个单链表。向slub系统申请内存块(object)时:slub系统把内存块当成object看待1.slub系统刚刚创建

5、出来,这是第一次申请。此时slub系统刚建立起来,营业厅(kmem_cache_cpu)和仓库(kmem_cache_node)中没有任何可用的slab可以使用,如下图中1所示:freehstWiwdtHfseteb.ie1:1因此只能向伙伴系统申请空闲的内存页,并把这些页分成很多个object,取出其中的一个object标志为已被占用,并返回给用户z其余的object标志为空闲并放在kmem_cache_cpu中保存。kmem_cache_cpu的freelist变量中保存着下i空闲object的地址。上图2表示申请一个新的s

6、lab,并把第一个空闲的object返回给用户zfreelist指向下一个空闲的object。1.slub的kmem_cache_cpu中保存的slab上有空闲的object可以使用。这种情况是最简单的一种/直接把kmem_cache_cpu中保存的一个空闲object返回给用户,并把freelist指向下一个空闲的object。2.slub已经连续申请了很多页,现在kmem_cache_cpu中已经没有空闲的object了,但kmem_cache_node的partial中有空闲的objecto所以从kmem_cache_no

7、de的partial变量中获取有空闲object的slabz并把一个空闲的object返回给用户。LAdfefckAjtct上图中,kmem_cache_cpu中已经都被占用的slab放到仓库中,kmem_cache_node中有两个双链表,partial和full,分别盛放不满的slab(slab中有空闲的object)和全满的slab(slab中没有空闲的object)。然后从partial中挑出一个不满的slab放到kmem_cache_cpu中。上图中,kmem_cache_cpu中中找出空闲的object返回给用户。1

8、.slub已经连续申请了很多页,现在kmem_cache_cpu中保存的物理页上已经没有空闲的object可以使用了,而此时kmem_cache_node中没有空闲的页面了,只能向内存管理器(伙伴算法)申请slab。并把该slab初始化,返回第一个空闲的obje

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。