Según tengo entendido, el uso en el indicador GFP_USER (en la llamada a kmalloc ) se usa para asignar memoria para el espacio del usuario. ¿Significa que la página asignada está en el espacio del kernel, a la que puede acceder el usuario? ¿Estas páginas requieren ser mmapp en el espacio del usuario o la dirección es directamente accesible para el usuario? Si necesitan mmapp , ¿cuál es la diferencia entre GFP_USER y GFP_KERNEL ?
Se puede encontrar una breve explicación en las fuentes del kernel:
GFP_KERNELes típico para las asignaciones internas del kernel. La persona que llama requiere ZONE_NORMAL o una zona inferior para el acceso directo, pero puede reclamar directamente.
GFP_USERes para asignaciones de espacio de usuario que también deben ser accesibles directamente por el kernel o el hardware. Por lo general, el hardware lo utiliza para los búfer que están asignados al espacio del usuario (por ejemplo, gráficos) en los que el hardware aún debe DMA. Se aplican límites de cpuset para estas asignaciones.
#define GFP_KERNEL (__GFP_RECLAIM | __GFP_IO | __GFP_FS) #define GFP_USER (__GFP_RECLAIM | __GFP_IO | __GFP_FS | __GFP_HARDWALL)Desde aquí :
__GFP_HARDWALL aplica la política de asignación de memoria cpuset .