Chinaunix首页 | 论坛 | 博客
  • 博客访问: 346386
  • 博文数量: 67
  • 博客积分: 2550
  • 博客等级: 少校
  • 技术积分: 990
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-17 18:24
文章分类

全部博文(67)

文章存档

2011年(6)

2010年(2)

2009年(40)

2008年(19)

我的朋友

分类: LINUX

2009-06-25 15:48:17

分区页框分配器 (伙伴系统)

__alloc_pages (保留的页框池)

bffered_rmqueue (if one page, get from per-cpu页框高速缓存,else below)

|

__rmqueue (从管理区对应的free_area中分配页框)



Slab分配器

  1. 创建调整缓存 (专用kmem_cache_create for kernel, 普通包含13个几何分布的内存区,for slab分配器).

  2. cache_grow()分配slab, kmem_getpages()从分区页框分配器得到页框,then alloc_slabmgmt() alloc slab description.

  3. 分配slab对象,kmem_cache_alloc → get from slab per_cpu本地高速缓存, if not → cache_alloc_refill填充高速缓存.


Kmalloc是入口, 先从普通高速缓存开始分配, then invoke kemem_cache_alloc.


内存池:different from 保留的页框池(用于中断),是动态内存的储备,只能用于池的拥有者,mempool_alloc() → kmalloc(), if fails, use pool....

阅读(1532) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~