博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

[OS][MM]Memory Management

Posted on 2010-06-11 09:51  xuczhang  阅读(231)  评论(0编辑  收藏  举报

 

获得页

linux通过一些alloc_pages的接口获得一个或者多个连续的页。下面的函数__alloc_pages实现了基于伙伴算法的页分配

image

kmalloc

下面是kmalloc的实现,kmalloc是从普通高速缓存中获得内存空间的。

image

linux为从32B开始的内存大小的对象提供了几何分布的高速缓存,分别从32B到128KB。如下图所示,这些高速缓存存放在一个叫cache_sizes的数组中。上面kmalloc就是从cache_sizes数组中找到合适大小的那个高速缓存项,然后调用__kmem_cache_alloc来分配普通高速缓存。

image

这里由于高速缓存的申请内存时是通过调用__get_free_pages来得到整块物理页的,所以kmalloc请求的内存是物理页连续的。这点与vmalloc不同,vmalloc请求的内存只保证虚拟内存连续。