第八章 分配内存

一、Kmalloc函数的内幕

kamlloc原型:

#include <linux/slab.h>
void *kmalloc(size_t size, int flags);
size:要分配的块的大小
falgs:标志位,多种方式控制kmalloc行为

常用的标志是GFP_KERNEL,表示内存分配是代表运行在内核空间的进程执行的。

GFP_ATOMIC:用于在中断处理例程或其他运行于进程上下文之外的代码中分配内存,不会休眠

GFP_KERNEL:内核内存的通常分配方法, 可能引起休眠

GFP_USER:用于为用户空间页分配内存,可能会休眠

GFP_HIGHUSER:类似于GFP_USER,不过如果有高端内存的话就从那里分配。

GFP_NOTIO:禁止任何I/O初始化
GFP_NOFS:分配不允许执行仍和文件系统调用

__GFP_DMA:标志请求分配发生在可进行DMA的内存区段中

__GFP_HIGHMEM:这个标志表明要分配的内存可位于高端内存

__GFP_COLD:内存分配器会试图返回“缓存热”页面,即可在处理器缓存中找到的页面
__GFP_NOWARN:很少使用,可以避免内核在无法满足分配请求时产生警告
__GFP_HIGH:高标志标记了一个高优先级的请求,它允许为紧急状况而小号由内核保留的最后一些页面
__GFP_REPEAT
__GFP_NOFAIL
__GFP_NORETRY

二、后被高速缓存

三、get_free_page和相关函数

四、vmalloc及其辅助函数

五、per-CPU变量

六、获取大的缓冲区

猜你喜欢

转载自www.cnblogs.com/ch122633/p/9643777.html