Busqué en Google y descubrí que la mayoría de las personas abogan por el uso de kmalloc
, ya que se garantiza que obtendrá bloques físicos contiguos de memoria. Sin embargo, también parece que kmalloc
puede fallar si no se encuentra un bloque contiguo físico que desee.
¿Cuáles son las ventajas de tener un bloque de memoria contiguo? En concreto, ¿por qué necesitaría tener una contigua física bloque de memoria en una llamada de sistema ? ¿Hay alguna razón por la que no pueda usar vmalloc
?
Finalmente, si tuviera que asignar memoria durante el manejo de una llamada al sistema, ¿debería especificar GFP_ATOMIC
? ¿Se ejecuta una llamada al sistema en un contexto atómico?¿Cuál es la diferencia entre vmalloc y kmalloc?
GFP_ATOMIC
La asignación es de alta prioridad y no duerme. Esta es la bandera de uso en el manejador de interrupciones, de fondo mitades y otras situaciones en las que no puede dormir.
GFP_KERNEL
Esta es una asignación normal y podría bloquear. Esta es la bandera para usar en el código de contexto del proceso cuando es seguro dormir.
Un buen artículo sobre vmalloc y kmalloc [http://learnlinuxconcepts.blogspot.in/2014/02/linux-memory-management.html](http://learnlinuxconcepts.blogspot.in/2014/02/linux- memory-management.html) – JIN007