关于kmalloc vmalloc 和malloc

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

当调用vmalloc时,先调用kmalloc分配一块可以存放申请的全部物理页框描述符的空间,最后直接调用alloc_page每次申请一个物理页框(实际上vmalloc调用的是每cpu高速缓存中的页框)。

言归正传:

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

你可能感兴趣的:(关于kmalloc vmalloc 和malloc)