2012-12-18 119 views

回答

1

GFP_ATOMIC通过告诉内存分配代码它不允许睡眠来满足分配来阻止睡眠 - 就这些了。如果内存分配代码需要休眠,并且GFP_ATOMIC已被传递,那么它会向调用者返回一个错误。

1

GFP_ATOMIC另一种方法是GFP_KERNEL
#define GFP_KERNEL (__GFP_WAIT | __GFP_IO | __GFP_FS)

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

0

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

如果你给该标记为GFP_ATOMIC,那么分配是高优先级的,并且不休眠。这是在中断处理程序,下半部分和其他你无法入睡的情况下使用的标志。

& 它完成基本指示内核从预分配的内存板得到的内存块,如果有存储在板坯然后被分配原子否则分配失败

For more info http://www.linuxjournal.com/article/6930