Ho cercato su Google e ho scoperto che la maggior parte delle persone ne sostiene l'uso kmalloc, poiché è garantito che avrai blocchi fisici di memoria contigui. Tuttavia, sembra anche che kmallocpossa fallire se un blocco fisico contiguo che desideri non può essere trovato.
Quali sono i vantaggi di avere un blocco di memoria contiguo? In particolare, perché dovrei avere un blocco fisico di memoria contiguo in una chiamata di sistema ? C'è qualche motivo per cui non potrei semplicemente usare vmalloc?
Infine, se dovessi allocare memoria durante la gestione di una chiamata di sistema, dovrei specificare GFP_ATOMIC? Una chiamata di sistema viene eseguita in un contesto atomico?
GFP_ATOMIC
L'assegnazione è ad alta priorità e non dorme. Questa è la bandiera da usare nei gestori di interrupt, nelle metà inferiori e in altre situazioni in cui non puoi dormire.
GFP_KERNELQuesta è un'allocazione normale e potrebbe bloccarsi. Questo è il flag da utilizzare nel codice di contesto del processo quando è sicuro dormire.
vmallocè più veloce con Kernel 5.2 (Q2 2019)