Linux kernel GFP_原子如何预防睡眠

Linux kernel GFP_原子如何预防睡眠,linux-kernel,linux-device-driver,Linux Kernel,Linux Device Driver,GFPèU原子(kzalloc)如何预防睡眠 还发现 #define GFP_ATOMIC (__GFP_HIGH) 但是,我不明白furhter.。GFP\u ATOMIC通过告诉内存分配代码不允许睡眠以满足分配来防止睡眠-仅此而已。如果内存分配代码需要休眠,并且已传递了GFP\u-ATOMIC,则它将向调用者返回一个错误。GFP\u-ATOMIC的替代方法是GFP\u-KERNEL: #定义GFP_内核(uuu-GFP_-WAIT | uu-GFP_-IO | u-GFP_-FS) GFP

GFPèU原子(kzalloc)如何预防睡眠

还发现

#define GFP_ATOMIC (__GFP_HIGH)

但是,我不明白furhter.。

GFP\u ATOMIC通过告诉内存分配代码不允许睡眠以满足分配来防止睡眠-仅此而已。如果内存分配代码需要休眠,并且已传递了
GFP\u-ATOMIC
,则它将向调用者返回一个错误。

GFP\u-ATOMIC的替代方法是
GFP\u-KERNEL

#定义GFP_内核(uuu-GFP_-WAIT | uu-GFP_-IO | u-GFP_-FS)


GFP\u内核
incldes
\uu GFP\u等待
,在考虑睡眠的各种情况下进行测试。没有这个标志,就没有睡眠。

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

如果u将标志设为GFP_原子,则分配为高优先级且不休眠。这是在中断处理程序、下半部分和其他无法睡眠的情况下使用的标志。

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

更多信息