Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1030626
  • 博文数量: 123
  • 博客积分: 5051
  • 博客等级: 大校
  • 技术积分: 1356
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-14 10:56
文章分类
文章存档

2012年(1)

2011年(21)

2010年(13)

2009年(55)

2008年(33)

分类: LINUX

2009-07-29 11:46:23

在cache初始化阶段,内核调用的函数是kmem_cache_init(),在这个函数中,kmem_cache_init()调用kmem_cache_create创建了linux/kmalloc_sizes.h文件中对应的cache描述符,创建过程简要叙述如下:
kmem_cache_create()首先是调用cache_grow()分配一个页,这个页就是一个slab,此slab中的对象是用来存放kmem_cache描述符的,每个页总共有40个对象,最初创建的slab对象是arraycache_init,之后是size-8,size-16,size-64...,当然,如果创建的cache大于40个以后,将会重新调用cache_grow函数开辟空间来存放新的cache描述符。当使用kmalloc()来为对应的对象分配空间时,kmalloc(size,flag)将会从size对应的cache中分配对象,如果是第一次调用kmalloc,那么kmalloc将会根据对应的kmem_cache描述符,开辟空间调用cache_init_obj函数来初始化slab以及slab中的对象.

(以上是笔者阅读源代码分析的结果,仅代表自己的理解,如果有什么错误,希望网友能提出,一起交流学习!谢谢)
阅读(2142) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~