我在谷歌上搜索了一下,发现大多数人都提倡使用 kmalloc
,因为这样可以保证获得连续的物理内存块。但是,如果找不到您想要的连续 身体上的块,那么似乎 kmalloc
也可能失败。
拥有一个连续的内存块有什么好处?具体来说,为什么我需要在 系统呼叫中有一个连续的 身体上的内存块?我为什么不能用 vmalloc
呢?
最后,如果要在处理系统调用期间分配内存,是否应该指定 GFP_ATOMIC
?系统调用是否在原子上下文中执行?
GFP_ATOMIC
分配是高优先级的,并且 不睡觉。这是国旗 在中断处理程序中使用 其他情况 睡不着。
GFP_KERNEL
这是一个正常的分配,可能会阻塞。这是要使用的标志 在进程上下文代码中睡眠是安全的。