码迷,mamicode.com
首页 > 其他好文 > 详细

关于kmalloc vmalloc 和malloc

时间:2015-07-24 21:04:33      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:

用户态的malloc是申请堆空间的用户态函数。可网上不少人以为malloc在内核态的调用函数是kmalloc或vmalloc,这是不对的 kmalloc是基于slab的,它在通用缓存区申请分配,通用缓存区一共26块缓存块,使用DMA和常规分配各占有13个。

当调用vmalloc时,先调用kmalloc(之所以没有直接使用专用缓存,是因为vmalloc调用本来就不是很频繁,而且开销有些大,需要建立页表到页框的映射,还要刷新tlb,)分配一块可以存放所申请物理页框数量的描述符的空间,最后直接调用alloc_page每次申请一个物理页框。

言归正传:

malloc首先获得的是线性区间,并没有获得物理内存,因为内核就是这么强硬,爱咋咋滴^^。当用户像这个线性区间写入时必定产生缺页,进入缺页处理程序,经判断,这是一个匿名映射,然后在高端内存直接调用__alloc_pages(本来高端内存就是给用户使用的)。

关于kmalloc vmalloc 和malloc

标签:

原文地址:http://my.oschina.net/u/1375613/blog/483535

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!