第八章 分配内存

Posted ch122633

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第八章 分配内存相关的知识,希望对你有一定的参考价值。

一、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变量

 

六、获取大的缓冲区







以上是关于第八章 分配内存的主要内容,如果未能解决你的问题,请参考以下文章

第八章 内存管理

第八章 JVM内存管理

操作系统概念笔记——第八章:内存管理

《程序是怎样跑起来的》第八章读后感

Thymeleaf(第八章)模板布局

第八章学习小结