kmalloc分配内核堆空间

来源:互联网 发布:淘宝客返利api 编辑:程序博客网 时间:2024/06/06 04:51

kmalloc函数的原型是:

[cpp] view plaincopy在CODE上查看代码片派生到我的代码片
  1. #include <linux/slab.h>  
  2. void *kmalloc(size_t size, int flags);  
kmalloc函数说明

******size是要分配的块大小

******flags分配方式,控制kmalloc分配内存的方式

******在没有阻塞的情况下,分配内存快,并且对于分配到的内存块,不对该内存块清零,分配到的内存块里保存着原来它存储的内容.

******kmalloc分配到的内存块是连续的物理内存.

kmalloc的分配标志解读(这些标志在<linux/gfp.h>头文件中)

1.   GFP_KERNEL

******最一般的使用分配标志,代表运行在内核空间的进程而进行的内存分配.

******当所请求分配的内存不够一页的时候,GFP_KERNEL让当前进程睡眠,来等待够一页内存大小的时候,才能获得正确分配到的内存.

******使用GFP_KERNEL的函数必须是可重入的函数,并且不能在原子上下文中运行.

(可重入函数:简单来说就是可以被中断的函数,也就是说,可以在这个函数执行的任何时刻中断它,转入OS调度下去执行另外一段代码,而返回控制时不会出现什么错误)

(上下文的概念:对于一个进程,执行过的部分称为进程的上文,正在执行的部分称为进程的正文,还没执行性进程的下文)

(原子操作:通俗滴说就是从开始到最后的运行完成,中间不能被打断)

******GFP_KERNEL分配标志,不能用在中断处理函数中,tasklet (在某些方面类似内核定时器),内核定时器中.

2. GFP_ATOMIC

******用来从中断处理和进程上下文之外的其他代码中分配内存,从不睡眠.

3.    GFP_USER

******为用户空间页来分配内存,可能睡眠.

4. GFP_DMA


cp:http://blog.csdn.net/wzc18743083828/article/details/18547831

0 0
原创粉丝点击