3

GFP_ATOMIC(在 kzalloc 中)如何防止睡眠?

还发现

#define GFP_ATOMIC (__GFP_HIGH)

但是没有进一步了解..?

4

3 回答 3

3

的替代方案GFP_ATOMICGFP_KERNEL:
#define GFP_KERNEL (__GFP_WAIT | __GFP_IO | __GFP_FS)

GFP_KERNELincldes __GFP_WAIT,在考虑睡眠的各种情况下进行测试。没有这面旗帜,就没有睡眠。

于 2012-12-19T13:52:35.603 回答
3

如果您尝试在 linux 内核中分配内存,则可以借助名为 kmalloc(size,flags) 的函数来完成。但是函数中的标志参数基本上是指示内核应该如何分配内存。基本上有三个区域的标志作为动作修饰符,区域修饰符和类型

如果您将标志指定为GFP_ATOMIC,则分配是高优先级的并且不会休眠。这是在中断处理程序、下半部分和其他无法睡眠的情况下使用的标志。

&它基本上是指示内核从预先分配的slab内存中获取内存块,如果slab中有内存,那么它是原子分配的,否则分配失败

欲了解更多信息http://www.linuxjournal.com/article/6930

于 2012-12-20T10:34:29.257 回答
2

GFP_ATOMIC通过告诉内存分配代码不允许睡眠来满足分配来防止睡眠 - 仅此而已。如果内存分配代码需要休眠,并且GFP_ATOMIC已经通过,那么它将向调用者返回一个错误。

于 2012-12-19T05:41:38.490 回答