据我所知,GFP_USER
标志中的使用(在kmalloc
的调用中)用于为用户空间分配内存。这是否意味着分配的页面位于内核空间中,用户可以访问?
这些页面是否必须在用户空间中mmapp
,或者用户可以直接访问该地址。
如果需要mmapp
那么GFP_USER
和GFP_KERNEL
之间有什么区别?
答案 0 :(得分:3)
可以在内核sources中找到简要说明:
GFP_USER
是内核内部分配的典型代表。呼叫者,召集者 需要ZONE_NORMAL或较低区域才能直接访问,但可以直接访问 回收
#define GFP_KERNEL (__GFP_RECLAIM | __GFP_IO | __GFP_FS) #define GFP_USER (__GFP_RECLAIM | __GFP_IO | __GFP_FS | __GFP_HARDWALL)
用于也需要直接进行的用户空间分配 可由内核或硬件访问。它通常由硬件使用 对于映射到硬件的用户空间(例如图形)的缓冲区 仍然必须DMA到。对这些分配强制执行cpuset限制。
{{1}}
来自here:
__ GFP_HARDWALL强制执行cpuset内存分配策略。